package day19 import ( "testing" "gitea.paas.celticinfo.fr/oabrivard/aoc2023/utils" ) func TestParseWorkflows(t *testing.T) { lines := []string{ "px{a<2006:qkq,m>2090:A,rfg}", "pv{a>1716:R,A}", "lnx{m>1548:A,A}", "rfg{s<537:gd,x>2440:R,A}", "qs{s>3448:A,lnx}", "qkq{x<1416:A,crn}", "crn{x>2662:A,R}", "in{s<1351:px,qqz}", "qqz{s>2770:qs,m<1801:hdj,R}", "gd{a>3333:R,R}", "hdj{m>838:A,pv}", } result := ParseWorkflows(lines) if len(result) != 11 { t.Fatalf("expected 11, got %d", len(result)) } } func TestParseParts(t *testing.T) { lines := []string{ "{x=787,m=2655,a=1222,s=2876}", "{x=1679,m=44,a=2067,s=496}", "{x=2036,m=264,a=79,s=2244}", "{x=2461,m=1339,a=466,s=291}", "{x=2127,m=1623,a=2188,s=1013}", } result := ParsParts(lines) if len(result) != 5 { t.Fatalf("expected 5, got %d", len(result)) } } func TestPart1(t *testing.T) { lines := []string{ "px{a<2006:qkq,m>2090:A,rfg}", "pv{a>1716:R,A}", "lnx{m>1548:A,A}", "rfg{s<537:gd,x>2440:R,A}", "qs{s>3448:A,lnx}", "qkq{x<1416:A,crn}", "crn{x>2662:A,R}", "in{s<1351:px,qqz}", "qqz{s>2770:qs,m<1801:hdj,R}", "gd{a>3333:R,R}", "hdj{m>838:A,pv}", "", "{x=787,m=2655,a=1222,s=2876}", "{x=1679,m=44,a=2067,s=496}", "{x=2036,m=264,a=79,s=2244}", "{x=2461,m=1339,a=466,s=291}", "{x=2127,m=1623,a=2188,s=1013}", } result := Part1(lines) if result != 19114 { t.Fatalf("expected 19114, got %d", result) } } func TestPart1WithInput(t *testing.T) { lines := utils.ReadLines("input.txt") result := Part1(lines) if result != 575412 { t.Fatalf("expected 575412, got %d", result) } } func TestPart2(t *testing.T) { lines := []string{ "px{a<2006:qkq,m>2090:A,rfg}", "pv{a>1716:R,A}", "lnx{m>1548:A,A}", "rfg{s<537:gd,x>2440:R,A}", "qs{s>3448:A,lnx}", "qkq{x<1416:A,crn}", "crn{x>2662:A,R}", "in{s<1351:px,qqz}", "qqz{s>2770:qs,m<1801:hdj,R}", "gd{a>3333:R,R}", "hdj{m>838:A,pv}", "", "{x=787,m=2655,a=1222,s=2876}", "{x=1679,m=44,a=2067,s=496}", "{x=2036,m=264,a=79,s=2244}", "{x=2461,m=1339,a=466,s=291}", "{x=2127,m=1623,a=2188,s=1013}", } result := Part2(lines) if result != 167409079868000 { t.Fatalf("expected 167409079868000, got %d", result) } } func TestPart2WithInput(t *testing.T) { lines := utils.ReadLines("input.txt") result := Part2(lines) if result != 126107942006821 { t.Fatalf("expected 126107942006821, got %d", result) } }