can-query-logic
Version:
2,554 lines (2,119 loc) • 89.1 kB
JavaScript
var compare = require("./comparisons");
var set = require("../set");
var is = compare;
var ValuesNot = require("./values-not");
QUnit.module("can-query-logic/types/comparisons");
var tests = {
// In
In_In: {
union: function(assert) {
var isIn5 = new is.In([5]),
isIn6 = new is.In([6]);
assert.deepEqual(
set.union(isIn5, isIn6),
new is.In([5, 6])
);
},
intersection: function(assert) {
var isIn5 = new is.In([5]),
isIn6 = new is.In([6]);
assert.deepEqual(
set.intersection(isIn5, isIn6),
set.EMPTY
);
var in13 = new is.In([1, 2, 3]),
in24 = new is.In([2, 3, 4]);
assert.deepEqual(
set.intersection(in13, in24),
new is.In([2, 3])
);
},
difference: function(assert) {
var isIn5 = new is.In([5]),
isIn6 = new is.In([6]);
assert.deepEqual(
set.difference(isIn5, isIn6),
isIn5
);
var in13 = new is.In([1, 2, 3]),
in24 = new is.In([2, 3, 4]);
assert.deepEqual(
set.difference(in13, in24),
new is.In([1])
);
}
},
In_isMember: function(assert) {
assert.ok(new is.In([5]).isMember(5));
assert.notOk(new is.In([5]).isMember(6));
assert.ok(new is.In([5, -1]).isMember(-1));
},
UNIVERSAL_In: {
difference: function(assert) {
var isIn5 = new is.In([5]);
assert.deepEqual(
set.difference(set.UNIVERSAL, isIn5),
new is.NotIn([5])
);
var in13 = new is.In([1, 2, 3]);
assert.deepEqual(
set.difference(set.UNIVERSAL, in13),
new is.NotIn([1, 2, 3])
);
}
},
In_NotIn: {
union: function(assert) {
var a = new is.In([5, 6]);
var b = new is.NotIn([6, 7]);
assert.deepEqual(
set.union(a, b),
new is.NotIn([7])
);
a = new is.In([5, 6]);
b = new is.NotIn([5, 6]);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
},
intersection: function(assert) {
var a = new is.In([5, 6]);
var b = new is.NotIn([6, 7]);
assert.deepEqual(
set.intersection(a, b),
new is.In([5])
);
a = new is.In([5, 6]);
b = new is.NotIn([5, 6]);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.NotIn([6, 7]);
assert.deepEqual(
set.difference(a, b),
new is.In([6])
);
a = new is.In([5, 6]);
b = new is.NotIn([5, 6]);
assert.deepEqual(
set.difference(a, b),
new is.In([5, 6])
);
a = new is.In([5, 6]);
b = new is.NotIn([8, 9]);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
}
},
NotIn_In: {
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.NotIn([6, 7]);
assert.deepEqual(
set.difference(b, a),
new is.NotIn([6, 7, 5])
);
a = new is.In([5, 6]);
b = new is.NotIn([5, 6]);
assert.deepEqual(
set.difference(b, a),
new is.NotIn([5, 6])
);
}
},
In_GreaterThan: {
union: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThan(3);
assert.deepEqual(
set.union(a, b),
b
);
a = new is.In([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.union(a, b),
// OR( {$in: [2,4]}, {$gt: 3} )
new is.Or([new is.In([2]), b])
// set.UNDEFINABLE
);
a = new is.In([2, 4]);
b = new is.GreaterThan(2);
// TODO: this could actually just be new is.GreaterThanEqual(2)
assert.deepEqual(
set.union(a, b),
new is.GreaterThanEqual(2)
);
},
intersection: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThan(3);
assert.deepEqual(
set.intersection(a, b),
a
);
a = new is.In([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.intersection(a, b),
new is.In([4])
);
a = new is.In([2, 4]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThan(3);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
a = new is.In([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.difference(a, b),
new is.In([2])
);
a = new is.In([2, 4]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.difference(a, b),
new is.In([2, 4])
);
a = new is.In([null, undefined]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.difference(a, b),
new is.In([null, undefined]),
"handles weird types"
);
}
},
GreaterThan_In: {
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThan(3);
var difference = set.difference(b, a);
assert.deepEqual(
difference,
new is.And([new is.NotIn([5, 6]), b])
);
a = new is.In([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.difference(b, a),
new is.And([new is.NotIn([4]), b])
);
a = new is.In([2, 4]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.difference(b, a),
b
);
}
},
In_GreaterThanEqual: {
union: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.union(a, b),
b
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.union(a, b),
new is.Or([new is.In([2]), b])
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(2);
assert.deepEqual(
set.union(a, b),
b
);
},
intersection: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.intersection(a, b),
a
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.intersection(a, b),
new is.In([4])
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(a, b),
new is.In([2])
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.difference(a, b),
new is.In([2, 4])
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(2);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
}
},
GreaterThanEqual_In: {
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.GreaterThanEqual(3);
var difference = set.difference(b, a);
assert.deepEqual(
difference,
new is.And([new is.NotIn([5, 6]), b])
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(b, a),
new is.And([new is.NotIn([4]), b])
);
a = new is.In([2, 4]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.difference(b, a),
b
);
}
},
In_LessThan: {
union: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThan(7);
assert.deepEqual(
set.union(a, b),
b
);
a = new is.In([2, 4]);
b = new is.LessThan(3);
assert.deepEqual(
set.union(a, b),
new is.Or([new is.In([4]), b])
);
a = new is.In([2, 4]);
b = new is.LessThan(4);
// TODO: this can be new is.LessThanEqual(4)
assert.deepEqual(
set.union(a, b),
new is.LessThanEqual(4)
);
},
intersection: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThan(7);
assert.deepEqual(
set.intersection(a, b),
a
);
a = new is.In([2, 4]);
b = new is.LessThan(3);
assert.deepEqual(
set.intersection(a, b),
new is.In([2])
);
a = new is.In([2, 4]);
b = new is.LessThan(1);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThan(7);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
a = new is.In([5, 6]);
b = new is.LessThan(6);
assert.deepEqual(
set.difference(a, b),
new is.In([6])
);
a = new is.In([2, 4]);
b = new is.LessThan(3);
assert.deepEqual(
set.difference(a, b),
new is.In([4])
);
a = new is.In([2, 4]);
b = new is.LessThan(1);
assert.deepEqual(
set.difference(a, b),
new is.In([2, 4])
);
}
},
LessThan_In: {
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThan(7);
var difference = set.difference(b, a);
assert.deepEqual(
difference,
new is.And([new is.NotIn([5, 6]), b])
);
a = new is.In([2, 4]);
b = new is.LessThan(3);
assert.deepEqual(
set.difference(b, a),
new is.And([new is.NotIn([2]), b])
);
a = new is.In([2, 4]);
b = new is.LessThan(1);
assert.deepEqual(
set.difference(b, a),
b
);
}
},
In_LessThanEqual: {
union: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThanEqual(7);
assert.deepEqual(
set.union(a, b),
b
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(3);
assert.deepEqual(
set.union(a, b),
new is.Or([new is.In([4]), b])
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(4);
assert.deepEqual(
set.union(a, b),
b
);
},
intersection: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThanEqual(7);
assert.deepEqual(
set.intersection(a, b),
a
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(3);
assert.deepEqual(
set.intersection(a, b),
new is.In([2])
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(1);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThanEqual(7);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
a = new is.In([5, 6]);
b = new is.LessThanEqual(6);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(3);
assert.deepEqual(
set.difference(a, b),
new is.In([4])
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(1);
assert.deepEqual(
set.difference(a, b),
new is.In([2, 4])
);
}
},
LessThanEqual_In: {
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.LessThanEqual(7);
var difference = set.difference(b, a);
assert.deepEqual(
difference,
new is.And([new is.NotIn([5, 6]), b])
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(3);
assert.deepEqual(
set.difference(b, a),
new is.And([new is.NotIn([2]), b])
);
a = new is.In([2, 4]);
b = new is.LessThanEqual(1);
assert.deepEqual(
set.difference(b, a),
b
);
}
},
In_And: {
union: function(assert) {
var a = new is.In([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.union(a, b),
new is.Or([
a, b
])
);
a = new is.In([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.union(a, b),
b
);
},
intersection: function(assert) {
var a = new is.In([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.In([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
a
);
},
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
a
);
a = new is.In([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
}
},
And_In: {
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(b, a),
b
);
a = new is.In([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
var res = set.difference(b, a);
assert.deepEqual(
res,
new is.And([new is.NotIn([15, 16]), b])
);
}
},
In_Or: {
union: function(assert) {
var a = new is.In([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(1)]);
// TODO: Ors can be combined
assert.deepEqual(
set.union(a, b),
new is.Or([
a, b
])
);
a = new is.In([15, 16]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.union(a, b),
b
);
var gt1 = new is.GreaterThan(1),
lt1 = new is.LessThan(1),
eq1 = new is.In([1]);
var intermediate = set.union(gt1,lt1);
var result = set.union( intermediate, eq1 );
assert.equal(result, set.UNIVERSAL, "foo > 1 || foo < 1 || foo === 1 => UNIVERSAL");
},
intersection: function(assert) {
var a = new is.In([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(1)]);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.In([15, 16]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.intersection(a, b),
a
);
},
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.difference(a, b),
a
);
a = new is.In([15, 16]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
}
},
Or_In: {
difference: function(assert) {
var a = new is.In([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.difference(b, a),
b
);
a = new is.In([15, 16]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
var res = set.difference(b, a);
assert.deepEqual(
res,
new is.And([new is.NotIn([15, 16]), b])
);
}
},
// NotIn ================================================
NotIn_NotIn: {
// if there's some intersection ... then that's ok
union: function(assert) {
var isNotIn5 = new is.NotIn([5]),
isNotIn6 = new is.NotIn([6]);
assert.deepEqual(
set.union(isNotIn5, isNotIn6),
set.UNIVERSAL
);
var a = new is.NotIn([4, 5]),
b = new is.NotIn([5, 6]);
assert.deepEqual(
set.union(a, b),
new is.NotIn([5])
);
},
intersection: function(assert) {
var isNotIn5 = new is.NotIn([5]),
isNotIn6 = new is.NotIn([6]);
assert.deepEqual(
set.intersection(isNotIn5, isNotIn6),
new is.NotIn([5, 6])
);
var in13 = new is.NotIn([1, 2, 3]),
in24 = new is.NotIn([2, 3, 4]);
assert.deepEqual(
set.intersection(in13, in24),
new is.NotIn([1, 2, 3, 4])
);
},
difference: function(assert) {
var isNotIn5 = new is.NotIn([5]),
isNotIn6 = new is.NotIn([6]);
assert.deepEqual(
set.difference(isNotIn5, isNotIn6),
new is.In([5])
);
var a = new is.NotIn([2, 3]),
b = new is.NotIn([3, 4]);
assert.deepEqual(
set.difference(a, b),
new is.In([2])
);
}
},
UNIVERSAL_NotIn: {
difference: function(assert) {
var a = new is.NotIn([5]);
assert.deepEqual(
set.difference(set.UNIVERSAL, a),
new is.In([5])
);
var b = new is.NotIn([1, 2, 3]);
assert.deepEqual(
set.difference(set.UNIVERSAL, b),
new is.In([1, 2, 3])
);
}
},
NotIn_isMember: function(assert) {
assert.notOk(new is.NotIn([5]).isMember(5));
assert.ok(new is.NotIn([5]).isMember(6));
assert.notOk(new is.NotIn([5, -1]).isMember(-1));
},
NotIn_GreaterThan: {
union: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThan(3);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.union(a, b),
new is.NotIn([2])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(2);
// TODO: this could actually just be new is.GreaterThan(2)
assert.deepEqual(
set.union(a, b),
new is.NotIn([2])
);
},
intersection: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThan(3),
res;
res = set.intersection(a, b);
assert.deepEqual(
res,
new is.And([a, b])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.intersection(a, b),
new is.And([new is.NotIn([4]), b])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.intersection(a, b),
b
);
},
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThan(3);
assert.deepEqual(
set.difference(a, b),
new is.LessThanEqual(3)
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([2]), new is.LessThanEqual(3)])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([2, 4]), new is.LessThanEqual(8)])
);
a = new is.NotIn([null, undefined]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([null, undefined]), new is.LessThanEqual(8)]),
"handles weird types"
);
}
},
GreaterThan_NotIn: {
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThan(3);
assert.deepEqual(
set.difference(b, a),
new is.In([5, 6])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(3);
assert.deepEqual(
set.difference(b, a),
new is.In([4])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.difference(b, a),
set.EMPTY
);
a = new is.NotIn([null, undefined]);
b = new is.GreaterThan(8);
assert.deepEqual(
set.difference(b, a),
set.EMPTY,
"handles weird types"
);
}
},
NotIn_GreaterThanEqual: {
union: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.union(a, b),
new is.NotIn([2])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(2);
// TODO: this could actually just be new is.GreaterThanEqual(2)
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
},
intersection: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThanEqual(3),
res;
res = set.intersection(a, b);
assert.deepEqual(
res,
new is.And([a, b])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.intersection(a, b),
new is.And([new is.NotIn([4]), b])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.intersection(a, b),
b
);
},
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(a, b),
new is.LessThan(3)
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([2]), new is.LessThan(3)])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([2, 4]), new is.LessThan(8)])
);
a = new is.NotIn([null, undefined]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([null, undefined]), new is.LessThan(8)]),
"handles weird types"
);
}
},
GreaterThanEqual_NotIn: {
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(b, a),
new is.In([5, 6])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(b, a),
new is.In([4])
);
a = new is.NotIn([2, 4]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.difference(b, a),
set.EMPTY
);
a = new is.NotIn([2]);
b = new is.GreaterThanEqual(2);
assert.deepEqual(
set.difference(b, a),
new is.In([2])
);
a = new is.NotIn([null, undefined]);
b = new is.GreaterThanEqual(8);
assert.deepEqual(
set.difference(b, a),
set.EMPTY,
"handles weird types"
);
}
},
NotIn_LessThan: {
union: function(assert) {
var a = new is.NotIn([5, 7]);
var b = new is.LessThan(6);
assert.deepEqual(
set.union(a, b),
new is.NotIn([7])
);
},
intersection: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.LessThan(7),
res;
res = set.intersection(a, b);
assert.deepEqual(
res,
new is.And([a, b])
);
},
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.LessThan(7);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThanEqual(7)
);
}
},
LessThan_NotIn: {
difference: function(assert) {
var a = new is.NotIn([5, 7]);
var b = new is.LessThan(6);
assert.deepEqual(
set.difference(b, a),
new is.In([5])
);
}
},
NotIn_LessThanEqual: {
union: function(assert) {
var a = new is.NotIn([5, 7]);
var b = new is.LessThanEqual(6);
assert.deepEqual(
set.union(a, b),
new is.NotIn([7])
);
},
intersection: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.LessThanEqual(7),
res;
res = set.intersection(a, b);
assert.deepEqual(
res,
new is.And([a, b])
);
},
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.LessThanEqual(7);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThan(7)
);
a = new is.NotIn([5, 6]);
b = new is.LessThanEqual(6);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThan(6)
);
a = new is.NotIn([2, 4]);
b = new is.LessThanEqual(3);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([4]), new is.GreaterThan(3)])
);
a = new is.NotIn([2, 4]);
b = new is.LessThanEqual(1);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([2, 4]), new is.GreaterThan(1)])
);
a = new is.NotIn([undefined]);
b = new is.LessThanEqual(3);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.NotIn([undefined]), new is.GreaterThan(3)])
);
}
},
LessThanEqual_NotIn: {
difference: function(assert) {
var a = new is.NotIn([5, 7]);
var b = new is.LessThanEqual(6);
assert.deepEqual(
set.difference(b, a),
new is.In([5])
);
}
},
NotIn_And: {
union: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.union(a, b),
a
);
a = new is.NotIn([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
},
intersection: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
b
);
a = new is.NotIn([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
new is.And([a, b]),
"not in within range");
},
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
var res = set.difference(a, b);
assert.deepEqual(
res,
new is.And([a, new is.Or([new is.GreaterThanEqual(20), new is.LessThanEqual(7)])])
);
a = new is.NotIn([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
new is.Or([new is.GreaterThanEqual(20), new is.LessThanEqual(7)])
);
}
},
And_NotIn: {
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(b, a),
set.EMPTY
);
a = new is.NotIn([15, 16]);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
var res = set.difference(b, a);
assert.deepEqual(
res,
new is.In([15, 16])
);
}
},
NotIn_Or: {
union: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(1)]);
// TODO: Ors can be combined
assert.deepEqual(
set.union(a, b),
a
);
a = new is.NotIn([5, 16]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.union(a, b),
new is.NotIn([5])
);
},
intersection: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(1)]);
assert.deepEqual(
set.intersection(a, b),
b
);
a = new is.NotIn([8]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.intersection(a, b),
new is.And([a, b])
);
},
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
var res = set.difference(a, b);
assert.deepEqual(
res,
new is.And([a, new is.And([new is.GreaterThanEqual(2), new is.LessThanEqual(7)])])
);
a = new is.NotIn([15, 16]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.GreaterThanEqual(2), new is.LessThanEqual(7)])
);
}
},
Or_NotIn: {
difference: function(assert) {
var a = new is.NotIn([5, 6]);
var b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
assert.deepEqual(
set.difference(b, a),
set.EMPTY,
"between"
);
a = new is.NotIn([15, 16]);
b = new is.Or([new is.GreaterThan(7), new is.LessThan(2)]);
var res = set.difference(b, a);
assert.deepEqual(
res,
new is.In([15, 16]),
"within"
);
}
},
// GreaterThan ============
GreaterThan_GreaterThan: {
union: function(assert) {
var a = new is.GreaterThan(5),
b = new is.GreaterThan(6);
assert.deepEqual(
set.union(a, b),
a
);
a = new is.GreaterThan("foo");
b = new is.GreaterThan("bar");
assert.deepEqual(
set.union(a, b),
b
);
},
intersection: function(assert) {
var a = new is.GreaterThan(5),
b = new is.GreaterThan(6);
assert.deepEqual(
set.intersection(a, b),
b
);
a = new is.GreaterThan("foo");
b = new is.GreaterThan("bar");
assert.deepEqual(
set.intersection(a, b),
a
);
},
difference: function(assert) {
var a = new is.GreaterThan(5),
b = new is.GreaterThan(6);
assert.deepEqual(
set.difference(a, b),
// AND( {$gt:5}, {$lte: 6} )
new is.And([a, new is.LessThanEqual(6)])
//set.UNDEFINABLE
);
a = new is.GreaterThan(5);
b = new is.GreaterThan(6);
assert.deepEqual(
set.difference(b, a),
set.EMPTY
);
}
},
GreaterThan_isMember: function(assert) {
assert.notOk(new is.GreaterThan(5).isMember(5));
assert.ok(new is.GreaterThan(5).isMember(6));
},
UNIVERSAL_GreaterThan: {
difference: function(assert) {
var a = new is.GreaterThan(5);
assert.deepEqual(
set.difference(set.UNIVERSAL, a),
new is.LessThanEqual(5)
);
}
},
GreaterThan_GreaterThanEqual: {
union: function(assert) {
var a = new is.GreaterThan(5),
b = new is.GreaterThanEqual(6);
assert.deepEqual(
set.union(a, b),
a
);
a = new is.GreaterThan("foo");
b = new is.GreaterThanEqual("bar");
assert.deepEqual(
set.union(a, b),
b
);
},
intersection: function(assert) {
var a = new is.GreaterThan(5),
b = new is.GreaterThanEqual(6);
assert.deepEqual(
set.intersection(a, b),
b
);
a = new is.GreaterThan("foo");
b = new is.GreaterThanEqual("bar");
assert.deepEqual(
set.intersection(a, b),
a
);
},
difference: function(assert) {
var a = new is.GreaterThan(5),
b = new is.GreaterThanEqual(6);
assert.deepEqual(
set.difference(a, b),
// AND( {$gt:5}, {$lt: 6} )
new is.And([a, new is.LessThan(6)])
//set.UNDEFINABLE
);
a = new is.GreaterThan(6);
b = new is.GreaterThanEqual(5);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
a = new is.GreaterThan(5);
b = new is.GreaterThanEqual(5);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
}
},
GreaterThanEqual_GreaterThan: {
difference: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.GreaterThan(6);
assert.deepEqual(
set.difference(a, b),
// AND( {$gte:5}, {$lte: 6} )
new is.And([a, new is.LessThanEqual(6)])
//set.UNDEFINABLE
);
a = new is.GreaterThanEqual(6);
b = new is.GreaterThan(5);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
a = new is.GreaterThanEqual(5);
b = new is.GreaterThan(5);
assert.deepEqual(
set.difference(a, b),
// AND( {$gte:5}, {$lte: 5} )
new is.In([5])
//set.UNDEFINABLE
);
}
},
GreaterThan_LessThan: {
union: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThan(6);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.GreaterThan("foo");
b = new is.LessThan("bar");
assert.deepEqual(
set.union(a, b),
new is.Or([a, b])
);
a = new is.GreaterThan(5);
b = new is.LessThan(5);
assert.deepEqual(
set.union(a, b),
new is.NotIn([5])
);
},
intersection: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThan(6);
assert.deepEqual(
set.intersection(a, b),
new is.And([a, b]),
"anded"
);
a = new is.GreaterThan("foo");
b = new is.LessThan("bar");
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.GreaterThan(20);
b = new is.LessThan(1);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThan(6);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThanEqual(6)
);
a = new is.GreaterThan(6);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(a, b),
a
);
a = new is.GreaterThan(5);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(a, b),
a
);
}
},
LessThan_GreaterThan: {
difference: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThan(6);
var res = set.difference(b, a);
assert.deepEqual(
res,
new is.LessThanEqual(5)
);
a = new is.GreaterThan(6);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(b, a),
b
);
a = new is.GreaterThan(5);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(b, a),
b
);
}
},
GreaterThan_LessThanEqual: {
union: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThanEqual(5);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.GreaterThan("foo");
b = new is.LessThanEqual("bar");
assert.deepEqual(
set.union(a, b),
new is.Or([a, b])
);
},
intersection: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThanEqual(6);
assert.deepEqual(
set.intersection(a, b),
new is.And([a, b])
);
a = new is.GreaterThan("foo");
b = new is.LessThanEqual("bar");
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.GreaterThan(5);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThanEqual(6);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThan(6)
);
a = new is.GreaterThan(6);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(a, b),
a
);
a = new is.GreaterThan(5);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(a, b),
a
);
}
},
LessThanEqual_GreaterThan: {
difference: function(assert) {
var a = new is.GreaterThan(5),
b = new is.LessThanEqual(6);
assert.deepEqual(
set.difference(b, a),
new is.LessThanEqual(5)
);
a = new is.GreaterThan(6);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(b, a),
b
);
a = new is.GreaterThan(5);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(b, a),
b
);
}
},
GreaterThan_And: {
union: function(assert) {
var a = new is.GreaterThan([10]);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
// TODO: This could be new is.GreaterThan(7)
assert.deepEqual(
set.union(a, b),
new is.GreaterThan(7)
);
a = new is.GreaterThan(3);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.union(a, b),
a
);
a = new is.GreaterThan(21);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.union(a, b),
new is.Or([a, b])
);
},
intersection: function(assert) {
var a = new is.GreaterThan(5);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
b
);
a = new is.GreaterThan(10);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
new is.And([new is.GreaterThan(10), new is.LessThan(20)])
);
a = new is.GreaterThan(25);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY,
"should be empty"
);
},
difference: function(assert) {
var a = new is.GreaterThan(5);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
new is.Or([
new is.And([a, new is.LessThanEqual(7)]),
new is.GreaterThanEqual(20)
]),
"wraps"
);
a = new is.GreaterThan(10);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThanEqual(20),
"in between"
);
a = new is.GreaterThan(25);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
a,
"outside"
);
}
},
And_GreaterThan: {
difference: function(assert) {
var a = new is.GreaterThan(5);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(b, a),
set.EMPTY,
"within"
);
a = new is.GreaterThan(10);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(b, a),
new is.And([new is.GreaterThan(7), new is.LessThanEqual(10)]),
"in between"
);
a = new is.GreaterThan(25);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(b, a),
b,
"outside"
);
}
},
GreaterThan_Or: {
union: function(assert) {
var a = new is.GreaterThan(10);
var b = new is.Or([new is.GreaterThan(20), new is.LessThan(7)]);
assert.deepEqual(
set.union(a, b),
new is.Or([new is.GreaterThan(10), new is.LessThan(7)])
);
a = new is.GreaterThan(3);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.GreaterThan(21);
assert.deepEqual(
set.union(a, b),
b
);
a = new is.GreaterThan(0);
b = new is.Or([new is.GreaterThan(7), new is.In([null])]);
assert.deepEqual(
set.union(a, b),
new is.Or([new is.In([null]), a]),
"union with a null"
);
},
intersection: function(assert) {
var a = new is.GreaterThan(10);
var b = new is.Or([new is.LessThan(7), new is.GreaterThan(20)]);
// TODO: This could be new is.GreaterThan(7)
assert.deepEqual(
set.intersection(a, b),
new is.GreaterThan(20)
);
a = new is.GreaterThan(3);
assert.deepEqual(
set.intersection(a, b),
new is.Or([new is.GreaterThan(20), new is.And([a, new is.LessThan(7)])])
);
a = new is.GreaterThan(21);
assert.deepEqual(
set.intersection(a, b),
a
);
},
difference: function(assert) {
var a = new is.GreaterThan(10);
var b = new is.Or([new is.LessThan(7), new is.GreaterThan(20)]);
// TODO: This could be new is.GreaterThan(7)
assert.deepEqual(
set.difference(a, b),
new is.And([a, new is.LessThanEqual(20)]),
"inside"
);
a = new is.GreaterThan(3);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.GreaterThanEqual(7), new is.LessThanEqual(20)]),
"left"
);
a = new is.GreaterThan(21);
assert.deepEqual(
set.difference(a, b),
set.EMPTY,
"right"
);
}
},
Or_GreaterThan: {
difference: function(assert) {
var a = new is.GreaterThan(10);
var b = new is.Or([new is.LessThan(7), new is.GreaterThan(20)]);
// TODO: This could be new is.GreaterThan(7)
assert.deepEqual(
set.difference(b, a),
new is.LessThan(7),
"inside"
);
a = new is.GreaterThan(3);
assert.deepEqual(
set.difference(b, a),
new is.LessThanEqual(3),
"left"
);
a = new is.GreaterThan(21);
assert.deepEqual(
set.difference(b, a),
new is.Or([
new is.LessThan(7),
new is.And([
new is.GreaterThan(20),
new is.LessThanEqual(21)
])
]),
"right"
);
}
},
// GreaterThanEqual
GreaterThanEqual_GreaterThanEqual: {
union: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.GreaterThanEqual(6);
assert.deepEqual(
set.union(a, b),
a
);
a = new is.GreaterThanEqual("foo");
b = new is.GreaterThanEqual("bar");
assert.deepEqual(
set.union(a, b),
b
);
},
intersection: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.GreaterThanEqual(6);
assert.deepEqual(
set.intersection(a, b),
b
);
a = new is.GreaterThanEqual("foo");
b = new is.GreaterThanEqual("bar");
assert.deepEqual(
set.intersection(a, b),
a
);
},
difference: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.GreaterThanEqual(6);
assert.deepEqual(
set.difference(a, b),
// AND( {$gte:5}, {$lt: 6} )
new is.And([a, new is.LessThan(6)])
// set.UNDEFINABLE
);
a = new is.GreaterThanEqual(5);
b = new is.GreaterThanEqual(6);
assert.deepEqual(
set.difference(b, a),
set.EMPTY
);
}
},
GreaterThanEqual_isMember: function(assert) {
assert.notOk(new is.GreaterThanEqual(5).isMember(4));
assert.ok(new is.GreaterThanEqual(5).isMember(5));
assert.ok(new is.GreaterThan(5).isMember(6));
},
UNIVERSAL_GreaterThanEqual: {
difference: function(assert) {
var a = new is.GreaterThanEqual(5);
assert.deepEqual(
set.difference(set.UNIVERSAL, a),
new is.LessThan(5)
);
}
},
GreaterThanEqual_LessThan: {
union: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThan(6);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.GreaterThanEqual("foo");
b = new is.LessThan("bar");
assert.deepEqual(
set.union(a, b),
new is.Or([a, b])
);
a = new is.GreaterThanEqual(5);
b = new is.LessThan(5);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
},
intersection: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThan(6);
assert.deepEqual(
set.intersection(a, b),
new is.And([a, b]),
"anded"
);
a = new is.GreaterThanEqual("foo");
b = new is.LessThan("bar");
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.GreaterThanEqual(20);
b = new is.LessThan(1);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.GreaterThanEqual(20);
b = new is.LessThan(20);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
},
difference: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThan(6);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThanEqual(6)
);
a = new is.GreaterThanEqual(6);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(a, b),
a
);
a = new is.GreaterThanEqual(5);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(a, b),
a
);
}
},
LessThan_GreaterThanEqual: {
difference: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThan(6);
assert.deepEqual(
set.difference(b, a),
new is.LessThan(5)
);
a = new is.GreaterThanEqual(6);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(b, a),
b
);
a = new is.GreaterThanEqual(5);
b = new is.LessThan(5);
assert.deepEqual(
set.difference(b, a),
b
);
}
},
GreaterThanEqual_LessThanEqual: {
union: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThanEqual(6);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.GreaterThanEqual("foo");
b = new is.LessThanEqual("bar");
assert.deepEqual(
set.union(a, b),
new is.Or([a, b])
);
a = new is.GreaterThanEqual(5);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
},
intersection: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThanEqual(6);
assert.deepEqual(
set.intersection(a, b),
new is.And([a, b]),
"anded"
);
a = new is.GreaterThanEqual("foo");
b = new is.LessThanEqual("bar");
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.GreaterThanEqual(20);
b = new is.LessThanEqual(1);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY
);
a = new is.GreaterThanEqual(5);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.intersection(a, b),
new is.In([5])
);
a = new is.GreaterThanEqual('foo');
b = new is.LessThanEqual('foo');
assert.deepEqual(
set.intersection(a, b),
new is.In(['foo'])
);
},
difference: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThanEqual(6);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThan(6)
);
a = new is.GreaterThanEqual(6);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(a, b),
a
);
a = new is.GreaterThanEqual(5);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThan(5)
);
}
},
LessThanEqual_GreaterThanEqual: {
difference: function(assert) {
var a = new is.GreaterThanEqual(5),
b = new is.LessThanEqual(6);
assert.deepEqual(
set.difference(b, a),
new is.LessThan(5)
);
a = new is.GreaterThanEqual(6);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(b, a),
b
);
a = new is.GreaterThanEqual(5);
b = new is.LessThanEqual(5);
assert.deepEqual(
set.difference(b, a),
new is.LessThan(5)
);
}
},
GreaterThanEqual_And: {
union: function(assert) {
var a = new is.GreaterThanEqual([10]);
var b = new is.And([new is.GreaterThanEqual(7), new is.LessThan(20)]);
// TODO: This could be new is.GreaterThan(7)
assert.deepEqual(
set.union(a, b),
new is.GreaterThanEqual(7)
);
a = new is.GreaterThanEqual(3);
assert.deepEqual(
set.union(a, b),
a
);
a = new is.GreaterThanEqual(21);
assert.deepEqual(
set.union(a, b),
new is.Or([a, b])
);
},
intersection: function(assert) {
var a = new is.GreaterThanEqual(5);
var b = new is.And([new is.GreaterThanEqual(7), new is.LessThan(20)]);
assert.deepEqual(
set.intersection(a, b),
b
);
a = new is.GreaterThanEqual(10);
assert.deepEqual(
set.intersection(a, b),
new is.And([new is.GreaterThanEqual(10), new is.LessThan(20)])
);
a = new is.GreaterThanEqual(25);
assert.deepEqual(
set.intersection(a, b),
set.EMPTY,
"should be empty"
);
},
difference: function(assert) {
var a = new is.GreaterThan(5);
var b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
new is.Or([
new is.And([a, new is.LessThanEqual(7)]),
new is.GreaterThanEqual(20)
]),
"wraps"
);
a = new is.GreaterThan(10);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
new is.GreaterThanEqual(20),
"in between"
);
a = new is.GreaterThan(25);
b = new is.And([new is.GreaterThan(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(a, b),
a,
"outside"
);
}
},
And_GreaterThanEqual: {
difference: function(assert) {
var a = new is.GreaterThanEqual(5);
var b = new is.And([new is.GreaterThanEqual(7), new is.LessThan(20)]);
assert.deepEqual(
set.difference(b, a),
set.EMPTY,
"within"
);
a = new is.GreaterThanEqual(10);
assert.deepEqual(
set.difference(b, a),
new is.And([new is.GreaterThanEqual(7), new is.LessThan(10)]),
"in between"
);
a = new is.GreaterThanEqual(25);
assert.deepEqual(
set.difference(b, a),
b,
"outside"
);
}
},
GreaterThanEqual_Or: {
union: function(assert) {
var a = new is.GreaterThanEqual(10);
var b = new is.Or([new is.GreaterThanEqual(20), new is.LessThan(7)]);
assert.deepEqual(
set.union(a, b),
new is.Or([new is.GreaterThanEqual(10), new is.LessThan(7)])
);
a = new is.GreaterThanEqual(3);
assert.deepEqual(
set.union(a, b),
set.UNIVERSAL
);
a = new is.GreaterThanEqual(21);
assert.deepEqual(
set.union(a, b),
b
);
a = new is.GreaterThanEqual(0);
b = new is.Or([new is.GreaterThanEqual(7), new is.In([null])]);
assert.deepEqual(
set.union(a, b),
new is.Or([new is.In([null]), a]),
"union with a null"
);
},
intersection: function(assert) {
var a = new is.GreaterThanEqual(10);
var b = new is.Or([new is.LessThan(7), new is.GreaterThanEqual(20)]);
// TODO: This could be new is.GreaterThan(7)
assert.deepEqual(
set.intersection(a, b),
new is.GreaterThanEqual(20)
);
a = new is.GreaterThanEqual(3);
assert.deepEqual(
set.intersection(a, b),
new is.Or([new is.GreaterThanEqual(20), new is.And([a, new is.LessThan(7)])])
);
a = new is.GreaterThanEqual(21);
assert.deepEqual(
set.intersection(a, b),
a
);
},
difference: function(assert) {
var a = new is.GreaterThanEqual(10);
var b = new is.Or([new is.LessThan(7), new is.GreaterThanEqual(20)]);
var res = set.difference(a, b);
assert.deepEqual(
res,
new is.And([a, new is.LessThan(20)]),
"inside"
);
a = new is.GreaterThan(3);
assert.deepEqual(
set.difference(a, b),
new is.And([new is.GreaterThanEqual(7), new is.LessThan(20)]),
"left"
);
a = new is.GreaterThanEqual(21);
assert.deepEqual(
set.difference(a, b),
set.EMPTY,
"right"
);
}
},
Or_GreaterThanEqual: {
difference: function(assert) {
var a = new is.GreaterThanEqual(10);
var b = new is.Or([new is.LessThan(7), new is.GreaterThanEqual(20)]);
// TODO: This could be new is.GreaterThan(7)
assert.deepEqual(
set.difference(b, a),
new is.LessThan(7),
"inside"
);
a = new is.GreaterThanEqual(3);
assert.deepEqual(
set.difference(b, a),
new is.LessThan(3),
"left"
);
a = new is.GreaterThanEqual(21);
assert.deepEqual(
set.difference(b, a),
new is.Or([
new is.LessThan(7),
new is.And([
new is.GreaterThanEqual(20),
new is.LessThan(21)
])
]),
"right"
);
}
},
// LessThan ==========================================
LessThan_LessThan: {
union: function(assert) {
var a = new is.LessThan(5),
b = new is.LessThan(6);
assert.deepEqual(
set.union(a, b),
b
);
a = new is.LessThan("foo");
b = new is.LessThan("bar");
assert.deepEqual(
set.union(a, b),
a
);
},
intersection: function(assert) {
var a = new is.LessThan(5),
b = new is.LessThan(6);
assert.deepEqual(
set.intersection(a, b),
a
);
a = new is.LessThan("foo");
b = new is.LessThan("bar");
assert.deepEqual(
set.intersection(a, b),
b
);
},
difference: function(assert) {
var a = new is.LessThan(5),
b = new is.LessThan(6);
assert.deepEqual(
set.difference(a, b),
set.EMPTY
);
assert.deepEqual(
set.difference(b, a),
// AND({lt: 6}, {gte: 5})
new is.And([b, new is.GreaterThanEqual(5)])
// set.UNDEFINABLE
);
}
},
LessThan_isMember: function(assert) {
assert.ok(new is.LessThan(5).isMember(4));
assert.notOk(new is.LessThan(5).isMember(5));
assert.notOk(new is.LessThan(5).isMember(6));
},
UNIVERSAL_LessThan: {
difference: function(assert) {
var a = new is.LessThan(5);
assert.deepEqual(
set.difference(set.UNIVERSAL, a),
new is.GreaterThanEq