This commit is contained in:
Mike Bostock 2011-08-14 10:11:37 -07:00
Родитель 01fb201f4e
Коммит 6d138b2510
3 изменённых файлов: 200 добавлений и 366 удалений

200
test/core/format-test.js Normal file
Просмотреть файл

@ -0,0 +1,200 @@
require("../env");
require("../../d3");
var vows = require("vows"),
assert = require("assert");
var suite = vows.describe("d3.format");
suite.addBatch({
"format": {
topic: function() {
return d3.format;
},
"returns a string": function(format) {
assert.isString(format("d")(0));
},
"can zero fill": function(format) {
var f = format("08d");
assert.strictEqual(f(0), "00000000");
assert.strictEqual(f(42), "00000042");
assert.strictEqual(f(42000000), "42000000");
assert.strictEqual(f(420000000), "420000000");
assert.strictEqual(f(-4), "0000004");
assert.strictEqual(f(-42), "0000042");
assert.strictEqual(f(-4200000), "4200000");
assert.strictEqual(f(-42000000), "42000000");
},
"can space fill": function(format) {
var f = format("8d");
assert.strictEqual(f(0), " 0");
assert.strictEqual(f(42), " 42");
assert.strictEqual(f(42000000), "42000000");
assert.strictEqual(f(420000000), "420000000");
assert.strictEqual(f(-4), " 4");
assert.strictEqual(f(-42), " 42");
assert.strictEqual(f(-4200000), "4200000");
assert.strictEqual(f(-42000000), "42000000");
},
"can output fixed-point notation": function(format) {
assert.strictEqual(format(".1f")(0.49), "0.5");
assert.strictEqual(format(".2f")(0.449), "0.45");
assert.strictEqual(format(".3f")(0.4449), "0.445");
assert.strictEqual(format(".5f")(0.444449), "0.44445");
assert.strictEqual(format(".1f")(100), "100.0");
assert.strictEqual(format(".2f")(100), "100.00");
assert.strictEqual(format(".3f")(100), "100.000");
assert.strictEqual(format(".5f")(100), "100.00000");
},
"can output general notation": function(format) {
assert.strictEqual(format(".1g")(0.049), "0.05");
assert.strictEqual(format(".1g")(0.49), "0.5");
assert.strictEqual(format(".2g")(0.449), "0.45");
assert.strictEqual(format(".3g")(0.4449), "0.445");
assert.strictEqual(format(".5g")(0.444449), "0.44445");
assert.strictEqual(format(".1g")(100), "1e+2");
assert.strictEqual(format(".2g")(100), "1.0e+2");
assert.strictEqual(format(".3g")(100), "100");
assert.strictEqual(format(".5g")(100), "100.00");
assert.strictEqual(format(".5g")(100.2), "100.20");
assert.strictEqual(format(".2g")(0.002), "0.0020");
},
"can output exponent notation ": function(format) {
var f = format("e");
assert.strictEqual(f(0), "0e+0");
assert.strictEqual(f(42), "4.2e+1");
assert.strictEqual(f(42000000), "4.2e+7");
assert.strictEqual(f(420000000), "4.2e+8");
assert.strictEqual(f(-4), "4e+0");
assert.strictEqual(f(-42), "4.2e+1");
assert.strictEqual(f(-4200000), "4.2e+6");
assert.strictEqual(f(-42000000), "4.2e+7");
},
"can output a percentage": function(format) {
var f = format("%");
assert.strictEqual(f(0), "0%");
assert.strictEqual(f(.042), "4%");
assert.strictEqual(f(.42), "42%");
assert.strictEqual(f(4.2), "420%");
assert.strictEqual(f(-.042), "4%");
assert.strictEqual(f(-.42), "42%");
assert.strictEqual(f(-4.2), "420%");
},
"can output a percentage with rounding and sign": function(format) {
var f = format("+.2p");
assert.strictEqual(f(.00123), "+0.12%");
assert.strictEqual(f(.0123), "+1.2%");
assert.strictEqual(f(.123), "+12%");
assert.strictEqual(f(1.23), "+120%");
assert.strictEqual(f(-.00123), "0.12%");
assert.strictEqual(f(-.0123), "1.2%");
assert.strictEqual(f(-.123), "12%");
assert.strictEqual(f(-1.23), "120%");
},
"can round to significant digits": function(format) {
assert.strictEqual(format(".1r")(0.049), "0.05");
assert.strictEqual(format(".1r")(0.49), "0.5");
assert.strictEqual(format(".2r")(0.449), "0.45");
assert.strictEqual(format(".3r")(0.4449), "0.445");
assert.strictEqual(format(".5r")(0.444449), "0.44445");
assert.strictEqual(format("r")(123.45), "123");
assert.strictEqual(format(".1r")(123.45), "100");
assert.strictEqual(format(".2r")(123.45), "120");
assert.strictEqual(format(".3r")(123.45), "123");
assert.strictEqual(format(".4r")(123.45), "123.5");
assert.strictEqual(format(".5r")(123.45), "123.45");
assert.strictEqual(format(".6r")(123.45), "123.450");
},
"can group thousands": function(format) {
var f = format(",d");
assert.strictEqual(f(0), "0");
assert.strictEqual(f(42), "42");
assert.strictEqual(f(42000000), "42,000,000");
assert.strictEqual(f(420000000), "420,000,000");
assert.strictEqual(f(-4), "4");
assert.strictEqual(f(-42), "42");
assert.strictEqual(f(-4200000), "4,200,000");
assert.strictEqual(f(-42000000), "42,000,000");
},
"can group thousands and zero fill": function(format) {
assert.strictEqual(format("01,d")(0), "0");
assert.strictEqual(format("01,d")(0), "0");
assert.strictEqual(format("02,d")(0), "00");
assert.strictEqual(format("03,d")(0), "000");
assert.strictEqual(format("05,d")(0), "0,000");
assert.strictEqual(format("08,d")(0), "0,000,000");
assert.strictEqual(format("013,d")(0), "0,000,000,000");
assert.strictEqual(format("021,d")(0), "0,000,000,000,000,000");
},
"can group thousands and zero fill with overflow": function(format) {
assert.strictEqual(format("01,d")(1), "1");
assert.strictEqual(format("01,d")(1), "1");
assert.strictEqual(format("02,d")(12), "12");
assert.strictEqual(format("03,d")(123), "123");
assert.strictEqual(format("05,d")(12345), "12,345");
assert.strictEqual(format("08,d")(12345678), "12,345,678");
assert.strictEqual(format("013,d")(1234567890123), "1,234,567,890,123");
},
"can group thousands and space fill": function(format) {
assert.strictEqual(format("1,d")(0), "0");
assert.strictEqual(format("1,d")(0), "0");
assert.strictEqual(format("2,d")(0), " 0");
assert.strictEqual(format("3,d")(0), " 0");
assert.strictEqual(format("5,d")(0), " 0");
assert.strictEqual(format("8,d")(0), " 0");
assert.strictEqual(format("13,d")(0), " 0");
assert.strictEqual(format("21,d")(0), " 0");
},
"can group thousands and space fill with overflow": function(format) {
assert.strictEqual(format("1,d")(1), "1");
assert.strictEqual(format("1,d")(1), "1");
assert.strictEqual(format("2,d")(12), "12");
assert.strictEqual(format("3,d")(123), "123");
assert.strictEqual(format("5,d")(12345), "12,345");
assert.strictEqual(format("8,d")(12345678), "12,345,678");
assert.strictEqual(format("13,d")(1234567890123), "1,234,567,890,123");
},
"can group thousands with general notation": function(format) {
var f = format(",g");
assert.strictEqual(f(0), "0");
assert.strictEqual(f(42), "42");
assert.strictEqual(f(42000000), "42,000,000");
assert.strictEqual(f(420000000), "420,000,000");
assert.strictEqual(f(-4), "4");
assert.strictEqual(f(-42), "42");
assert.strictEqual(f(-4200000), "4,200,000");
assert.strictEqual(f(-42000000), "42,000,000");
},
"can group thousands, space fill, and round to significant digits": function(format) {
assert.strictEqual(format("10,.1f")(123456.49), " 123,456.5");
assert.strictEqual(format("10,.2f")(1234567.449), "1,234,567.45");
assert.strictEqual(format("10,.3f")(12345678.4449), "12,345,678.445");
assert.strictEqual(format("10,.5f")(123456789.444449), "123,456,789.44445");
assert.strictEqual(format("10,.1f")(123456), " 123,456.0");
assert.strictEqual(format("10,.2f")(1234567), "1,234,567.00");
assert.strictEqual(format("10,.3f")(12345678), "12,345,678.000");
assert.strictEqual(format("10,.5f")(123456789), "123,456,789.00000");
},
"can display integers in fixed-point notation": function(format) {
assert.strictEqual(format("f")(42), "42");
},
"will not display non-integers in integer format": function(format) {
assert.strictEqual(format("d")(4.2), "");
},
"supports \"n\" as an alias for \",g\"": function(format) {
var f = format("n");
assert.strictEqual(f(.0042), "0.0042");
assert.strictEqual(f(.42), "0.42");
assert.strictEqual(f(0), "0");
assert.strictEqual(f(42), "42");
assert.strictEqual(f(42000000), "42,000,000");
assert.strictEqual(f(420000000), "420,000,000");
assert.strictEqual(f(-4), "4");
assert.strictEqual(f(-42), "42");
assert.strictEqual(f(-4200000), "4,200,000");
assert.strictEqual(f(-42000000), "42,000,000");
}
}
});
suite.export(module);

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

