binary-decision-diagram 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{es → src}/abstract-node.d.ts +4 -4
- package/dist/{lib → src}/abstract-node.js +7 -4
- package/dist/src/abstract-node.js.map +1 -0
- package/dist/{es → src}/branches.d.ts +2 -2
- package/dist/{es → src}/branches.js +3 -2
- package/dist/src/branches.js.map +1 -0
- package/dist/src/create-bdd-from-truth-table.d.ts +3 -0
- package/dist/{lib → src}/create-bdd-from-truth-table.js +4 -4
- package/dist/src/create-bdd-from-truth-table.js.map +1 -0
- package/dist/{es → src}/ensure-correct-bdd.d.ts +2 -2
- package/dist/{es → src}/ensure-correct-bdd.js +1 -1
- package/dist/src/ensure-correct-bdd.js.map +1 -0
- package/dist/{lib → src}/fill-truth-table.d.ts +1 -1
- package/dist/{lib → src}/fill-truth-table.js +1 -1
- package/dist/{es → src}/fill-truth-table.js.map +1 -1
- package/dist/{lib → src}/find-similar-node.d.ts +1 -1
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -0
- package/dist/{es → src}/internal-node.d.ts +5 -5
- package/dist/{lib → src}/internal-node.js +5 -5
- package/dist/{es → src}/internal-node.js.map +1 -1
- package/dist/{es → src}/leaf-node.d.ts +4 -4
- package/dist/{es → src}/leaf-node.js +5 -4
- package/dist/src/leaf-node.js.map +1 -0
- package/dist/{es → src}/minimal-string/bdd-to-minimal-string.d.ts +2 -2
- package/dist/{es → src}/minimal-string/bdd-to-minimal-string.js +2 -2
- package/dist/{es → src}/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/{lib → src}/minimal-string/bdd-to-simple-bdd.d.ts +3 -3
- package/dist/src/minimal-string/index.d.ts +5 -0
- package/dist/src/minimal-string/index.js +6 -0
- package/dist/{es → src}/minimal-string/index.js.map +1 -1
- package/dist/{es → src}/minimal-string/minimal-string-to-simple-bdd.d.ts +1 -1
- package/dist/{es → src}/minimal-string/minimal-string-to-simple-bdd.js +2 -2
- package/dist/{es → src}/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/{es → src}/minimal-string/resolve-with-simple-bdd.d.ts +1 -1
- package/dist/{lib → src}/minimal-string/resolve-with-simple-bdd.js +1 -1
- package/dist/{es → src}/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/{lib → src}/optimize-brute-force.d.ts +2 -2
- package/dist/{lib → src}/optimize-brute-force.js +2 -2
- package/dist/{es → src}/optimize-brute-force.js.map +1 -1
- package/dist/{es → src}/parents.d.ts +1 -1
- package/dist/{es → src}/parents.js +2 -1
- package/dist/src/parents.js.map +1 -0
- package/dist/{lib → src}/root-node.d.ts +4 -4
- package/dist/{lib → src}/root-node.js +8 -8
- package/dist/src/root-node.js.map +1 -0
- package/dist/{es → src}/types.d.ts +3 -3
- package/dist/{es → src}/util.d.ts +1 -1
- package/package.json +18 -18
- package/src/abstract-node.ts +7 -7
- package/src/branches.ts +2 -2
- package/src/create-bdd-from-truth-table.ts +5 -5
- package/src/ensure-correct-bdd.ts +4 -4
- package/src/fill-truth-table.ts +2 -2
- package/src/find-similar-node.ts +1 -1
- package/src/index.ts +14 -32
- package/src/internal-node.ts +5 -5
- package/src/leaf-node.ts +6 -6
- package/src/minimal-string/bdd-to-minimal-string.ts +4 -4
- package/src/minimal-string/bdd-to-simple-bdd.ts +4 -4
- package/src/minimal-string/index.ts +5 -5
- package/src/minimal-string/minimal-string-to-simple-bdd.ts +3 -3
- package/src/minimal-string/resolve-with-simple-bdd.ts +2 -2
- package/src/optimize-brute-force.ts +5 -5
- package/src/parents.ts +1 -1
- package/src/root-node.ts +7 -7
- package/src/types.ts +3 -3
- package/src/util.ts +1 -1
- package/.github/workflows/main.yml +0 -22
- package/dist/es/abstract-node.js +0 -166
- package/dist/es/abstract-node.js.map +0 -1
- package/dist/es/branches.js.map +0 -1
- package/dist/es/create-bdd-from-truth-table.d.ts +0 -3
- package/dist/es/create-bdd-from-truth-table.js +0 -34
- package/dist/es/create-bdd-from-truth-table.js.map +0 -1
- package/dist/es/ensure-correct-bdd.js.map +0 -1
- package/dist/es/fill-truth-table.d.ts +0 -6
- package/dist/es/fill-truth-table.js +0 -22
- package/dist/es/find-similar-node.d.ts +0 -7
- package/dist/es/index.d.ts +0 -20
- package/dist/es/index.js +0 -14
- package/dist/es/index.js.map +0 -1
- package/dist/es/internal-node.js +0 -42
- package/dist/es/leaf-node.js.map +0 -1
- package/dist/es/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
- package/dist/es/minimal-string/index.d.ts +0 -5
- package/dist/es/minimal-string/index.js +0 -6
- package/dist/es/minimal-string/resolve-with-simple-bdd.js +0 -17
- package/dist/es/optimize-brute-force.d.ts +0 -43
- package/dist/es/optimize-brute-force.js +0 -132
- package/dist/es/parents.js.map +0 -1
- package/dist/es/root-node.d.ts +0 -28
- package/dist/es/root-node.js +0 -154
- package/dist/es/root-node.js.map +0 -1
- package/dist/lib/abstract-node.d.ts +0 -33
- package/dist/lib/abstract-node.js.map +0 -1
- package/dist/lib/branches.d.ts +0 -20
- package/dist/lib/branches.js +0 -70
- package/dist/lib/branches.js.map +0 -1
- package/dist/lib/create-bdd-from-truth-table.d.ts +0 -3
- package/dist/lib/create-bdd-from-truth-table.js.map +0 -1
- package/dist/lib/ensure-correct-bdd.d.ts +0 -8
- package/dist/lib/ensure-correct-bdd.js +0 -97
- package/dist/lib/ensure-correct-bdd.js.map +0 -1
- package/dist/lib/fill-truth-table.js.map +0 -1
- package/dist/lib/find-similar-node.js +0 -18
- package/dist/lib/find-similar-node.js.map +0 -1
- package/dist/lib/index.d.ts +0 -20
- package/dist/lib/index.js +0 -14
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/internal-node.d.ts +0 -16
- package/dist/lib/internal-node.js.map +0 -1
- package/dist/lib/leaf-node.d.ts +0 -10
- package/dist/lib/leaf-node.js +0 -29
- package/dist/lib/leaf-node.js.map +0 -1
- package/dist/lib/minimal-string/bdd-to-minimal-string.d.ts +0 -8
- package/dist/lib/minimal-string/bdd-to-minimal-string.js +0 -55
- package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +0 -1
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js +0 -19
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +0 -1
- package/dist/lib/minimal-string/index.d.ts +0 -5
- package/dist/lib/minimal-string/index.js +0 -6
- package/dist/lib/minimal-string/index.js.map +0 -1
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +0 -54
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
- package/dist/lib/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +0 -1
- package/dist/lib/minimal-string/string-format.d.ts +0 -9
- package/dist/lib/minimal-string/string-format.js +0 -54
- package/dist/lib/minimal-string/string-format.js.map +0 -1
- package/dist/lib/optimize-brute-force.js.map +0 -1
- package/dist/lib/parents.d.ts +0 -15
- package/dist/lib/parents.js +0 -38
- package/dist/lib/parents.js.map +0 -1
- package/dist/lib/root-node.js.map +0 -1
- package/dist/lib/types.d.ts +0 -24
- package/dist/lib/types.js +0 -2
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/util.d.ts +0 -26
- package/dist/lib/util.js +0 -109
- package/dist/lib/util.js.map +0 -1
- package/renovate.json +0 -8
- package/test/helper/big-truth-table.json +0 -578
- package/test/helper/test-util.ts +0 -110
- package/test/unit/create-bdd-from-truth-table.test.ts +0 -24
- package/test/unit/find-similar-node.test.ts +0 -53
- package/test/unit/index.test.ts +0 -6
- package/test/unit/minimize.test.ts +0 -145
- package/test/unit/optimize-brute-force.test.ts +0 -114
- package/test/unit/resolve.test.ts +0 -74
- package/test/unit/simple-bdd.test.ts +0 -186
- package/tsconfig.json +0 -38
- package/tslint.json +0 -116
- /package/dist/{es → src}/find-similar-node.js +0 -0
- /package/dist/{es → src}/find-similar-node.js.map +0 -0
- /package/dist/{es → src}/minimal-string/bdd-to-simple-bdd.js +0 -0
- /package/dist/{es → src}/minimal-string/bdd-to-simple-bdd.js.map +0 -0
- /package/dist/{es → src}/minimal-string/string-format.d.ts +0 -0
- /package/dist/{es → src}/minimal-string/string-format.js +0 -0
- /package/dist/{es → src}/minimal-string/string-format.js.map +0 -0
- /package/dist/{es → src}/types.js +0 -0
- /package/dist/{es → src}/types.js.map +0 -0
- /package/dist/{es → src}/util.js +0 -0
- /package/dist/{es → src}/util.js.map +0 -0
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import * as assert from 'assert';
|
|
2
|
-
import { createBddFromTruthTable } from '../../src/create-bdd-from-truth-table';
|
|
3
|
-
import {
|
|
4
|
-
exampleTruthTable
|
|
5
|
-
} from '../helper/test-util';
|
|
6
|
-
import { ensureCorrectBdd } from '../../src/ensure-correct-bdd';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
describe('create-bdd-from-truth-table.test.ts', () => {
|
|
10
|
-
it('should create a bdd', () => {
|
|
11
|
-
const bdd = createBddFromTruthTable(
|
|
12
|
-
exampleTruthTable()
|
|
13
|
-
);
|
|
14
|
-
assert.ok(bdd);
|
|
15
|
-
ensureCorrectBdd(bdd);
|
|
16
|
-
});
|
|
17
|
-
it('should create a big bdd', () => {
|
|
18
|
-
const bdd = createBddFromTruthTable(
|
|
19
|
-
exampleTruthTable(5)
|
|
20
|
-
);
|
|
21
|
-
assert.ok(bdd);
|
|
22
|
-
ensureCorrectBdd(bdd);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import * as assert from 'assert';
|
|
2
|
-
import { createBddFromTruthTable } from '../../src/create-bdd-from-truth-table';
|
|
3
|
-
import {
|
|
4
|
-
exampleTruthTable, allEqualTable
|
|
5
|
-
} from '../helper/test-util';
|
|
6
|
-
import { ensureCorrectBdd } from '../../src/ensure-correct-bdd';
|
|
7
|
-
import { InternalNode } from '../../src';
|
|
8
|
-
import { findSimilarNode } from '../../src/find-similar-node';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
describe('find-similar-node.test.ts', () => {
|
|
12
|
-
it('should be equal to equal node of other bdd', () => {
|
|
13
|
-
const table = allEqualTable();
|
|
14
|
-
const bdd = createBddFromTruthTable(table);
|
|
15
|
-
const nodes = bdd.getNodesOfLevel(1);
|
|
16
|
-
const first: InternalNode = nodes.values().next().value;
|
|
17
|
-
|
|
18
|
-
const bdd2 = createBddFromTruthTable(table);
|
|
19
|
-
const nodes2 = bdd2.getNodesOfLevel(1);
|
|
20
|
-
const first2: InternalNode = nodes2.values().next().value;
|
|
21
|
-
|
|
22
|
-
const found = findSimilarNode(
|
|
23
|
-
first,
|
|
24
|
-
[first2]
|
|
25
|
-
);
|
|
26
|
-
assert.ok(found);
|
|
27
|
-
});
|
|
28
|
-
it('should not find itself', () => {
|
|
29
|
-
const table = allEqualTable();
|
|
30
|
-
const bdd = createBddFromTruthTable(table);
|
|
31
|
-
const nodes = bdd.getNodesOfLevel(1);
|
|
32
|
-
const first: InternalNode = nodes.values().next().value;
|
|
33
|
-
|
|
34
|
-
const found = findSimilarNode(
|
|
35
|
-
first,
|
|
36
|
-
[first]
|
|
37
|
-
);
|
|
38
|
-
assert.strictEqual(found, null);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should be not be equal to root node', () => {
|
|
42
|
-
const table = allEqualTable();
|
|
43
|
-
const bdd = createBddFromTruthTable(table);
|
|
44
|
-
const nodes = bdd.getNodesOfLevel(1);
|
|
45
|
-
const first: InternalNode = nodes.values().next().value;
|
|
46
|
-
|
|
47
|
-
const found = findSimilarNode(
|
|
48
|
-
first,
|
|
49
|
-
[bdd as any]
|
|
50
|
-
);
|
|
51
|
-
assert.strictEqual(found, null);
|
|
52
|
-
});
|
|
53
|
-
});
|
package/test/unit/index.test.ts
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import * as assert from 'assert';
|
|
2
|
-
import { createBddFromTruthTable } from '../../src/create-bdd-from-truth-table';
|
|
3
|
-
import {
|
|
4
|
-
exampleTruthTable, allEqualTable, randomTable, UNKNOWN, randomUnknownTable
|
|
5
|
-
} from '../helper/test-util';
|
|
6
|
-
import { ensureCorrectBdd } from '../../src/ensure-correct-bdd';
|
|
7
|
-
import { InternalNode, NonRootNode, LeafNode } from '../../src';
|
|
8
|
-
|
|
9
|
-
describe('minimize.test.ts', () => {
|
|
10
|
-
describe('applyReductionRule()', () => {
|
|
11
|
-
it('should remove itself', () => {
|
|
12
|
-
const table = allEqualTable();
|
|
13
|
-
const bdd = createBddFromTruthTable(table);
|
|
14
|
-
const nodes: NonRootNode[] = bdd.getNodesOfLevel(2);
|
|
15
|
-
const first: InternalNode = nodes[0] as InternalNode;
|
|
16
|
-
ensureCorrectBdd(bdd);
|
|
17
|
-
first.applyReductionRule();
|
|
18
|
-
ensureCorrectBdd(bdd);
|
|
19
|
-
assert.ok(
|
|
20
|
-
(bdd as any).branches.getBranch('0').branches.getBranch('0').isLeafNode()
|
|
21
|
-
);
|
|
22
|
-
const second: InternalNode = nodes[1] as InternalNode;
|
|
23
|
-
second.applyReductionRule();
|
|
24
|
-
assert.ok(
|
|
25
|
-
(bdd as any).branches.getBranch('0').branches.getBranch('1').isLeafNode()
|
|
26
|
-
);
|
|
27
|
-
ensureCorrectBdd(bdd);
|
|
28
|
-
});
|
|
29
|
-
it('should work on deeper bdd itself', () => {
|
|
30
|
-
const table = allEqualTable(4);
|
|
31
|
-
const bdd = createBddFromTruthTable(table);
|
|
32
|
-
const nodes: NonRootNode[] = bdd.getNodesOfLevel(2);
|
|
33
|
-
const first: InternalNode = nodes[0] as InternalNode;
|
|
34
|
-
ensureCorrectBdd(bdd);
|
|
35
|
-
first.applyReductionRule();
|
|
36
|
-
ensureCorrectBdd(bdd);
|
|
37
|
-
assert.ok(
|
|
38
|
-
(bdd as any)
|
|
39
|
-
.branches.getBranch('0')
|
|
40
|
-
.branches.getBranch('0')
|
|
41
|
-
.branches.getBranch('0').isLeafNode()
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe('applyEliminationRule()', () => {
|
|
46
|
-
it('should remove the found one', () => {
|
|
47
|
-
const table = allEqualTable();
|
|
48
|
-
const bdd = createBddFromTruthTable(table);
|
|
49
|
-
let nodes: NonRootNode[] = bdd.getNodesOfLevel(1);
|
|
50
|
-
const first: InternalNode = nodes[0] as InternalNode;
|
|
51
|
-
first.applyEliminationRule();
|
|
52
|
-
ensureCorrectBdd(bdd);
|
|
53
|
-
assert.strictEqual(
|
|
54
|
-
bdd.branches.getBranch('0').id,
|
|
55
|
-
bdd.branches.getBranch('1').id
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
nodes = bdd.getNodesOfLevel(1);
|
|
59
|
-
const second: InternalNode = nodes[0] as InternalNode;
|
|
60
|
-
second.applyEliminationRule();
|
|
61
|
-
ensureCorrectBdd(bdd);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('minimize()', () => {
|
|
65
|
-
it('should return a minimized version', () => {
|
|
66
|
-
const table = allEqualTable();
|
|
67
|
-
const bdd = createBddFromTruthTable(table);
|
|
68
|
-
bdd.minimize(false);
|
|
69
|
-
assert.ok((bdd as any).branches.getBranch('0').isLeafNode());
|
|
70
|
-
assert.ok((bdd as any).branches.getBranch('1').isLeafNode());
|
|
71
|
-
ensureCorrectBdd(bdd);
|
|
72
|
-
});
|
|
73
|
-
it('should not crash on random table', () => {
|
|
74
|
-
const table = exampleTruthTable();
|
|
75
|
-
table.set('000', 1);
|
|
76
|
-
table.set('001', 1);
|
|
77
|
-
table.set('010', 1);
|
|
78
|
-
const bdd = createBddFromTruthTable(table);
|
|
79
|
-
bdd.minimize();
|
|
80
|
-
assert.ok((bdd as any).branches.getBranch('0').branches.getBranch('0').isLeafNode());
|
|
81
|
-
ensureCorrectBdd(bdd);
|
|
82
|
-
});
|
|
83
|
-
it('should not crash on a really big table', () => {
|
|
84
|
-
const depth = 11;
|
|
85
|
-
const table = randomTable(depth);
|
|
86
|
-
const bdd = createBddFromTruthTable(table);
|
|
87
|
-
bdd.minimize();
|
|
88
|
-
ensureCorrectBdd(bdd);
|
|
89
|
-
});
|
|
90
|
-
it('random table should not have two equal branches', () => {
|
|
91
|
-
const depth = 9;
|
|
92
|
-
const table = randomTable(depth);
|
|
93
|
-
const bdd = createBddFromTruthTable(table);
|
|
94
|
-
bdd.minimize();
|
|
95
|
-
ensureCorrectBdd(bdd);
|
|
96
|
-
const leafNodes: LeafNode[] = bdd.getNodesOfLevel(depth) as LeafNode[];
|
|
97
|
-
leafNodes.forEach(leaf => {
|
|
98
|
-
const parents = leaf.parents.getAll();
|
|
99
|
-
parents.forEach(parent => {
|
|
100
|
-
assert.notStrictEqual(
|
|
101
|
-
(parent.branches.getBranch('0') as LeafNode).value,
|
|
102
|
-
(parent.branches.getBranch('1') as LeafNode).value
|
|
103
|
-
);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe('countNodes()', () => {
|
|
109
|
-
it('should be smaller after minimize', () => {
|
|
110
|
-
const table = allEqualTable();
|
|
111
|
-
const bdd = createBddFromTruthTable(table);
|
|
112
|
-
const before = bdd.countNodes();
|
|
113
|
-
bdd.minimize();
|
|
114
|
-
const after = bdd.countNodes();
|
|
115
|
-
assert.ok(before > after);
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
describe('.removeIrrelevantLeafNodes()', () => {
|
|
119
|
-
it('should remove all irrelevant nodes', () => {
|
|
120
|
-
const table = exampleTruthTable(5);
|
|
121
|
-
table.set('00001', UNKNOWN);
|
|
122
|
-
table.set('00000', UNKNOWN);
|
|
123
|
-
table.set('00101', UNKNOWN);
|
|
124
|
-
const bdd = createBddFromTruthTable(table);
|
|
125
|
-
bdd.removeIrrelevantLeafNodes(UNKNOWN);
|
|
126
|
-
bdd.getLeafNodes().forEach(node => {
|
|
127
|
-
assert.notStrictEqual(
|
|
128
|
-
UNKNOWN,
|
|
129
|
-
node.value
|
|
130
|
-
);
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
it('should work on a big table', () => {
|
|
134
|
-
const table = randomUnknownTable(6);
|
|
135
|
-
const bdd = createBddFromTruthTable(table);
|
|
136
|
-
bdd.removeIrrelevantLeafNodes(UNKNOWN);
|
|
137
|
-
bdd.getLeafNodes().forEach(node => {
|
|
138
|
-
assert.notStrictEqual(
|
|
139
|
-
UNKNOWN,
|
|
140
|
-
node.value
|
|
141
|
-
);
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
});
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import * as assert from 'assert';
|
|
2
|
-
import { createBddFromTruthTable } from '../../src/create-bdd-from-truth-table';
|
|
3
|
-
import {
|
|
4
|
-
exampleTruthTable, allEqualTable, randomTable, UNKNOWN, randomUnknownTable, getResolverFunctions
|
|
5
|
-
} from '../helper/test-util';
|
|
6
|
-
import { ensureCorrectBdd } from '../../src/ensure-correct-bdd';
|
|
7
|
-
import { InternalNode, NonRootNode, LeafNode, bddToMinimalString, minimalStringToSimpleBdd, resolveWithSimpleBdd } from '../../src';
|
|
8
|
-
import { optimizeBruteForce, CompareResultsFunction } from '../../src/optimize-brute-force';
|
|
9
|
-
import { bddToSimpleBdd } from '../../src/minimal-string/bdd-to-simple-bdd';
|
|
10
|
-
|
|
11
|
-
describe('optimize-brute-force.test.ts', () => {
|
|
12
|
-
it('should return the same values when the order changed', async () => {
|
|
13
|
-
const depth = 8;
|
|
14
|
-
const truthTable = randomTable(depth);
|
|
15
|
-
const bdd = createBddFromTruthTable(truthTable);
|
|
16
|
-
const minimizedBdd = createBddFromTruthTable(truthTable);
|
|
17
|
-
minimizedBdd.minimize();
|
|
18
|
-
|
|
19
|
-
// run optimisation until a better bdd is found
|
|
20
|
-
let resortedBdd = minimizedBdd;
|
|
21
|
-
while (resortedBdd.countNodes() === minimizedBdd.countNodes()) {
|
|
22
|
-
const optimizedResult = await optimizeBruteForce({
|
|
23
|
-
truthTable,
|
|
24
|
-
iterations: 1
|
|
25
|
-
});
|
|
26
|
-
resortedBdd = optimizedResult.bdd;
|
|
27
|
-
}
|
|
28
|
-
// console.log(minimizedBdd.countNodes() + ' - ' + resortedBdd.countNodes());
|
|
29
|
-
const resolvers = getResolverFunctions(depth, false);
|
|
30
|
-
|
|
31
|
-
for (const [key, value] of truthTable.entries()) {
|
|
32
|
-
const bddValue = bdd.resolve(resolvers, key);
|
|
33
|
-
const resortedBddValue = resortedBdd.resolve(resolvers, key);
|
|
34
|
-
const minimizedBddValue = minimizedBdd.resolve(resolvers, key);
|
|
35
|
-
|
|
36
|
-
if (
|
|
37
|
-
bddValue !== resortedBddValue ||
|
|
38
|
-
bddValue !== value ||
|
|
39
|
-
bddValue !== minimizedBddValue
|
|
40
|
-
) {
|
|
41
|
-
console.log('value: ' + value);
|
|
42
|
-
console.log('minimizedBdd: ' + minimizedBddValue);
|
|
43
|
-
console.log('resortedBddValue: ' + resortedBddValue);
|
|
44
|
-
console.log('bddValue: ' + bddValue);
|
|
45
|
-
throw new Error('values not equal');
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
it('resorted bdds should work with simple bdd', async () => {
|
|
50
|
-
const depth = 7;
|
|
51
|
-
const truthTable = randomTable(depth);
|
|
52
|
-
const bdd = createBddFromTruthTable(truthTable);
|
|
53
|
-
const minimizedBdd = createBddFromTruthTable(truthTable);
|
|
54
|
-
minimizedBdd.minimize();
|
|
55
|
-
|
|
56
|
-
// run optimisation until a better bdd is found
|
|
57
|
-
let resortedBdd = minimizedBdd;
|
|
58
|
-
while (resortedBdd.countNodes() === minimizedBdd.countNodes()) {
|
|
59
|
-
const optimizedResult = await optimizeBruteForce({
|
|
60
|
-
truthTable,
|
|
61
|
-
iterations: 1
|
|
62
|
-
});
|
|
63
|
-
resortedBdd = optimizedResult.bdd;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const simpleBdd = bddToSimpleBdd(resortedBdd);
|
|
67
|
-
const minimalString = bddToMinimalString(resortedBdd);
|
|
68
|
-
const simpleBddFromMinimalString = minimalStringToSimpleBdd(minimalString);
|
|
69
|
-
|
|
70
|
-
assert.deepStrictEqual(
|
|
71
|
-
simpleBdd,
|
|
72
|
-
simpleBddFromMinimalString
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
const resolvers = getResolverFunctions(depth, false);
|
|
76
|
-
for (const [key, value] of truthTable.entries()) {
|
|
77
|
-
const bddValue = bdd.resolve(resolvers, key);
|
|
78
|
-
const minimizedBddValue = minimizedBdd.resolve(resolvers, key);
|
|
79
|
-
const resortedBddValue = resortedBdd.resolve(resolvers, key);
|
|
80
|
-
const simpleBddValue = resolveWithSimpleBdd(simpleBdd, resolvers, key);
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
bddValue !== simpleBddValue ||
|
|
84
|
-
bddValue !== resortedBddValue ||
|
|
85
|
-
bddValue !== value ||
|
|
86
|
-
bddValue !== minimizedBddValue
|
|
87
|
-
) {
|
|
88
|
-
console.log('value: ' + value);
|
|
89
|
-
console.log('simpleBddValue: ' + simpleBddValue);
|
|
90
|
-
console.log('minimizedBdd: ' + minimizedBddValue);
|
|
91
|
-
console.log('resortedBddValue: ' + resortedBddValue);
|
|
92
|
-
console.log('bddValue: ' + bddValue);
|
|
93
|
-
throw new Error('values not equal');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
it('compareResults function could be async', async () => {
|
|
98
|
-
const depth = 5;
|
|
99
|
-
const truthTable = randomTable(depth);
|
|
100
|
-
const minimizedBdd = createBddFromTruthTable(truthTable);
|
|
101
|
-
minimizedBdd.minimize();
|
|
102
|
-
|
|
103
|
-
const compareResults: CompareResultsFunction = (a, b) => {
|
|
104
|
-
return Promise.resolve(a);
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
const optimizedResult = await optimizeBruteForce({
|
|
108
|
-
truthTable,
|
|
109
|
-
iterations: 5,
|
|
110
|
-
compareResults
|
|
111
|
-
});
|
|
112
|
-
assert.ok(optimizedResult.bdd);
|
|
113
|
-
});
|
|
114
|
-
});
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import * as assert from 'assert';
|
|
2
|
-
import { createBddFromTruthTable } from '../../src/create-bdd-from-truth-table';
|
|
3
|
-
import {
|
|
4
|
-
exampleTruthTable, allEqualTable, randomTable, UNKNOWN, randomUnknownTable, getResolverFunctions
|
|
5
|
-
} from '../helper/test-util';
|
|
6
|
-
import { ensureCorrectBdd } from '../../src/ensure-correct-bdd';
|
|
7
|
-
import { InternalNode, NonRootNode, LeafNode, ResolverFunctions, resolveWithSimpleBdd } from '../../src';
|
|
8
|
-
import { bddToSimpleBdd } from '../../src/minimal-string/bdd-to-simple-bdd';
|
|
9
|
-
|
|
10
|
-
describe('resolve.test.ts', () => {
|
|
11
|
-
it('should have the same values as the truth table', () => {
|
|
12
|
-
const size = 8;
|
|
13
|
-
const table = exampleTruthTable(size);
|
|
14
|
-
const bdd = createBddFromTruthTable(table);
|
|
15
|
-
const resolvers: ResolverFunctions = getResolverFunctions(size);
|
|
16
|
-
|
|
17
|
-
for (const [key, value] of table.entries()) {
|
|
18
|
-
const bddValue = bdd.resolve(resolvers, key);
|
|
19
|
-
assert.strictEqual(value, bddValue);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
it('should have the same values after minimize', () => {
|
|
23
|
-
const size = 8;
|
|
24
|
-
const table = exampleTruthTable(size);
|
|
25
|
-
const bdd = createBddFromTruthTable(table);
|
|
26
|
-
const resolvers: ResolverFunctions = getResolverFunctions(size);
|
|
27
|
-
|
|
28
|
-
bdd.minimize();
|
|
29
|
-
for (const [key, value] of table.entries()) {
|
|
30
|
-
const bddValue = bdd.resolve(resolvers, key);
|
|
31
|
-
assert.strictEqual(value, bddValue);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
it('should work with minimized random table', () => {
|
|
35
|
-
const size = 8;
|
|
36
|
-
const table = randomTable(size);
|
|
37
|
-
const bdd = createBddFromTruthTable(table);
|
|
38
|
-
const resolvers: ResolverFunctions = getResolverFunctions(size);
|
|
39
|
-
|
|
40
|
-
bdd.minimize();
|
|
41
|
-
for (const [key, value] of table.entries()) {
|
|
42
|
-
const bddValue = bdd.resolve(resolvers, key);
|
|
43
|
-
assert.strictEqual(value, bddValue);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
it('bdd and simplebdd should resolve to the same value', () => {
|
|
47
|
-
const depth = 7;
|
|
48
|
-
const truthTable = randomTable(depth);
|
|
49
|
-
const bdd = createBddFromTruthTable(truthTable);
|
|
50
|
-
const minimizedBdd = createBddFromTruthTable(truthTable);
|
|
51
|
-
minimizedBdd.minimize();
|
|
52
|
-
|
|
53
|
-
const simpleBdd = bddToSimpleBdd(minimizedBdd);
|
|
54
|
-
const resolvers = getResolverFunctions(depth, false);
|
|
55
|
-
|
|
56
|
-
for (const [key, value] of truthTable.entries()) {
|
|
57
|
-
const bddValue = bdd.resolve(resolvers, key);
|
|
58
|
-
const minimizedBddValue = minimizedBdd.resolve(resolvers, key);
|
|
59
|
-
const simpleBddValue = resolveWithSimpleBdd(simpleBdd, resolvers, key);
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
bddValue !== simpleBddValue ||
|
|
63
|
-
bddValue !== value ||
|
|
64
|
-
bddValue !== minimizedBddValue
|
|
65
|
-
) {
|
|
66
|
-
console.log('value: ' + value);
|
|
67
|
-
console.log('simpleBddValue: ' + simpleBddValue);
|
|
68
|
-
console.log('minimizedBdd: ' + minimizedBddValue);
|
|
69
|
-
console.log('bddValue: ' + bddValue);
|
|
70
|
-
throw new Error('values not equal');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
});
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import * as assert from 'assert';
|
|
2
|
-
import { createBddFromTruthTable } from '../../src/create-bdd-from-truth-table';
|
|
3
|
-
import { bddToSimpleBdd } from '../../src/minimal-string/bdd-to-simple-bdd';
|
|
4
|
-
import {
|
|
5
|
-
exampleTruthTable,
|
|
6
|
-
randomTable,
|
|
7
|
-
UNKNOWN,
|
|
8
|
-
getResolverFunctions,
|
|
9
|
-
getBigTruthTable
|
|
10
|
-
} from '../helper/test-util';
|
|
11
|
-
import {
|
|
12
|
-
ResolverFunctions,
|
|
13
|
-
minimalStringToSimpleBdd,
|
|
14
|
-
bddToMinimalString,
|
|
15
|
-
resolveWithSimpleBdd,
|
|
16
|
-
SimpleBdd
|
|
17
|
-
} from '../../src';
|
|
18
|
-
|
|
19
|
-
describe('simple-bdd.test.ts', () => {
|
|
20
|
-
describe('.bddToSimpleBdd()', () => {
|
|
21
|
-
it('should create a correct simple bdd', () => {
|
|
22
|
-
const table = randomTable(3);
|
|
23
|
-
const bdd = createBddFromTruthTable(table);
|
|
24
|
-
const simpleBdd = bddToSimpleBdd(bdd);
|
|
25
|
-
const v1 = bdd
|
|
26
|
-
.branches.getBranch('0').asInternalNode()
|
|
27
|
-
.branches.getBranch('0').asInternalNode()
|
|
28
|
-
.branches.getBranch('0').asLeafNode().value;
|
|
29
|
-
const v2: any = (simpleBdd as any)[0][0][0];
|
|
30
|
-
assert.strictEqual(
|
|
31
|
-
v1, v2
|
|
32
|
-
);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
describe('RootNode.toSimpleBdd()', () => {
|
|
36
|
-
const table = randomTable(3);
|
|
37
|
-
const bdd = createBddFromTruthTable(table);
|
|
38
|
-
const simpleBdd = bdd.toSimpleBdd();
|
|
39
|
-
const v1 = bdd
|
|
40
|
-
.branches.getBranch('0').asInternalNode()
|
|
41
|
-
.branches.getBranch('0').asInternalNode()
|
|
42
|
-
.branches.getBranch('0').asLeafNode().value;
|
|
43
|
-
const v2 = (simpleBdd as any)[0][0][0];
|
|
44
|
-
assert.strictEqual(
|
|
45
|
-
v1, v2
|
|
46
|
-
);
|
|
47
|
-
});
|
|
48
|
-
describe('.bddToMinimalString()', () => {
|
|
49
|
-
it('should create a string', () => {
|
|
50
|
-
const table = exampleTruthTable();
|
|
51
|
-
const bdd = createBddFromTruthTable(table);
|
|
52
|
-
const str = bddToMinimalString(bdd);
|
|
53
|
-
assert.ok(str.length > 4);
|
|
54
|
-
assert.ok(str.length < 300);
|
|
55
|
-
});
|
|
56
|
-
it('should create the same each time', () => {
|
|
57
|
-
const table = exampleTruthTable();
|
|
58
|
-
const bdd = createBddFromTruthTable(table);
|
|
59
|
-
const str = bddToMinimalString(bdd);
|
|
60
|
-
const str2 = bddToMinimalString(bdd);
|
|
61
|
-
assert.strictEqual(str, str2);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('.minimalStringToSimpleBdd()', () => {
|
|
65
|
-
it('parse the string', () => {
|
|
66
|
-
const table = exampleTruthTable(4);
|
|
67
|
-
const bdd = createBddFromTruthTable(table);
|
|
68
|
-
const str = bddToMinimalString(bdd);
|
|
69
|
-
const minimalBdd = minimalStringToSimpleBdd(str);
|
|
70
|
-
|
|
71
|
-
assert.strictEqual(
|
|
72
|
-
(minimalBdd as any)[0][0][0][0], 0
|
|
73
|
-
);
|
|
74
|
-
assert.strictEqual(
|
|
75
|
-
(minimalBdd as any)[0][0][0][1], 1
|
|
76
|
-
);
|
|
77
|
-
assert.strictEqual(
|
|
78
|
-
(minimalBdd as any)[0][0][0].l, 3
|
|
79
|
-
);
|
|
80
|
-
});
|
|
81
|
-
it('should be equal to the generated simple bdd', () => {
|
|
82
|
-
const table = randomTable(6);
|
|
83
|
-
const bdd = createBddFromTruthTable(table);
|
|
84
|
-
const str = bddToMinimalString(bdd);
|
|
85
|
-
const minimalBdd = minimalStringToSimpleBdd(str);
|
|
86
|
-
const simpleBdd = bddToSimpleBdd(bdd);
|
|
87
|
-
assert.deepStrictEqual(
|
|
88
|
-
minimalBdd,
|
|
89
|
-
simpleBdd
|
|
90
|
-
);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
describe('.resolveWithSimpleBdd()', () => {
|
|
94
|
-
it('should resolve a value', () => {
|
|
95
|
-
const size = 5;
|
|
96
|
-
const table = randomTable(size);
|
|
97
|
-
const bdd = createBddFromTruthTable(table);
|
|
98
|
-
const str = bddToMinimalString(bdd);
|
|
99
|
-
const minimalBdd = minimalStringToSimpleBdd(str);
|
|
100
|
-
const resolvers: ResolverFunctions = getResolverFunctions(size);
|
|
101
|
-
|
|
102
|
-
const result = resolveWithSimpleBdd(
|
|
103
|
-
minimalBdd,
|
|
104
|
-
resolvers,
|
|
105
|
-
table.keys().next().value
|
|
106
|
-
);
|
|
107
|
-
assert.strictEqual(typeof result, 'number');
|
|
108
|
-
});
|
|
109
|
-
it('should have the same values as the truth table', () => {
|
|
110
|
-
const size = 5;
|
|
111
|
-
const table = exampleTruthTable(size);
|
|
112
|
-
|
|
113
|
-
const bigBdd = createBddFromTruthTable(table);
|
|
114
|
-
const minimizedBdd = createBddFromTruthTable(table);
|
|
115
|
-
minimizedBdd.removeIrrelevantLeafNodes(UNKNOWN);
|
|
116
|
-
|
|
117
|
-
const str = bddToMinimalString(minimizedBdd);
|
|
118
|
-
const minimalBdd = minimalStringToSimpleBdd(str);
|
|
119
|
-
const resolvers: ResolverFunctions = getResolverFunctions(size);
|
|
120
|
-
|
|
121
|
-
for (const [key, value] of table.entries()) {
|
|
122
|
-
if (value === UNKNOWN) {
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
const simpleBddValue = resolveWithSimpleBdd(
|
|
126
|
-
minimalBdd,
|
|
127
|
-
resolvers,
|
|
128
|
-
key
|
|
129
|
-
);
|
|
130
|
-
const minimalBddValue = minimizedBdd.resolve(resolvers, key);
|
|
131
|
-
const bigBddValue = bigBdd.resolve(resolvers, key);
|
|
132
|
-
if (
|
|
133
|
-
value !== simpleBddValue ||
|
|
134
|
-
value !== minimalBddValue ||
|
|
135
|
-
value !== bigBddValue
|
|
136
|
-
) {
|
|
137
|
-
console.log('value: ' + value);
|
|
138
|
-
console.log('simpleBddValue: ' + simpleBddValue);
|
|
139
|
-
|
|
140
|
-
console.log('minimalBddValue: ' + minimalBddValue);
|
|
141
|
-
console.log('bigBddValue: ' + bigBddValue);
|
|
142
|
-
|
|
143
|
-
throw new Error('values not equal');
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
it('should have the same values with a big truth table', () => {
|
|
148
|
-
const table = getBigTruthTable();
|
|
149
|
-
const bigBdd = createBddFromTruthTable(table);
|
|
150
|
-
const minimizedBdd = createBddFromTruthTable(table);
|
|
151
|
-
minimizedBdd.removeIrrelevantLeafNodes(UNKNOWN);
|
|
152
|
-
|
|
153
|
-
const str = bddToMinimalString(minimizedBdd);
|
|
154
|
-
const minimalBdd = minimalStringToSimpleBdd(str);
|
|
155
|
-
const resolvers: ResolverFunctions = getResolverFunctions(17);
|
|
156
|
-
for (const [key, value] of table.entries()) {
|
|
157
|
-
if (value === UNKNOWN) {
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
const simpleBddValue = resolveWithSimpleBdd(
|
|
161
|
-
minimalBdd,
|
|
162
|
-
resolvers,
|
|
163
|
-
key
|
|
164
|
-
);
|
|
165
|
-
const minimalBddValue = minimizedBdd.resolve(resolvers, key);
|
|
166
|
-
const bigBddValue = bigBdd.resolve(resolvers, key);
|
|
167
|
-
if (
|
|
168
|
-
value !== simpleBddValue ||
|
|
169
|
-
value !== minimalBddValue ||
|
|
170
|
-
value !== bigBddValue
|
|
171
|
-
) {
|
|
172
|
-
console.log('key: ' + key);
|
|
173
|
-
console.log('value: ' + value);
|
|
174
|
-
console.log('simpleBddValue: ' + simpleBddValue);
|
|
175
|
-
|
|
176
|
-
console.log('minimalBddValue: ' + minimalBddValue);
|
|
177
|
-
console.log('bigBddValue: ' + bigBddValue);
|
|
178
|
-
|
|
179
|
-
minimizedBdd.log();
|
|
180
|
-
|
|
181
|
-
throw new Error('values not equal');
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
});
|
package/tsconfig.json
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"removeComments": false,
|
|
4
|
-
"preserveConstEnums": true,
|
|
5
|
-
"sourceMap": true,
|
|
6
|
-
"strictNullChecks": true,
|
|
7
|
-
"noImplicitAny": true,
|
|
8
|
-
"strict": true,
|
|
9
|
-
"noImplicitReturns": true,
|
|
10
|
-
"noImplicitThis": true,
|
|
11
|
-
"downlevelIteration": true,
|
|
12
|
-
"moduleResolution": "node",
|
|
13
|
-
"esModuleInterop": true,
|
|
14
|
-
"declaration": true,
|
|
15
|
-
"target": "ES2017",
|
|
16
|
-
"outDir": "./dist/lib",
|
|
17
|
-
"lib": [
|
|
18
|
-
"es7",
|
|
19
|
-
"dom"
|
|
20
|
-
]
|
|
21
|
-
},
|
|
22
|
-
"formatCodeOptions": {
|
|
23
|
-
"indentSize": 2,
|
|
24
|
-
"tabSize": 2
|
|
25
|
-
},
|
|
26
|
-
"include": [
|
|
27
|
-
"src"
|
|
28
|
-
],
|
|
29
|
-
"exclude": [
|
|
30
|
-
"node_modules",
|
|
31
|
-
"**/node_modules/*",
|
|
32
|
-
"dist",
|
|
33
|
-
"src/logic-generator/logic-map-output",
|
|
34
|
-
"**.txt",
|
|
35
|
-
"**.json"
|
|
36
|
-
],
|
|
37
|
-
"compileOnSave": false
|
|
38
|
-
}
|