Mercurial > hg > isophonics-drupal-site
diff core/tests/Drupal/Tests/Component/Utility/NumberTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/tests/Drupal/Tests/Component/Utility/NumberTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,158 @@ +<?php + +namespace Drupal\Tests\Component\Utility; + +use Drupal\Component\Utility\Number; +use PHPUnit\Framework\TestCase; + +/** + * Tests number manipulation utilities. + * + * @group Utility + * + * @coversDefaultClass \Drupal\Component\Utility\Number + * + * @see \Drupal\Component\Utility\Number + */ +class NumberTest extends TestCase { + + /** + * Tests Number::validStep() without offset. + * + * @dataProvider providerTestValidStep + * @covers ::validStep + * + * @param numeric $value + * The value argument for Number::validStep(). + * @param numeric $step + * The step argument for Number::validStep(). + * @param bool $expected + * Expected return value from Number::validStep(). + */ + public function testValidStep($value, $step, $expected) { + $return = Number::validStep($value, $step); + $this->assertEquals($expected, $return); + } + + /** + * Tests Number::validStep() with offset. + * + * @dataProvider providerTestValidStepOffset + * @covers ::validStep + * + * @param numeric $value + * The value argument for Number::validStep(). + * @param numeric $step + * The step argument for Number::validStep(). + * @param numeric $offset + * The offset argument for Number::validStep(). + * @param bool $expected + * Expected return value from Number::validStep(). + */ + public function testValidStepOffset($value, $step, $offset, $expected) { + $return = Number::validStep($value, $step, $offset); + $this->assertEquals($expected, $return); + } + + /** + * Provides data for self::testNumberStep(). + * + * @see \Drupal\Tests\Component\Utility\Number::testValidStep + */ + public static function providerTestValidStep() { + return [ + // Value and step equal. + [10.3, 10.3, TRUE], + + // Valid integer steps. + [42, 21, TRUE], + [42, 3, TRUE], + + // Valid float steps. + [42, 10.5, TRUE], + [1, 1 / 3, TRUE], + [-100, 100 / 7, TRUE], + [1000, -10, TRUE], + + // Valid and very small float steps. + [1000.12345, 1e-10, TRUE], + [3.9999999999999, 1e-13, TRUE], + + // Invalid integer steps. + [100, 30, FALSE], + [-10, 4, FALSE], + + // Invalid float steps. + [6, 5 / 7, FALSE], + [10.3, 10.25, FALSE], + + // Step mismatches very close to being valid. + [70 + 9e-7, 10 + 9e-7, FALSE], + [1936.5, 3e-8, FALSE], + ]; + } + + /** + * Data provider for \Drupal\Test\Component\Utility\NumberTest::testValidStepOffset(). + * + * @see \Drupal\Test\Component\Utility\NumberTest::testValidStepOffset() + */ + public static function providerTestValidStepOffset() { + return [ + // Try obvious fits. + [11.3, 10.3, 1, TRUE], + [100, 10, 50, TRUE], + [-100, 90 / 7, -10, TRUE], + [2 / 7 + 5 / 9, 1 / 7, 5 / 9, TRUE], + + // Ensure a small offset is still invalid. + [10.3, 10.3, 0.0001, FALSE], + [1 / 5, 1 / 7, 1 / 11, FALSE], + + // Try negative values and offsets. + [1000, 10, -5, FALSE], + [-10, 4, 0, FALSE], + [-10, 4, -4, FALSE], + ]; + } + + /** + * Tests the alphadecimal conversion functions. + * + * @dataProvider providerTestConversions + * @covers ::intToAlphadecimal + * @covers ::alphadecimalToInt + * + * @param int $value + * The integer value. + * @param string $expected + * The expected alphadecimal value. + */ + public function testConversions($value, $expected) { + $this->assertSame(Number::intToAlphadecimal($value), $expected); + $this->assertSame($value, Number::alphadecimalToInt($expected)); + } + + /** + * Data provider for testConversions(). + * + * @see testConversions() + * + * @return array + * An array containing: + * - The integer value. + * - The alphadecimal value. + */ + public function providerTestConversions() { + return [ + [0, '00'], + [1, '01'], + [10, '0a'], + [20, '0k'], + [35, '0z'], + [36, '110'], + [100, '12s'], + ]; + } + +}