55namespace Tests \Runtime \Functions \Cast ;
66
77use Fp \Functional \Option \None ;
8+ use Fp \Functional \Option \Option ;
89use PHPUnit \Framework \TestCase ;
910use Tests \Mock \Baz ;
1011use Tests \Mock \Foo ;
1112
13+ use Tests \Mock \IntEnum ;
14+ use Tests \Mock \StringEnum ;
15+ use function Fp \Cast \asEnumOf ;
1216use function Fp \Cast \asGenerator ;
1317use function Fp \Cast \asArray ;
1418use function Fp \Cast \asBool ;
2024use function Fp \Cast \asPairs ;
2125use function Fp \Cast \asPairsGenerator ;
2226use function Fp \Cast \asString ;
27+ use function Fp \Cast \enumOf ;
2328use function Fp \Cast \fromPairs ;
2429
2530final class CastTest extends TestCase
@@ -31,6 +36,44 @@ public function testAsArray(): void
3136 $ this ->assertEquals ($ c , asArray ($ c ));
3237 }
3338
39+ public function testAsEnumOf (): void
40+ {
41+ $ this ->assertEquals (Option::none (), asEnumOf (0 , IntEnum::class));
42+ $ this ->assertEquals (Option::none (), asEnumOf ('fst ' , IntEnum::class));
43+ $ this ->assertEquals (Option::none (), asEnumOf (0.42 , IntEnum::class));
44+ $ this ->assertEquals (Option::none (), asEnumOf ([], IntEnum::class));
45+ $ this ->assertEquals (Option::some (IntEnum::FST ), asEnumOf (1 , IntEnum::class));
46+ $ this ->assertEquals (Option::some (IntEnum::SND ), asEnumOf (2 , IntEnum::class));
47+ $ this ->assertEquals (Option::some (IntEnum::THR ), asEnumOf (3 , IntEnum::class));
48+
49+ $ this ->assertEquals (Option::none (), asEnumOf (0 , StringEnum::class));
50+ $ this ->assertEquals (Option::none (), asEnumOf (0.42 , StringEnum::class));
51+ $ this ->assertEquals (Option::none (), asEnumOf ([], StringEnum::class));
52+ $ this ->assertEquals (Option::none (), asEnumOf ('fth ' , StringEnum::class));
53+ $ this ->assertEquals (Option::some (StringEnum::FST ), asEnumOf ('fst ' , StringEnum::class));
54+ $ this ->assertEquals (Option::some (StringEnum::SND ), asEnumOf ('snd ' , StringEnum::class));
55+ $ this ->assertEquals (Option::some (StringEnum::THR ), asEnumOf ('thr ' , StringEnum::class));
56+ }
57+
58+ public function testEnumOf (): void
59+ {
60+ $ this ->assertEquals (Option::none (), enumOf (IntEnum::class)(0 ));
61+ $ this ->assertEquals (Option::none (), enumOf (IntEnum::class)('fst ' ));
62+ $ this ->assertEquals (Option::none (), enumOf (IntEnum::class)(0.42 ));
63+ $ this ->assertEquals (Option::none (), enumOf (IntEnum::class)([]));
64+ $ this ->assertEquals (Option::some (IntEnum::FST ), enumOf (IntEnum::class)(1 ));
65+ $ this ->assertEquals (Option::some (IntEnum::SND ), enumOf (IntEnum::class)(2 ));
66+ $ this ->assertEquals (Option::some (IntEnum::THR ), enumOf (IntEnum::class)(3 ));
67+
68+ $ this ->assertEquals (Option::none (), enumOf (StringEnum::class)(0 ));
69+ $ this ->assertEquals (Option::none (), enumOf (StringEnum::class)(0.42 ));
70+ $ this ->assertEquals (Option::none (), enumOf (StringEnum::class)([]));
71+ $ this ->assertEquals (Option::none (), enumOf (StringEnum::class)('fth ' ));
72+ $ this ->assertEquals (Option::some (StringEnum::FST ), enumOf (StringEnum::class)('fst ' ));
73+ $ this ->assertEquals (Option::some (StringEnum::SND ), enumOf (StringEnum::class)('snd ' ));
74+ $ this ->assertEquals (Option::some (StringEnum::THR ), enumOf (StringEnum::class)('thr ' ));
75+ }
76+
3477 public function testAsBool (): void
3578 {
3679 $ this ->assertTrue (asBool ('true ' )->get ());
0 commit comments