UNPKG

bwsample

Version:

The JS implementation of the pypi package bwsample

709 lines (658 loc) 28.2 kB
const { directExtract, directExtractBatch, findByState, logicalInfer, logicalInferUpdate, count, lilAdd, lilMerge } = require('./counting'); const { v4: uuid4 } = require('uuid'); const deepEqual = require('deep-equal') test('directExtract 1/3', () => { // scenario const stateids = ['abc', 'def', 'ghi', 'jkl']; const combostates = [0, 0, 2, 1]; const [agg, bw, bn, nw] = directExtract(stateids, combostates); // check expect(deepEqual(agg, { 'abc': {'ghi': 1}, 'def': {'ghi': 1}, 'jkl': {'abc': 1, 'def': 1, 'ghi': 1} })).toBe(true); expect(deepEqual(bw, {'jkl': {'ghi': 1}} )).toBe(true); expect(deepEqual(bn, {'jkl': {'abc': 1, 'def': 1}} )).toBe(true); expect(deepEqual(nw, {'abc': {'ghi': 1}, 'def': {'ghi': 1}} )).toBe(true); expect(deepEqual(agg, lilMerge([bw, bn, nw]) )).toBe(true); }); test('directExtract 2/3', () => { // scenario const stateids = ['abc', 'def', 'ghi', 'jkl']; const combostates = [0, 0, 2, 1]; var [agg, bw, bn, nw] = directExtract(stateids, combostates); [agg, bw, bn, nw] = directExtract( stateids, combostates, agg, bw, bn, nw); // check expect(deepEqual(agg, { 'abc': {'ghi': 2}, 'def': {'ghi': 2}, 'jkl': {'abc': 2, 'def': 2, 'ghi': 2} })).toBe(true); expect(deepEqual(bw, {'jkl': {'ghi': 2}} )).toBe(true); expect(deepEqual(bn, {'jkl': {'abc': 2, 'def': 2}} )).toBe(true); expect(deepEqual(nw, {'abc': {'ghi': 2}, 'def': {'ghi': 2}} )).toBe(true); expect(deepEqual(agg, lilMerge([bw, bn, nw]) )).toBe(true); }); test('directExtract 3/3', () => { // scenario var stateids = []; var combostates = []; for(var i = 0; i < 1000; i++){ stateids.push(uuid4()); combostates.push(0); } for(var i = 1; i <= 2; i++){ stateids.push(uuid4()); combostates.push(i); } const [agg, bw, bn, nw] = directExtract(stateids, combostates); // check expect(deepEqual(agg, lilMerge([bw, bn, nw]) )).toBe(true); }); test('directExtractBatch 1/1', () => { const evaluations = [ [[0, 0, 2, 1], ['id1', 'id2', 'id3', 'id4']], [[0, 1, 0, 2], ['id4', 'id5', 'id6', 'id1']] ]; const [dok, detail] = directExtractBatch(evaluations); // check expect(deepEqual(dok, { "id1": {"id3": 1}, "id2": {"id3": 1}, "id4": {"id1": 2, "id2": 1, "id3": 1}, "id5": {"id1": 1, "id4": 1, "id6": 1}, "id6": {"id1": 1} })).toBe(true); }); test("findByState 1/1", () => { const ids = ['a', 'b', 'c', 'd']; const states = [0, 1, 0, 2]; const ids2 = findByState(ids, states, [0]); expect(ids2).toEqual(['a', 'c']); }); test("logicalInfer 1/9", () => { // nn: D>Z, X>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'E', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) const target = {'D': {'Z': 1}, 'X': {'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(nn, target)).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInfer 2/9", () => { // nb: D>Y, D>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['E', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) const target = {'D': {'Y': 1, 'Z': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, target)).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInfer 3/9", () => { // nw: X>F, Y>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'E']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) const target = {'X': {'F': 1}, 'Y': {'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, target)).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInfer 4/9", () => { // bn: X>E, X>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'D', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) const target = {'X': {'E': 1, 'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, target)).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInfer 5/9", () => { // bb: n.a. const ids1 = ['D', 'E', 'F']; const ids2 = ['D', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) expect(deepEqual(agg, {})).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInfer 6/9", () => { // bw: X>E, X>F, Y>E, Y>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'D']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) const target = {'X': {'E': 1, 'F': 1}, 'Y': {'E': 1, 'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, target)).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInfer 7/9", () => { // wn: D>Z, E>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'F', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) const target = {'D': {'Z': 1}, 'E': {'Z': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, target)).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInfer 8/9", () => { // wb: D>Y, D>Z, E>Y, E>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['F', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) const target = {'D': {'Y': 1, 'Z': 1}, 'E': {'Y': 1, 'Z': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, target)).toBe(true); }); test("logicalInfer 9/9", () => { // ww: n.a. const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'F']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, nn, nb, nw, bn, bw, wn, wb] = logicalInfer( ids1, ids2, states1, states2) expect(deepEqual(agg, {})).toBe(true); expect(deepEqual(nn, {})).toBe(true); expect(deepEqual(nb, {})).toBe(true); expect(deepEqual(nw, {})).toBe(true); expect(deepEqual(bn, {})).toBe(true); expect(deepEqual(bw, {})).toBe(true); expect(deepEqual(wn, {})).toBe(true); expect(deepEqual(wb, {})).toBe(true); }); test("logicalInferUpdate 1/9", () => { // nn: D>Z, X>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'E', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) const target = {'D': {'Z': 1}, 'X': {'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(detail["nn"], target)).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 2/9", () => { // nb: D>Y, D>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['E', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) const target = {'D': {'Y': 1, 'Z': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], target)).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 3/9", () => { // nw: X>F, Y>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'E']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) const target = {'X': {'F': 1}, 'Y': {'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], target)).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 4/9", () => { // bn: X>E, X>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'D', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) const target = {'X': {'E': 1, 'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], target)).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 5/9", () => { // bb: n.a. const ids1 = ['D', 'E', 'F']; const ids2 = ['D', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) expect(deepEqual(agg, {})).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 6/9", () => { // bw: X>E, X>F, Y>E, Y>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'D']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) const target = {'X': {'E': 1, 'F': 1}, 'Y': {'E': 1, 'F': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], target)).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 7/9", () => { // wn: D>Z, E>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'F', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) const target = {'D': {'Z': 1}, 'E': {'Z': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], target)).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 8/9", () => { // wb: D>Y, D>Z, E>Y, E>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['F', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) const target = {'D': {'Y': 1, 'Z': 1}, 'E': {'Y': 1, 'Z': 1}} expect(deepEqual(agg, target)).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], target)).toBe(true); }); test("logicalInferUpdate 9/9", () => { // ww: n.a. const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'F']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg, detail] = logicalInferUpdate( [[states1, ids1]], [[states2, ids2]]) expect(deepEqual(agg, {})).toBe(true); expect(deepEqual(detail["nn"], {})).toBe(true); expect(deepEqual(detail["nb"], {})).toBe(true); expect(deepEqual(detail["nw"], {})).toBe(true); expect(deepEqual(detail["bn"], {})).toBe(true); expect(deepEqual(detail["bw"], {})).toBe(true); expect(deepEqual(detail["wn"], {})).toBe(true); expect(deepEqual(detail["wb"], {})).toBe(true); }); test("logicalInferUpdate 1/12", () => { // nn: D>Z, X>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'E', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) const target = {'D': {'Z': 1}, 'X': {'F': 1}} expect(deepEqual(logical_lil, target)).toBe(true); expect(deepEqual(logical_detail["nn"], target)).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, lilAdd(target2, target) )).toBe(true); }); test("logicalInferUpdate 2/12", () => { // nb: D>Y, D>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['E', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) const target = {'D': {'Y': 1, 'Z': 1}} expect(deepEqual(logical_lil, target)).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], target)).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, lilAdd(target2, target) )).toBe(true); }); test("logicalInferUpdate 3/12", () => { // nw: X>F, Y>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'E']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) const target = {'X': {'F': 1}, 'Y': {'F': 1}} expect(deepEqual(logical_lil, target)).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], target)).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, lilAdd(target2, target) )).toBe(true); }); test("logicalInferUpdate 4/12", () => { // bn: X>E, X>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'D', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) const target = {'X': {'E': 1, 'F': 1}} expect(deepEqual(logical_lil, target)).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], target)).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, lilAdd(target2, target) )).toBe(true); }); test("logicalInferUpdate 5/12", () => { // bb: n.a. const ids1 = ['D', 'E', 'F']; const ids2 = ['D', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) expect(deepEqual(logical_lil, {})).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, target2 )).toBe(true); }); test("logicalInferUpdate 6/12", () => { // bw: X>E, X>F, Y>E, Y>F const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'D']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) const target = {'X': {'E': 1, 'F': 1}, 'Y': {'E': 1, 'F': 1}} expect(deepEqual(logical_lil, target)).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], target)).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, lilAdd(target2, target) )).toBe(true); }); test("logicalInferUpdate 7/12", () => { // wn: D>Z, E>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'F', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) const target = {'D': {'Z': 1}, 'E': {'Z': 1}} expect(deepEqual(logical_lil, target)).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], target)).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, lilAdd(target2, target) )).toBe(true); }); test("logicalInferUpdate 8/12", () => { // wb: D>Y, D>Z, E>Y, E>Z const ids1 = ['D', 'E', 'F']; const ids2 = ['F', 'Y', 'Z']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) const target = {'D': {'Y': 1, 'Z': 1}, 'E': {'Y': 1, 'Z': 1}} expect(deepEqual(logical_lil, target)).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], target)).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, lilAdd(target2, target) )).toBe(true); }); test("logicalInferUpdate 9/12", () => { // ww: n.a. const ids1 = ['D', 'E', 'F']; const ids2 = ['X', 'Y', 'F']; const states1 = [1, 0, 2]; const states2 = [1, 0, 2]; const [agg_lil, direct_lil, direct_detail, logical_lil, logical_detail] = count( [[states1, ids1]], undefined, undefined, true, undefined, undefined, [[states2, ids2]]) expect(deepEqual(logical_lil, {})).toBe(true); expect(deepEqual(logical_detail["nn"], {})).toBe(true); expect(deepEqual(logical_detail["nb"], {})).toBe(true); expect(deepEqual(logical_detail["nw"], {})).toBe(true); expect(deepEqual(logical_detail["bn"], {})).toBe(true); expect(deepEqual(logical_detail["bw"], {})).toBe(true); expect(deepEqual(logical_detail["wn"], {})).toBe(true); expect(deepEqual(logical_detail["wb"], {})).toBe(true); const target2 = {'D': {'E': 1, 'F': 1}, 'E': {'F': 1}} expect(deepEqual(direct_lil, target2)).toBe(true); expect(deepEqual(direct_detail["bw"], {'D': {'F': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'D': {'E': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'E': {'F': 1}} )).toBe(true); expect(deepEqual(agg_lil, target2 )).toBe(true); }); test("logicalInferUpdate 10/12", () => { const stateids = ['abc', 'def', 'ghi', 'jkl']; const combostates = [0, 0, 2, 1] const [_1, direct_lil, direct_detail, _2, _3] = count( [[combostates, stateids]], undefined, undefined, false) expect(deepEqual(direct_lil, { 'jkl': {'ghi': 1, 'abc': 1, 'def': 1}, 'abc': {'ghi': 1}, 'def': {'ghi': 1}} )).toBe(true); expect(deepEqual(direct_detail["bw"], {'jkl': {'ghi': 1}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'jkl': {'abc': 1, 'def': 1}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'abc': {'ghi': 1}, 'def': {'ghi': 1}} )).toBe(true); expect(deepEqual( lilMerge([direct_detail["bw"], direct_detail["bn"], direct_detail["nw"]]), direct_lil)).toBe(true); }); test("logicalInferUpdate 11/12", () => { const stateids = ['abc', 'def', 'ghi', 'jkl']; const combostates = [0, 0, 2, 1] var direct_lil, direct_detail, _1, _2, _3, _4, _5, _6 var [_1, direct_lil, direct_detail, _2, _3] = count( [[combostates, stateids]], undefined, undefined, false) var [_4, direct_lil, direct_detail, _5, _6] = count( [[combostates, stateids]], direct_lil, direct_detail, false) //console.log(direct_lil, "\n", direct_detail) //expect(deepEqual(direct_lil, { // 'jkl': {'ghi': 2, 'abc': 2, 'def': 2}, 'abc': {'ghi': 2}, 'def': {'ghi': 2}} )).toBe(true); expect(deepEqual(direct_detail["bw"], {'jkl': {'ghi': 2}} )).toBe(true); expect(deepEqual(direct_detail["bn"], {'jkl': {'abc': 2, 'def': 2}} )).toBe(true); expect(deepEqual(direct_detail["nw"], {'abc': {'ghi': 2}, 'def': {'ghi': 2}} )).toBe(true); expect(deepEqual( lilMerge([direct_detail["bw"], direct_detail["bn"], direct_detail["nw"]]), direct_lil)).toBe(true); }); test("logicalInferUpdate 12/12", () => { // scenario var stateids = []; var combostates = []; for(var i = 0; i < 1000; i++){ stateids.push(uuid4()); combostates.push(0); } for(var i = 1; i <= 2; i++){ stateids.push(uuid4()); combostates.push(i); } var [_1, direct_lil, direct_detail, _2, _3] = count( [[combostates, stateids]], undefined, undefined, false) expect(deepEqual( lilMerge([direct_detail["bw"], direct_detail["bn"], direct_detail["nw"]]), direct_lil)).toBe(true); });