package aoc2019 import ( "strings" "testing" ) func TestDay12MoonExample(t *testing.T) { moons, err := day12MoonSystemFromReader(strings.NewReader("\n\n\n")) 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=, vel=", "pos=, vel=", "pos=, vel=", "pos=, vel=", } { 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=, vel=", "pos=, vel=", "pos=, vel=", "pos=, vel=", } { 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=, vel=", "pos=, vel=", "pos=, vel=", "pos=, vel=", } { 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) }