You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.5 KiB
69 lines
2.5 KiB
import {emptyCompare, typedCompare} from 'app/common/SortFunc';
|
|
import {assert} from 'chai';
|
|
import {format} from 'util';
|
|
|
|
describe('SortFunc', function() {
|
|
it('should be transitive for values of different types', function() {
|
|
const values = [
|
|
-10, 0, 2, 10.5,
|
|
null,
|
|
["a"], ["b"], ["b", 1], ["b", 1, 2], ["b", 1, "10"], ["c"],
|
|
"10.5", "2", "a",
|
|
undefined as any,
|
|
];
|
|
|
|
// Check that sorting works as expected (the values above are already sorted).
|
|
const sorted = values.slice(0);
|
|
sorted.sort(typedCompare);
|
|
assert.deepEqual(sorted, values);
|
|
|
|
// Check comparisons between each possible pair of values above.
|
|
for (let i = 0; i < values.length; i++) {
|
|
assert.equal(typedCompare(values[i], values[i]), 0, `Expected ${format(values[i])} == ${format(values[i])}`);
|
|
for (let j = i + 1; j < values.length; j++) {
|
|
assert.equal(typedCompare(values[i], values[j]), -1, `Expected ${format(values[i])} < ${format(values[j])}`);
|
|
assert.equal(typedCompare(values[j], values[i]), 1, `Expected ${format(values[j])} > ${format(values[i])}`);
|
|
}
|
|
}
|
|
});
|
|
|
|
it('typedCompare should treat empty values as equal', function() {
|
|
assert.equal(typedCompare(null, null), 0);
|
|
assert.equal(typedCompare('', ''), 0);
|
|
});
|
|
|
|
describe('emptyCompare', function() {
|
|
|
|
it('should work correctly ', function() {
|
|
const comparator = emptyCompare(typedCompare);
|
|
assert.equal(comparator(null, null), 0);
|
|
assert.equal(comparator('', ''), 0);
|
|
|
|
assert.equal(comparator(null, 0), 1);
|
|
assert.equal(comparator(null, -1), 1);
|
|
assert.equal(comparator(null, 1), 1);
|
|
assert.equal(comparator(null, 'a'), 1);
|
|
assert.equal(comparator(null, 'z'), 1);
|
|
|
|
assert.equal(comparator(0, null), -1);
|
|
assert.equal(comparator(-1, null), -1);
|
|
assert.equal(comparator(1, null), -1);
|
|
assert.equal(comparator('a', null), -1);
|
|
assert.equal(comparator('z', null), -1);
|
|
});
|
|
|
|
it('should keep sorting order consistent amongst empty values', function() {
|
|
// values1 and values2 have same values but in different order. Sorting them with emptyCompare
|
|
// function should yield same results.
|
|
const values1 = ['', null, undefined, 2, 3, 4];
|
|
const values2 = [undefined, null, '', 2, 3, 4];
|
|
const comparator = emptyCompare(typedCompare);
|
|
values1.sort(comparator);
|
|
values2.sort(comparator);
|
|
assert.deepEqual(values1, values2);
|
|
});
|
|
|
|
});
|
|
|
|
});
|