@@ -335,6 +335,86 @@ class_uses_recursive(Number::class)
335
335
$ this ->assertSame ('1230.12 ' , $ number ->value ());
336
336
});
337
337
338
+ test ('number can accept negative integer ' , function () {
339
+ $ valueObject = new Number (-1 );
340
+ $ this ->assertSame ('-1.00 ' , $ valueObject ->value ());
341
+ $ valueObject = new Number (-2 );
342
+ $ this ->assertSame ('-2.00 ' , $ valueObject ->value ());
343
+ });
344
+
345
+ test ('number can cast negative value to integer ' , function () {
346
+ $ valueObject = new Number ('-100 ' );
347
+ $ this ->assertSame (-100 , $ valueObject ->asInteger ());
348
+ });
349
+
350
+ test ('number can cast negative value to float ' , function () {
351
+ $ valueObject = new Number ('-36000.50 ' );
352
+ $ this ->assertSame (-36000.50 , $ valueObject ->asFloat ());
353
+ });
354
+
355
+ test ('negative number as a big number ' , function () {
356
+ $ number = new Number ('-20000.793 ' , 3 );
357
+ $ this ->assertEquals (new BigNumber ('-20000.793 ' , 3 , false ), $ number ->asBigNumber ());
358
+ });
359
+
360
+ test ('negative number can be divided using magic call ' , function () {
361
+ $ number = new Number ('-20000.793 ' , 4 );
362
+ $ this ->assertSame ('-10000.3965 ' , $ number ->divide (2 ));
363
+ });
364
+
365
+ test ('negative number can be multiplied using magic call ' , function () {
366
+ $ number = new Number ('-20000.793 ' , 3 );
367
+ $ this ->assertSame ('-40001.586 ' , $ number ->multiply (2 ));
368
+ });
369
+
370
+ test ('negative number strips zeros when the value starts from zero ' , function ($ input , $ result ) {
371
+ $ valueObject = new Number ($ input );
372
+ $ this ->assertSame ($ result , $ valueObject ->value ());
373
+ })->with ([
374
+ ['-0000123.987 ' , '-123.98 ' ],
375
+ ['-0000123 ' , '-123.00 ' ],
376
+ ]);
377
+
378
+ test ('negative number accepts formatted value ' , function ($ input , $ scale , $ result ) {
379
+ $ valueObject = new Number ($ input , $ scale );
380
+ $ this ->assertSame ($ result , $ valueObject ->value ());
381
+ })->with ([
382
+ ['-1,230,00 ' , 2 , '-1230.00 ' ],
383
+ ['-123.123.123,556 ' , 3 , '-123123123.556 ' ],
384
+ ['-1 230,00 ' , 2 , '-1230.00 ' ],
385
+ ['-777.7 ' , 3 , '-777.700 ' ],
386
+ ]);
387
+
388
+ test ('negative number fails when invalid text provided ' , function () {
389
+ $ this ->expectException (\InvalidArgumentException::class);
390
+
391
+ new Number ('-asd ' );
392
+ });
393
+
394
+ test ('negative number fails when empty string passed ' , function () {
395
+ $ this ->expectException (\InvalidArgumentException::class);
396
+
397
+ new Number ('- ' );
398
+ });
399
+
400
+ test ('negative number can change decimals as a string input ' , function ($ input , $ scale , $ result ) {
401
+ $ valueObject = new Number ($ input , $ scale );
402
+ $ this ->assertSame ($ result , $ valueObject ->value ());
403
+ })->with ([
404
+ ['-111777999.97 ' , 2 , '-111777999.97 ' ],
405
+ ['-111777999,97 ' , 2 , '-111777999.97 ' ],
406
+ ['-7.99 ' , 3 , '-7.990 ' ],
407
+ ['-71.1 ' , 5 , '-71.10000 ' ],
408
+ ]);
409
+
410
+ test ('negative number can handle huge numbers ' , function ($ input , $ scale , $ result ) {
411
+ $ valueObject = new Number ($ input , $ scale );
412
+ $ this ->assertSame ($ result , $ valueObject ->value ());
413
+ })->with ([
414
+ ['-9876543210111777999.9087 ' , 2 , '-9876543210111777999.90 ' ],
415
+ ['-98765432101117779990000.9087 ' , 1 , '-98765432101117779990000.9 ' ],
416
+ ]);
417
+
338
418
class TestNumber extends Number
339
419
{
340
420
public function __construct (int |string |float $ number , protected int $ scale = 2 )
0 commit comments