From ebf68345ad4b83e2effb1118e4bedc6cf7eae5c1 Mon Sep 17 00:00:00 2001 From: "Ruidy (aider)" Date: Sun, 1 Dec 2024 18:13:47 +0100 Subject: [PATCH] refactor: Move Day 1 tests to dedicated test file and simplify main test suite fix bug --- lib/advent_code2024/solutions/day1/day1.ex | 26 +++++++++++---- .../solutions/day1/day1_test.exs | 33 +++++++++++++++++++ test/advent_code2024_test.exs | 28 ++-------------- 3 files changed, 55 insertions(+), 32 deletions(-) create mode 100644 test/advent_code2024/solutions/day1/day1_test.exs diff --git a/lib/advent_code2024/solutions/day1/day1.ex b/lib/advent_code2024/solutions/day1/day1.ex index 2e9f2d0..de92f36 100644 --- a/lib/advent_code2024/solutions/day1/day1.ex +++ b/lib/advent_code2024/solutions/day1/day1.ex @@ -32,11 +32,14 @@ defmodule AdventCode2024.Solutions.Day1 do case File.read(input_file) do {:ok, content} -> case parse_input(content) do - {:error, reason} -> {:error, reason} - {left, right} -> + {:error, reason} -> + {:error, reason} + + {left, right} -> result = calculate_total_distance(left, right) {:ok, result} end + {:error, reason} -> {:error, reason} end @@ -44,8 +47,14 @@ defmodule AdventCode2024.Solutions.Day1 do defp valid_line?(line) do case String.split(line, ~r/\s+/, trim: true) do - [left, right] -> match?({:ok, _}, Integer.parse(left)) && match?({:ok, _}, Integer.parse(right)) - _ -> false + [left, right] -> + case {Integer.parse(left), Integer.parse(right)} do + {{n1, ""}, {n2, ""}} when is_integer(n1) and is_integer(n2) -> true + _ -> false + end + + _ -> + false end end @@ -66,11 +75,14 @@ defmodule AdventCode2024.Solutions.Day1 do case File.read(input_file) do {:ok, content} -> case parse_input(content) do - {:error, reason} -> {:error, reason} - {left, right} -> + {:error, reason} -> + {:error, reason} + + {left, right} -> result = calculate_similarity_score(left, right) {:ok, result} end + {:error, reason} -> {:error, reason} end @@ -79,7 +91,7 @@ defmodule AdventCode2024.Solutions.Day1 do @spec parse_input(String.t()) :: number_pair() | {:error, String.t()} defp parse_input(content) do lines = String.split(content, "\n", trim: true) - + if Enum.all?(lines, &valid_line?/1) do {left, right} = lines diff --git a/test/advent_code2024/solutions/day1/day1_test.exs b/test/advent_code2024/solutions/day1/day1_test.exs new file mode 100644 index 0000000..8a9b98b --- /dev/null +++ b/test/advent_code2024/solutions/day1/day1_test.exs @@ -0,0 +1,33 @@ +defmodule AdventCode2024.Solutions.Day1Test do + use ExUnit.Case + alias AdventCode2024.Solutions.Day1 + + @test_input "test/fixtures/day1/input.txt" + + setup do + # Ensure the fixtures directory exists + File.mkdir_p!("test/fixtures/day1") + + # Create test input file + test_content = """ + 1 2 + 3 4 + 5 6 + """ + File.write!(@test_input, test_content) + + on_exit(fn -> + File.rm!(@test_input) + end) + end + + test "solves day 1 puzzle with test input" do + assert {:ok, result} = Day1.solve(@test_input) + assert is_integer(result) + end + + test "solves day 1 part 2 puzzle with test input" do + assert {:ok, result} = Day1.solve_part2(@test_input) + assert is_integer(result) + end +end diff --git a/test/advent_code2024_test.exs b/test/advent_code2024_test.exs index 3997f99..7f06d5c 100644 --- a/test/advent_code2024_test.exs +++ b/test/advent_code2024_test.exs @@ -2,30 +2,8 @@ defmodule AdventCode2024Test do use ExUnit.Case doctest AdventCode2024 - @test_input "test/fixtures/day1/input.txt" - - setup do - # Ensure the fixtures directory exists - File.mkdir_p!("test/fixtures/day1") - - # Create test input file - test_content = """ - 1 2 - 3 4 - 5 6 - """ - File.write!(@test_input, test_content) - - on_exit(fn -> - File.rm!(@test_input) - end) - end - - test "delegates day1 solutions to Day1 module" do - assert {:ok, result} = AdventCode2024.solve_day1(@test_input) - assert is_integer(result) - - assert {:ok, result} = AdventCode2024.solve_day1_part2(@test_input) - assert is_integer(result) + test "delegates to solution modules" do + assert function_exported?(AdventCode2024, :solve_day1, 1) + assert function_exported?(AdventCode2024, :solve_day1_part2, 1) end end