Files

279 lines
7.5 KiB
Typst

#import "/src/utils.typ": *
#let tests = (
// Main tests (covers most of English language)
("Europe", "a"),
("European", "a"),
("Hannah", "a"),
("T-shirt", "a"),
("Xerox", "a"),
("Zebra", "a"),
("aardvark", "an"),
("apple", "an"),
("boat", "a"),
("car", "a"),
("cat", "a"),
("chair", "a"),
("dog", "a"),
("egg", "an"),
("elephant", "an"),
("emu", "an"),
("eucalyptus", "a"),
("eulogy", "a"),
("euphemism", "a"),
("exhausted", "an"),
("ghost", "a"),
("hat", "a"),
("heir", "an"),
("heiress", "an"),
("herb", "an"),
("herbal", "an"),
("historic", "a"),
("history", "a"),
("homage", "an"),
("honest", "an"),
("honestly", "an"),
("honor", "an"),
("honorary", "an"),
("honour", "an"),
("horse", "a"),
("hour", "an"),
("hourglass", "an"),
("house", "a"),
("iris", "an"),
("orange", "an"),
("owl", "an"),
("table", "a"),
("ugly", "an"),
("umbrella", "an"),
("umpire", "an"),
("unicorn", "a"),
("unique", "a"),
("university", "a"),
("urn", "an"),
("usage", "a"),
("user", "a"),
("utensil", "a"),
// Acronym tests
("ASCII", "an"),
("CFO", "a"),
("F.A.Q.", "an"),
("FBI", "an"),
("GIF", "a"),
("HIV", "an"),
("JPEG", "a"),
("LED", "an"),
("MRI", "an"),
("NATO", "an"),
("PNG", "a"),
("Q&A", "a"),
("RF", "an"),
("RNG", "an"),
("SAS", "an"),
("SMS", "an"),
("SOS", "an"),
("SQL", "an"),
("UFO", "a"),
("URL", "a"),
("VCR", "a"),
("WWW", "a"),
("X.Y.Z.", "an"),
("YAML", "a"),
// Extra tests (courtesy of LLM)
// Common English words starting with vowels
("idea", "an"),
("island", "an"),
("offer", "an"),
("option", "an"),
("operation", "an"),
("appletree", "an"),
("iguana", "an"),
("octopus", "an"),
("atom", "an"),
("item", "an"),
// Words starting with vowel but "yoo" sound (thus 'a')
("universe", "a"),
("unicycle", "a"),
("uniform", "a"),
("union", "a"),
("united", "a"),
("unique", "a"), // already tested, reaffirmed
("usual", "a"),
("useful", "a"),
("utility", "a"),
("utopia", "a"),
// More common vowel words with a/an
("umbrella", "an"), // repeated but reaffirming
("eggplant", "an"),
("insect", "an"),
("eleven", "an"),
("olive", "an"),
("impulse", "an"),
("ox", "an"),
("aroma", "an"),
("ear", "an"),
("ocean", "an"),
// Words starting with 'h' but pronounced, so 'a'
("house", "a"), // repeated for emphasis
("hammer", "a"),
("helmet", "a"),
("history", "a"), // repeated
("hero", "a"),
("hill", "a"),
("hobby", "a"),
("holiday", "a"),
("harmony", "a"),
("hover", "a"),
// More silent 'h' words (already in set, but variations)
("honorific", "an"),
("honorarium", "an"),
("honesties", "an"),
("hourly", "an"),
("heirloom", "an"),
// Words starting with 'e' + 'u' combo with "yoo" sound
("Europe", "a"), // repeated
("European", "a"), // repeated
("euphoric", "a"),
("eureka", "a"),
("euphemistic", "a"),
("euphonious", "a"),
("eucalyptus", "a"), // repeated
("euthanasia", "a"),
("eugenics", "a"),
("Eurasia", "a"),
// Common consonant-start words
("book", "a"),
("pen", "a"),
("fork", "a"),
("spoon", "a"),
("knife", "a"),
("ball", "a"),
("tree", "a"),
("river", "a"),
("mountain", "a"),
("cloud", "a"),
// More vowel-start words
("ostrich", "an"),
("amphibian", "an"),
("eleven", "an"), // repeated
("issue", "an"),
("incense", "an"),
("antenna", "an"),
("echo", "an"),
("aisle", "an"),
("oracle", "an"),
("overcoat", "an"),
// More acronym/initialism tests:
("ATM", "an"), // A = 'ay'
("EPA", "an"), // E = 'ee'
("FAQ", "an"), // F = 'eff', repeated as F.A.Q.
("HTML", "an"), // H = 'aitch'
("IBM", "an"), // I = 'eye'
("LAN", "an"), // L = 'el'
("NFL", "an"), // N = 'en'
("OSHA", "an"), // O = 'oh'
("RAM", "an"), // R = 'ar'
("SMS", "an"), // repeated, S = 'ess'
// Acronyms starting with consonant sound letters
("GIF", "a"), // G = 'jee', repeated
("CFO", "a"), // C = 'see', repeated (consonant sound 's')
("CEO", "a"), // C = 'see'
("DNA", "a"), // D = 'dee' starts with 'd' consonant sound
("PGA", "a"), // P = 'pee' starts with 'p' consonant sound
("QVC", "a"), // Q = 'kyoo' starts with 'k' consonant sound
("TNT", "a"), // T = 'tee' starts with 't' consonant sound
("UPS", "a"), // U = 'yoo' sound, hence 'a'
("VIP", "a"), // V = 'vee' starts with 'v' consonant sound
("WIPO", "a"), // W = 'double-u' starts with 'd' consonant sound
// More tricky 'u' words with 'yoo' sound for 'a'
("unify", "a"),
("unilateral", "a"),
("ubiquitous", "a"), // 'yoo-bik...'
("usurp", "a"),
("usuary", "a"), // 'yoo-zhoo-ary' (rare, but treat like usual)
("uterus", "a"), // 'yoo-terus'
("usher", "an"), // 'uh-sher' vowel sound
("ugly", "an"), // repeated, 'uh-glee'
("upper", "an"), // 'uh-pur' (vowel sound but actually 'uh' sound = 'an'? Actually "upper" starts with a simple vowel sound 'uh', so should it be 'an'? It's commonly "an upper hand".
("update", "an"), // 'up-date' starts with 'uh' vowel sound → 'an update' normally. Actually we say "an update" commonly. Correcting to 'an':
// Words starting with 'u' that actually take "an"
// (because they start with a vowel sound 'uh'):
("under", "an"),
("understand", "an"),
("unusual", "an"),
("unreal", "an"),
("unemployed", "an"),
("unequal", "an"),
("unopened", "an"),
("unarmed", "an"),
("uneasy", "an"),
("united", "a"), // 'yoo-nited' is 'a united front'
("universal", "a"),
("umbrella", "an"), // repeated
("upset", "an"), // 'uh-pset' vowel start
// More vowel words to ensure coverage:
("animal", "an"),
("image", "an"),
("order", "an"),
("arrow", "an"),
("ace", "an"),
("acre", "an"),
("agent", "an"),
("artist", "an"),
("idea", "an"), // repeated
("aim", "an"),
("item", "an"), // repeated
("isotope", "an"),
("opera", "an"),
// Words starting with vowels but pronounced with consonant sound 'y' → 'a'
("euphemistic", "a"), // repeated
("euphoric", "a"),
("eulogy", "a"), // repeated
("Europe", "a"), // repeated
("European", "a"), // repeated
("eugenics", "a"), // repeated
("euphemism", "a"), // repeated
("eureka", "a"), // repeated
("euphonious", "a"),
("Eurasia", "a"),
// Common consonant-start words:
("milk", "a"),
("road", "a"),
("stone", "a"),
("book", "a"), // repeated
("pen", "a"), // repeated
("fork", "a"), // repeated
("spoon", "a"), // repeated
("knife", "a"), // 'knife' actually starts with /n/ sound because 'k' is silent. "a knife" or "an knife"? It's "a knife" (starts with 'n' consonant sound?), actually 'kn' in 'knife' is silent, so 'knife' is pronounced 'nife' with a consonant sound 'n', so "a knife" is correct.
("glass", "a"),
("window", "a"),
// Final checks with tricky silent letters:
("gnome", "a"), // 'g' silent, pronounced 'nome' with 'n' consonant sound → 'a gnome'
("gnat", "a"), // 'nat' consonant sound → 'a gnat'
("xylophone", "a"), // 'zylophone' → 'z' consonant sound → 'a xylophone'
("xenon", "a"), // 'zee-non' consonant sound 'z' → 'a xenon'
("honorific", "an"), // repeated but reaffirming
("hourly", "an"), // repeated but reaffirming
("honorably", "an"),
("honorifics", "an"),
("honors", "an"),
)
#for (word, article) in tests {
let chosen = __determine_article(word)
if chosen != article {
panic(
"bad choice! word: "
+ word
+ ", article: "
+ article
+ ", chosen: "
+ chosen,
)
}
}
#set page(height: auto, width: auto, margin: 1em)
Success! All articles determined properly!