88use PhpOffice \PhpSpreadsheet \Shared \File ;
99use PhpOffice \PhpSpreadsheet \Spreadsheet ;
1010use PhpOffice \PhpSpreadsheet \Writer \Xlsx as Writer ;
11+ use PHPUnit \Framework \Attributes \DataProvider ;
1112use PHPUnit \Framework \TestCase ;
1213
1314class FloatsRetainedTest extends TestCase
1415{
15- #[\ PHPUnit \ Framework \ Attributes \ DataProvider('providerIntyFloatsRetainedByWriter ' )]
16- public function testIntyFloatsRetainedByWriter (float |int $ value ): void
16+ #[DataProvider('providerIntyFloatsRetainedByWriter ' )]
17+ public function testIntyFloatsRetainedByWriter (float |int $ value, mixed $ expected = null ): void
1718 {
19+ if ($ expected === null ) {
20+ $ expected = $ value ;
21+ }
1822 $ outputFilename = File::temporaryFilename ();
1923 $ spreadsheet = new Spreadsheet ();
20- $ spreadsheet ->getActiveSheet ()->getCell ('A1 ' )->setValue ($ value );
24+ $ spreadsheet ->getActiveSheet ()
25+ ->getCell ('A1 ' )->setValue ($ value );
2126
2227 $ writer = new Writer ($ spreadsheet );
2328 $ writer ->save ($ outputFilename );
@@ -27,7 +32,11 @@ public function testIntyFloatsRetainedByWriter(float|int $value): void
2732 $ spreadsheet2 = $ reader ->load ($ outputFilename );
2833 unlink ($ outputFilename );
2934
30- self ::assertSame ($ value , $ spreadsheet2 ->getActiveSheet ()->getCell ('A1 ' )->getValue ());
35+ self ::assertSame (
36+ $ expected ,
37+ $ spreadsheet2 ->getActiveSheet ()
38+ ->getCell ('A1 ' )->getValue ()
39+ );
3140 $ spreadsheet2 ->disconnectWorksheets ();
3241 }
3342
@@ -44,10 +53,10 @@ public static function providerIntyFloatsRetainedByWriter(): array
4453 [1.3e-10 ],
4554 [1e10 ],
4655 [3.00000000000000000001 ],
47- [ 99999999999999999 ],
48- [99999999999999999 .0 ],
49- [ 999999999999999999999999999999999999999999 ],
50- [999999999999999999999999999999999999999999 .0 ],
56+ ' int but too much precision for Excel ' => [ 99_999_999_999_999_999 , ' 99999999999999999 ' ],
57+ [99_999_999_999_999_999 .0 ],
58+ ' int > PHP_INT_MAX so stored as float ' => [ 999_999_999_999_999_999_999_999_999_999_999_999_999_999 ],
59+ [999_999_999_999_999_999_999_999_999_999_999_999_999_999 .0 ],
5160 ];
5261 }
5362}
0 commit comments