Skip to content

Commit bb42376

Browse files
authored
Merge pull request #5820 from plotly/test-number-formats
Add jasmine tests in respect to current `d3.format` options
2 parents 6630336 + 9ec9b52 commit bb42376

File tree

2 files changed

+98
-1
lines changed

2 files changed

+98
-1
lines changed

src/lib/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ var MAX_SAFE = numConstants.FP_SAFE;
99
var MIN_SAFE = -MAX_SAFE;
1010
var BADNUM = numConstants.BADNUM;
1111

12-
var lib = module.exports = {};
12+
var lib = module.exports = {
13+
_numberFormat: d3.format // simply to test d3.format before switching to d3-format
14+
};
1315

1416
lib.nestedProperty = require('./nested_property');
1517
lib.keyedContainer = require('./keyed_container');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
var numberFormat = require('@src/lib')._numberFormat;
2+
3+
describe('number format', function() {
4+
'use strict';
5+
6+
var float = 12345.678901;
7+
var ratio = 0.678901;
8+
var integer = 222;
9+
10+
[
11+
// multiply by 100, and then decimal notation with a percent sign
12+
{ format: '.0%', number: ratio, exp: '68%'},
13+
{ format: '.1%', number: ratio, exp: '67.9%'},
14+
{ format: '.2%', number: ratio, exp: '67.89%'},
15+
{ format: '.3%', number: ratio, exp: '67.890%'},
16+
{ format: '.4%', number: ratio, exp: '67.8901%'},
17+
{ format: '.5%', number: ratio, exp: '67.89010%'},
18+
19+
// multiply by 100, round to significant digits, and then decimal notation with a percent sign
20+
{ format: '.1p', number: ratio, exp: '70%'},
21+
{ format: '.2p', number: ratio, exp: '68%'},
22+
{ format: '.3p', number: ratio, exp: '67.9%'},
23+
{ format: '.4p', number: ratio, exp: '67.89%'},
24+
{ format: '.5p', number: ratio, exp: '67.890%'},
25+
26+
// fixed point notation
27+
{ format: '.0f', number: float, exp: '12346'},
28+
{ format: '.1f', number: float, exp: '12345.7'},
29+
{ format: '.2f', number: float, exp: '12345.68'},
30+
{ format: '.3f', number: float, exp: '12345.679'},
31+
{ format: '.4f', number: float, exp: '12345.6789'},
32+
{ format: '.5f', number: float, exp: '12345.67890'},
33+
34+
// f with stating zero
35+
{ format: '0.0f', number: float, exp: '12346'},
36+
{ format: '0.1f', number: float, exp: '12345.7'},
37+
{ format: '0.2f', number: float, exp: '12345.68'},
38+
{ format: '0.3f', number: float, exp: '12345.679'},
39+
{ format: '0.4f', number: float, exp: '12345.6789'},
40+
{ format: '0.5f', number: float, exp: '12345.67890'},
41+
42+
// space-filled and default sign
43+
{ format: '-13', number: float, exp: '-12345.678901'},
44+
{ format: '-14', number: float, exp: ' -12345.678901'},
45+
{ format: '-15', number: float, exp: ' -12345.678901'},
46+
47+
// space-filled and positive sign
48+
{ format: '+13', number: float, exp: '+12345.678901'},
49+
{ format: '+14', number: float, exp: ' +12345.678901'},
50+
{ format: '+15', number: float, exp: ' +12345.678901'},
51+
52+
// hexadecimal, octal, or binary notation with symbol
53+
{ format: '#0X', number: integer, exp: '0xDE'},
54+
{ format: '#0x', number: integer, exp: '0xde'},
55+
{ format: '#0o', number: integer, exp: '0o336'},
56+
{ format: '#0b', number: integer, exp: '0b11011110'},
57+
58+
// hexadecimal, octal, or binary notation rounded to integer
59+
{ format: 'X', number: integer, exp: 'DE'},
60+
{ format: 'x', number: integer, exp: 'de'},
61+
{ format: 'o', number: integer, exp: '336'},
62+
{ format: 'b', number: integer, exp: '11011110'},
63+
64+
// decimal notation, rounded to significant digits
65+
{ format: '0.3r', number: float, exp: '12300'},
66+
{ format: ',.3r', number: float, exp: '12,300'},
67+
{ format: ',.2r', number: float, exp: '12,000'},
68+
{ format: ',.1r', number: float, exp: '10,000'},
69+
70+
// decimal notation with an SI prefix, rounded to significant digits
71+
{ format: '0.3s', number: float, exp: '12.3k'},
72+
].forEach(function(test) {
73+
var number = test.number;
74+
var format = test.format;
75+
it(format, function() {
76+
var exp = test.exp.replace('(', '+').replace(')', '');
77+
var negExp = exp < 0 ? exp : '-' + exp;
78+
var posExp = exp >= 0 ? exp : exp.replace('-', '');
79+
80+
if(format.indexOf('(') === 0) {
81+
posExp = exp.replace('+', ' ');
82+
negExp = exp.replace('+', '(').substring(1) + ')';
83+
} else if(format.indexOf('+') === 0) {
84+
negExp = exp.replace('+', '-');
85+
} else if(format.indexOf('-') === 0) {
86+
posExp = exp.replace('-', ' ');
87+
}
88+
89+
expect(numberFormat(format)(number)).toEqual(posExp, 'positive');
90+
expect(numberFormat(format)(-number)).toEqual(negExp, 'negative');
91+
expect(numberFormat(format)(String(number))).toEqual(posExp, 'string');
92+
expect(numberFormat(format)(String(-number))).toEqual(negExp, 'string negative');
93+
});
94+
});
95+
});

0 commit comments

Comments
 (0)