@@ -416,6 +416,22 @@ defmodule StreamTest do
416
416
assert Stream . transform ( nats , 0 , & { [ & 1 , & 2 ] , & 1 + & 2 } ) |> Enum . take ( 6 ) == [ 1 , 0 , 2 , 1 , 3 , 3 ]
417
417
end
418
418
419
+ test "transform/3 with early halt" do
420
+ stream = Stream . repeatedly ( fn -> throw ( :error ) end )
421
+ |> Stream . transform ( nil , & { [ & 1 , & 2 ] , & 1 } )
422
+
423
+ assert { :halted , nil } =
424
+ Enumerable . reduce ( stream , { :halt , nil } , fn _ , _ -> throw ( :error ) end )
425
+ end
426
+
427
+ test "transform/3 with early suspend" do
428
+ stream = Stream . repeatedly ( fn -> throw ( :error ) end )
429
+ |> Stream . transform ( nil , & { [ & 1 , & 2 ] , & 1 } )
430
+
431
+ assert { :suspended , nil , _ } =
432
+ Enumerable . reduce ( stream , { :suspend , nil } , fn _ , _ -> throw ( :error ) end )
433
+ end
434
+
419
435
test "transform/3 with halt" do
420
436
stream = Stream . resource ( fn -> 1 end ,
421
437
fn acc -> { [ acc ] , acc + 1 } end ,
@@ -570,6 +586,27 @@ defmodule StreamTest do
570
586
assert Process . get ( :stream_transform )
571
587
end
572
588
589
+ test "transform/4 with early halt" do
590
+ stream = Stream . repeatedly ( fn -> throw ( :error ) end )
591
+ |> Stream . transform ( fn -> nil end , & { [ & 1 , & 2 ] , & 1 } ,
592
+ fn nil -> Process . put ( :stream_transform , true ) end )
593
+
594
+ Process . put ( :stream_transform , false )
595
+ assert { :halted , nil } =
596
+ Enumerable . reduce ( stream , { :halt , nil } , fn _ , _ -> throw ( :error ) end )
597
+ assert Process . get ( :stream_transform )
598
+ end
599
+
600
+ test "transform/4 with early suspend" do
601
+ stream = Stream . repeatedly ( fn -> throw ( :error ) end )
602
+ |> Stream . transform ( fn -> nil end , & { [ & 1 , & 2 ] , & 1 } ,
603
+ fn nil -> Process . put ( :stream_transform , true ) end )
604
+
605
+ refute Process . get ( :stream_transform )
606
+ assert { :suspended , nil , _ } =
607
+ Enumerable . reduce ( stream , { :suspend , nil } , fn _ , _ -> throw ( :error ) end )
608
+ end
609
+
573
610
test "transform/4 closes on outer errors" do
574
611
stream = Stream . transform ( 1 .. 10 , fn -> 0 end ,
575
612
fn 3 , _ -> throw ( :error )
0 commit comments