ConvertUoMTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\Engineering;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
  4. use PhpOffice\PhpSpreadsheet\Calculation\Engineering;
  5. use PHPUnit\Framework\TestCase;
  6. class ConvertUoMTest extends TestCase
  7. {
  8. const UOM_PRECISION = 1E-12;
  9. public function testGetConversionGroups(): void
  10. {
  11. $result = Engineering::getConversionGroups();
  12. self::assertIsArray($result);
  13. }
  14. public function testGetConversionGroupUnits(): void
  15. {
  16. $result = Engineering::getConversionGroupUnits();
  17. self::assertIsArray($result);
  18. }
  19. public function testGetConversionGroupUnitDetails(): void
  20. {
  21. $result = Engineering::getConversionGroupUnitDetails();
  22. self::assertIsArray($result);
  23. }
  24. public function testGetConversionMultipliers(): void
  25. {
  26. $result = Engineering::getConversionMultipliers();
  27. self::assertIsArray($result);
  28. }
  29. public function testGetBinaryConversionMultipliers(): void
  30. {
  31. $result = Engineering::getBinaryConversionMultipliers();
  32. self::assertIsArray($result);
  33. }
  34. /**
  35. * @dataProvider providerCONVERTUOM
  36. *
  37. * @param mixed $expectedResult
  38. */
  39. public function testCONVERTUOM($expectedResult, ...$args): void
  40. {
  41. $result = Engineering::CONVERTUOM(...$args);
  42. self::assertEqualsWithDelta($expectedResult, $result, self::UOM_PRECISION);
  43. }
  44. public function providerCONVERTUOM(): array
  45. {
  46. return require 'tests/data/Calculation/Engineering/CONVERTUOM.php';
  47. }
  48. /**
  49. * @dataProvider providerConvertUoMArray
  50. */
  51. public function testConvertUoMArray(array $expectedResult, string $value, string $fromUoM, string $toUoM): void
  52. {
  53. $calculation = Calculation::getInstance();
  54. $formula = "=CONVERT({$value}, {$fromUoM}, {$toUoM})";
  55. $result = $calculation->_calculateFormulaValue($formula);
  56. self::assertEqualsWithDelta($expectedResult, $result, self::UOM_PRECISION);
  57. }
  58. public function providerConvertUoMArray(): array
  59. {
  60. return [
  61. 'Weight/Mass' => [
  62. [
  63. [71.42857142857142, 0.15747304441777],
  64. [453.5923699999991, 1.0],
  65. ],
  66. '1000',
  67. '{"lbm", "g"}',
  68. '{"stone"; "kg"}',
  69. ],
  70. 'Distance' => [
  71. [
  72. [2025371.8285214372, 1093.6132983377101],
  73. [1851.9999999999984, 1.0],
  74. ],
  75. '1000',
  76. '{"Nmi", "m"}',
  77. '{"yd"; "km"}',
  78. ],
  79. 'Volume' => [
  80. [
  81. [2.976190476190475, 0.00628981077043211],
  82. [473.1764729999994, 1.0],
  83. ],
  84. '1000',
  85. '{"pt", "ml"}',
  86. '{"barrel"; "l"}',
  87. ],
  88. 'Area' => [
  89. [
  90. [999.9960000040016, 0.247104393046628],
  91. [404.6856422400005, 0.1],
  92. ],
  93. '1000',
  94. '{"uk_acre", "m2"}',
  95. '{"us_acre"; "ha"}',
  96. ],
  97. ];
  98. }
  99. }