Commit | Line | Data |
---|---|---|
ac5f2ccd | 1 | <?php |
aba1cd8b EM |
2 | |
3 | /** | |
4 | * Class CRM_Utils_NumberTest | |
acb109b7 | 5 | * @group headless |
aba1cd8b | 6 | */ |
ac5f2ccd TO |
7 | class CRM_Utils_NumberTest extends CiviUnitTestCase { |
8 | ||
aba1cd8b EM |
9 | /** |
10 | * @return array | |
11 | */ | |
00be9182 | 12 | public function randomDecimalCases() { |
9099cab3 | 13 | $cases = []; |
ac5f2ccd | 14 | // array(array $precision, int $expectedMinInclusive, int $expectedMaxExclusive) |
9099cab3 CW |
15 | $cases[] = [[1, 0], 0, 10]; |
16 | $cases[] = [[5, 2], 0, 1000]; | |
17 | $cases[] = [[10, 8], 0, 100]; | |
ac5f2ccd TO |
18 | return $cases; |
19 | } | |
20 | ||
21 | /** | |
22 | * @param array $precision | |
23 | * @param int $expectedMinInclusive | |
24 | * @param int $expectedMaxExclusive | |
25 | * @dataProvider randomDecimalCases | |
26 | */ | |
00be9182 | 27 | public function testCreateRandomDecimal($precision, $expectedMinInclusive, $expectedMaxExclusive) { |
ac5f2ccd TO |
28 | list ($sigFigs, $decFigs) = $precision; |
29 | for ($i = 0; $i < 10; $i++) { | |
30 | $decimal = CRM_Utils_Number::createRandomDecimal($precision); | |
31 | // print "Assert $decimal between $expectedMinInclusive and $expectedMaxExclusive\n"; | |
32 | $this->assertTrue(($expectedMinInclusive <= $decimal) && ($decimal < $expectedMaxExclusive), "Assert $decimal between $expectedMinInclusive and $expectedMaxExclusive"); | |
33 | if (strpos($decimal, '.') === FALSE) { | |
34 | $decimal .= '.'; | |
35 | } | |
36 | list ($before, $after) = explode('.', $decimal); | |
37 | $this->assertTrue(strlen($before) + strlen($after) <= $sigFigs, "Assert $decimal [$before;$after] has <= $sigFigs sigFigs"); | |
38 | $this->assertTrue(strlen($after) <= $decFigs, "Assert $decimal [$before;$after] has <= $decFigs decFigs"); | |
39 | } | |
40 | } | |
41 | ||
4cbe18b8 EM |
42 | /** |
43 | * @return array | |
44 | */ | |
00be9182 | 45 | public function truncDecimalCases() { |
9099cab3 | 46 | $cases = []; |
ac5f2ccd | 47 | // array($value, $precision, $expectedValue) |
9099cab3 CW |
48 | $cases[] = [523, [1, 0], 5]; |
49 | $cases[] = [523, [5, 2], 523]; | |
50 | $cases[] = [523, [10, 8], 52.3]; | |
51 | $cases[] = [12345, [3, 3], 0.123]; | |
52 | $cases[] = [0.12345, [10, 0], 12345]; | |
53 | $cases[] = [-123.45, [4, 2], -12.34]; | |
ac5f2ccd TO |
54 | return $cases; |
55 | } | |
56 | ||
57 | /** | |
58 | * @param $value | |
59 | * @param $precision | |
60 | * @param $expectedValue | |
61 | * @dataProvider truncDecimalCases | |
62 | */ | |
00be9182 | 63 | public function testCreateTruncatedDecimal($value, $precision, $expectedValue) { |
ac5f2ccd TO |
64 | list ($sigFigs, $decFigs) = $precision; |
65 | $this->assertEquals($expectedValue, CRM_Utils_Number::createTruncatedDecimal($value, $precision), | |
66 | "assert createTruncatedValue($value, ($sigFigs,$decFigs)) == $expectedValue" | |
67 | ); | |
68 | } | |
96025800 | 69 | |
20a30849 SL |
70 | public function sizeCases() { |
71 | $cases = []; | |
72 | $cases[] = ['20M', '20971520']; | |
73 | $cases[] = ['40G', '42949672960']; | |
74 | return $cases; | |
75 | } | |
76 | ||
77 | /** | |
78 | * @param $size | |
79 | * @param $expectedValue | |
80 | * @dataProvider sizeCases | |
81 | */ | |
82 | public function testFormatUnitSize($size, $expectedValue) { | |
83 | $this->assertEquals($expectedValue, CRM_Utils_Number::formatUnitSize($size)); | |
84 | } | |
85 | ||
4cbe18b8 | 86 | } |