toolkit/javascript/d3/test/scale/quantile-test.js
changeset 47 c0b4a8b5a012
equal deleted inserted replaced
46:efd9c589177a 47:c0b4a8b5a012
       
     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);