@@ -217,13 +217,32 @@ defmodule EnumTest do
217217 assert Enum . count_until ( [ 1 , 2 ] , 2 ) == 2
218218 end
219219
220+ test "count_until/2 with streams" do
221+ count_until_stream = fn list , limit -> list |> Stream . map ( & & 1 ) |> Enum . count_until ( limit ) end
222+
223+ assert count_until_stream . ( [ 1 , 2 , 3 ] , 2 ) == 2
224+ assert count_until_stream . ( [ ] , 2 ) == 0
225+ assert count_until_stream . ( [ 1 , 2 ] , 2 ) == 2
226+ end
227+
220228 test "count_until/3" do
221229 assert Enum . count_until ( [ 1 , 2 , 3 , 4 , 5 , 6 ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 2
222230 assert Enum . count_until ( [ 1 , 2 ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 1
223231 assert Enum . count_until ( [ 1 , 2 , 3 , 4 ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 2
224232 assert Enum . count_until ( [ ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 0
225233 end
226234
235+ test "count_until/3 with streams" do
236+ count_until_stream = fn list , fun , limit ->
237+ list |> Stream . map ( & & 1 ) |> Enum . count_until ( fun , limit )
238+ end
239+
240+ assert count_until_stream . ( [ 1 , 2 , 3 , 4 , 5 , 6 ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 2
241+ assert count_until_stream . ( [ 1 , 2 ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 1
242+ assert count_until_stream . ( [ 1 , 2 , 3 , 4 ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 2
243+ assert count_until_stream . ( [ ] , fn x -> rem ( x , 2 ) == 0 end , 2 ) == 0
244+ end
245+
227246 test "dedup/1" do
228247 assert Enum . dedup ( [ 1 , 1 , 2 , 1 , 1 , 2 , 1 ] ) == [ 1 , 2 , 1 , 2 , 1 ]
229248 assert Enum . dedup ( [ 2 , 1 , 1 , 2 , 1 ] ) == [ 2 , 1 , 2 , 1 ]
@@ -318,6 +337,9 @@ defmodule EnumTest do
318337 refute Enum . empty? ( [ 1 , 2 , 3 ] )
319338 refute Enum . empty? ( % { one: 1 } )
320339 refute Enum . empty? ( 1 .. 3 )
340+
341+ assert Stream . take ( [ 1 ] , 0 ) |> Enum . empty? ( )
342+ refute Stream . take ( [ 1 ] , 1 ) |> Enum . empty? ( )
321343 end
322344
323345 test "fetch/2" do
@@ -384,6 +406,16 @@ defmodule EnumTest do
384406 assert Enum . flat_map ( [ ] , fn x -> [ x , x ] end ) == [ ]
385407 assert Enum . flat_map ( [ 1 , 2 , 3 ] , fn x -> [ x , x ] end ) == [ 1 , 1 , 2 , 2 , 3 , 3 ]
386408 assert Enum . flat_map ( [ 1 , 2 , 3 ] , fn x -> x .. ( x + 1 ) end ) == [ 1 , 2 , 2 , 3 , 3 , 4 ]
409+ assert Enum . flat_map ( [ 1 , 2 , 3 ] , fn x -> Stream . duplicate ( x , 2 ) end ) == [ 1 , 1 , 2 , 2 , 3 , 3 ]
410+ end
411+
412+ test "flat_map/2 with streams" do
413+ flat_map_stream = fn list , fun -> list |> Stream . map ( & & 1 ) |> Enum . flat_map ( fun ) end
414+
415+ assert flat_map_stream . ( [ ] , fn x -> [ x , x ] end ) == [ ]
416+ assert flat_map_stream . ( [ 1 , 2 , 3 ] , fn x -> [ x , x ] end ) == [ 1 , 1 , 2 , 2 , 3 , 3 ]
417+ assert flat_map_stream . ( [ 1 , 2 , 3 ] , fn x -> x .. ( x + 1 ) end ) == [ 1 , 2 , 2 , 3 , 3 , 4 ]
418+ assert flat_map_stream . ( [ 1 , 2 , 3 ] , fn x -> Stream . duplicate ( x , 2 ) end ) == [ 1 , 1 , 2 , 2 , 3 , 3 ]
387419 end
388420
389421 test "flat_map_reduce/3" do
@@ -409,6 +441,10 @@ defmodule EnumTest do
409441 assert Enum . intersperse ( [ ] , true ) == [ ]
410442 assert Enum . intersperse ( [ 1 ] , true ) == [ 1 ]
411443 assert Enum . intersperse ( [ 1 , 2 , 3 ] , true ) == [ 1 , true , 2 , true , 3 ]
444+
445+ assert Enum . intersperse ( .. , true ) == [ ]
446+ assert Enum . intersperse ( 1 .. 1 , true ) == [ 1 ]
447+ assert Enum . intersperse ( 1 .. 3 , true ) == [ 1 , true , 2 , true , 3 ]
412448 end
413449
414450 test "into/2" do
0 commit comments