diff --git a/test/core/format-test.js b/test/core/format-test.js new file mode 100644 index 00000000..e0792dd8 --- /dev/null +++ b/test/core/format-test.js @@ -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); diff --git a/test/core/test-format.js b/test/core/test-format.js deleted file mode 100644 index c14beff7..00000000 --- a/test/core/test-format.js +++ /dev/null @@ -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(""); diff --git a/test/core/test-format.out b/test/core/test-format.out deleted file mode 100644 index 8d6b7cf6..00000000 --- a/test/core/test-format.out +++ /dev/null @@ -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 -