test.js
1.83 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
var test = require('tape');
var stable = require('./stable.js');
function cmp(a, b) {
if (a === b) return 0;
if (a > b) return 1;
return -1;
}
function gt(a, b) {
return a > b;
}
function diff(a, b) {
return a - b;
}
function objCmp(a, b) {
return a.x > b.x;
}
test('always returns a new array', function(t) {
var array;
array = [];
t.doesNotEqual(array, stable(array));
array = [1];
t.doesNotEqual(array, stable(array));
array = [1, 2];
t.doesNotEqual(array, stable(array));
t.end();
});
test('in-place always returns the same array', function(t) {
var array;
array = [];
t.equal(array, stable.inplace(array));
array = [1];
t.equal(array, stable.inplace(array));
array = [1, 2];
t.equal(array, stable.inplace(array));
t.end();
});
test('basic sorting', function(t) {
t.same(
stable(["foo", "bar", "baz"]),
["bar", "baz", "foo"]
);
t.same(
stable([9, 2, 10, 5, 4, 3, 0, 1, 8, 6, 7]),
[0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
);
t.end();
});
test('comparators', function(t) {
t.same(
stable([9, 2, 10, 5, 4, 3, 0, 1, 8, 6, 7], cmp),
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
);
t.same(
stable([9, 2, 10, 5, 4, 3, 0, 1, 8, 6, 7], gt),
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
);
t.same(
stable([9, 2, 10, 5, 4, 3, 0, 1, 8, 6, 7], diff),
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
);
t.same(
stable([{x:4}, {x:3}, {x:5}], objCmp),
[{x:3}, {x:4}, {x:5}]
);
t.end();
});
test('stable sorting', function(t) {
function cmp(a, b) {
return a.x > b.x;
}
t.same(
stable([{x:3,y:1}, {x:4,y:2}, {x:3,y:3}, {x:5,y:4}, {x:3,y:5}], cmp),
[{x:3,y:1}, {x:3,y:3}, {x:3,y:5}, {x:4,y:2}, {x:5,y:4}]
);
t.end();
});