package main
import (
"os"
"testing"
"github.com/perlw/advent_of_code/toolkit/grid"
)
func readTestInput() Tiles {
file, _ := os.Open("input_test.txt")
defer file.Close()
return readInput(file)
}
func TestShouldReadInput(t *testing.T) {
input := readTestInput()
expectedToFind := Tiles{
1489: grid.FromRunes([]rune(
string("##.#.#......##...#...##..##.....#...#...#####...#.#..#.#.#.#...#.#.#..##.#...##...##.##.#####.##.#.."),
),
10, 10,
),
}
for i, e := range expectedToFind {
if in, ok := input[i]; !ok {
t.Errorf("did not read input correctly, missing id")
} else {
if len(e.Cells) != len(in.Cells) {
t.Errorf(
"did not read input correctly, differing lengths (%d vs %d expected)",
len(in.Cells), len(e.Cells),
)
}
if in.Width != e.Width || in.Height != e.Height {
t.Errorf("did not read input correctly, incorrect width/height")
}
for j := range in.Cells {
if in.Cells[j] != e.Cells[j] {
t.Errorf("did not read input correctly, corrupt data")
}
}
}
}
}
func TestShouldRotate90(t *testing.T) {
input := readTestInput()
expectedToFind := Tiles{
1489: grid.FromRunes([]rune(
string("#.#.##...##.#..#.#.###...####..#####..###....#....##.##..#.#.#....##..#.###...#..##..#.....#..#....."),
),
10, 10,
),
}
g := input[1489]
rotateGrid(&g)
for _, e := range expectedToFind {
for i := range g.Cells {
if g.Cells[i] != e.Cells[i] {
t.Errorf("did not read input correctly, corrupt data %d %c %c", i, g.Cells[i], e.Cells[i])
return
}
}
}
}
func TestShouldVFlip(t *testing.T) {
input := readTestInput()
expectedToFind := Tiles{
1489: grid.FromRunes([]rune(
string("....#.#.##..#...##.....##..##....#...#...#...######.#.#.#..#..#.#.#....##...#.####.##.##....#.##.###"),
),
10, 10,
),
}
g := input[1489]
vflipGrid(&g)
for _, e := range expectedToFind {
for i := range g.Cells {
if g.Cells[i] != e.Cells[i] {
t.Errorf("did not read input correctly, corrupt data %d %c %c", i, g.Cells[i], e.Cells[i])
}
}
}
}
func TestShouldHFlip(t *testing.T) {
input := readTestInput()
expectedToFind := Tiles{
1489: grid.FromRunes([]rune(
string("###.##.#....##.##.####.#...##....#.#.#..#..#.#.#.######...#...#...#....##..##.....##...#..##.#.#...."),
),
10, 10,
),
}
g := input[1489]
hflipGrid(&g)
for _, e := range expectedToFind {
for i := range g.Cells {
if g.Cells[i] != e.Cells[i] {
t.Errorf("did not read input correctly, corrupt data %d %c %c", i, g.Cells[i], e.Cells[i])
}
}
}
}
func TestShouldPerformOperations(t *testing.T) {
input := readTestInput()
expectedToFind := Tiles{
1489: grid.FromRunes([]rune(
string("##.#.#......##...#...##..##.....#...#...#####...#.#..#.#.#.#...#.#.#..##.#...##...##.##.#####.##.#.."),
),
10, 10,
),
}
g := input[1489]
hflipGrid(&g)
rotateGrid(&g)
rotateGrid(&g)
vflipGrid(&g)
for _, e := range expectedToFind {
for i := range g.Cells {
if g.Cells[i] != e.Cells[i] {
t.Errorf("did not read input correctly, corrupt data %d %c %c", i, g.Cells[i], e.Cells[i])
return
}
}
}
}
func TestTask1ShouldFindResult(t *testing.T) {
input := readTestInput()
expect := 20899048083289
result := Task1(input, true)
if result != expect {
t.Errorf("got %d, expected %d", result, expect)
}
}
func TestTask2ShouldFindResult(t *testing.T) {
input := readTestInput()
expect := 273
result := Task2(input, true)
if result != expect {
t.Errorf("got %d, expected %d", result, expect)
}
}