Skip to content

Commit f997283

Browse files
committed
Updating sort function to handle null value case
Changing sort transform tests to include null value
1 parent 22dd9c1 commit f997283

File tree

2 files changed

+80
-59
lines changed

2 files changed

+80
-59
lines changed

src/transforms/sort.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,22 @@ function getIndices(opts, targetArray, d2c, len) {
136136
function getSortFunc(opts, d2c) {
137137
switch(opts.order) {
138138
case 'ascending':
139-
return function(a, b) { return d2c(a.v) - d2c(b.v); };
139+
return function(a, b) {
140+
if(a.v === null) {
141+
return -1;
142+
} else if(b.v === null) {
143+
return 1;
144+
}
145+
return d2c(a.v) - d2c(b.v);
146+
};
140147
case 'descending':
141-
return function(a, b) { return d2c(b.v) - d2c(a.v); };
148+
return function(a, b) {
149+
if(a.v === null) {
150+
return 1;
151+
} else if(b.v === null) {
152+
return -1;
153+
}
154+
return d2c(b.v) - d2c(a.v);
155+
};
142156
}
143157
}

test/jasmine/tests/transform_sort_test.js

+64-57
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ describe('Test sort transform defaults:', function() {
5858

5959
describe('Test sort transform calc:', function() {
6060
var base = {
61-
x: [-2, -1, -2, 0, 1, 3, 1],
62-
y: [1, 2, 3, 1, 2, 3, 1],
63-
ids: ['n0', 'n1', 'n2', 'z', 'p1', 'p2', 'p3'],
61+
x: [-2, -1, -2, 0, 1, 3, null, 1],
62+
y: [1, 2, 3, 1, 2, 3, 4, 1],
63+
ids: ['n0', 'n1', 'n2', 'z', 'p1', 'p2', 'n3', 'p3'],
6464
marker: {
65-
color: [0.1, 0.2, 0.3, 0.1, 0.2, 0.3, 0.4],
66-
size: [10, 20, 5, 1, 6, 0, 10]
65+
color: [0.1, 0.2, 0.3, 0.1, 0.2, 0.3, 0.4, 0.4],
66+
size: [10, 20, 5, 1, 6, 0, 3, 10]
6767
},
6868
transforms: [{ type: 'sort' }]
6969
};
@@ -89,21 +89,26 @@ describe('Test sort transform calc:', function() {
8989
}
9090

9191
it('should sort all array attributes (ascending case)', function() {
92-
var out = _transform([extend({})]);
92+
var out = _transform([extend({
93+
transforms: [{
94+
order: 'ascending'
95+
}]
96+
})]);
9397

94-
expect(out[0].x).toEqual([-2, -2, -1, 0, 1, 1, 3]);
95-
expect(out[0].y).toEqual([1, 3, 2, 1, 2, 1, 3]);
96-
expect(out[0].ids).toEqual(['n0', 'n2', 'n1', 'z', 'p1', 'p3', 'p2']);
97-
expect(out[0].marker.color).toEqual([0.1, 0.3, 0.2, 0.1, 0.2, 0.4, 0.3]);
98-
expect(out[0].marker.size).toEqual([10, 5, 20, 1, 6, 10, 0]);
98+
expect(out[0].x).toEqual([null, -2, -2, -1, 0, 1, 1, 3]);
99+
expect(out[0].y).toEqual([4, 1, 3, 2, 1, 2, 1, 3]);
100+
expect(out[0].ids).toEqual(['n3', 'n0', 'n2', 'n1', 'z', 'p1', 'p3', 'p2']);
101+
expect(out[0].marker.color).toEqual([0.4, 0.1, 0.3, 0.2, 0.1, 0.2, 0.4, 0.3]);
102+
expect(out[0].marker.size).toEqual([3, 10, 5, 20, 1, 6, 10, 0]);
99103
expect(out[0].transforms[0]._indexToPoints).toEqual({
100-
0: [0],
101-
1: [2],
102-
2: [1],
103-
3: [3],
104-
4: [4],
105-
5: [6],
106-
6: [5]
104+
0: [6],
105+
1: [0],
106+
2: [2],
107+
3: [1],
108+
4: [3],
109+
5: [4],
110+
6: [7],
111+
7: [5],
107112
});
108113
});
109114

@@ -114,19 +119,20 @@ describe('Test sort transform calc:', function() {
114119
}]
115120
})]);
116121

117-
expect(out[0].x).toEqual([3, 1, 1, 0, -1, -2, -2]);
118-
expect(out[0].y).toEqual([3, 2, 1, 1, 2, 1, 3]);
119-
expect(out[0].ids).toEqual(['p2', 'p1', 'p3', 'z', 'n1', 'n0', 'n2']);
120-
expect(out[0].marker.color).toEqual([0.3, 0.2, 0.4, 0.1, 0.2, 0.1, 0.3]);
121-
expect(out[0].marker.size).toEqual([0, 6, 10, 1, 20, 10, 5]);
122+
expect(out[0].x).toEqual([3, 1, 1, 0, -1, -2, -2, null]);
123+
expect(out[0].y).toEqual([3, 2, 1, 1, 2, 1, 3, 4]);
124+
expect(out[0].ids).toEqual(['p2', 'p1', 'p3', 'z', 'n1', 'n0', 'n2', 'n3']);
125+
expect(out[0].marker.color).toEqual([0.3, 0.2, 0.4, 0.1, 0.2, 0.1, 0.3, 0.4]);
126+
expect(out[0].marker.size).toEqual([0, 6, 10, 1, 20, 10, 5, 3]);
122127
expect(out[0].transforms[0]._indexToPoints).toEqual({
123128
0: [5],
124129
1: [4],
125-
2: [6],
130+
2: [7],
126131
3: [3],
127132
4: [1],
128133
5: [0],
129-
6: [2]
134+
6: [2],
135+
7: [6]
130136
});
131137
});
132138

