Add test for scale.pow.
This commit is contained in:
Родитель
780bf7cc07
Коммит
0872e949ba
|
@ -0,0 +1,176 @@
|
|||
require("../env");
|
||||
require("../../d3");
|
||||
|
||||
var vows = require("vows"),
|
||||
assert = require("assert");
|
||||
|
||||
var suite = vows.describe("d3.scale.pow");
|
||||
|
||||
suite.addBatch({
|
||||
"pow": {
|
||||
topic: function() {
|
||||
return d3.scale.pow;
|
||||
},
|
||||
"has the default domain [0, 1]": function(pow) {
|
||||
var x = pow();
|
||||
assert.deepEqual(x.domain(), [0, 1]);
|
||||
assert.inDelta(x(.5), .5, 1e-6);
|
||||
},
|
||||
"has the default range [0, 1]": function(pow) {
|
||||
var x = pow();
|
||||
assert.deepEqual(x.range(), [0, 1]);
|
||||
assert.inDelta(x.invert(.5), .5, 1e-6);
|
||||
},
|
||||
"has the default exponent 1": function(pow) {
|
||||
var x = pow();
|
||||
assert.equal(x.exponent(), 1);
|
||||
},
|
||||
"has the default interpolator d3.interpolate": function(pow) {
|
||||
var x = pow().range(["red", "blue"]);
|
||||
assert.equal(x.interpolate(), d3.interpolate);
|
||||
assert.equal(x(.5), "rgb(128,0,128)");
|
||||
},
|
||||
"does not clamp by default": function(pow) {
|
||||
var x = pow();
|
||||
assert.isFalse(x.clamp());
|
||||
assert.inDelta(x(-.5), -.5, 1e-6);
|
||||
assert.inDelta(x(1.5), 1.5, 1e-6);
|
||||
},
|
||||
"maps a number to a number": function(pow) {
|
||||
var x = pow().domain([1, 2]);
|
||||
assert.inDelta(x(.5), -.5, 1e-6);
|
||||
assert.inDelta(x(1), 0, 1e-6);
|
||||
assert.inDelta(x(1.5), .5, 1e-6);
|
||||
assert.inDelta(x(2), 1, 1e-6);
|
||||
assert.inDelta(x(2.5), 1.5, 1e-6);
|
||||
},
|
||||
"observes the specified exponent": function(pow) {
|
||||
var x = pow().exponent(.5).domain([1, 2]);
|
||||
assert.inDelta(x(1), 0, 1e-6);
|
||||
assert.inDelta(x(1.5), 0.5425821, 1e-6);
|
||||
assert.inDelta(x(2), 1, 1e-6);
|
||||
var x = pow().exponent(2).domain([1, 2]);
|
||||
assert.inDelta(x(1), 0, 1e-6);
|
||||
assert.inDelta(x(1.5), .41666667, 1e-6);
|
||||
assert.inDelta(x(2), 1, 1e-6);
|
||||
var x = pow().exponent(-1).domain([1, 2]);
|
||||
assert.inDelta(x(1), 0, 1e-6);
|
||||
assert.inDelta(x(1.5), .6666667, 1e-6);
|
||||
assert.inDelta(x(2), 1, 1e-6);
|
||||
},
|
||||
"changing the exponent does not change the domain or range": function(pow) {
|
||||
var x = pow().domain([1, 2]).range([3, 4]), f = d3.format(".6f");
|
||||
x.exponent(.5);
|
||||
assert.deepEqual(x.domain().map(f), [1, 2]);
|
||||
assert.deepEqual(x.range(), [3, 4]);
|
||||
x.exponent(2);
|
||||
assert.deepEqual(x.domain().map(f), [1, 2]);
|
||||
assert.deepEqual(x.range(), [3, 4]);
|
||||
x.exponent(-1);
|
||||
assert.deepEqual(x.domain().map(f), [1, 2]);
|
||||
assert.deepEqual(x.range(), [3, 4]);
|
||||
},
|
||||
"coerces domain to numbers": function(pow) {
|
||||
var x = pow().domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]);
|
||||
assert.equal(typeof x.domain()[0], "number");
|
||||
assert.equal(typeof x.domain()[1], "number");
|
||||
assert.inDelta(x(new Date(1989, 09, 20)), -.2, 1e-2);
|
||||
assert.inDelta(x(new Date(1990, 00, 01)), 0, 1e-2);
|
||||
assert.inDelta(x(new Date(1990, 02, 15)), .2, 1e-2);
|
||||
assert.inDelta(x(new Date(1990, 04, 27)), .4, 1e-2);
|
||||
assert.inDelta(x(new Date(1991, 00, 01)), 1, 1e-2);
|
||||
assert.inDelta(x(new Date(1991, 02, 15)), 1.2, 1e-2);
|
||||
var x = pow().domain(["0", "1"]);
|
||||
assert.equal(typeof x.domain()[0], "number");
|
||||
assert.equal(typeof x.domain()[1], "number");
|
||||
assert.inDelta(x(.5), .5, 1e-6);
|
||||
var x = pow().domain([new Number(0), new Number(1)]);
|
||||
assert.equal(typeof x.domain()[0], "number");
|
||||
assert.equal(typeof x.domain()[1], "number");
|
||||
assert.inDelta(x(.5), .5, 1e-6);
|
||||
},
|
||||
"does not coerce range to numbers": function(pow) {
|
||||
var x = pow().range(["0", "2"]);
|
||||
assert.equal(typeof x.range()[0], "string");
|
||||
assert.equal(typeof x.range()[1], "string");
|
||||
},
|
||||
"coerces range value to number on invert": function(pow) {
|
||||
var x = pow().range(["0", "2"]);
|
||||
assert.inDelta(x.invert("1"), .5, 1e-6);
|
||||
var x = pow().range([new Date(1990, 0, 1), new Date(1991, 0, 1)]);
|
||||
assert.inDelta(x.invert(new Date(1990, 6, 2, 13)), .5, 1e-6);
|
||||
var x = pow().range(["#000", "#fff"]);
|
||||
assert.isNaN(x.invert("#999"));
|
||||
},
|
||||
"can specify range values as colors": function(pow) {
|
||||
var x = pow().range(["red", "blue"]);
|
||||
assert.equal(x(.5), "rgb(128,0,128)");
|
||||
var x = pow().range(["#ff0000", "#0000ff"]);
|
||||
assert.equal(x(.5), "rgb(128,0,128)");
|
||||
var x = pow().range(["#f00", "#00f"]);
|
||||
assert.equal(x(.5), "rgb(128,0,128)");
|
||||
var x = pow().range([d3.rgb(255,0,0), d3.hsl(240,1,.5)]);
|
||||
assert.equal(x(.5), "rgb(128,0,128)");
|
||||
var x = pow().range(["hsl(0,100%,50%)", "hsl(240,100%,50%)"]);
|
||||
assert.equal(x(.5), "rgb(128,0,128)");
|
||||
},
|
||||
"can specify range values as arrays or objects": function(pow) {
|
||||
var x = pow().range([{color: "red"}, {color: "blue"}]);
|
||||
assert.deepEqual(x(.5), {color: "rgb(128,0,128)"});
|
||||
var x = pow().range([["red"], ["blue"]]);
|
||||
assert.deepEqual(x(.5), ["rgb(128,0,128)"]);
|
||||
},
|
||||
"can specify a custom interpolator": function(pow) {
|
||||
var x = pow().range(["red", "blue"]).interpolate(d3.interpolateHsl);
|
||||
assert.equal(x(.5), "#00ff00");
|
||||
},
|
||||
"can clamp to the domain": function(pow) {
|
||||
var x = pow().clamp(true);
|
||||
assert.inDelta(x(-.5), 0, 1e-6);
|
||||
assert.inDelta(x(.5), .5, 1e-6);
|
||||
assert.inDelta(x(1.5), 1, 1e-6);
|
||||
var x = pow().domain([1, 0]).clamp(true);
|
||||
assert.inDelta(x(-.5), 1, 1e-6);
|
||||
assert.inDelta(x(.5), .5, 1e-6);
|
||||
assert.inDelta(x(1.5), 0, 1e-6);
|
||||
},
|
||||
"can generate ticks of varying degree": function(pow) {
|
||||
var x = pow();
|
||||
assert.deepEqual(x.ticks(1).map(x.tickFormat(1)), [0, 1]);
|
||||
assert.deepEqual(x.ticks(2).map(x.tickFormat(2)), [0, .5, 1]);
|
||||
assert.deepEqual(x.ticks(5).map(x.tickFormat(5)), [0, .2, .4, .6, .8, 1]);
|
||||
assert.deepEqual(x.ticks(10).map(x.tickFormat(10)), [0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1]);
|
||||
var x = pow().domain([1, 0]);
|
||||
assert.deepEqual(x.ticks(1).map(x.tickFormat(1)), [0, 1]);
|
||||
assert.deepEqual(x.ticks(2).map(x.tickFormat(2)), [0, .5, 1]);
|
||||
assert.deepEqual(x.ticks(5).map(x.tickFormat(5)), [0, .2, .4, .6, .8, 1]);
|
||||
assert.deepEqual(x.ticks(10).map(x.tickFormat(10)), [0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1]);
|
||||
},
|
||||
"can nice the domain, extending it to round numbers": function(pow) {
|
||||
var x = pow().domain([1.1, 10.9]).nice();
|
||||
assert.deepEqual(x.domain(), [1, 11]);
|
||||
var x = pow().domain([10.9, 1.1]).nice();
|
||||
assert.deepEqual(x.domain(), [11, 1]);
|
||||
var x = pow().domain([.7, 11.001]).nice();
|
||||
assert.deepEqual(x.domain(), [0, 12]);
|
||||
var x = pow().domain([123.1, 6.7]).nice();
|
||||
assert.deepEqual(x.domain(), [130, 0]);
|
||||
var x = pow().domain([0, .49]).nice();
|
||||
assert.deepEqual(x.domain(), [0, .5]);
|
||||
},
|
||||
"can specify a polylinear domain and range": function(pow) {
|
||||
var x = pow().domain([-10, 0, 100]).range(["red", "white", "green"]);
|
||||
assert.equal(x(-5), "rgb(255,128,128)");
|
||||
assert.equal(x(50), "rgb(128,192,128)");
|
||||
assert.equal(x(75), "rgb(64,160,64)");
|
||||
},
|
||||
"nicing a polylinear domain only affects the extent": function(pow) {
|
||||
var x = pow().domain([1.1, 1, 2, 3, 10.9]).nice();
|
||||
assert.deepEqual(x.domain(), [1, 1, 2, 3, 11]);
|
||||
var x = pow().domain([123.1, 1, 2, 3, -.9]).nice();
|
||||
assert.deepEqual(x.domain(), [130, 1, 2, 3, -10]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
suite.export(module);
|
|
@ -1,85 +0,0 @@
|
|||
require("./../../lib/env-js/envjs/node");
|
||||
require("./../../d3");
|
||||
|
||||
var f = d3.format(" .3f");
|
||||
|
||||
var x = d3.scale.pow().exponent(2);
|
||||
console.log("domain([0, 1]).range([0, 1]):");
|
||||
console.log(" -0.5 -> ", f(x(-0.5)));
|
||||
console.log(" 0.0 -> ", f(x(0.0)));
|
||||
console.log(" 0.5 -> ", f(x(0.5)));
|
||||
console.log(" 1.0 -> ", f(x(1.0)));
|
||||
console.log(" 1.5 -> ", f(x(1.5)));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2).domain([1, 2]);
|
||||
console.log("domain([1, 2]).range([0, 1]):");
|
||||
console.log(" 0.5 -> ", f(x(0.5)));
|
||||
console.log(" 1.0 -> ", f(x(1.0)));
|
||||
console.log(" 1.5 -> ", f(x(1.5)));
|
||||
console.log(" 2.0 -> ", f(x(2.0)));
|
||||
console.log(" 2.5 -> ", f(x(2.5)));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2).domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]);
|
||||
console.log("domain([01/01/1990, 01/01/1991]).range([0, 1]):");
|
||||
console.log(" 10/20/1989 -> ", f(x(new Date(1989, 09, 20))));
|
||||
console.log(" 01/01/1990 -> ", f(x(new Date(1990, 00, 01))));
|
||||
console.log(" 03/15/1990 -> ", f(x(new Date(1990, 02, 15))));
|
||||
console.log(" 05/27/1990 -> ", f(x(new Date(1990, 04, 27))));
|
||||
console.log(" 01/01/1991 -> ", f(x(new Date(1991, 00, 01))));
|
||||
console.log(" 03/15/1991 -> ", f(x(new Date(1991, 02, 15))));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2).range(["red", "blue"]);
|
||||
console.log("domain([0, 1]).range([\"red\", \"blue\"]):");
|
||||
console.log(" -0.5 -> ", x(-0.5));
|
||||
console.log(" 0.0 -> ", x(0.0));
|
||||
console.log(" 0.5 -> ", x(0.5));
|
||||
console.log(" 1.0 -> ", x(1.0));
|
||||
console.log(" 1.5 -> ", x(1.5));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2).range(["red", "blue"]).interpolate(d3.interpolateHsl);
|
||||
console.log("domain([0, 1]).range([\"red\", \"blue\"]).interpolate(hsl):");
|
||||
console.log(" -0.50 -> ", x(-0.50));
|
||||
console.log(" 0.00 -> ", x(0.00));
|
||||
console.log(" 0.50 -> ", x(0.50));
|
||||
console.log(" √0.50 -> ", x(Math.SQRT1_2));
|
||||
console.log(" 1.00 -> ", x(1.00));
|
||||
console.log(" 2.00 -> ", x(2.00));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2);
|
||||
console.log("ticks:");
|
||||
console.log(" 1 -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
|
||||
console.log(" 2 -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
|
||||
console.log(" 5 -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
|
||||
console.log(" 10 -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2).domain([1, 0]);
|
||||
console.log("descending ticks:");
|
||||
console.log(" 1 -> ", x.ticks(1).map(x.tickFormat(1)).join(", "));
|
||||
console.log(" 2 -> ", x.ticks(2).map(x.tickFormat(2)).join(", "));
|
||||
console.log(" 5 -> ", x.ticks(5).map(x.tickFormat(5)).join(", "));
|
||||
console.log(" 10 -> ", x.ticks(10).map(x.tickFormat(10)).join(", "));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2).domain([1, 2]).range([0, 1]).clamp(true);
|
||||
console.log("domain clamping:")
|
||||
console.log(" under -> ", x(-1));
|
||||
console.log(" over -> ", x(2));
|
||||
console.log("");
|
||||
|
||||
var x = d3.scale.pow().exponent(2);
|
||||
console.log("nice():");
|
||||
[
|
||||
[1.1, 10.9], [10.9, 1.1], [.7, 11.001], [123.1, 6.7], [0, .49],
|
||||
[.1, 1, 2.5, 3, 10.9]
|
||||
].forEach(function(d) {
|
||||
var s = " [" + d.map(f) + " ]";
|
||||
while (s.length < 21) s += " ";
|
||||
console.log(" ", s + " -> ", x.domain(d).nice().domain().map(f).join(","));
|
||||
});
|
||||
console.log("");
|
|
@ -1,61 +0,0 @@
|
|||
domain([0, 1]).range([0, 1]):
|
||||
-0.5 -> −0.250
|
||||
0.0 -> 0.000
|
||||
0.5 -> 0.250
|
||||
1.0 -> 1.000
|
||||
1.5 -> 2.250
|
||||
|
||||
domain([1, 2]).range([0, 1]):
|
||||
0.5 -> −0.250
|
||||
1.0 -> 0.000
|
||||
1.5 -> 0.417
|
||||
2.0 -> 1.000
|
||||
2.5 -> 1.750
|
||||
|
||||
domain([01/01/1990, 01/01/1991]).range([0, 1]):
|
||||
10/20/1989 -> −0.194
|
||||
01/01/1990 -> 0.000
|
||||
03/15/1990 -> 0.196
|
||||
05/27/1990 -> 0.394
|
||||
01/01/1991 -> 1.000
|
||||
03/15/1991 -> 1.206
|
||||
|
||||
domain([0, 1]).range(["red", "blue"]):
|
||||
-0.5 -> rgb(319,0,-64)
|
||||
0.0 -> rgb(255,0,0)
|
||||
0.5 -> rgb(191,0,64)
|
||||
1.0 -> rgb(0,0,255)
|
||||
1.5 -> rgb(-319,0,574)
|
||||
|
||||
domain([0, 1]).range(["red", "blue"]).interpolate(hsl):
|
||||
-0.50 -> #ff00ff
|
||||
0.00 -> #ff0000
|
||||
0.50 -> #ffff00
|
||||
√0.50 -> #00ff00
|
||||
1.00 -> #0000ff
|
||||
2.00 -> #0000ff
|
||||
|
||||
ticks:
|
||||
1 -> 0, 1
|
||||
2 -> 0.0, 0.5, 1.0
|
||||
5 -> 0.0, 0.2, 0.4, 0.6, 0.8, 1.0
|
||||
10 -> 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
|
||||
|
||||
descending ticks:
|
||||
1 -> 0, 1
|
||||
2 -> 0.0, 0.5, 1.0
|
||||
5 -> 0.0, 0.2, 0.4, 0.6, 0.8, 1.0
|
||||
10 -> 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
|
||||
|
||||
domain clamping:
|
||||
under -> 0
|
||||
over -> 1
|
||||
|
||||
nice():
|
||||
[ 1.100, 10.900 ] -> 1.000, 11.000
|
||||
[ 10.900, 1.100 ] -> 11.000, 1.000
|
||||
[ 0.700, 11.001 ] -> 0.000, 12.000
|
||||
[ 123.100, 6.700 ] -> 130.000, 0.000
|
||||
[ 0.000, 0.490 ] -> 0.000, 0.500
|
||||
[ 0.100, 1.000, 2.500, 3.000, 10.900 ] -> 0.000, 1.000, 2.500, 3.000, 11.000
|
||||
|
Загрузка…
Ссылка в новой задаче