This commit is contained in:
Mike Bostock 2011-08-15 16:25:39 -07:00
Родитель d6f4b2a299
Коммит cdfbca94a5
3 изменённых файлов: 64 добавлений и 247 удалений

Просмотреть файл

@ -0,0 +1,64 @@
require("../env");
require("../../d3");
var vows = require("vows"),
assert = require("assert");
var suite = vows.describe("d3.scale.quantile");
suite.addBatch({
"quantile": {
topic: function() {
return d3.scale.quantile;
},
"has the empty domain by default": function(quantile) {
assert.isEmpty(quantile().domain());
},
"has the empty range by default": function(quantile) {
assert.isEmpty(quantile().range());
},
"uses the R-7 algorithm to compute quantiles": function(quantile) {
var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]);
assert.deepEqual([3, 6, 6.9, 7, 7.1].map(x), [0, 0, 0, 0, 0]);
assert.deepEqual([8, 8.9].map(x), [1, 1]);
assert.deepEqual([9, 9.1, 10, 13].map(x), [2, 2, 2, 2]);
assert.deepEqual([14.9, 15, 15.1, 16, 20].map(x), [3, 3, 3, 3, 3]);
var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]);
assert.deepEqual([3, 6, 6.9, 7, 7.1].map(x), [0, 0, 0, 0, 0]);
assert.deepEqual([8, 8.9].map(x), [1, 1]);
assert.deepEqual([9, 9.1, 10, 13].map(x), [2, 2, 2, 2]);
assert.deepEqual([14.9, 15, 15.1, 16, 20].map(x), [3, 3, 3, 3, 3]);
},
"domain values are sorted in ascending order": function(quantile) {
var x = d3.scale.quantile().domain([6, 3, 7, 8, 8, 13, 20, 15, 16, 10]);
assert.deepEqual(x.domain(), [3, 6, 7, 8, 8, 10, 13, 15, 16, 20]);
},
"non-numeric domain values are ignored": function(quantile) {
var x = d3.scale.quantile().domain([6, 3, NaN, undefined, 7, 8, 8, 13, 20, 15, 16, 10, NaN]);
assert.deepEqual(x.domain(), [3, 6, 7, 8, 8, 10, 13, 15, 16, 20]);
},
"quantiles returns the inner thresholds": function(quantile) {
var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]);
assert.deepEqual(x.quantiles(), [7.25, 9, 14.5]);
var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20]).range([0, 1, 2, 3]);
assert.deepEqual(x.quantiles(), [7.5, 9, 14]);
},
"range cardinality determines the number of quantiles": function(quantile) {
var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]);;
assert.deepEqual(x.range([0, 1, 2, 3]).quantiles(), [7.25, 9, 14.5]);
assert.deepEqual(x.range([0, 1]).quantiles(), [9]);
assert.deepEqual(x.range([,,,,,]).quantiles(), [6.8, 8, 11.2, 15.2]);
assert.deepEqual(x.range([,,,,,,]).quantiles(), [6.5, 8, 9, 13, 15.5]);
},
"range values are arbitrary": function(quantile) {
var a = new Object(), b = new Object(), c = new Object();
var x = d3.scale.quantile().domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20]).range([a, b, c, a]);
assert.deepEqual([3, 6, 6.9, 7, 7.1].map(x), [a, a, a, a, a]);
assert.deepEqual([8, 8.9].map(x), [b, b]);
assert.deepEqual([9, 9.1, 10, 13].map(x), [c, c, c, c]);
assert.deepEqual([14.9, 15, 15.1, 16, 20].map(x), [a, a, a, a, a]);
}
}
});
suite.export(module);

Просмотреть файл

