SumTest.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig;
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4. class SumTest extends AllSetupTeardown
  5. {
  6. /**
  7. * @dataProvider providerSUM
  8. *
  9. * @param mixed $expectedResult
  10. */
  11. public function testSUM($expectedResult, ...$args): void
  12. {
  13. $sheet = $this->getSheet();
  14. $row = 0;
  15. foreach ($args as $arg) {
  16. ++$row;
  17. $sheet->getCell("A$row")->setValue($arg);
  18. }
  19. $sheet->getCell('B1')->setValue("=SUM(A1:A$row)");
  20. $result = $sheet->getCell('B1')->getCalculatedValue();
  21. self::assertEqualsWithDelta($expectedResult, $result, 1E-12);
  22. }
  23. public function providerSUM(): array
  24. {
  25. return require 'tests/data/Calculation/MathTrig/SUM.php';
  26. }
  27. /**
  28. * @dataProvider providerSUMLiterals
  29. *
  30. * @param mixed $expectedResult
  31. */
  32. public function testSUMLiterals($expectedResult, string $args): void
  33. {
  34. $sheet = $this->getSheet();
  35. $sheet->getCell('B1')->setValue("=SUM($args)");
  36. $result = $sheet->getCell('B1')->getCalculatedValue();
  37. self::assertEqualsWithDelta($expectedResult, $result, 1E-12);
  38. }
  39. public function providerSUMLiterals(): array
  40. {
  41. return require 'tests/data/Calculation/MathTrig/SUMLITERALS.php';
  42. }
  43. /**
  44. * @dataProvider providerSUMWITHINDEXMATCH
  45. *
  46. * @param mixed $expectedResult
  47. */
  48. public function testSumWithIndexMatch($expectedResult, string $formula): void
  49. {
  50. $spreadsheet = new Spreadsheet();
  51. $sheet1 = $spreadsheet->getActiveSheet();
  52. $sheet1->setTitle('Formula');
  53. $sheet1->fromArray(
  54. [
  55. ['Number', 'Formula'],
  56. [83, $formula],
  57. ]
  58. );
  59. $sheet2 = $spreadsheet->createSheet();
  60. $sheet2->setTitle('Lookup');
  61. $sheet2->fromArray(
  62. [
  63. ['Lookup', 'Match'],
  64. [83, 16],
  65. ]
  66. );
  67. self::assertSame($expectedResult, $sheet1->getCell('B2')->getCalculatedValue());
  68. $spreadsheet->disconnectWorksheets();
  69. }
  70. public function providerSUMWITHINDEXMATCH(): array
  71. {
  72. return require 'tests/data/Calculation/MathTrig/SUMWITHINDEXMATCH.php';
  73. }
  74. }