@@ -657,4 +657,76 @@ public function testMaxByInEmptyCollection(Seq $seq, Option $option): void
657657 {
658658 $ this ->assertEquals ($ option , $ seq ->maxBy (fn (Foo $ foo ) => $ foo ->a ));
659659 }
660+
661+ public function provideTestMinNotEmptyCollections (): Generator
662+ {
663+ yield ArrayList::class => [ArrayList::collect ([3 , 7 , 2 ]), Option::some (2 )];
664+ yield LinkedList::class => [LinkedList::collect ([9 , 1 , 2 ]), Option::some (1 )];
665+ }
666+
667+ /**
668+ * @dataProvider provideTestMinNotEmptyCollections
669+ */
670+ public function testMinInNotEmptyCollection (Seq $ seq , Option $ option ): void
671+ {
672+ $ this ->assertEquals ($ option , $ seq ->min ());
673+ }
674+
675+ public function provideTestMinEmptyCollections (): Generator
676+ {
677+ yield ArrayList::class => [ArrayList::collect ([]), Option::none ()];
678+ yield LinkedList::class => [LinkedList::collect ([]), Option::none ()];
679+ }
680+
681+ /**
682+ * @dataProvider provideTestMinEmptyCollections
683+ */
684+ public function testMinInEmptyCollection (Seq $ seq , Option $ option ): void
685+ {
686+ $ this ->assertEquals ($ option , $ seq ->min ());
687+ }
688+
689+ public function provideTestMinByNotEmptyCollections (): Generator
690+ {
691+ yield ArrayList::class => [
692+ ArrayList::collect ([new Foo (1 ), new Foo (5 ), new Foo (2 )]),
693+ Option::some (new Foo (1 ))
694+ ];
695+ yield LinkedList::class => [
696+ LinkedList::collect ([new Foo (9 ), new Foo (4 ), new Foo (2 )]),
697+ Option::some (new Foo (2 ))
698+ ];
699+ }
700+
701+ /**
702+ * @param Seq<Foo> $seq
703+ * @param Option<Foo> $option
704+ * @dataProvider provideTestMinByNotEmptyCollections
705+ */
706+ public function testMinByInNotEmptyCollection (Seq $ seq , Option $ option ): void
707+ {
708+ $ this ->assertEquals ($ option , $ seq ->minBy (fn (Foo $ foo ) => $ foo ->a ));
709+ }
710+
711+ public function provideTestMinByEmptyCollections (): Generator
712+ {
713+ yield ArrayList::class => [
714+ ArrayList::collect ([]),
715+ Option::none ()
716+ ];
717+ yield LinkedList::class => [
718+ LinkedList::collect ([]),
719+ Option::none ()
720+ ];
721+ }
722+
723+ /**
724+ * @param Seq<Foo> $seq
725+ * @param Option<Foo> $option
726+ * @dataProvider provideTestMinByEmptyCollections
727+ */
728+ public function testMinByInEmptyCollection (Seq $ seq , Option $ option ): void
729+ {
730+ $ this ->assertEquals ($ option , $ seq ->minBy (fn (Foo $ foo ) => $ foo ->a ));
731+ }
660732}
0 commit comments