mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
@@ -1199,14 +1199,14 @@ Tinytest.add("logic-solver - assumptions", function (test) {
|
||||
// which of A,B,C,D comes back true is totally arbitrary, but it's
|
||||
// deterministic as long as we don't touch anything.
|
||||
test.equal(s.solveAssuming(atLeastOne).getMap(),
|
||||
{ A: false, B: false, C: true, D: false });
|
||||
{ A: false, B: true, C: false, D: false });
|
||||
test.equal(formatLines(s._clauseStrings()),
|
||||
formatLines(["A v B v C v D v -$or1",
|
||||
"$or1 v -$assump1"]));
|
||||
|
||||
// assume the same thing again
|
||||
test.equal(s.solveAssuming(atLeastOne).getMap(),
|
||||
{ A: false, B: false, C: true, D: false });
|
||||
{ A: false, B: true, C: false, D: false });
|
||||
test.equal(formatLines(s._clauseStrings()),
|
||||
formatLines(["A v B v C v D v -$or1",
|
||||
"$or1 v -$assump1",
|
||||
@@ -1229,7 +1229,7 @@ Tinytest.add("logic-solver - assumptions", function (test) {
|
||||
s.require(atLeastOne);
|
||||
test.equal(s.solve().getMap(),
|
||||
// any one could be true
|
||||
{ A: true, B: false, C: false, D: false });
|
||||
{ A: false, B: true, C: false, D: false });
|
||||
test.equal(formatLines(s._clauseStrings()),
|
||||
formatLines(["A v B v C v D v -$or1",
|
||||
"$or1 v -$assump1",
|
||||
@@ -1243,7 +1243,7 @@ Tinytest.add("logic-solver - assumptions", function (test) {
|
||||
|
||||
test.equal(s.solveAssuming("D").getMap(),
|
||||
// at least D is true; other than that, anything goes
|
||||
{ A: true, B: false, C: false, D: true });
|
||||
{ A: false, B: true, C: false, D: true });
|
||||
test.equal(formatLines(s._clauseStrings()),
|
||||
formatLines(["A v B v C v D v -$or1",
|
||||
"$or1 v -$assump1",
|
||||
@@ -1259,12 +1259,13 @@ Tinytest.add("logic-solver - assumptions", function (test) {
|
||||
var sum = Logic.sum("A", "B", "C", "D");
|
||||
var atLeast2 = Logic.greaterThanOrEqual(sum, Logic.constantBits(2));
|
||||
test.equal(s.solveAssuming(atLeast2).getMap(),
|
||||
{ A: true, B: false, C: false, D: true });
|
||||
// any two or more, including D
|
||||
{ A: false, B: true, C: false, D: true });
|
||||
s.require(atLeast2);
|
||||
var atLeast3 = Logic.greaterThanOrEqual(sum, Logic.constantBits(3));
|
||||
test.equal(s.solveAssuming(atLeast3).getMap(),
|
||||
// any three or more, including D
|
||||
{ A: true, B: false, C: true, D: true });
|
||||
{ A: true, B: true, C: false, D: true });
|
||||
s.require(atLeast3);
|
||||
var atLeast4 = Logic.greaterThanOrEqual(sum, Logic.constantBits(4));
|
||||
test.equal(s.solveAssuming(atLeast4).getMap(),
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -103,6 +103,11 @@ MiniSat.prototype.retireVar = function (v) {
|
||||
this._C._retireVar(v);
|
||||
};
|
||||
|
||||
// The "conflict clause" feature of MiniSat is not what it sounds
|
||||
// like, unfortunately -- it doesn't help explain conflicts.
|
||||
// It only tells us which assumption vars are to blame for a failed
|
||||
// solveAssuming (and we only ever pass one var).
|
||||
// We keep this function around in case we discover a use for it.
|
||||
MiniSat.prototype.getConflictClause = function () {
|
||||
var C = this._C;
|
||||
var numTerms = C._getConflictClauseSize();
|
||||
@@ -110,7 +115,7 @@ MiniSat.prototype.getConflictClause = function () {
|
||||
var terms = [];
|
||||
for (var i = 0; i < numTerms; i++) {
|
||||
var t = C.getValue(clausePtr + i*4, 'i32');
|
||||
var v = (t >>> 1) + 1;
|
||||
var v = (t >>> 1);
|
||||
var s = (t & 1) ? -1 : 1;
|
||||
terms[i] = v * s;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user