@@ -624,12 +624,36 @@ let iterateTests = makeSeqEqualsTests(
624624)-> Array .concat ([
625625 willNotThrow (~title = "iterate" , ~expectation = "lazy" , () =>
626626 S .iterate (0 , i => {
627- Exn .raiseError ("Boom!" )-> raise -> ignore
627+ Exn .raiseError ("Boom!" )-> ignore
628628 i
629629 })
630630 ),
631631])
632632
633+ let iterateWhileTests = {
634+ let increment = (max , seed ) => {
635+ let next = seed + 1
636+ next <= max ? Some (next ) : None
637+ }
638+ makeSeqEqualsTests (
639+ ~title = "iterateWhile" ,
640+ [
641+ (S .iterateWhile (4 , increment (10 , _ )), [4 , 5 , 6 , 7 , 8 , 9 , 10 ], "" ),
642+ (S .iterateWhile (9 , increment (10 , _ )), [9 , 10 ], "" ),
643+ (S .iterateWhile (10 , increment (10 , _ )), [10 ], "" ),
644+ (S .iterateWhile (999 , increment (10 , _ )), [999 ], "Always includes seed" ),
645+ (S .iterateWhile (1 , increment (1_000_000 , _ ))-> Seq .drop (999_998 ), [999_999 , 1_000_000 ], "" ),
646+ ],
647+ )-> Array .concat ([
648+ willNotThrow (~title = "iterateWhile" , ~expectation = "lazy" , () =>
649+ S .iterateWhile (0 , i => {
650+ Exn .raiseError ("Boom!" )-> ignore
651+ Some (i )
652+ })
653+ ),
654+ ])
655+ }
656+
633657let fromArrayTests = {
634658 let basicTests = makeSeqEqualsTests (
635659 ~title = "fromArray" ,
@@ -2230,6 +2254,7 @@ let tests =
22302254 isEmptyTests ,
22312255 isSortedByTests ,
22322256 iterateTests ,
2257+ iterateWhileTests ,
22332258 joinTests ,
22342259 lastTests ,
22352260 lengthTests ,
0 commit comments