Skip to content

Commit 0eda3b9

Browse files
Merge pull request #31 from olsza/feat/refactoring-tests
Refactoring tests for Number
2 parents 3883d36 + 3702d1f commit 0eda3b9

1 file changed

Lines changed: 83 additions & 125 deletions

File tree

tests/Unit/Primitive/NumberTest.php

Lines changed: 83 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -37,78 +37,59 @@
3737
$this->assertSame('40001.586', $number->multiply(2));
3838
});
3939

40-
test('number can accept string', function () {
41-
$valueObject = new Number('1');
42-
$this->assertSame('1.00', $valueObject->value());
43-
$valueObject = new Number('1.2');
44-
$this->assertSame('1.20', $valueObject->value());
45-
$valueObject = new Number('1.3');
46-
$this->assertSame('1.30', $valueObject->value());
47-
$valueObject = new Number('1.7');
48-
$this->assertSame('1.70', $valueObject->value());
49-
$valueObject = new Number('1.8');
50-
$this->assertSame('1.80', $valueObject->value());
51-
$valueObject = new Number('2');
52-
$this->assertSame('2.00', $valueObject->value());
53-
$valueObject = new Number('3.1');
54-
$this->assertSame('3.10', $valueObject->value());
55-
$valueObject = new Number(' 100,000 ');
56-
$this->assertSame('100.00', $valueObject->value());
57-
$valueObject = new Number(' 100 000,000 ', 3);
58-
$this->assertSame('100000.000', $valueObject->value());
59-
});
60-
61-
test('number accepts formatted value', function () {
40+
test('number can accept string', function ($input, $result) {
41+
$valueObject = new Number($input);
42+
$this->assertSame($result, $valueObject->value());
43+
})->with([
44+
['1', '1.00'],
45+
['1.2', '1.20'],
46+
['1.3', '1.30'],
47+
['1.7', '1.70'],
48+
['1.8', '1.80'],
49+
['2', '2.00'],
50+
['3.1', '3.10'],
51+
[' 100,000 ', '100.00'],
52+
[' 100 000 ,000 ', '100000.00'],
53+
]);
54+
55+
test('number accepts formatted value', function ($input, $scale, $result) {
56+
$valueObject = new Number($input, $scale);
57+
$this->assertSame($result, $valueObject->value());
58+
})->with([
6259
// Only commas:
63-
$valueObject = new Number('1,230,00');
64-
assertSame('1230.00', $valueObject->value());
65-
$valueObject = new Number('123,123,123,5555', scale: 3);
66-
assertSame('123123123.555', $valueObject->value());
60+
['1,230,00', 2, '1230.00'],
61+
['123,123,123,5555', 3, '123123123.555'],
6762

6863
// Only dots:
69-
$valueObject = new Number('1.230.00');
70-
assertSame('1230.00', $valueObject->value());
71-
$valueObject = new Number('123.123.123.555');
72-
assertSame('123123123.55', $valueObject->value());
64+
['1.230.00', 2, '1230.00'],
65+
['123.123.123.555', 2, '123123123.55'],
7366

7467
// Dot-comma convention:
75-
$valueObject = new Number('1.230,00');
76-
assertSame('1230.00', $valueObject->value());
77-
$valueObject = new Number('123.123.123,556', scale: 3);
78-
assertSame('123123123.556', $valueObject->value());
68+
['1.230,00', 2, '1230.00'],
69+
['123.123.123,556', 3, '123123123.556'],
7970

8071
// Comma-dot convention:
81-
$valueObject = new Number('1,230.00');
82-
assertSame('1230.00', $valueObject->value());
83-
$valueObject = new Number('123,123,123.555');
84-
assertSame('123123123.55', $valueObject->value());
72+
['1,230.00', 2, '1230.00'],
73+
['123,123,123.555', 2, '123123123.55'],
8574

8675
// Space-dot convention:
87-
$valueObject = new Number('1 230.00');
88-
assertSame('1230.00', $valueObject->value());
89-
$valueObject = new Number('123 123 123.55');
90-
assertSame('123123123.55', $valueObject->value());
76+
['1 230.00', 2, '1230.00'],
77+
['123 123 123.55', 2, '123123123.55'],
9178

9279
// Space-comma convention:
93-
$valueObject = new Number('1 230,00');
94-
assertSame('1230.00', $valueObject->value());
95-
$valueObject = new Number('123 123 123,55');
96-
assertSame('123123123.55', $valueObject->value());
80+
['1 230,00', 2, '1230.00'],
81+
['123 123 123,55', 2, '123123123.55'],
9782

9883
// Mixed convention:
99-
$valueObject = new Number('1 230,');
100-
assertSame('1230.00', $valueObject->value());
101-
$valueObject = new Number(',00');
102-
assertSame('0.00', $valueObject->value());
103-
$valueObject = new Number('.00');
104-
assertSame('0.00', $valueObject->value());
105-
$valueObject = new Number('123.123 123,55');
106-
assertSame('123123123.55', $valueObject->value());
107-
$valueObject = new Number('123,123.123,55');
108-
assertSame('123123123.55', $valueObject->value());
109-
$valueObject = new Number('123 123 123,55');
110-
assertSame('123123123.55', $valueObject->value());
111-
});
84+
['1 230,', 2, '1230.00'],
85+
[',00', 2, '0.00'],
86+
['.00', 2, '0.00'],
87+
['123.123 123,55', 2, '123123123.55'],
88+
['123,123.123,55', 2, '123123123.55'],
89+
['123 123 123,55', 2, '123123123.55'],
90+
[' 100 000,00 ', 3, '100000.000'],
91+
[' 100 000,000 ', 2, '100000.00'],
92+
]);
11293