@@ -138,19 +144,20 @@ describe('Test sort transform calc:', function() {
138144
}]
139145
})]);
140146

141-
expect(out[0].x).toEqual([-1, -2, 1, 1, -2, 0, 3]);
142-
expect(out[0].y).toEqual([2, 1, 1, 2, 3, 1, 3]);
143-
expect(out[0].ids).toEqual(['n1', 'n0', 'p3', 'p1', 'n2', 'z', 'p2']);
144-
expect(out[0].marker.color).toEqual([0.2, 0.1, 0.4, 0.2, 0.3, 0.1, 0.3]);
145-
expect(out[0].marker.size).toEqual([20, 10, 10, 6, 5, 1, 0]);
147+
expect(out[0].x).toEqual([-1, -2, 1, 1, -2, null, 0, 3]);
148+
expect(out[0].y).toEqual([2, 1, 1, 2, 3, 4, 1, 3]);
149+
expect(out[0].ids).toEqual(['n1', 'n0', 'p3', 'p1', 'n2', 'n3', 'z', 'p2']);
150+
expect(out[0].marker.color).toEqual([0.2, 0.1, 0.4, 0.2, 0.3, 0.4, 0.1, 0.3]);
151+
expect(out[0].marker.size).toEqual([20, 10, 10, 6, 5, 3, 1, 0]);
146152
expect(out[0].transforms[0]._indexToPoints).toEqual({
147153
0: [1],
148154
1: [0],
149-
2: [6],
155+
2: [7],
150156
3: [4],
151157
4: [2],
152-
5: [3],
153-
6: [5]
158+
5: [6],
159+
6: [3],
160+
7: [5],
154161
});
155162
});
156163

@@ -175,25 +182,25 @@ describe('Test sort transform calc:', function() {
175182

176183
var out = _transform([trace]);
177184

178-
expect(out[0].x).toEqual(['F', 'D', 'C', 'E', 'A', 'G', 'B']);
179-
expect(out[0].y).toEqual([3, 1, 3, 2, 1, 1, 2]);
180-
expect(out[0].ids).toEqual(['p2', 'z', 'n2', 'p1', 'n0', 'p3', 'n1']);
181-
expect(out[0].marker.size).toEqual([0, 1, 5, 6, 10, 10, 20]);
182-
expect(out[0].marker.color).toEqual([0.3, 0.1, 0.3, 0.2, 0.1, 0.4, 0.2]);
185+
expect(out[0].x).toEqual(['F', 'D', 'G', 'C', 'E', 'A', 'H', 'B']);
186+
expect(out[0].y).toEqual([3, 1, 4, 3, 2, 1, 1, 2]);
187+
expect(out[0].ids).toEqual(['p2', 'z', 'n3', 'n2', 'p1', 'n0', 'p3', 'n1']);
188+
expect(out[0].marker.size).toEqual([0, 1, 3, 5, 6, 10, 10, 20]);
189+
expect(out[0].marker.color).toEqual([0.3, 0.1, 0.4, 0.3, 0.2, 0.1, 0.4, 0.2]);
183190
});
184191

