ChiInvLeftTailTest.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Statistical;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Calculation\Functions;
  5. use PhpOffice\PhpSpreadsheet\Calculation\Statistical;
  6. use PHPUnit\Framework\TestCase;
  7. class ChiInvLeftTailTest extends TestCase
  8. {
  9. protected function setUp(): void
  10. {
  11. Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL);
  12. }
  13. /**
  14. * @dataProvider providerCHIINV
  15. *
  16. * @param mixed $expectedResult
  17. * @param mixed $probability
  18. * @param mixed $degrees
  19. */
  20. public function testCHIINV($expectedResult, $probability, $degrees): void
  21. {
  22. $result = Statistical\Distributions\ChiSquared::inverseLeftTail($probability, $degrees);
  23. if (!is_string($expectedResult)) {
  24. $reverse = Statistical\Distributions\ChiSquared::distributionLeftTail($result, $degrees, true);
  25. self::assertEqualsWithDelta($probability, $reverse, 1E-12);
  26. }
  27. self::assertEqualsWithDelta($expectedResult, $result, 1E-12);
  28. }
  29. public function providerCHIINV(): array
  30. {
  31. return require 'tests/data/Calculation/Statistical/CHIINVLeftTail.php';
  32. }
  33. /**
  34. * @dataProvider providerChiInvLeftTailArray
  35. */
  36. public function testChiInvLeftTailArray(array $expectedResult, string $probabilities, string $degrees): void
  37. {
  38. $calculation = Calculation::getInstance();
  39. $formula = "=CHISQ.INV({$probabilities}, {$degrees})";
  40. $result = $calculation->_calculateFormulaValue($formula);
  41. self::assertEqualsWithDelta($expectedResult, $result, 1.0e-14);
  42. }
  43. public function providerChiInvLeftTailArray(): array
  44. {
  45. return [
  46. 'row/column vectors' => [
  47. [
  48. [5.0816470296362795, 6.345811195521517, 1.508898337422818],
  49. [9.61151737996991, 11.34032237742413, 4.0773397083341045],
  50. ],
  51. '{0.35, 0.5, 0.018}',
  52. '{7; 12}',
  53. ],
  54. ];
  55. }
  56. }