packages/sql-fixture/tests/Unit/TypeMapper/IntegerRangeTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\TypeMapper;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\DataProvider;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlFixture\TypeMapper\IntegerRange;
12use SqlFixture\TypeMapper\IntegerWidth;
13
14#[CoversClass(IntegerRange::class)]
15#[UsesClass(IntegerWidth::class)]
16final class IntegerRangeTest extends TestCase
17{
18 #[DataProvider('providerSqlIntegerBounds')]
19 public function testWidthAndSignednessDefineTheDomain(IntegerWidth $width, bool $unsigned, int $minimum, int $maximum): void
20 {
21 $range = new IntegerRange($width, $unsigned);
22 self::assertSame($minimum, $range->minimum);
23 self::assertSame($maximum, $range->maximum);
24 }
25
26 public function testDefaultSignednessIncludesNegativeValues(): void
27 {
28 $range = new IntegerRange(IntegerWidth::Bits8);
29 self::assertSame(-128, $range->minimum);
30 self::assertSame(127, $range->maximum);
31 }
32
33 /**
34 * @return list<array{IntegerWidth, bool, int, int}>
35 */
36 public static function providerSqlIntegerBounds(): array
37 {
38 return [
39 [IntegerWidth::Bits8, false, -128, 127],
40 [IntegerWidth::Bits8, true, 0, 255],
41 [IntegerWidth::Bits16, false, -32768, 32767],
42 [IntegerWidth::Bits16, true, 0, 65535],
43 [IntegerWidth::Bits24, false, -8388608, 8388607],
44 [IntegerWidth::Bits24, true, 0, 16777215],
45 [IntegerWidth::Bits32, false, -2147483648, 2147483647],
46 [IntegerWidth::Bits32, true, 0, 4294967295],
47 [IntegerWidth::Bits64, false, PHP_INT_MIN, PHP_INT_MAX],
48 [IntegerWidth::Bits64, true, 0, PHP_INT_MAX],
49 ];
50 }
51}
52