if !System.get_env("EXERCISM_TEST_EXAMPLES") do Code.load_file("list_ops.exs", __DIR__) end ExUnit.start() ExUnit.configure(exclude: :pending, trace: true) defmodule ListOpsTest do alias ListOps, as: L use ExUnit.Case defp odd?(n), do: rem(n, 2) == 1 # @tag :pending test "count of empty list" do assert L.count([]) == 0 end @tag :pending test "count of normal list" do assert L.count([1, 3, 5, 7]) == 4 end @tag :pending test "count of huge list" do assert L.count(Enum.to_list(1..1_000_000)) == 1_000_000 end @tag :pending test "reverse of empty list" do assert L.reverse([]) == [] end @tag :pending test "reverse of normal list" do assert L.reverse([1, 3, 5, 7]) == [7, 5, 3, 1] end @tag :pending test "reverse of huge list" do assert L.reverse(Enum.to_list(1..1_000_000)) == Enum.to_list(1_000_000..1) end @tag :pending test "map of empty list" do assert L.map([], &(&1 + 1)) == [] end @tag :pending test "map of normal list" do assert L.map([1, 3, 5, 7], &(&1 + 1)) == [2, 4, 6, 8] end @tag :pending test "map of huge list" do assert L.map(Enum.to_list(1..1_000_000), &(&1 + 1)) == Enum.to_list(2..1_000_001) end @tag :pending test "filter of empty list" do assert L.filter([], &odd?/1) == [] end @tag :pending test "filter of normal list" do assert L.filter([1, 2, 3, 4], &odd?/1) == [1, 3] end @tag :pending test "filter of huge list" do assert L.filter(Enum.to_list(1..1_000_000), &odd?/1) == Enum.map(1..500_000, &(&1 * 2 - 1)) end @tag :pending test "reduce of empty list" do assert L.reduce([], 0, &(&1 + &2)) == 0 end @tag :pending test "reduce of normal list" do assert L.reduce([1, 2, 3, 4], -3, &(&1 + &2)) == 7 end @tag :pending test "reduce of huge list" do assert L.reduce(Enum.to_list(1..1_000_000), 0, &(&1 + &2)) == Enum.reduce(1..1_000_000, 0, &(&1 + &2)) end @tag :pending test "reduce with non-commutative function" do assert L.reduce([1, 2, 3, 4], 10, fn x, acc -> acc - x end) == 0 end @tag :pending test "append of empty lists" do assert L.append([], []) == [] end @tag :pending test "append of empty and non-empty list" do assert L.append([], [1, 2, 3, 4]) == [1, 2, 3, 4] end @tag :pending test "append of non-empty and empty list" do assert L.append([1, 2, 3, 4], []) == [1, 2, 3, 4] end @tag :pending test "append of non-empty lists" do assert L.append([1, 2, 3], [4, 5]) == [1, 2, 3, 4, 5] end @tag :pending test "append of huge lists" do assert L.append(Enum.to_list(1..1_000_000), Enum.to_list(1_000_001..2_000_000)) == Enum.to_list(1..2_000_000) end @tag :pending test "concat of empty list of lists" do assert L.concat([]) == [] end @tag :pending test "concat of normal list of lists" do assert L.concat([[1, 2], [3], [], [4, 5, 6]]) == [1, 2, 3, 4, 5, 6] end @tag :pending test "concat of huge list of small lists" do assert L.concat(Enum.map(1..1_000_000, &[&1])) == Enum.to_list(1..1_000_000) end @tag :pending test "concat of small list of huge lists" do assert L.concat(Enum.map(0..9, &Enum.to_list((&1 * 100_000 + 1)..((&1 + 1) * 100_000)))) == Enum.to_list(1..1_000_000) end end