assertEquals(23, $o->get()); $this->assertEquals('23', $o->map('strval')->get()); // use arrow syntax: $val = $o->filter(fn ($val) => $val > 25)->orElse(25); $this->assertEquals(25, $val); $o = Optional::nullable(null); $this->assertEquals(23, $o->orElse(23)); $this->assertEquals(25, $o->orElseGet(fn () => 25)); } public function testOptional_stream(): void { $o = Optional::nullable([23, '56', '78']); $this->assertEquals([23, '56', '78'], $o->get()); $list = $o->stream()->map(fn ($val) => (int)$val)->toArray(); $this->assertEquals([23, 56, 78], $list); $this->assertEquals([23, '56', '78'], $o->get()); $list = $o->stream(IntStream::class)->toArray(); $this->assertEquals([23, 56, 78], $list); } public function testOptional_or(): void { $o = Optional::ofNullable(null); $e = $this->tryCatchRun(fn () => $o->get()); $this->assertException($e, 'No value present'); $val = $o->or(fn () => Optional::of(23))->get(); $this->assertEquals(23, $val); $val = $o->or(fn () => Optional::of('abc'))->get(); $this->assertEquals('abc', $val); } }