#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!