| var vows = require("vows"), | |
| load = require("../load"), | |
| assert = require("../assert"); | |
| var suite = vows.describe("d3.scale.identity"); | |
| suite.addBatch({ | |
| "identity": { | |
| topic: load("scale/identity").expression("d3.scale.identity"), | |
| "domain and range": { | |
| "are identical": function(identity) { | |
| var x = identity(); | |
| assert.strictEqual(x.domain, x.range); | |
| assert.strictEqual(x.domain(), x.range()); | |
| var x = identity().domain([-10, 0, 100]); | |
| assert.deepEqual(x.range(), [-10, 0, 100]); | |
| var x = identity().range([-10, 0, 100]); | |
| assert.deepEqual(x.domain(), [-10, 0, 100]); | |
| }, | |
| "default to [0, 1]": function(identity) { | |
| var x = identity(); | |
| assert.deepEqual(x.domain(), [0, 1]); | |
| assert.deepEqual(x.range(), [0, 1]); | |
| assert.strictEqual(x(.5), .5); | |
| }, | |
| "coerce values to numbers": function(identity) { | |
| var x = identity().domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]); | |
| assert.typeOf(x.domain()[0], "number"); | |
| assert.typeOf(x.domain()[1], "number"); | |
| assert.strictEqual(x.domain()[0], +new Date(1990, 0, 1)); | |
| assert.strictEqual(x.domain()[1], +new Date(1991, 0, 1)); | |
| assert.typeOf(x(new Date(1989, 09, 20)), "number"); | |
| assert.strictEqual(x(new Date(1989, 09, 20)), +new Date(1989, 09, 20)); | |
| var x = identity().domain(["0", "1"]); | |
| assert.typeOf(x.domain()[0], "number"); | |
| assert.typeOf(x.domain()[1], "number"); | |
| assert.strictEqual(x(.5), .5); | |
| var x = identity().domain([new Number(0), new Number(1)]); | |
| assert.typeOf(x.domain()[0], "number"); | |
| assert.typeOf(x.domain()[1], "number"); | |
| assert.strictEqual(x(.5), .5); | |
| var x = identity().range([new Date(1990, 0, 1), new Date(1991, 0, 1)]); | |
| assert.typeOf(x.range()[0], "number"); | |
| assert.typeOf(x.range()[1], "number"); | |
| assert.strictEqual(x.range()[0], +new Date(1990, 0, 1)); | |
| assert.strictEqual(x.range()[1], +new Date(1991, 0, 1)); | |
| assert.typeOf(x(new Date(1989, 09, 20)), "number"); | |
| assert.strictEqual(x(new Date(1989, 09, 20)), +new Date(1989, 09, 20)); | |
| var x = identity().range(["0", "1"]); | |
| assert.typeOf(x.range()[0], "number"); | |
| assert.typeOf(x.range()[1], "number"); | |
| assert.strictEqual(x(.5), .5); | |
| var x = identity().range([new Number(0), new Number(1)]); | |
| assert.typeOf(x.range()[0], "number"); | |
| assert.typeOf(x.range()[1], "number"); | |
| assert.strictEqual(x(.5), .5); | |
| }, | |
| "can specify a polyidentity domain and range": function(identity) { | |
| var x = identity().domain([-10, 0, 100]); | |
| assert.deepEqual(x.domain(), [-10, 0, 100]); | |
| assert.strictEqual(x(-5), -5); | |
| assert.strictEqual(x(50), 50); | |
| assert.strictEqual(x(75), 75); | |
| var x = identity().range([-10, 0, 100]); | |
| assert.deepEqual(x.range(), [-10, 0, 100]); | |
| assert.strictEqual(x(-5), -5); | |
| assert.strictEqual(x(50), 50); | |
| assert.strictEqual(x(75), 75); | |
| }, | |
| "do not affect the identity function": function(identity) { | |
| var x = identity().domain([Infinity, NaN]); | |
| assert.strictEqual(x(42), 42); | |
| assert.strictEqual(x.invert(-42), -42); | |
| } | |
| }, | |
| "is the identity function": function(identity) { | |
| var x = identity().domain([1, 2]); | |
| assert.strictEqual(x(.5), .5); | |
| assert.strictEqual(x(1), 1); | |
| assert.strictEqual(x(1.5), 1.5); | |
| assert.strictEqual(x(2), 2); | |
| assert.strictEqual(x(2.5), 2.5); | |
| }, | |
| "coerces input to a number": function(identity) { | |
| var x = identity().domain([1, 2]); | |
| assert.strictEqual(x("2"), 2); | |
| }, | |
| "invert": { | |
| "is the identity function": function(identity) { | |
| var x = identity().domain([1, 2]); | |
| assert.strictEqual(x.invert(.5), .5); | |
| assert.strictEqual(x.invert(1), 1); | |
| assert.strictEqual(x.invert(1.5), 1.5); | |
| assert.strictEqual(x.invert(2), 2); | |
| assert.strictEqual(x.invert(2.5), 2.5); | |
| }, | |
| "coerces range value to numbers": function(identity) { | |
| var x = identity().range(["0", "2"]); | |
| assert.strictEqual(x.invert("1"), 1); | |
| var x = identity().range([new Date(1990, 0, 1), new Date(1991, 0, 1)]); | |
| assert.strictEqual(x.invert(new Date(1990, 6, 2, 13)), +new Date(1990, 6, 2, 13)); | |
| var x = identity().range(["#000", "#fff"]); | |
| assert.isNaN(x.invert("#999")); | |
| }, | |
| "coerces input to a number": function(identity) { | |
| var x = identity().domain([1, 2]); | |
| assert.strictEqual(x.invert("2"), 2); | |
| } | |
| }, | |
| "ticks": { | |
| "generates ticks of varying degree": function(identity) { | |
| var x = identity(); | |
| 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 = identity().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]); | |
| }, | |
| "formats ticks with the appropriate precision": function(identity) { | |
| var x = identity().domain([.123456789, 1.23456789]); | |
| assert.strictEqual(x.tickFormat(1)(x.ticks(1)[0]), "1"); | |
| assert.strictEqual(x.tickFormat(2)(x.ticks(2)[0]), "0.5"); | |
| assert.strictEqual(x.tickFormat(4)(x.ticks(4)[0]), "0.2"); | |
| assert.strictEqual(x.tickFormat(8)(x.ticks(8)[0]), "0.2"); | |
| assert.strictEqual(x.tickFormat(16)(x.ticks(16)[0]), "0.2"); | |
| assert.strictEqual(x.tickFormat(32)(x.ticks(32)[0]), "0.15"); | |
| assert.strictEqual(x.tickFormat(64)(x.ticks(64)[0]), "0.14"); | |
| assert.strictEqual(x.tickFormat(128)(x.ticks(128)[0]), "0.13"); | |
| assert.strictEqual(x.tickFormat(256)(x.ticks(256)[0]), "0.125"); | |
| } | |
| }, | |
| "copy": { | |
| "changes to the domain or range are isolated": function(identity) { | |
| var x = identity(), y = x.copy(); | |
| x.domain([1, 2]); | |
| assert.deepEqual(y.domain(), [0, 1]); | |
| y.domain([2, 3]); | |
| assert.deepEqual(x.domain(), [1, 2]); | |
| assert.deepEqual(y.domain(), [2, 3]); | |
| var x = identity(), y = x.copy(); | |
| x.range([1, 2]); | |
| assert.deepEqual(y.range(), [0, 1]); | |
| y.range([2, 3]); | |
| assert.deepEqual(x.range(), [1, 2]); | |
| assert.deepEqual(y.range(), [2, 3]); | |
| } | |
| } | |
| } | |
| }); | |
| suite.export(module); |