XirrTest.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Financial;
  3. class XirrTest extends AllSetupTeardown
  4. {
  5. /**
  6. * @dataProvider providerXIRR
  7. *
  8. * @param mixed $expectedResult
  9. * @param string $message
  10. * @param mixed $values
  11. * @param mixed $dates
  12. * @param mixed $guess
  13. */
  14. public function testXIRR($expectedResult, $message, $values = null, $dates = null, $guess = null): void
  15. {
  16. $this->mightHaveException($expectedResult);
  17. $sheet = $this->getSheet();
  18. $formula = '=XIRR(';
  19. if ($values !== null) {
  20. if (is_array($values)) {
  21. $row = 0;
  22. foreach ($values as $value) {
  23. ++$row;
  24. $sheet->getCell("A$row")->setValue($value);
  25. }
  26. $formula .= "A1:A$row";
  27. } else {
  28. $sheet->getCell('A1')->setValue($values);
  29. $formula .= 'A1';
  30. }
  31. if ($dates !== null) {
  32. if (is_array($dates)) {
  33. $row = 0;
  34. foreach ($dates as $date) {
  35. ++$row;
  36. $sheet->getCell("B$row")->setValue($date);
  37. }
  38. $formula .= ",B1:B$row";
  39. } else {
  40. $sheet->getCell('B1')->setValue($dates);
  41. $formula .= ',B1';
  42. }
  43. if ($guess !== null) {
  44. if ($guess !== 'C1') {
  45. $sheet->getCell('C1')->setValue($guess);
  46. }
  47. $formula .= ', C1';
  48. }
  49. }
  50. }
  51. $formula .= ')';
  52. $sheet->getCell('D1')->setValue($formula);
  53. $result = $sheet->getCell('D1')->getCalculatedValue();
  54. $this->adjustResult($result, $expectedResult);
  55. self::assertEqualsWithDelta($expectedResult, $result, 0.1E-7, $message);
  56. }
  57. public function providerXIRR(): array
  58. {
  59. return require 'tests/data/Calculation/Financial/XIRR.php';
  60. }
  61. }