packages/sql-faker/tests/Unit/Generation/Derivation/CompletionStateTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\SqlFaker\Generation\Derivation;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use SqlFaker\Generation\Derivation\CompletionState;
11use SqlFaker\Grammar\Model\NonTerminal;
12
13#[CoversClass(CompletionState::class)]
14#[UsesClass(NonTerminal::class)]
15final class CompletionStateTest extends TestCase
16{
17 public function testKeySharesEquivalentContinuationsAcrossDifferentSpentBudgets(): void
18 {
19 $state = new CompletionState([new NonTerminal('a')], ['a' => 1], true, 1);
20 self::assertSame($state->key(), (new CompletionState([new NonTerminal('a')], ['a' => 1], true, 5))->key());
21 self::assertNotSame($state->key(), (new CompletionState([new NonTerminal('b')], ['a' => 1], true, 1))->key());
22 self::assertNotSame($state->key(), (new CompletionState([new NonTerminal('a')], ['a' => 2], true, 1))->key());
23 self::assertNotSame($state->key(), (new CompletionState([new NonTerminal('a')], ['a' => 1], false, 1))->key());
24 }
25}
26