@@ -562,6 +562,11 @@ defmodule EnumTest do
562
562
end
563
563
end
564
564
565
+ test "max/2 with empty fallback" do
566
+ assert Enum . max ( [ ] , fn -> 0 end ) === 0
567
+ assert Enum . max ( [ 1 , 2 ] , fn -> 0 end ) === 2
568
+ end
569
+
565
570
test "max/2 with stable sorting" do
566
571
assert Enum . max ( [ 1 , 1.0 ] , & >= / 2 ) === 1
567
572
assert Enum . max ( [ 1.0 , 1 ] , & >= / 2 ) === 1.0
@@ -646,6 +651,11 @@ defmodule EnumTest do
646
651
end
647
652
end
648
653
654
+ test "min/2 with empty fallback" do
655
+ assert Enum . min ( [ ] , fn -> 0 end ) === 0
656
+ assert Enum . min ( [ 1 , 2 ] , fn -> 0 end ) === 1
657
+ end
658
+
649
659
test "min/2 with stable sorting" do
650
660
assert Enum . min ( [ 1 , 1.0 ] , & <= / 2 ) === 1
651
661
assert Enum . min ( [ 1.0 , 1 ] , & <= / 2 ) === 1.0
@@ -820,6 +830,21 @@ defmodule EnumTest do
820
830
assert Enum . random ( [ 1 , 2 , 3 , 4 , 5 ] ) == 3
821
831
end
822
832
833
+ test "random/1 with streams" do
834
+ random_stream = fn list -> list |> Stream . map ( & & 1 ) |> Enum . random ( ) end
835
+
836
+ assert_raise Enum.EmptyError , fn -> random_stream . ( [ ] ) end
837
+ assert random_stream . ( [ 1 ] ) == 1
838
+
839
+ seed = { 1406 , 407_414 , 139_258 }
840
+ :rand . seed ( :exsss , seed )
841
+
842
+ assert random_stream . ( [ 1 , 2 ] ) == 2
843
+ assert random_stream . ( [ 1 , 2 , 3 ] ) == 3
844
+ assert random_stream . ( [ 1 , 2 , 3 , 4 ] ) == 1
845
+ assert random_stream . ( [ 1 , 2 , 3 , 4 , 5 ] ) == 3
846
+ end
847
+
823
848
test "reduce/2" do
824
849
assert Enum . reduce ( [ 1 , 2 , 3 ] , fn x , acc -> x + acc end ) == 6
825
850
@@ -837,6 +862,13 @@ defmodule EnumTest do
837
862
assert Enum . reduce ( [ 1 , 2 , 3 ] , 1 , fn x , acc -> x + acc end ) == 7
838
863
end
839
864
865
+ test "reduce/3 with streams" do
866
+ reduce_stream = fn list , acc , fun -> list |> Stream . map ( & & 1 ) |> Enum . reduce ( acc , fun ) end
867
+
868
+ assert reduce_stream . ( [ ] , 1 , fn x , acc -> x + acc end ) == 1
869
+ assert reduce_stream . ( [ 1 , 2 , 3 ] , 1 , fn x , acc -> x + acc end ) == 7
870
+ end
871
+
840
872
test "reduce_while/3" do
841
873
assert Enum . reduce_while ( [ 1 , 2 , 3 ] , 1 , fn i , acc -> { :cont , acc + i } end ) == 7
842
874
assert Enum . reduce_while ( [ 1 , 2 , 3 ] , 1 , fn _i , acc -> { :halt , acc } end ) == 1
@@ -2023,6 +2055,11 @@ defmodule EnumTest.Range do
2023
2055
assert_raise Enum.EmptyError , fn -> Enum . max ( 1 .. 0 // 1 ) end
2024
2056
end
2025
2057
2058
+ test "max/2 with empty fallback" do
2059
+ assert Enum . max ( .. , fn -> 0 end ) === 0
2060
+ assert Enum . max ( 1 .. 2 , fn -> 0 end ) === 2
2061
+ end
2062
+
2026
2063
test "max_by/2" do
2027
2064
assert Enum . max_by ( 1 .. 1 , fn x -> :math . pow ( - 2 , x ) end ) == 1
2028
2065
assert Enum . max_by ( 1 .. 3 , fn x -> :math . pow ( - 2 , x ) end ) == 2
@@ -2061,6 +2098,11 @@ defmodule EnumTest.Range do
2061
2098
assert_raise Enum.EmptyError , fn -> Enum . min ( 1 .. 0 // 1 ) end
2062
2099
end
2063
2100
2101
+ test "min/2 with empty fallback" do
2102
+ assert Enum . min ( .. , fn -> 0 end ) === 0
2103
+ assert Enum . min ( 1 .. 2 , fn -> 0 end ) === 1
2104
+ end
2105
+
2064
2106
test "min_by/2" do
2065
2107
assert Enum . min_by ( 1 .. 1 , fn x -> :math . pow ( - 2 , x ) end ) == 1
2066
2108
assert Enum . min_by ( 1 .. 3 , fn x -> :math . pow ( - 2 , x ) end ) == 3
@@ -2112,6 +2154,8 @@ defmodule EnumTest.Range do
2112
2154
2113
2155
assert Enum . random ( 1 .. 10 // 2 ) == 7
2114
2156
assert Enum . random ( 1 .. 10 // 2 ) == 5
2157
+
2158
+ assert_raise Enum.EmptyError , fn -> Enum . random ( .. ) end
2115
2159
end
2116
2160
2117
2161
test "reduce/2" do
@@ -2646,6 +2690,11 @@ defmodule EnumTest.Map do
2646
2690
Enum . slice ( map , 0 , 0.99 )
2647
2691
end
2648
2692
end
2693
+
2694
+ test "reduce/3" do
2695
+ assert Enum . reduce ( % { } , 1 , fn x , acc -> x + acc end ) == 1
2696
+ assert Enum . reduce ( % { a: 1 , b: 2 } , 1 , fn { _ , x } , acc -> x + acc end ) == 4
2697
+ end
2649
2698
end
2650
2699
2651
2700
defmodule EnumTest.SideEffects do
0 commit comments