@ -1,194 +0,0 @@
require("./../../lib/env-js/envjs/node");
require("./../../d3");
console.log("zero fill:");
console.log(" ", d3.format("08d")(0));
console.log(" ", d3.format("08d")(42));
console.log(" ", d3.format("08d")(42000000));
console.log(" ", d3.format("08d")(420000000));
console.log(" ", d3.format("08d")(-4));
console.log(" ", d3.format("08d")(-42));
console.log(" ", d3.format("08d")(-4200000));
console.log(" ", d3.format("08d")(-42000000));
console.log("");
console.log("space fill:");
console.log(" ", d3.format("8d")(0));
console.log(" ", d3.format("8d")(42));
console.log(" ", d3.format("8d")(42000000));
console.log(" ", d3.format("8d")(420000000));
console.log(" ", d3.format("8d")(-4));
console.log(" ", d3.format("8d")(-42));
console.log(" ", d3.format("8d")(-4200000));
console.log(" ", d3.format("8d")(-42000000));
console.log("");
// TODO fill with other characters (requires align support)
console.log("grouping:");
console.log(" ", d3.format(",d")(0));
console.log(" ", d3.format(",d")(42));
console.log(" ", d3.format(",d")(42000000));
console.log(" ", d3.format(",d")(420000000));
console.log(" ", d3.format(",d")(-4));
console.log(" ", d3.format(",d")(-42));
console.log(" ", d3.format(",d")(-4200000));
console.log(" ", d3.format(",d")(-42000000));
console.log("");
console.log("grouping with zero fill:");
console.log(" ", d3.format("01,d")(0));
console.log(" ", d3.format("01,d")(0));
console.log(" ", d3.format("02,d")(0));
console.log(" ", d3.format("03,d")(0));
console.log(" ", d3.format("05,d")(0));
console.log(" ", d3.format("08,d")(0));
console.log(" ", d3.format("013,d")(0));
console.log(" ", d3.format("021,d")(0));
console.log("");
console.log("grouping with zero fill (overflow):");
console.log(" ", d3.format("01,d")(1));
console.log(" ", d3.format("01,d")(1));
console.log(" ", d3.format("02,d")(12));
console.log(" ", d3.format("03,d")(123));
console.log(" ", d3.format("05,d")(12345));
console.log(" ", d3.format("08,d")(12345678));
console.log(" ", d3.format("013,d")(1234567890123));
console.log("");
console.log("grouping with space fill:");
console.log(" ", d3.format("1,d")(0));
console.log(" ", d3.format("1,d")(0));
console.log(" ", d3.format("2,d")(0));
console.log(" ", d3.format("3,d")(0));
console.log(" ", d3.format("5,d")(0));
console.log(" ", d3.format("8,d")(0));
console.log(" ", d3.format("13,d")(0));
console.log(" ", d3.format("21,d")(0));
console.log("");
console.log("grouping with space fill (overflow):");
console.log(" ", d3.format("1,d")(1));
console.log(" ", d3.format("1,d")(1));
console.log(" ", d3.format("2,d")(12));
console.log(" ", d3.format("3,d")(123));
console.log(" ", d3.format("5,d")(12345));
console.log(" ", d3.format("8,d")(12345678));
console.log(" ", d3.format("13,d")(1234567890123));
console.log("");
console.log("grouping with general notation:");
console.log(" ", d3.format(",g")(0));
console.log(" ", d3.format(",g")(42));
console.log(" ", d3.format(",g")(42000000));
console.log(" ", d3.format(",g")(420000000));
console.log(" ", d3.format(",g")(-4));
console.log(" ", d3.format(",g")(-42));
console.log(" ", d3.format(",g")(-4200000));
console.log(" ", d3.format(",g")(-42000000));
console.log("");
console.log("precision (fixed-point notation):");
console.log(" ", d3.format(".1f")(0.49));
console.log(" ", d3.format(".2f")(0.449));
console.log(" ", d3.format(".3f")(0.4449));
console.log(" ", d3.format(".5f")(0.444449));
console.log(" ", d3.format(".1f")(100));
console.log(" ", d3.format(".2f")(100));
console.log(" ", d3.format(".3f")(100));
console.log(" ", d3.format(".5f")(100));
console.log("");
console.log("precision (significant digits):");
console.log(" ", d3.format(".1g")(0.049));
console.log(" ", d3.format(".1g")(0.49));
console.log(" ", d3.format(".2g")(0.449));
console.log(" ", d3.format(".3g")(0.4449));
console.log(" ", d3.format(".5g")(0.444449));
console.log(" ", d3.format(".1g")(100));
console.log(" ", d3.format(".2g")(100));
console.log(" ", d3.format(".3g")(100));
console.log(" ", d3.format(".5g")(100));
console.log(" ", d3.format(".5g")(100.2));
console.log(" ", d3.format(".2g")(0.002));
console.log("");
console.log("precision and rounding (significant digits):");
console.log(" ", d3.format(".1r")(0.049));
console.log(" ", d3.format(".1r")(0.49));
console.log(" ", d3.format(".2r")(0.449));
console.log(" ", d3.format(".3r")(0.4449));
console.log(" ", d3.format(".5r")(0.444449));
console.log(" ", d3.format("r")(123.45));
console.log(" ", d3.format(".1r")(123.45));
console.log(" ", d3.format(".2r")(123.45));
console.log(" ", d3.format(".3r")(123.45));
console.log(" ", d3.format(".4r")(123.45));
console.log(" ", d3.format(".5r")(123.45));
console.log(" ", d3.format(".6r")(123.45));
console.log("");
console.log("precision and grouping with space fill:");
console.log(" ", d3.format("10,.1f")(123456.49));
console.log(" ", d3.format("10,.2f")(1234567.449));
console.log(" ", d3.format("10,.3f")(12345678.4449));
console.log(" ", d3.format("10,.5f")(123456789.444449));
console.log(" ", d3.format("10,.1f")(123456));
console.log(" ", d3.format("10,.2f")(1234567));
console.log(" ", d3.format("10,.3f")(12345678));
console.log(" ", d3.format("10,.5f")(123456789));
console.log("");
console.log("float type passed int:");
console.log(" ", d3.format("f")(42));
console.log("");
console.log("int type passed float:");
console.log(d3.format("d")(4.2));
console.log("");
console.log("number:");
console.log(" ", d3.format("n")(.0042));
console.log(" ", d3.format("n")(.42));
console.log(" ", d3.format("n")(0));
console.log(" ", d3.format("n")(42));
console.log(" ", d3.format("n")(42000000));
console.log(" ", d3.format("n")(420000000));
console.log(" ", d3.format("n")(-4));
console.log(" ", d3.format("n")(-42));
console.log(" ", d3.format("n")(-4200000));
console.log(" ", d3.format("n")(-42000000));
console.log("");
console.log("percentage:");
console.log(" ", d3.format("%")(0));
console.log(" ", d3.format("%")(.042));
console.log(" ", d3.format("%")(.42));
console.log(" ", d3.format("%")(4.2));
console.log(" ", d3.format("%")(-.042));
console.log(" ", d3.format("%")(-.42));
console.log(" ", d3.format("%")(-4.2));
console.log("");
console.log("percentage with rounding and sign:");
console.log(" ", d3.format("+.2p")(.00123));
console.log(" ", d3.format("+.2p")(.0123));
console.log(" ", d3.format("+.2p")(.123));
console.log(" ", d3.format("+.2p")(1.23));
console.log(" ", d3.format("+.2p")(-.00123));
console.log(" ", d3.format("+.2p")(-.0123));
console.log(" ", d3.format("+.2p")(-.123));
console.log(" ", d3.format("+.2p")(-1.23));
console.log("");
console.log("exponent:");
console.log(" ", d3.format("e")(0));
console.log(" ", d3.format("e")(42));
console.log(" ", d3.format("e")(42000000));
console.log(" ", d3.format("e")(420000000));
console.log(" ", d3.format("e")(-4));
console.log(" ", d3.format("e")(-42));
console.log(" ", d3.format("e")(-4200000));
console.log(" ", d3.format("e")(-42000000));
console.log("");

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