@ -1,142 +0,0 @@
require("./../../lib/env-js/envjs/node");
require("./../../d3");
var x = d3.scale.quantile()
.domain([3, 6, 7, 8, 8, 10, 13, 15, 16, 20])
.range([0, 1, 2, 3]);
console.log("domain(3, 6, 7, 8, 8, 10, 13, 15, 16, 20).range(0, 1, 2, 3):");
console.log(" quantiles -> " + x.quantiles());
console.log(" 3 -> " + x(3));
console.log(" 6 -> " + x(6));
console.log(" 6.9 -> " + x(6.9));
console.log(" 7 -> " + x(7));
console.log(" 7.1 -> " + x(7.1));
console.log(" 8 -> " + x(8));
console.log(" 8.9 -> " + x(8.9));
console.log(" 9 -> " + x(9));
console.log(" 9.1 -> " + x(9.1));
console.log(" 10 -> " + x(10));
console.log(" 13 -> " + x(13));
console.log(" 14.9 -> " + x(14.9));
console.log(" 15 -> " + x(15));
console.log(" 15.1 -> " + x(15.1));
console.log(" 16 -> " + x(16));
console.log(" 20 -> " + x(20));
console.log("");
var x = d3.scale.quantile()
.domain([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20])
.range([0, 1, 2, 3]);
console.log("domain(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20).range(0, 1, 2, 3):");
console.log(" quantiles -> " + x.quantiles());
console.log(" 3 -> " + x(3));
console.log(" 6 -> " + x(6));
console.log(" 6.9 -> " + x(6.9));
console.log(" 7 -> " + x(7));
console.log(" 7.1 -> " + x(7.1));
console.log(" 8 -> " + x(8));
console.log(" 8.9 -> " + x(8.9));
console.log(" 9 -> " + x(9));
console.log(" 9.1 -> " + x(9.1));
console.log(" 10 -> " + x(10));
console.log(" 13 -> " + x(13));
console.log(" 14.9 -> " + x(14.9));
console.log(" 15 -> " + x(15));
console.log(" 15.1 -> " + x(15.1));
console.log(" 16 -> " + x(16));
console.log(" 20 -> " + x(20));
console.log("");
var x = d3.scale.quantile()
.domain([0, 1])
.range([0, 1]);
console.log("domain(0, 1).range(0, 1):");
console.log(" quantiles -> " + x.quantiles());
console.log(" -.5 -> " + x(-.5));
console.log(" 0 -> " + x(0));
console.log(" .49 -> " + x(.49));
console.log(" .51 -> " + x(.51));
console.log(" 1 -> " + x(1));
console.log(" 1.5 -> " + x(1.5));
console.log("");
var x = d3.scale.quantile()
.domain([1, 2, 3, 4])
.range(["a", "b"]);
console.log("domain(1, 2, 3, 4).range(a, b):");
console.log(" quantiles -> " + x.quantiles());
console.log(" 0 -> " + x(0));
console.log(" 1 -> " + x(1));
console.log(" 2 -> " + x(2));
console.log(" 2.49 -> " + x(2.49));
console.log(" 2.51 -> " + x(2.51));
console.log(" 3 -> " + x(3));
console.log(" 4 -> " + x(4));
console.log(" 5 -> " + x(5));
console.log("");
var x = d3.scale.quantile()
.domain([1, 2, 3, 4])
.range(["a", "b", "c"]);
console.log("domain(1, 2, 3, 4).range(a, b, c):");
console.log(" quantiles -> " + x.quantiles());
console.log(" 0 -> " + x(0));
console.log(" 1 -> " + x(1));
console.log(" 1.9 -> " + x(1.9));
console.log(" 2 -> " + x(2));
console.log(" 2.1 -> " + x(2.1));
console.log(" 2.9 -> " + x(2.9));
console.log(" 3 -> " + x(3));
console.log(" 3.1 -> " + x(3.1));
console.log(" 4 -> " + x(4));
console.log(" 5 -> " + x(5));
console.log("");
var x = d3.scale.quantile()
.domain([1, 1, 2, 2, 3, 3, 4, 4])
.range(["a", "b", "c", "d"]);
console.log("domain(1, 1, 2, 2, 3, 3, 4, 4).range(a, b, c, d):");
console.log(" quantiles -> " + x.quantiles());
console.log(" 0 -> " + x(0));
console.log(" 1 -> " + x(1));
console.log(" 1.49 -> " + x(1.49));
console.log(" 1.51 -> " + x(1.51));
console.log(" 2 -> " + x(2));
console.log(" 2.49 -> " + x(2.49));
console.log(" 2.51 -> " + x(2.51));
console.log(" 3 -> " + x(3));
console.log(" 3.49 -> " + x(3.49));
console.log(" 3.51 -> " + x(3.51));
console.log(" 4 -> " + x(4));
console.log(" 5 -> " + x(5));
console.log("");
var x = d3.scale.quantile()
.domain([1, 2, 3, 4, 5, 6, 7, 8])
.range(["a", "b", "c", "d"]);
console.log("domain(1, 2, 3, 4, 5, 6, 7, 8).range(a, b, c, d):");
console.log(" quantiles -> " + x.quantiles());
console.log(" 0 -> " + x(0));
console.log(" 1 -> " + x(1));
console.log(" 2 -> " + x(2));
console.log(" 2.49 -> " + x(2.49));
console.log(" 2.51 -> " + x(2.51));
console.log(" 3 -> " + x(3));
console.log(" 4 -> " + x(4));
console.log(" 4.49 -> " + x(4.49));
console.log(" 4.51 -> " + x(4.51));
console.log(" 5 -> " + x(5));
console.log(" 6 -> " + x(6));
console.log(" 6.49 -> " + x(6.49));
console.log(" 6.51 -> " + x(6.51));
console.log(" 7 -> " + x(7));
console.log(" 8 -> " + x(8));
console.log(" 9 -> " + x(9));
console.log("");

