Merge pull request #7753 from rohankatkar/CRM-17878
[civicrm-core.git] / tests / phpunit / CRM / Utils / NumberTest.php
1 <?php
2
3 /**
4 * Class CRM_Utils_NumberTest
5 */
6 class CRM_Utils_NumberTest extends CiviUnitTestCase {
7
8 /**
9 * @return array
10 */
11 public function randomDecimalCases() {
12 $cases = array();
13 // array(array $precision, int $expectedMinInclusive, int $expectedMaxExclusive)
14 $cases[] = array(array(1, 0), 0, 10);
15 $cases[] = array(array(5, 2), 0, 1000);
16 $cases[] = array(array(10, 8), 0, 100);
17 return $cases;
18 }
19
20 /**
21 * @param array $precision
22 * @param int $expectedMinInclusive
23 * @param int $expectedMaxExclusive
24 * @dataProvider randomDecimalCases
25 */
26 public function testCreateRandomDecimal($precision, $expectedMinInclusive, $expectedMaxExclusive) {
27 list ($sigFigs, $decFigs) = $precision;
28 for ($i = 0; $i < 10; $i++) {
29 $decimal = CRM_Utils_Number::createRandomDecimal($precision);
30 // print "Assert $decimal between $expectedMinInclusive and $expectedMaxExclusive\n";
31 $this->assertTrue(($expectedMinInclusive <= $decimal) && ($decimal < $expectedMaxExclusive), "Assert $decimal between $expectedMinInclusive and $expectedMaxExclusive");
32 if (strpos($decimal, '.') === FALSE) {
33 $decimal .= '.';
34 }
35 list ($before, $after) = explode('.', $decimal);
36 $this->assertTrue(strlen($before) + strlen($after) <= $sigFigs, "Assert $decimal [$before;$after] has <= $sigFigs sigFigs");
37 $this->assertTrue(strlen($after) <= $decFigs, "Assert $decimal [$before;$after] has <= $decFigs decFigs");
38 }
39 }
40
41 /**
42 * @return array
43 */
44 public function truncDecimalCases() {
45 $cases = array();
46 // array($value, $precision, $expectedValue)
47 $cases[] = array(523, array(1, 0), 5);
48 $cases[] = array(523, array(5, 2), 523);
49 $cases[] = array(523, array(10, 8), 52.3);
50 $cases[] = array(12345, array(3, 3), 0.123);
51 $cases[] = array(0.12345, array(10, 0), 12345);
52 $cases[] = array(-123.45, array(4, 2), -12.34);
53 return $cases;
54 }
55
56 /**
57 * @param $value
58 * @param $precision
59 * @param $expectedValue
60 * @dataProvider truncDecimalCases
61 */
62 public function testCreateTruncatedDecimal($value, $precision, $expectedValue) {
63 list ($sigFigs, $decFigs) = $precision;
64 $this->assertEquals($expectedValue, CRM_Utils_Number::createTruncatedDecimal($value, $precision),
65 "assert createTruncatedValue($value, ($sigFigs,$decFigs)) == $expectedValue"
66 );
67 }
68
69 }