ArrayFormulaTest.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Calculation\Functions;
  5. use PHPUnit\Framework\TestCase;
  6. class ArrayFormulaTest extends TestCase
  7. {
  8. /**
  9. * @var string
  10. */
  11. private $compatibilityMode;
  12. /**
  13. * @var string
  14. */
  15. private $locale;
  16. protected function setUp(): void
  17. {
  18. $this->compatibilityMode = Functions::getCompatibilityMode();
  19. $calculation = Calculation::getInstance();
  20. $this->locale = $calculation->getLocale();
  21. Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL);
  22. }
  23. protected function tearDown(): void
  24. {
  25. Functions::setCompatibilityMode($this->compatibilityMode);
  26. $calculation = Calculation::getInstance();
  27. $calculation->setLocale($this->locale);
  28. }
  29. /**
  30. * @dataProvider providerArrayFormulae
  31. *
  32. * @param mixed $expectedResult
  33. */
  34. public function testArrayFormula(string $formula, $expectedResult): void
  35. {
  36. $result = Calculation::getInstance()->_calculateFormulaValue($formula);
  37. self::assertEquals($expectedResult, $result);
  38. }
  39. public function providerArrayFormulae(): array
  40. {
  41. return [
  42. [
  43. '=MAX(ABS({-3, 4, -2; 6, -3, -12}))',
  44. 12,
  45. ],
  46. [
  47. '=SUM(SEQUENCE(3,3,0,1))',
  48. 36,
  49. ],
  50. [
  51. '=IFERROR({5/2, 5/0}, MAX(ABS({-2,4,-6})))',
  52. [[2.5, 6]],
  53. ],
  54. [
  55. '=MAX(IFERROR({5/2, 5/0}, 2.1))',
  56. 2.5,
  57. ],
  58. [
  59. '=IF(FALSE,{1,2,3},{4,5,6})',
  60. [[4, 5, 6]],
  61. ],
  62. [
  63. '=IFS(FALSE, {1,2,3}, TRUE, {4,5,6})',
  64. [[4, 5, 6]],
  65. ],
  66. ];
  67. }
  68. }