2018-12-03 21:41:40 +00:00
|
|
|
defmodule Day3Test do
|
|
|
|
use ExUnit.Case
|
|
|
|
doctest Day3
|
|
|
|
alias Day3.Rect
|
|
|
|
|
|
|
|
test "rect overlap" do
|
|
|
|
a = %Rect{id: 1, left: 1, top: 3, width: 4, height: 4}
|
|
|
|
b = %Rect{id: 2, left: 3, top: 1, width: 4, height: 4}
|
|
|
|
assert Rect.overlap(a, b) == %Rect{id: nil, left: 3, top: 3, width: 2, height: 2}
|
|
|
|
|
|
|
|
a = %Rect{id: 1, left: 0, top: 0, width: 4, height: 4}
|
|
|
|
b = %Rect{id: 2, left: 4, top: 2, width: 4, height: 4}
|
|
|
|
assert Rect.overlap(a, b) == nil
|
|
|
|
end
|
|
|
|
|
|
|
|
test "parse rectangle from string" do
|
|
|
|
assert Day3.parse_rect("#1 @ 1,3: 4x4") == %Rect{id: 1, left: 1, top: 3, width: 4, height: 4}
|
|
|
|
assert Day3.parse_rect("#2 @ 3,1: 4x4") == %Rect{id: 2, left: 3, top: 1, width: 4, height: 4}
|
|
|
|
assert Day3.parse_rect("#3 @ 5,5: 2x2") == %Rect{id: 3, left: 5, top: 5, width: 2, height: 2}
|
|
|
|
end
|
|
|
|
|
|
|
|
test "overlap area" do
|
|
|
|
rects = [
|
|
|
|
%Rect{id: 1, left: 1, top: 3, width: 4, height: 4},
|
|
|
|
%Rect{id: 2, left: 3, top: 1, width: 4, height: 4},
|
|
|
|
%Rect{id: 3, left: 5, top: 5, width: 2, height: 2}
|
|
|
|
]
|
2018-12-03 21:58:13 +00:00
|
|
|
|
2018-12-03 21:41:40 +00:00
|
|
|
assert Day3.overlap_area(rects) == 4
|
|
|
|
end
|
|
|
|
|
|
|
|
test "exclude overlapping" do
|
|
|
|
rects = [
|
|
|
|
%Rect{id: 1, left: 1, top: 3, width: 4, height: 4},
|
|
|
|
%Rect{id: 2, left: 3, top: 1, width: 4, height: 4},
|
|
|
|
%Rect{id: 3, left: 5, top: 5, width: 2, height: 2}
|
|
|
|
]
|
2018-12-03 21:58:13 +00:00
|
|
|
|
2018-12-03 21:41:40 +00:00
|
|
|
res = Day3.exclude_overlapping(rects)
|
|
|
|
assert Enum.count(res) == 1
|
|
|
|
assert Enum.at(res, 0).id == 3
|
|
|
|
end
|
2018-12-03 21:58:13 +00:00
|
|
|
end
|