package main
import (
"testing"
)
var input = [][]Rule{
{
{
Color: "light red",
Contains: map[string]int{
"bright white": 1,
"muted yellow": 2,
},
},
{
Color: "dark orange",
Contains: map[string]int{
"bright white": 3,
"muted yellow": 4,
},
},
{
Color: "bright white",
Contains: map[string]int{
"shiny gold": 1,
},
},
{
Color: "muted yellow",
Contains: map[string]int{
"shiny gold": 2,
"faded blue": 9,
},
},
{
Color: "shiny gold",
Contains: map[string]int{
"dark olive": 1,
"vibrant plum": 2,
},
},
{
Color: "dark olive",
Contains: map[string]int{
"faded blue": 3,
"dotted black": 4,
},
},
{
Color: "vibrant plum",
Contains: map[string]int{
"faded blue": 5,
"dotted black": 6,
},
},
{
Color: "faded blue",
Contains: map[string]int{},
},
{
Color: "dotted black",
Contains: map[string]int{},
},
},
{
{
Color: "shiny gold",
Contains: map[string]int{
"dark red": 2,
},
},
{
Color: "dark red",
Contains: map[string]int{
"dark orange": 2,
},
},
{
Color: "dark orange",
Contains: map[string]int{
"dark yellow": 2,
},
},
{
Color: "dark yellow",
Contains: map[string]int{
"dark green": 2,
},
},
{
Color: "dark green",
Contains: map[string]int{
"dark blue": 2,
},
},
{
Color: "dark blue",
Contains: map[string]int{
"dark violet": 2,
},
},
{
Color: "dark violet",
Contains: map[string]int{},
},
},
}
func TestShouldFindContainingColors(t *testing.T) {
expected := [][]string{
{"bright white", "muted yellow", "dark orange", "light red"},
{},
}
for i := range input {
result := findContainingColors(input[i], "shiny gold")
if len(result) != len(expected[i]) {
t.Errorf("%d: got %+v, expected %+v", i, result, expected[i])
}
for _, r := range result {
var found bool
for _, e := range expected[i] {
if r == e {
found = true
break
}
}
if !found {
t.Errorf("%d: got %+v, expected %+v", i, result, expected[i])
break
}
}
}
}
func TestShouldFindColorsContained(t *testing.T) {
expected := []map[string]int{
{
"faded blue": 13,
"dotted black": 16,
"dark olive": 1,
"vibrant plum": 2,
},
{
"dark blue": 32,
"dark green": 16,
"dark orange": 4,
"dark red": 2,
"dark violet": 64,
"dark yellow": 8,
},
}
for i := range input {
result := findColorsContained(input[i], "shiny gold")
if len(result) != len(expected[i]) {
t.Errorf("%d: got %+v, expected %+v", i, result, expected[i])
}
for k, v := range result {
if expected[i][k] != v {
t.Errorf("%d: got %+v, expected %+v", i, result, expected[i])
break
}
}
}
}
func TestTask1ShouldFindResult(t *testing.T) {
expected := []int{4, 0}
for i := range input {
result := Task1(input[i])
if result != expected[i] {
t.Errorf("%d: got %d, expected %d", i, result, expected)
}
}
}
func TestTask2ShouldFindResult(t *testing.T) {
expected := []int{32, 126}
for i := range input {
result := Task2(input[i])
if result != expected[i] {
t.Errorf("%d: got %d, expected %d", i, result, expected)
}
}
}