@ -1,172 +0,0 @@
zero fill:
00000000
00000042
42000000
420000000
0000004
0000042
4200000
42000000
space fill:
0
42
42000000
420000000
4
42
4200000
42000000
grouping:
0
42
42,000,000
420,000,000
4
42
4,200,000
42,000,000
grouping with zero fill:
0
0
00
000
0,000
0,000,000
0,000,000,000
0,000,000,000,000,000
grouping with zero fill (overflow):
1
1
12
123
12,345
12,345,678
1,234,567,890,123
grouping with space fill:
0
0
0
0
0
0
0
0
grouping with space fill (overflow):
1
1
12
123
12,345
12,345,678
1,234,567,890,123
grouping with general notation:
0
42
42,000,000
420,000,000
4
42
4,200,000
42,000,000
precision (fixed-point notation):
0.5
0.45
0.445
0.44445
100.0
100.00
100.000
100.00000
precision (significant digits):
0.05
0.5
0.45
0.445
0.44445
1e+2
1.0e+2
100
100.00
100.20
0.0020
precision and rounding (significant digits):
0.05
0.5
0.45
0.445
0.44445
123
100
120
123
123.5
123.45
123.450
precision and grouping with space fill:
123,456.5
1,234,567.45
12,345,678.445
123,456,789.44445
123,456.0
1,234,567.00
12,345,678.000
123,456,789.00000
float type passed int:
42
int type passed float:
number:
0.0042
0.42
0
42
42,000,000
420,000,000
4
42
4,200,000
42,000,000
percentage:
0%
4%
42%
420%
4%
42%
420%
percentage with rounding and sign:
+0.12%
+1.2%
+12%
+120%
0.12%
1.2%
12%
120%
exponent:
0e+0
4.2e+1
4.2e+7
4.2e+8
4e+0
4.2e+1
4.2e+6
4.2e+7