11394
test('number fails when no argument passed', function () {
11495
$this->expectException(\TypeError::class);
@@ -134,72 +115,49 @@
134115
new Number(null);
135116
});
136117

137-
test('number can change decimals', function () {
138-
$valueObject = new Number('111777999.97');
139-
$this->assertSame('111777999.97', $valueObject->value());
140-
$valueObject = new Number('111777999,97');
141-
$this->assertSame('111777999.97', $valueObject->value());
142-
$valueObject = new Number('111777999.99999999997', 11);
143-
$this->assertSame('111777999.99999999997', $valueObject->value());
144-
$valueObject = new Number('92233720368.547', 3);
145-
$this->assertSame('92233720368.547', $valueObject->value());
146-
147-
$valueObject = new Number('7.1', 0);
148-
$this->assertSame('7', $valueObject->value());
149-
$valueObject = new Number('7.1', 1);
150-
$this->assertSame('7.1', $valueObject->value());
151-
$valueObject = new Number('7.11', 2);
152-
$this->assertSame('7.11', $valueObject->value());
153-
$valueObject = new Number('7.99', 3);
154-
$this->assertSame('7.990', $valueObject->value());
155-
$valueObject = new Number('70.1', 4);
156-
$this->assertSame('70.1000', $valueObject->value());
157-
$valueObject = new Number('71.1', 5);
158-
$this->assertSame('71.10000', $valueObject->value());
159-
$valueObject = new Number('17.9', 6);
160-
$this->assertSame('17.900000', $valueObject->value());
161-
$valueObject = new Number('11.1', 7);
162-
$this->assertSame('11.1000000', $valueObject->value());
163-
$valueObject = new Number('11.7', 8);
164-
$this->assertSame('11.70000000', $valueObject->value());
165-
$valueObject = new Number('77.77', 9);
166-
$this->assertSame('77.770000000', $valueObject->value());
167-
$valueObject = new Number('777.7', 10);
168-
$this->assertSame('777.7000000000', $valueObject->value());
169-
$valueObject = new Number('777.7', 11);
170-
$this->assertSame('777.70000000000', $valueObject->value());
171-
$valueObject = new Number('777.77', 12);
172-
$this->assertSame('777.770000000000', $valueObject->value());
173-
$valueObject = new Number('777.777', 13);
174-
$this->assertSame('777.7770000000000', $valueObject->value());
175-
$valueObject = new Number('7771.777', 14);
176-
$this->assertSame('7771.77700000000000', $valueObject->value());
177-
$valueObject = new Number('7771.7771', 15);
178-
$this->assertSame('7771.777100000000000', $valueObject->value());
179-
$valueObject = new Number('7771.77711', 16);
180-
$this->assertSame('7771.7771100000000000', $valueObject->value());
181-
$valueObject = new Number('7771.777111', 17);
182-
$this->assertSame('7771.77711100000000000', $valueObject->value());
183-
$valueObject = new Number('7771.7771119', 18);
184-
$this->assertSame('7771.777111900000000000', $valueObject->value());
185-
$valueObject = new Number('7771.77711199', 19);
186-
$this->assertSame('7771.7771119900000000000', $valueObject->value());
187-
$valueObject = new Number('777177711191777.99977777777777777777', 20);
188-
$this->assertSame('777177711191777.99977777777777777777', $valueObject->value());
189-
$valueObject = new Number('777177711191777.99977777777777777777', 20);
190-
$this->assertSame('777177711191777.99977777777777777777', $valueObject->value());
191-
});
192-
193-
test('number can handle huge numbers', function () {
194-
$valueObject = new Number('111777999.97');
195-
$this->assertSame('111777999.97', $valueObject->value());
196-
$valueObject = new Number('111777999,97');
197-
$this->assertSame('111777999.97', $valueObject->value());
198-
$valueObject = new Number('111777999.99999999997', 11);
199-
$this->assertSame('111777999.99999999997', $valueObject->value());
200-
$valueObject = new Number('92233720368.547', 3);
201-
$this->assertSame('92233720368.547', $valueObject->value());
202-
});
118+
test('number can change decimals', function ($input, $scale, $result) {
119+
$valueObject = new Number($input, $scale);
120+
$this->assertSame($result, $valueObject->value());
121+
})->with([
122+
['111777999.97', 2, '111777999.97'],
123+
['111777999,97', 2, '111777999.97'],
124+
['111777999.99999999997', 11, '111777999.99999999997'],
125+
['92233720368.547', 3, '92233720368.547'],
126+
127+
['7.1', 0, '7'],
128+
['7.1', 1, '7.1'],
129+
['7.11', 2, '7.11'],
130+
['7.99', 3, '7.990'],
131+
['70.1', 4, '70.1000'],
132+
['71.1', 5, '71.10000'],
133+
['17.9', 6, '17.900000'],
134+
['11.1', 7, '11.1000000'],
135+
['11.7', 8, '11.70000000'],
136+
['77.77', 9, '77.770000000'],
137+
['777.7', 10, '777.7000000000'],
138+
['777.7', 11, '777.70000000000'],
139+
['777.77', 12, '777.770000000000'],
140+
['777.777', 13, '777.7770000000000'],
141+
['7771.777', 14, '7771.77700000000000'],
142+
['7771.7771', 15, '7771.777100000000000'],
143+
['7771.77711', 16, '7771.7771100000000000'],
144+
['7771.777111', 17, '7771.77711100000000000'],
145+
['7771.7771119', 18, '7771.777111900000000000'],
146+
['7771.77711199', 19, '7771.7771119900000000000'],
147+
['777177711191777.99977777777777777777', 20, '777177711191777.99977777777777777777'],
148+
]);
149+
150+
test('number can handle huge numbers', function ($input, $scale, $result) {
151+
$valueObject = new Number($input, $scale);
152+
$this->assertSame($result, $valueObject->value());
153+
})->with([
154+
['111777999.97', 2, '111777999.97'],
155+
['111777999,97', 2, '111777999.97'],
156+
['111777999.99999999997', 11, '111777999.99999999997'],
157+
['92233720368.547', 3, '92233720368.547'],
158+
['9876543210111777999.9087', 2, '9876543210111777999.90'],
159+
['98765432101117779990000.9087', 1, '98765432101117779990000.9'],
160+
]);
203161

204162
test('number is makeable', function () {
205163
$valueObject = Number::make('1');

0 commit comments

Comments
 (0)