1 | const assert = require('assert');
|
2 | let number = require('../namespace/number');
|
3 | const HOUR = 60 * 60;
|
4 | const DAY = 24 * HOUR;
|
5 |
|
6 | describe("Number tests", function () {
|
7 |
|
8 | it("Time Constants:: should exist and be correct", function () {
|
9 | assert.equal(number.SECOND, 1000);
|
10 | assert.equal(number.MINUTE, 1000 * 60);
|
11 | assert.equal(number.HOUR, 1000 * 60 * 60);
|
12 | assert.equal(number.DAY, 1000 * 60 * 60 * 24);
|
13 | });
|
14 |
|
15 | it("parse:: Should strip weird stuff", function () {
|
16 | assert.equal(number.parse("$34.72"), 34.72);
|
17 | assert.equal(number.parse("65.323%"), 65.323);
|
18 | assert.equal(number.parse("65%"), 65);
|
19 | })
|
20 |
|
21 | it("parse:: Should respect negative numbers", function () {
|
22 | assert.equal(number.parse("-65%"), -65);
|
23 | assert.equal(number.parse("-$65.34"), -65.34);
|
24 | assert.equal(number.parse("-78.32-"), -78.32);
|
25 | });
|
26 |
|
27 | it("random:: Should generate a random number between x,y", function () {
|
28 | let rand = number.random(5,10);
|
29 | assert.equal(rand <= 10, true);
|
30 | assert.equal(rand >= 5, true);
|
31 | rand = number.random(100, 1000);
|
32 | assert.equal(rand <= 1000, true);
|
33 | assert.equal(rand >= 100, true);
|
34 | });
|
35 |
|
36 | it("withDelimiter:: Should simply format a number with commas and decimals", function () {
|
37 | assert.equal(number.withDelimiter(4), '4.00');
|
38 | assert.equal(number.withDelimiter(45), '45.00');
|
39 | assert.equal(number.withDelimiter(450), '450.00');
|
40 | assert.equal(number.withDelimiter(4500), '4,500.00');
|
41 | assert.equal(number.withDelimiter(45000), '45,000.00');
|
42 | assert.equal(number.withDelimiter(450000), '450,000.00');
|
43 | assert.equal(number.withDelimiter(4500000), '4,500,000.00');
|
44 | assert.equal(number.withDelimiter(45000000), '45,000,000.00');
|
45 | assert.equal(number.withDelimiter(450000000), '450,000,000.00');
|
46 | assert.equal(number.withDelimiter(4500000000), '4,500,000,000.00');
|
47 | assert.equal(number.withDelimiter(45000000000), '45,000,000,000.00');
|
48 | assert.equal(number.withDelimiter(450000000000), '450,000,000,000.00');
|
49 | assert.equal(number.withDelimiter(4500000000000), '4,500,000,000,000.00');
|
50 | assert.equal(number.withDelimiter(45000000000000), '45,000,000,000,000.00');
|
51 | assert.equal(number.withDelimiter(450000000000000), '450,000,000,000,000.00');
|
52 | assert.equal(number.withDelimiter(99e19), '990,000,000,000,000,000,000.00');
|
53 | });
|
54 |
|
55 | it("toAbbr:: should abbreviate a number", function () {
|
56 | assert.equal(number.toAbbr(45000), '45k');
|
57 | assert.equal(number.toAbbr(450000), '450k');
|
58 | assert.equal(number.toAbbr(4500000), '4.5m');
|
59 | assert.equal(number.toAbbr(45000000), '45m');
|
60 | assert.equal(number.toAbbr(450000000), '450m');
|
61 | assert.equal(number.toAbbr(4500000000), '4.5b');
|
62 | assert.equal(number.toAbbr(45000000000), '45b');
|
63 | assert.equal(number.toAbbr(450000000000), '450b');
|
64 | assert.equal(number.toAbbr(450), '450');
|
65 | assert.equal(number.toAbbr(4500), '4.5k');
|
66 | });
|
67 |
|
68 | it("toData:: should format data", function () {
|
69 | assert.equal(number.toData(126.02 * 1000), '126.0 kB');
|
70 | assert.equal(number.toData(126.32 * 1000), '126.3 kB');
|
71 | assert.equal(number.toData(126.32 * 1000 * 1000), '126.3 MB');
|
72 | assert.equal(number.toData(126.32 * Math.pow(1000, 3)), '126.3 GB');
|
73 | assert.equal(number.toData(126.32 * Math.pow(1000, 4)), '126.3 TB');
|
74 | assert.equal(number.toData(126.32 * Math.pow(1000, 5)), '126.3 PB');
|
75 | assert.equal(number.toData(126.32 * Math.pow(1000, 6)), '126.3 EB');
|
76 | assert.equal(number.toData(126.32 * Math.pow(1000, 7)), '126.3 ZB');
|
77 | assert.equal(number.toData(126.32 * Math.pow(1000, 8)), '126.3 YB');
|
78 | });
|
79 |
|
80 | it("toTime:: should format a number in time", function () {
|
81 | assert.equal(number.toTime(50), '50 sec');
|
82 | assert.equal(number.toTime(60), '1 min');
|
83 | assert.equal(number.toTime(HOUR), '1 hr');
|
84 | assert.equal(number.toTime(DAY), '1 day');
|
85 | assert.equal(number.toTime(DAY * 30), '30 days');
|
86 | assert.equal(number.toTime( (DAY * 2) + 10), '2 days 10 sec');
|
87 | assert.equal(number.toTime( (DAY * 2) + (HOUR * 2) + 32), '2 days 2 hr 32 sec');
|
88 | });
|
89 |
|
90 | it("toTime:: should format a number in time and return an array", function () {
|
91 | assert.deepEqual(number.toTime(50, true), [0, 0, 0, 50]);
|
92 | assert.deepEqual(number.toTime(60, true), [0, 0, 1, 0]);
|
93 | assert.deepEqual(number.toTime(HOUR, true), [0, 1, 0, 0]);
|
94 | assert.deepEqual(number.toTime(DAY, true), [1, 0, 0, 0]);
|
95 | assert.deepEqual(number.toTime(DAY * 30, true), [30, 0, 0, 0]);
|
96 | assert.deepEqual(number.toTime( (DAY * 2) + 10, true), [2, 0, 0, 10]);
|
97 | assert.deepEqual(number.toTime( (DAY * 2) + (HOUR * 2) + 32, true), [2, 2, 0, 32]);
|
98 | });
|
99 |
|
100 | it("toCurrency: should format a number to currency", function () {
|
101 | assert.equal(number.toCurrency(240.658), '$240.66');
|
102 | });
|
103 |
|
104 | it("toCurrency:: should format a negative number to currency", function () {
|
105 | assert.equal(number.toCurrency(-376240.658), '$-376,240.66');
|
106 | });
|
107 |
|
108 | it("toPercent:: should format a number to percentage", function () {
|
109 | assert.equal(number.toPercent(43.47576353), '43.48%');
|
110 | assert.equal(number.toPercent(43.47576353, 4), '43.4758%');
|
111 | });
|
112 |
|
113 | it("toPercent:: should format a number to percentage with extra parameters", function () {
|
114 | assert.equal(number.toPercent(43873.47581765327, 4, '*', '\''), '43\'873*4758%');
|
115 | });
|
116 |
|
117 | it("toPercent:: should format a negative number to percentage", function () {
|
118 | assert.equal(number.toPercent(-43.47576353), '-43.48%');
|
119 | assert.equal(number.toPercent(-43.47576353, 4), '-43.4758%');
|
120 | });
|
121 |
|
122 | it("toPhone:: should format a number as a phone number", function () {
|
123 | assert.equal(number.toPhone(9255551212), "925-555-1212");
|
124 | assert.equal(number.toPhone('9255551212'), "925-555-1212");
|
125 | assert.equal(number.toPhone(9255551212, true), "(925) 555-1212");
|
126 | assert.equal(number.toPhone(9255551212, true, 4528), "(925) 555-1212 x4528");
|
127 | });
|
128 |
|
129 | it("NumberFormatter:: should create new formatters with default parameters", function () {
|
130 | let toGBP = new number.NumberFormatter("£", false, 2, ',', '.');
|
131 | assert.equal(toGBP(1234567.89), '£1.234.567,89');
|
132 | });
|
133 |
|
134 | });
|