annotate core/tests/Drupal/Tests/Component/Utility/NumberTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
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 }