RandBetweenTest.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\MathTrig;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. class RandBetweenTest extends AllSetupTeardown
  5. {
  6. /**
  7. * @dataProvider providerRANDBETWEEN
  8. *
  9. * @param mixed $expectedResult
  10. * @param mixed $min
  11. * @param mixed $max
  12. */
  13. public function testRANDBETWEEN($expectedResult, $min = 'omitted', $max = 'omitted'): void
  14. {
  15. $this->mightHaveException($expectedResult);
  16. $sheet = $this->getSheet();
  17. $lower = (int) $min;
  18. $upper = (int) $max;
  19. if ($min !== null) {
  20. $sheet->getCell('A1')->setValue($min);
  21. }
  22. if ($max !== null) {
  23. $sheet->getCell('A2')->setValue($max);
  24. }
  25. if ($min === 'omitted') {
  26. $sheet->getCell('B1')->setValue('=RANDBETWEEN()');
  27. } elseif ($max === 'omitted') {
  28. $sheet->getCell('B1')->setValue('=RANDBETWEEN(A1)');
  29. } else {
  30. $sheet->getCell('B1')->setValue('=RANDBETWEEN(A1,A2)');
  31. }
  32. $result = $sheet->getCell('B1')->getCalculatedValue();
  33. if (is_numeric($expectedResult)) {
  34. self::assertGreaterThanOrEqual($lower, $result);
  35. self::assertLessThanOrEqual($upper, $result);
  36. } else {
  37. self::assertSame($expectedResult, $result);
  38. }
  39. }
  40. public function providerRANDBETWEEN(): array
  41. {
  42. return require 'tests/data/Calculation/MathTrig/RANDBETWEEN.php';
  43. }
  44. /**
  45. * @dataProvider providerRandBetweenArray
  46. */
  47. public function testRandBetweenArray(
  48. int $expectedRows,
  49. int $expectedColumns,
  50. string $argument1,
  51. string $argument2
  52. ): void {
  53. $calculation = Calculation::getInstance();
  54. $formula = "=RandBetween({$argument1}, {$argument2})";
  55. $result = $calculation->_calculateFormulaValue($formula);
  56. self::assertIsArray($result);
  57. self::assertCount($expectedRows, /** @scrutinizer ignore-type */ $result);
  58. self::assertIsArray($result[0]);
  59. self::assertCount($expectedColumns, /** @scrutinizer ignore-type */ $result[0]);
  60. }
  61. public function providerRandBetweenArray(): array
  62. {
  63. return [
  64. 'row/column vectors' => [2, 2, '{1, 10}', '{10; 100}'],
  65. ];
  66. }
  67. }