This repository has been archived by the owner on Dec 25, 2018. It is now read-only.
/
Compare.js
66 lines (62 loc) · 2.13 KB
/
Compare.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*!
* @author electricessence / https://github.com/electricessence/
* Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md
*/
"use strict";
var Values = require("../../Compare");
var Types_1 = require("../../Types");
function validateSize(a, b) {
if (a && b && a === b || !a && !b) return true;
if (!a || !b) return false;
var len = a.length;
if (len !== b.length) return false;
if (len === 0) return true;
return len;
}
function areAllEqual(arrays, strict) {
var equalityComparer = arguments.length <= 2 || arguments[2] === undefined ? Values.areEqual : arguments[2];
if (!arrays) throw new Error("ArgumentNullException: 'arrays' cannot be null.");
if (arrays.length < 2) throw new Error("Cannot compare a set of arrays less than 2.");
var first = arrays[0];
for (var i = 0, l = arrays.length; i < l; i++) {
if (!areEqual(first, arrays[i], strict, equalityComparer)) return false;
}
return true;
}
exports.areAllEqual = areAllEqual;
function areEqual(a, b, strict) {
var equalityComparer = arguments.length <= 3 || arguments[3] === undefined ? Values.areEqual : arguments[3];
var len = validateSize(a, b);
if (Types_1.default.isBoolean(len)) return len;
for (var i = 0; i < len; i++) {
if (!equalityComparer(a[i], b[i], strict)) return false;
}
return true;
}
exports.areEqual = areEqual;
function sort(a, comparer) {
if (!a || a.length < 2) return a;
var len = a.length,
b;
if (len > 65536) b = new Array(len);else {
b = [];
b.length = len;
}
for (var i = 0; i < len; i++) {
b[i] = a[i];
}b.sort(comparer);
return b;
}
function areEquivalent(a, b) {
var comparer = arguments.length <= 2 || arguments[2] === undefined ? Values.compare : arguments[2];
var len = validateSize(a, b);
if (Types_1.default.isBoolean(len)) return len;
a = sort(a, comparer);
b = sort(b, comparer);
for (var i = 0; i < len; i++) {
if (comparer(a[i], b[i]) !== 0) return false;
}
return true;
}
exports.areEquivalent = areEquivalent;
//# sourceMappingURL=Compare.js.map