19 declare(strict_types=1);
37 $this->assertInstanceOf(Intermediate::class, $intermediate);
44 $this->assertEquals(\ord(
'i'), $intermediate->value());
47 #[Depends('testValue')] 52 $this->assertEquals(\ord(
'i'), $intermediate->value());
54 $next = $intermediate->accept();
55 $this->assertTrue($next->isOK());
56 $this->assertEquals(\ord(
'n'), $next->value()->value());
63 $next = $intermediate->reject();
64 $this->assertFalse($next->isOK());
67 #[Depends('testValue')] 68 #[Depends('testAccept')] 73 $this->assertEquals([], $intermediate->accepted());
74 $accepted = $intermediate->accept()->value()->accept()->value()->accepted();
75 $this->assertIsArray($accepted);
77 foreach ($accepted as $character) {
78 $this->assertInstanceOf(Character::class, $character);
79 $actual .= $character->value();
81 $this->assertEquals($expected, $actual);
84 #[Depends('testAccept')] 88 $this->assertFalse($intermediate->done());
89 $this->assertTrue($intermediate->accept()->value()->accept()->value()->done());
92 #[Depends('testAccepted')] 93 #[Depends('testValue')] 97 $intermediate = $intermediate->accept()->value()->onlyTodo();
98 $this->assertEmpty($intermediate->accepted());
99 $this->assertEquals(\ord(
'b'), $intermediate->value());
102 #[Depends('testAccept')] 106 $intermediate = $intermediate->accept()->value();
108 $ok =
new Ok(
'transformed');
110 $result = $intermediate->transform(
function (
string $accepted) use ($ok):
Result {
111 $this->assertEquals(
'h', $accepted);
115 $this->assertEquals($ok, $result);
118 #[Depends('testAccepted')] 123 $this->assertEmpty($intermediate->accepted());
124 $this->assertEquals([$value], $intermediate->push([$value])->accepted());
127 #[Depends('testPush')] 128 #[Depends('testAccept')] 132 $intermediate = $intermediate->accept()->value();
135 $ok =
new Ok(
'transformed');
137 $intermediate = $intermediate->push([$dummy]);
139 $result = $intermediate->transform(
function (array $accepted) use ($dummy, $ok):
Result {
140 $this->assertCount(2, $accepted);
141 $this->assertInstanceOf(Character::class, $accepted[0]);
142 $this->assertEquals(
'h', $accepted[0]->value());
143 $this->assertEquals($dummy, $accepted[1]);
147 $this->assertEquals($ok, $result);
A result encapsulates a value or an error and simplifies the handling of those.