menge
Version:
Minimalist set theory operations for Array-like objects in less than 1KB
51 lines (40 loc) • 1.46 kB
JavaScript
var assert = require("assert");
var LIST1 = ["foo", "bar", "baz", "qux"];
var LIST2 = ["foo", "baz", "hoge"];
var LIST3 = ["bar", "qux"];
var testjs = __filename.replace(/^.*\//, "");
var mengejs = process.env.MENGEJS || "../menge.js";
var short = mengejs.replace(/^.*\//, "");
describe(testjs + " with " + short + " tests", function() {
var menge = require(mengejs);
it("except(source, target, dest)", function() {
var source = new ArrayLike(LIST1);
var target = new ArrayLike(LIST2);
var dest = [];
var result = menge.except(source, target, dest);
assert.equal(dest, result);
assert.equal(join(LIST3), join(result));
assert.equal(4, source.length); // not breaking
assert.equal(3, target.length);
assert.equal(2, result.length);
assert.equal(2, dest.length);
});
it("except(source, target)", function() {
var source = new ArrayLike(LIST1);
var target = new ArrayLike(LIST2);
var result = menge.except(source, target);
assert.equal(source, result);
assert.equal(join(LIST3), join(result));
assert.equal(2, source.length); // breaking
assert.equal(3, target.length);
assert.equal(2, result.length);
});
});
function ArrayLike(array) {
if (!(this instanceof ArrayLike)) return new ArrayLike(array);
Array.prototype.push.apply(this, array);
}
function join(array) {
return Array.prototype.join.call(array, ",");
}