1
0
Fork 0
mirror of https://github.com/Luzifer/aoc2019.git synced 2024-10-18 11:14:19 +00:00
aoc2019/day12_test.go
Knut Ahlers bf4d2ab80b
Add solution for Day 12
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2019-12-12 19:48:21 +01:00

86 lines
2.2 KiB
Go

package aoc2019
import (
"strings"
"testing"
)
func TestDay12MoonExample(t *testing.T) {
moons, err := day12MoonSystemFromReader(strings.NewReader("<x=-1, y=0, z=2>\n<x=2, y=-10, z=-7>\n<x=4, y=-8, z=8>\n<x=3, y=5, z=-1>"))
if err != nil {
t.Fatalf("Unable to parse moon system: %s", err)
}
if l := len(moons); l != 4 {
t.Fatalf("Unexpected moon count: exp=4 got=%d", l)
}
// Check initial state
for i, expStr := range []string{
"pos=<x=-1, y=0, z=2>, vel=<x=0, y=0, z=0>",
"pos=<x=2, y=-10, z=-7>, vel=<x=0, y=0, z=0>",
"pos=<x=4, y=-8, z=8>, vel=<x=0, y=0, z=0>",
"pos=<x=3, y=5, z=-1>, vel=<x=0, y=0, z=0>",
} {
if s := moons[i].String(); s != expStr {
t.Errorf("Unexpected moon %d: exp=%q got=%q", i, expStr, s)
}
}
// Move moons by one step
moons.move(1)
// Check move state
for i, expStr := range []string{
"pos=<x=2, y=-1, z=1>, vel=<x=3, y=-1, z=-1>",
"pos=<x=3, y=-7, z=-4>, vel=<x=1, y=3, z=3>",
"pos=<x=1, y=-7, z=5>, vel=<x=-3, y=1, z=-3>",
"pos=<x=2, y=2, z=0>, vel=<x=-1, y=-3, z=1>",
} {
if s := moons[i].String(); s != expStr {
t.Errorf("Unexpected moon %d: exp=%q got=%q", i, expStr, s)
}
}
// Move moons by nine more step
moons.move(9)
// Check move state
for i, expStr := range []string{
"pos=<x=2, y=1, z=-3>, vel=<x=-3, y=-2, z=1>",
"pos=<x=1, y=-8, z=0>, vel=<x=-1, y=1, z=3>",
"pos=<x=3, y=-6, z=1>, vel=<x=3, y=2, z=-3>",
"pos=<x=2, y=0, z=4>, vel=<x=1, y=-1, z=-1>",
} {
if s := moons[i].String(); s != expStr {
t.Errorf("Unexpected moon %d: exp=%q got=%q", i, expStr, s)
}
}
// Check energy after step 10
for i, expE := range []int64{
36, 45, 80, 18,
} {
if e := moons[i].totalEnergy(); e != expE {
t.Errorf("Unexpected energy on moon %d: exp=%d got=%d", i, expE, e)
}
}
}
func TestCalculateDay12_Part1(t *testing.T) {
count, err := solveDay12Part1("day12_input.txt")
if err != nil {
t.Fatalf("Day 12 solver failed: %s", err)
}
t.Logf("Solution Day 12 Part 1: %d", count)
}
func TestCalculateDay12_Part2(t *testing.T) {
res, err := solveDay12Part2("day12_input.txt")
if err != nil {
t.Fatalf("Day 12 solver failed: %s", err)
}
t.Logf("Solution Day 12 Part 2: %d", res)
}