Просмотреть файл

@ -1,105 +0,0 @@
domain(3, 6, 7, 8, 8, 10, 13, 15, 16, 20).range(0, 1, 2, 3):
quantiles -> 7.25,9,14.5
3 -> 0
6 -> 0
6.9 -> 0
7 -> 0
7.1 -> 0
8 -> 1
8.9 -> 1
9 -> 2
9.1 -> 2
10 -> 2
13 -> 2
14.9 -> 3
15 -> 3
15.1 -> 3
16 -> 3
20 -> 3
domain(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20).range(0, 1, 2, 3):
quantiles -> 7.5,9,14
3 -> 0
6 -> 0
6.9 -> 0
7 -> 0
7.1 -> 0
8 -> 1
8.9 -> 1
9 -> 2
9.1 -> 2
10 -> 2
13 -> 2
14.9 -> 3
15 -> 3
15.1 -> 3
16 -> 3
20 -> 3
domain(0, 1).range(0, 1):
quantiles -> 0.5
-.5 -> 0
0 -> 0
.49 -> 0
.51 -> 1
1 -> 1
1.5 -> 1
domain(1, 2, 3, 4).range(a, b):
quantiles -> 2.5
0 -> a
1 -> a
2 -> a
2.49 -> a
2.51 -> b
3 -> b
4 -> b
5 -> b
domain(1, 2, 3, 4).range(a, b, c):
quantiles -> 2,3
0 -> a
1 -> a
1.9 -> a
2 -> b
2.1 -> b
2.9 -> b
3 -> c
3.1 -> c
4 -> c
5 -> c
domain(1, 1, 2, 2, 3, 3, 4, 4).range(a, b, c, d):
quantiles -> 1.75,2.5,3.25
0 -> a
1 -> a
1.49 -> a
1.51 -> a
2 -> b
2.49 -> b
2.51 -> c
3 -> c
3.49 -> d
3.51 -> d
4 -> d
5 -> d
domain(1, 2, 3, 4, 5, 6, 7, 8).range(a, b, c, d):
quantiles -> 2.75,4.5,6.25
0 -> a
1 -> a
2 -> a
2.49 -> a
2.51 -> a
3 -> b
4 -> b
4.49 -> b
4.51 -> c
5 -> c
6 -> c
6.49 -> d
6.51 -> d
7 -> d
8 -> d
9 -> d