mirror of
https://github.com/Luzifer/aoc2019.git
synced 2024-12-22 14:01:17 +00:00
87 lines
2.2 KiB
Go
87 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)
|
||
|
}
|