DollarDeTest.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Calculation\Financial;
  5. use PHPUnit\Framework\TestCase;
  6. class DollarDeTest extends TestCase
  7. {
  8. /**
  9. * @dataProvider providerDOLLARDE
  10. *
  11. * @param mixed $expectedResult
  12. */
  13. public function testDOLLARDE($expectedResult, ...$args): void
  14. {
  15. if (count($args) === 0) {
  16. $result = Financial::DOLLARDE();
  17. } elseif (count($args) === 1) {
  18. $result = Financial::DOLLARDE($args[0]);
  19. } else {
  20. $result = Financial::DOLLARDE($args[0], $args[1]);
  21. }
  22. self::assertEqualsWithDelta($expectedResult, $result, 1E-8);
  23. }
  24. public function providerDOLLARDE(): array
  25. {
  26. return require 'tests/data/Calculation/Financial/DOLLARDE.php';
  27. }
  28. /**
  29. * @dataProvider providerDollarDeArray
  30. */
  31. public function testDollarDeArray(array $expectedResult, string $argument1, string $argument2): void
  32. {
  33. $calculation = Calculation::getInstance();
  34. $formula = "=DollarDe({$argument1},{$argument2})";
  35. $result = $calculation->_calculateFormulaValue($formula);
  36. self::assertEqualsWithDelta($expectedResult, $result, 1.0e-12);
  37. }
  38. public function providerDollarDeArray(): array
  39. {
  40. return [
  41. 'first argument row vector' => [
  42. [[1.125, 2.0625, -12.625, 3.5]],
  43. '{1.02, 2.01, -12.1, 1.4}',
  44. '16',
  45. ],
  46. 'first argument column vector' => [
  47. [[1.0625], [2.03125], [-12.3125], [2.25]],
  48. '{1.02; 2.01; -12.1; 1.4}',
  49. '32',
  50. ],
  51. 'first argument matrix' => [
  52. [[1.05, 2.25], [-12.5, 2.0]],
  53. '{1.02, 2.1; -12.2, 1.4}',
  54. '4',
  55. ],
  56. 'second argument row vector' => [
  57. [[4.25, 3.625, 6.125, 4.5625]],
  58. '3.5',
  59. '{4, 8, 16, 32}',
  60. ],
  61. 'second argument column vector' => [
  62. [[5.5], [4.25], [3.625], [6.125]],
  63. '3.5',
  64. '{2; 4; 8; 16}',
  65. ],
  66. 'second argument matrix' => [
  67. [[-4.875, -3.9375], [-9.25, -7.6875]],
  68. '-3.75',
  69. '{4, 8; 12, 16}',
  70. ],
  71. ];
  72. }
  73. }