Day 4; run watches in a seperate process to allow continuation after crashes

This commit is contained in:
bluepython508
2023-12-04 18:04:49 +00:00
parent ee17acccae
commit ce5e83baa4
6 changed files with 56 additions and 6 deletions

View File

@@ -5,6 +5,7 @@ defmodule Mix.Tasks.Aoc do
defp module(1), do: Aoc2023.Day1
defp module(2), do: Aoc2023.Day2
defp module(3), do: Aoc2023.Day3
defp module(4), do: Aoc2023.Day4
# [MODULE INSERTION POINT]
defp base_dir(), do: System.get_env("AOC_BASE")
@@ -102,7 +103,7 @@ defmodule Mix.Tasks.Aoc do
end
defp run(day, ["test", "watch"]) do
{:ok, pid} = Mix.Tasks.Aoc.Watcher.start_link({[dirs: ["lib/", "test/day#{day}/"]], self()})
{:ok, pid} = Mix.Tasks.Aoc.Watcher.start_link({[dirs: ["lib/", "tests/day#{day}/"]], self()})
Process.monitor(pid)
loop = fn (loop) ->
IO.puts(IO.ANSI.clear() <> IO.ANSI.cursor(0, 0))
@@ -112,7 +113,9 @@ defmodule Mix.Tasks.Aoc do
:code.purge(Aoc2023.Common)
:code.load_file(module(day))
:code.load_file(Aoc2023.Common)
run(day, ["test"])
spawn fn ->
run(day, ["test"])
end
receive do
:update -> loop.(loop)
{:DOWN, _, :process, ^pid, _} -> nil
@@ -129,8 +132,6 @@ defmodule Mix.Tasks.Aoc do
|> Enum.map(&test(day, &1))
|> Enum.map(fn {test, input, p1e, p2e} ->
parsed = mod.parse(input)
p1 = mod.part1(parsed)
p2 = mod.part2(parsed)
result = fn (part, got, expected) ->
cond do
@@ -142,8 +143,8 @@ defmodule Mix.Tasks.Aoc do
end
end
result.(1, p1, p1e)
result.(2, p2, p2e)
result.(1, mod.part1(parsed), p1e)
result.(2, mod.part2(parsed), p2e)
end)
end