185192
it('should sort via custom targets', function() {
186193
var out = _transform([extend({
187194
transforms: [{
188-
target: [10, 20, 30, 10, 20, 30, 0]
195+
target: [10, 20, 30, 10, 20, 30, null, 0]
189196
}]
190197
})]);
191198

192-
expect(out[0].x).toEqual([1, -2, 0, -1, 1, -2, 3]);
193-
expect(out[0].y).toEqual([1, 1, 1, 2, 2, 3, 3]);
194-
expect(out[0].ids).toEqual(['p3', 'n0', 'z', 'n1', 'p1', 'n2', 'p2']);
195-
expect(out[0].marker.color).toEqual([0.4, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3]);
196-
expect(out[0].marker.size).toEqual([10, 10, 1, 20, 6, 5, 0]);
199+
expect(out[0].x).toEqual([null, 1, -2, 0, -1, 1, -2, 3]);
200+
expect(out[0].y).toEqual([4, 1, 1, 1, 2, 2, 3, 3]);
201+
expect(out[0].ids).toEqual(['n3', 'p3', 'n0', 'z', 'n1', 'p1', 'n2', 'p2']);
202+
expect(out[0].marker.color).toEqual([0.4, 0.4, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3]);
203+
expect(out[0].marker.size).toEqual([3, 10, 10, 1, 20, 6, 5, 0]);
197204
});
198205

199206
it('should truncate transformed arrays to target array length (short target case)', function() {
@@ -237,19 +244,19 @@ describe('Test sort transform calc:', function() {
237244
transforms: [{ target: 'text' }]
238245
})]);
239246

240-
expect(out[0].x).toEqual([1, -2, 3, -1, 1, -2, 0]);
241-
expect(out[0].y).toEqual([1, 3, 3, 2, 2, 1, 1]);
242-
expect(out[0].ids).toEqual(['p3', 'n2', 'p2', 'n1', 'p1', 'n0', 'z']);
243-
expect(out[0].marker.color).toEqual([0.4, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1]);
244-
expect(out[0].marker.size).toEqual([10, 5, 0, 20, 6, 10, 1]);
245-
expect(out[0]._length).toBe(7);
246-
247-
expect(out[1].x).toEqual([-2, -1, -2, 0, 1, 3, 1]);
248-
expect(out[1].y).toEqual([1, 2, 3, 1, 2, 3, 1]);
249-
expect(out[1].ids).toEqual(['n0', 'n1', 'n2', 'z', 'p1', 'p2', 'p3']);
250-
expect(out[1].marker.color).toEqual([0.1, 0.2, 0.3, 0.1, 0.2, 0.3, 0.4]);
251-
expect(out[1].marker.size).toEqual([10, 20, 5, 1, 6, 0, 10]);
252-
expect(out[1]._length).toBe(7);
247+
expect(out[0].x).toEqual([null, -2, 3, -1, 1, -2, 0, 1]);
248+
expect(out[0].y).toEqual([4, 3, 3, 2, 2, 1, 1, 1]);
249+
expect(out[0].ids).toEqual(['n3', 'n2', 'p2', 'n1', 'p1', 'n0', 'z', 'p3']);
250+
expect(out[0].marker.color).toEqual([0.4, 0.3, 0.3, 0.2, 0.2, 0.1, 0.1, 0.4]);
251+
expect(out[0].marker.size).toEqual([3, 5, 0, 20, 6, 10, 1, 10]);
252+
expect(out[0]._length).toBe(8);
253+
254+
expect(out[1].x).toEqual([-2, -1, -2, 0, 1, 3, null, 1]);
255+
expect(out[1].y).toEqual([1, 2, 3, 1, 2, 3, 4, 1]);
256+
expect(out[1].ids).toEqual(['n0', 'n1', 'n2', 'z', 'p1', 'p2', 'n3', 'p3']);
257+
expect(out[1].marker.color).toEqual([0.1, 0.2, 0.3, 0.1, 0.2, 0.3, 0.4, 0.4]);
258+
expect(out[1].marker.size).toEqual([10, 20, 5, 1, 6, 0, 3, 10]);
259+
expect(out[1]._length).toBe(8);
253260
});
254261
});
255262

0 commit comments

Comments
 (0)