mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Finish xor tests
This commit is contained in:
@@ -491,6 +491,13 @@ var group = function (array, N) {
|
||||
};
|
||||
|
||||
Logic._defineFormula(Logic.XorFormula, 'xor', {
|
||||
_grouped: function () {
|
||||
return new Logic.XorFormula(
|
||||
_.map(group(this.operands, 3), function (group) {
|
||||
return (group.length === 1 ?
|
||||
group[0] : new Logic.XorFormula(group));
|
||||
}));
|
||||
},
|
||||
_genTrue: function (makeClause) {
|
||||
var args = this.operands;
|
||||
var not = Logic.not;
|
||||
@@ -509,10 +516,7 @@ Logic._defineFormula(Logic.XorFormula, 'xor', {
|
||||
makeClause(not(A), B, not(C)), // -A v B v -C
|
||||
makeClause(not(A), not(B), C)]; // -A v -B v C
|
||||
} else {
|
||||
return (new Logic.XorFormula(
|
||||
_.map(group(args, 3), function (group) {
|
||||
return new Logic.XorFormula(group);
|
||||
})))._genTrue(makeClause);
|
||||
return this._grouped()._genTrue(makeClause);
|
||||
}
|
||||
},
|
||||
_genFalse: function (makeClause) {
|
||||
@@ -533,10 +537,7 @@ Logic._defineFormula(Logic.XorFormula, 'xor', {
|
||||
makeClause(A, not(B), C), // A v -B v C
|
||||
makeClause(A, B, not(C))]; // A v B v -C
|
||||
} else {
|
||||
return (new Logic.XorFormula(
|
||||
_.map(group(args, 3), function (group) {
|
||||
return new Logic.XorFormula(group);
|
||||
})))._genFalse(makeClause);
|
||||
return this._grouped()._genFalse(makeClause);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -297,7 +297,68 @@ Tinytest.add("logic-solver - Logic.xor", function (test) {
|
||||
["A v -B", "-A v B"],
|
||||
function (s) {
|
||||
s.require(Logic.xor(["A", []], ["B"], [])); },
|
||||
["A v B", "-A v -B"]
|
||||
// XXX test 3 and 4 args
|
||||
["A v B", "-A v -B"],
|
||||
function (s) {
|
||||
s.require(Logic.xor("A", "B", "C")); },
|
||||
["A v B v C", "A v -B v -C", "-A v B v -C", "-A v -B v C"],
|
||||
function (s) {
|
||||
s.forbid(Logic.xor("A", "B", "C")); },
|
||||
["-A v -B v -C", "-A v B v C", "A v -B v C", "A v B v -C"],
|
||||
function (s) {
|
||||
s.require(Logic.xor("A", "B", "C", "D")); },
|
||||
["A v B v C v -$xor1",
|
||||
"A v -B v -C v -$xor1",
|
||||
"-A v B v -C v -$xor1",
|
||||
"-A v -B v C v -$xor1",
|
||||
"$xor1 v D",
|
||||
"-A v -B v -C v $xor1",
|
||||
"-A v B v C v $xor1",
|
||||
"A v -B v C v $xor1",
|
||||
"A v B v -C v $xor1",
|
||||
"-$xor1 v -D"],
|
||||
function (s) {
|
||||
s.forbid(Logic.xor("A", "B", "C", "D")); },
|
||||
["A v B v C v -$xor1",
|
||||
"A v -B v -C v -$xor1",
|
||||
"-A v B v -C v -$xor1",
|
||||
"-A v -B v C v -$xor1",
|
||||
"$xor1 v -D",
|
||||
"-A v -B v -C v $xor1",
|
||||
"-A v B v C v $xor1",
|
||||
"A v -B v C v $xor1",
|
||||
"A v B v -C v $xor1",
|
||||
"-$xor1 v D"],
|
||||
function (s) {
|
||||
s.require(Logic.xor("A", "B", "C", "D", "E")); },
|
||||
["A v B v C v -$xor1",
|
||||
"A v -B v -C v -$xor1",
|
||||
"-A v B v -C v -$xor1",
|
||||
"-A v -B v C v -$xor1",
|
||||
"D v E v -$xor2",
|
||||
"-D v -E v -$xor2",
|
||||
"$xor1 v $xor2",
|
||||
"-A v -B v -C v $xor1",
|
||||
"-A v B v C v $xor1",
|
||||
"A v -B v C v $xor1",
|
||||
"A v B v -C v $xor1",
|
||||
"D v -E v $xor2",
|
||||
"-D v E v $xor2",
|
||||
"-$xor1 v -$xor2"],
|
||||
function (s) {
|
||||
s.forbid(Logic.xor("A", "B", "C", "D", "E")); },
|
||||
["A v B v C v -$xor1",
|
||||
"A v -B v -C v -$xor1",
|
||||
"-A v B v -C v -$xor1",
|
||||
"-A v -B v C v -$xor1",
|
||||
"D v -E v $xor2",
|
||||
"-D v E v $xor2",
|
||||
"$xor1 v -$xor2",
|
||||
"-A v -B v -C v $xor1",
|
||||
"-A v B v C v $xor1",
|
||||
"A v -B v C v $xor1",
|
||||
"A v B v -C v $xor1",
|
||||
"D v E v -$xor2",
|
||||
"-D v -E v -$xor2",
|
||||
"-$xor1 v $xor2"]
|
||||
]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user