|
1 require("../env"); |
|
2 require("../../d3"); |
|
3 |
|
4 var vows = require("vows"), |
|
5 assert = require("assert"); |
|
6 |
|
7 var suite = vows.describe("d3.scale.quantile"); |
|
8 |
|
9 suite.addBatch({ |
|
10 "quantile": { |
|
11 topic: function() { |
|
12 return d3.scale.quantile; |
|
13 }, |
|
14 "has the empty domain by default": function(quantile) { |
|
15 assert.isEmpty(quantile().domain()); |
|
16 }, |
|
17 "has the empty range by default": function(quantile) { |
|
18 assert.isEmpty(quantile().range()); |
|
19 }, |
|
20 "uses the R-7 algorithm to compute quantiles": function(quantile) { |
|
21 var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]); |
|
22 assert.deepEqual([3, 6, 6.9, 7, 7.1].map(x), [0, 0, 0, 0, 0]); |
|
23 assert.deepEqual([8, 8.9].map(x), [1, 1]); |
|
24 assert.deepEqual([9, 9.1, 10, 13].map(x), [2, 2, 2, 2]); |
|
25 assert.deepEqual([14.9, 15, 15.1, 16, 20].map(x), [3, 3, 3, 3, 3]); |
|
26 var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]); |
|
27 assert.deepEqual([3, 6, 6.9, 7, 7.1].map(x), [0, 0, 0, 0, 0]); |
|
28 assert.deepEqual([8, 8.9].map(x), [1, 1]); |
|
29 assert.deepEqual([9, 9.1, 10, 13].map(x), [2, 2, 2, 2]); |
|
30 assert.deepEqual([14.9, 15, 15.1, 16, 20].map(x), [3, 3, 3, 3, 3]); |
|
31 }, |
|
32 "domain values are sorted in ascending order": function(quantile) { |
|
33 var x = d3.scale.quantile().domain([6, 3, 7, 8, 8, 13, 20, 15, 16, 10]); |
|
34 assert.deepEqual(x.domain(), [3, 6, 7, 8, 8, 10, 13, 15, 16, 20]); |
|
35 }, |
|
36 "non-numeric domain values are ignored": function(quantile) { |
|
37 var x = d3.scale.quantile().domain([6, 3, NaN, undefined, 7, 8, 8, 13, 20, 15, 16, 10, NaN]); |
|
38 assert.deepEqual(x.domain(), [3, 6, 7, 8, 8, 10, 13, 15, 16, 20]); |
|
39 }, |
|
40 "quantiles returns the inner thresholds": function(quantile) { |
|
41 var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]); |
|
42 assert.deepEqual(x.quantiles(), [7.25, 9, 14.5]); |
|
43 var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]); |
|
44 assert.deepEqual(x.quantiles(), [7.5, 9, 14]); |
|
45 }, |
|
46 "range cardinality determines the number of quantiles": function(quantile) { |
|
47 var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]);; |
|
48 assert.deepEqual(x.range([0, 1, 2, 3]).quantiles(), [7.25, 9, 14.5]); |
|
49 assert.deepEqual(x.range([0, 1]).quantiles(), [9]); |
|
50 assert.deepEqual(x.range([,,,,,]).quantiles(), [6.8, 8, 11.2, 15.2]); |
|
51 assert.deepEqual(x.range([,,,,,,]).quantiles(), [6.5, 8, 9, 13, 15.5]); |
|
52 }, |
|
53 "range values are arbitrary": function(quantile) { |
|
54 var a = new Object(), b = new Object(), c = new Object(); |
|
55 var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]).range([a, b, c, a]); |
|
56 assert.deepEqual([3, 6, 6.9, 7, 7.1].map(x), [a, a, a, a, a]); |
|
57 assert.deepEqual([8, 8.9].map(x), [b, b]); |
|
58 assert.deepEqual([9, 9.1, 10, 13].map(x), [c, c, c, c]); |
|
59 assert.deepEqual([14.9, 15, 15.1, 16, 20].map(x), [a, a, a, a, a]); |
|
60 } |
|
61 } |
|
62 }); |
|
63 |
|
64 suite.export(module); |