<gh_stars>10-100
# SPDX-License-Identifier: MIT
# Copyright (c) 2020 Akumatic

from code import parse_data, part1
import passport 

def test():
    input = ["ecl:gry pid:860033327 eyr:2020 hcl:#fffffd","byr:1937 iyr:2017 cid:147 hgt:183cm",
    "","iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884","hcl:#cfa07d byr:1929","",
    "hcl:#ae17e1 iyr:2013","eyr:2024","ecl:brn pid:760753108 byr:1931", "hgt:179cm", "",
    "hcl:#cfa07d eyr:2025 pid:166559648", "iyr:2011 ecl:brn hgt:59in"]
    passports = parse_data(input)
    assert len(passports) == 4
    assert part1(passports) == 2

    input = ["eyr:1972 cid:100","hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926","",
    "iyr:2019","hcl:#602927 eyr:1967 hgt:170cm","ecl:grn pid:012533040 byr:1946","",
    "hcl:dab227 iyr:2012","ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277","",
    "hgt:59cm ecl:zzz","eyr:2038 hcl:74454a iyr:2023","pid:3556412378 byr:2007"]
    passports = parse_data(input)
    assert all((not p.valid_data() for p in passports))

    input = ["pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980","hcl:#623a2f","",
    "eyr:2029 ecl:blu cid:129 byr:1989","iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm","",
    "hcl:#888785","hgt:164cm byr:2001 iyr:2015 cid:88","pid:545766238 ecl:hzl","eyr:2022",
    "iyr:2010","hgt:158cm","hcl:#b6652a","ecl:blu","byr:1944","eyr:2021","pid:093154719"]
    passports = parse_data(input)
    assert all((p.valid_data() for p in passports))

    assert passport.validate_byr(2002) == True
    assert passport.validate_byr(2003) == False
    assert passport.validate_hgt("60in") == True
    assert passport.validate_hgt("190cm") == True
    assert passport.validate_hgt("190in") == False
    assert passport.validate_hgt("190") == False
    assert passport.validate_hcl("#123abc") == True
    assert passport.validate_hcl("#123abz") == False
    assert passport.validate_hcl("123abc") == False
    assert passport.validate_ecl("brn") == True
    assert passport.validate_ecl("wat") == False
    assert passport.validate_pid("000000001") == True
    assert passport.validate_pid("0123456789") == False