| var vows = require("vows"), | |
| load = require("../load"), | |
| assert = require("../assert"); | |
| var suite = vows.describe("d3.permute"); | |
| suite.addBatch({ | |
| "permute": { | |
| topic: load("arrays/permute").expression("d3.permute"), | |
| "permutes according to the specified index": function(permute) { | |
| assert.deepEqual(permute([3, 4, 5], [2, 1, 0]), [5, 4, 3]); | |
| assert.deepEqual(permute([3, 4, 5], [2, 0, 1]), [5, 3, 4]); | |
| assert.deepEqual(permute([3, 4, 5], [0, 1, 2]), [3, 4, 5]); | |
| }, | |
| "does not modify the input array": function(permute) { | |
| var input = [3, 4, 5]; | |
| permute(input, [2, 1, 0]); | |
| assert.deepEqual(input, [3, 4, 5]); | |
| }, | |
| "can duplicate input values": function(permute) { | |
| assert.deepEqual(permute([3, 4, 5], [0, 1, 0]), [3, 4, 3]); | |
| assert.deepEqual(permute([3, 4, 5], [2, 2, 2]), [5, 5, 5]); | |
| assert.deepEqual(permute([3, 4, 5], [0, 1, 1]), [3, 4, 4]); | |
| }, | |
| "can return more elements": function(permute) { | |
| assert.deepEqual(permute([3, 4, 5], [0, 0, 1, 2]), [3, 3, 4, 5]); | |
| assert.deepEqual(permute([3, 4, 5], [0, 1, 1, 1]), [3, 4, 4, 4]); | |
| }, | |
| "can return fewer elements": function(permute) { | |
| assert.deepEqual(permute([3, 4, 5], [0]), [3]); | |
| assert.deepEqual(permute([3, 4, 5], [1, 2]), [4, 5]); | |
| assert.deepEqual(permute([3, 4, 5], []), []); | |
| }, | |
| "can return undefined elements": function(permute) { | |
| var v1 = permute([3, 4, 5], [10]); | |
| assert.equal(v1.length, 1); | |
| assert.isUndefined(v1[0]); | |
| var v2 = permute([3, 4, 5], [-1]); | |
| assert.equal(v2.length, 1); | |
| assert.isUndefined(v2[0]); | |
| var v3 = permute([3, 4, 5], [0, -1]); | |
| assert.equal(v3.length, 2); | |
| assert.equal(v3[0], 3); | |
| assert.isUndefined(v3[1]); | |
| } | |
| } | |
| }); | |
| suite.export(module); |