Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\Component\Utility;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Utility\Number;
|
Chris@0
|
6 use PHPUnit\Framework\TestCase;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Tests number manipulation utilities.
|
Chris@0
|
10 *
|
Chris@0
|
11 * @group Utility
|
Chris@0
|
12 *
|
Chris@0
|
13 * @coversDefaultClass \Drupal\Component\Utility\Number
|
Chris@0
|
14 *
|
Chris@0
|
15 * @see \Drupal\Component\Utility\Number
|
Chris@0
|
16 */
|
Chris@0
|
17 class NumberTest extends TestCase {
|
Chris@0
|
18
|
Chris@0
|
19 /**
|
Chris@0
|
20 * Tests Number::validStep() without offset.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @dataProvider providerTestValidStep
|
Chris@0
|
23 * @covers ::validStep
|
Chris@0
|
24 *
|
Chris@0
|
25 * @param numeric $value
|
Chris@0
|
26 * The value argument for Number::validStep().
|
Chris@0
|
27 * @param numeric $step
|
Chris@0
|
28 * The step argument for Number::validStep().
|
Chris@0
|
29 * @param bool $expected
|
Chris@0
|
30 * Expected return value from Number::validStep().
|
Chris@0
|
31 */
|
Chris@0
|
32 public function testValidStep($value, $step, $expected) {
|
Chris@0
|
33 $return = Number::validStep($value, $step);
|
Chris@0
|
34 $this->assertEquals($expected, $return);
|
Chris@0
|
35 }
|
Chris@0
|
36
|
Chris@0
|
37 /**
|
Chris@0
|
38 * Tests Number::validStep() with offset.
|
Chris@0
|
39 *
|
Chris@0
|
40 * @dataProvider providerTestValidStepOffset
|
Chris@0
|
41 * @covers ::validStep
|
Chris@0
|
42 *
|
Chris@0
|
43 * @param numeric $value
|
Chris@0
|
44 * The value argument for Number::validStep().
|
Chris@0
|
45 * @param numeric $step
|
Chris@0
|
46 * The step argument for Number::validStep().
|
Chris@0
|
47 * @param numeric $offset
|
Chris@0
|
48 * The offset argument for Number::validStep().
|
Chris@0
|
49 * @param bool $expected
|
Chris@0
|
50 * Expected return value from Number::validStep().
|
Chris@0
|
51 */
|
Chris@0
|
52 public function testValidStepOffset($value, $step, $offset, $expected) {
|
Chris@0
|
53 $return = Number::validStep($value, $step, $offset);
|
Chris@0
|
54 $this->assertEquals($expected, $return);
|
Chris@0
|
55 }
|
Chris@0
|
56
|
Chris@0
|
57 /**
|
Chris@0
|
58 * Provides data for self::testNumberStep().
|
Chris@0
|
59 *
|
Chris@0
|
60 * @see \Drupal\Tests\Component\Utility\Number::testValidStep
|
Chris@0
|
61 */
|
Chris@0
|
62 public static function providerTestValidStep() {
|
Chris@0
|
63 return [
|
Chris@0
|
64 // Value and step equal.
|
Chris@0
|
65 [10.3, 10.3, TRUE],
|
Chris@0
|
66
|
Chris@0
|
67 // Valid integer steps.
|
Chris@0
|
68 [42, 21, TRUE],
|
Chris@0
|
69 [42, 3, TRUE],
|
Chris@0
|
70
|
Chris@0
|
71 // Valid float steps.
|
Chris@0
|
72 [42, 10.5, TRUE],
|
Chris@0
|
73 [1, 1 / 3, TRUE],
|
Chris@0
|
74 [-100, 100 / 7, TRUE],
|
Chris@0
|
75 [1000, -10, TRUE],
|
Chris@0
|
76
|
Chris@0
|
77 // Valid and very small float steps.
|
Chris@0
|
78 [1000.12345, 1e-10, TRUE],
|
Chris@0
|
79 [3.9999999999999, 1e-13, TRUE],
|
Chris@0
|
80
|
Chris@0
|
81 // Invalid integer steps.
|
Chris@0
|
82 [100, 30, FALSE],
|
Chris@0
|
83 [-10, 4, FALSE],
|
Chris@0
|
84
|
Chris@0
|
85 // Invalid float steps.
|
Chris@0
|
86 [6, 5 / 7, FALSE],
|
Chris@0
|
87 [10.3, 10.25, FALSE],
|
Chris@0
|
88
|
Chris@0
|
89 // Step mismatches very close to being valid.
|
Chris@0
|
90 [70 + 9e-7, 10 + 9e-7, FALSE],
|
Chris@0
|
91 [1936.5, 3e-8, FALSE],
|
Chris@0
|
92 ];
|
Chris@0
|
93 }
|
Chris@0
|
94
|
Chris@0
|
95 /**
|
Chris@0
|
96 * Data provider for \Drupal\Test\Component\Utility\NumberTest::testValidStepOffset().
|
Chris@0
|
97 *
|
Chris@0
|
98 * @see \Drupal\Test\Component\Utility\NumberTest::testValidStepOffset()
|
Chris@0
|
99 */
|
Chris@0
|
100 public static function providerTestValidStepOffset() {
|
Chris@0
|
101 return [
|
Chris@0
|
102 // Try obvious fits.
|
Chris@0
|
103 [11.3, 10.3, 1, TRUE],
|
Chris@0
|
104 [100, 10, 50, TRUE],
|
Chris@0
|
105 [-100, 90 / 7, -10, TRUE],
|
Chris@0
|
106 [2 / 7 + 5 / 9, 1 / 7, 5 / 9, TRUE],
|
Chris@0
|
107
|
Chris@0
|
108 // Ensure a small offset is still invalid.
|
Chris@0
|
109 [10.3, 10.3, 0.0001, FALSE],
|
Chris@0
|
110 [1 / 5, 1 / 7, 1 / 11, FALSE],
|
Chris@0
|
111
|
Chris@0
|
112 // Try negative values and offsets.
|
Chris@0
|
113 [1000, 10, -5, FALSE],
|
Chris@0
|
114 [-10, 4, 0, FALSE],
|
Chris@0
|
115 [-10, 4, -4, FALSE],
|
Chris@0
|
116 ];
|
Chris@0
|
117 }
|
Chris@0
|
118
|
Chris@0
|
119 /**
|
Chris@0
|
120 * Tests the alphadecimal conversion functions.
|
Chris@0
|
121 *
|
Chris@0
|
122 * @dataProvider providerTestConversions
|
Chris@0
|
123 * @covers ::intToAlphadecimal
|
Chris@0
|
124 * @covers ::alphadecimalToInt
|
Chris@0
|
125 *
|
Chris@0
|
126 * @param int $value
|
Chris@0
|
127 * The integer value.
|
Chris@0
|
128 * @param string $expected
|
Chris@0
|
129 * The expected alphadecimal value.
|
Chris@0
|
130 */
|
Chris@0
|
131 public function testConversions($value, $expected) {
|
Chris@0
|
132 $this->assertSame(Number::intToAlphadecimal($value), $expected);
|
Chris@0
|
133 $this->assertSame($value, Number::alphadecimalToInt($expected));
|
Chris@0
|
134 }
|
Chris@0
|
135
|
Chris@0
|
136 /**
|
Chris@0
|
137 * Data provider for testConversions().
|
Chris@0
|
138 *
|
Chris@0
|
139 * @see testConversions()
|
Chris@0
|
140 *
|
Chris@0
|
141 * @return array
|
Chris@0
|
142 * An array containing:
|
Chris@0
|
143 * - The integer value.
|
Chris@0
|
144 * - The alphadecimal value.
|
Chris@0
|
145 */
|
Chris@0
|
146 public function providerTestConversions() {
|
Chris@0
|
147 return [
|
Chris@0
|
148 [0, '00'],
|
Chris@0
|
149 [1, '01'],
|
Chris@0
|
150 [10, '0a'],
|
Chris@0
|
151 [20, '0k'],
|
Chris@0
|
152 [35, '0z'],
|
Chris@0
|
153 [36, '110'],
|
Chris@0
|
154 [100, '12s'],
|
Chris@0
|
155 ];
|
Chris@0
|
156 }
|
Chris@0
|
157
|
Chris@0
|
158 }
|