packages/sql-parser/tests/Unit/Table/PackedRowsTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Table;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Small;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use SqlParser\Table\PackedRows;
12use SqlParser\Table\TableCodec;
13
14#[CoversClass(PackedRows::class)]
15#[UsesClass(TableCodec::class)]
16#[Small]
17final class PackedRowsTest extends TestCase
18{
19    public function testRow(): void
20    {
21        $codec = new TableCodec();
22        $first = $codec->encodeRow([5 => 3, 1 => -2]);
23        $second = $codec->encodeRow([2 => -2147483648]);
24        $rows = new PackedRows($first . $second, [0, strlen($first), strlen($first . $second)]);
25
26        self::assertSame([1 => -2, 5 => 3], $rows->row(0));
27        self::assertSame([2 => -2147483648], $rows->row(1));
28        self::assertSame([1 => -2, 5 => 3], $rows->row(0));
29    }
30
31    public function testRowIsEmptyForAStateWithoutActionsOrOutOfRange(): void
32    {
33        $rows = new PackedRows('', [0, 0]);
34
35        self::assertSame([], $rows->row(0));
36        self::assertSame([], $rows->row(3));
37    }
38
39    public function testCount(): void
40    {
41        self::assertSame(2, (new PackedRows('', [0, 0, 0]))->count());
42        self::assertSame(0, (new PackedRows('', []))->count());
43    }
44}
45