|
| 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