@@ -335,6 +335,86 @@ class_uses_recursive(Number::class)
335335 $ this ->assertSame ('1230.12 ' , $ number ->value ());
336336});
337337
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+
338418class TestNumber extends Number
339419{
340420 public function __construct (int |string |float $ number , protected int $ scale = 2 )
0 commit comments