Module:cmn-pron/testcases

This is the unit-testing module for Module:cmn-pron.

302 of 23711 tests failed. (refresh)

TextExpectedActualDiffers at
test_convert_diacritics:
Passedōyōㄛ ㄧㄛㄛ ㄧㄛ
Passeděrduoㄦˇ ˙ㄉㄨㄛㄦˇ ˙ㄉㄨㄛ
Passedèrㄦˋㄦˋ
Passeddì'èr shǒuㄉㄧˋ ㄦˋ ㄕㄡˇㄉㄧˋ ㄦˋ ㄕㄡˇ
PassedBěijīngㄅㄟˇ ㄐㄧㄥㄅㄟˇ ㄐㄧㄥ
PassedZhōngguóㄓㄨㄥ ㄍㄨㄛˊㄓㄨㄥ ㄍㄨㄛˊ
Passedbiān ... biān ...ㄅㄧㄢ ... ㄅㄧㄢ ...ㄅㄧㄢ ... ㄅㄧㄢ ...
Passedbùyóu fēnshuōㄅㄨˋ ㄧㄡˊ ㄈㄣ ㄕㄨㄛㄅㄨˋ ㄧㄡˊ ㄈㄣ ㄕㄨㄛ
Passedwánrㄨㄢˊㄦㄨㄢˊㄦ
Passeddàirㄉㄞˋㄦㄉㄞˋㄦ
Passedfèiyongㄈㄟˋ ˙ㄩㄥㄈㄟˋ ˙ㄩㄥ
Passedzhùyīnㄓㄨˋ ㄧㄣㄓㄨˋ ㄧㄣ
Passedfúhàoㄈㄨˊ ㄏㄠˋㄈㄨˊ ㄏㄠˋ
PassedDōngnán-Yàㄉㄨㄥ ㄋㄢˊ ㄧㄚˋㄉㄨㄥ ㄋㄢˊ ㄧㄚˋ
TextExpectedActualDiffers at
test_convert_pinyin:
Passedㄉㄧˋ ㄦˋ ㄕㄡˇdì èr shǒudì èr shǒu
Passedㄨㄢˊㄦwánrwánr
Passedㄉㄞˋㄦdàirdàir
TextExpectedActualDiffers at
test_diacritics_to_numeric:
PassedBěijīngbei3 jing1bei3 jing1
PassedZhōngguózhong1 guo2zhong1 guo2
Passedzhongzhong5zhong5
TextExpectedActualDiffers at
test_erhua:
Passedtuō'érsuǒtuō'érsuǒrtuō'érsuǒr
TextExpectedActualDiffers at
test_gwoyeu_romatzyh:
Passedqīnghǎichinghaechinghae
Passedfújiànfwujiannfwujiann
Passedguǎngdōnggoangdonggoangdong
Passedhéběiherbeeiherbeei
Passedhúnánhwunanhwunan
Passedzhèjiāngjehjiangjehjiang
Passednèiménggǔneymengguuneymengguu
Passedshǎnxīshaanshishaanshi
Passedxīnjiāngshinjiangshinjiang
Passedxīzàngshitzanqshitzanq
Passedsìchuānsyhchuansyhchuan
Passedyeeyee
Passedyǐnyiinyiin
Passedbiěbieebiee
Passedwoowoo
Passedduǒduooduoo
Passedtsyrtsyr
Passedyuhyuh
Passedjiuhjiuh
Passedyīdiǎnridealideal
Passednǚháirneuharlneuharl
Passedhuìrhuellhuell
Passedérerlerl
Passeděreeleel
Passedèrellell
Passedchērche'lche'l
Passedkérker'lker'l
Passedgěrgee'lgee'l
Passedgèrgehlgehl
Passedyuēriue'liue'l
Passedjiérjye'ljye'l
Passedjiěrjieeljieel
Passedyèryellyell
Passedyàngryanqlyanql
Passeddiàordiawldiawl
Passedhúrhwulhwul
Passedwǔrwuulwuul
Passedtùrtulltull
Passedwùrwullwull
Passedle.le.le
TextExpectedActualDiffers at
test_py_gwoyeu:
Failedhm̄hmhm13
Failedhḿhmrhm23
Failedhm̌hmmhm33
Failedhm̀hmhhm43
Failedhm.hmhm51
Failedhn̄ghnghng14
Failedhńghngrhng24
Failedhňghnnghng33
Failedhǹghnghhng44
Failedhng.hnghng51
Failedmm12
Failedḿmrm22
Failedmmm32
Failedmhm42
Failedm.mm51
Failednn12
Failedńnrn22
Failedňnnn32
Failedǹnhn42
Failedn.nn51
Failedn̄gngng13
Failedńgngrng23
Failedňgnngng32
Failedǹgnghng43
Failedng.ngng51
Failedwê̌woèwuuè2
Failedwềwèhwuèh2
Monosyllables: 27 of 2365 tests failed.
Failedbê̄rbe'l[error]1
Failedbếrber'l[error]1
Failedbê̌rbeel[error]1
Failedbềrbell[error]1
Failedbêr.be'l[error]1
Failedcê̄rtse'l[error]1
Failedcếrtser'l[error]1
Failedcê̌rtseel[error]1
Failedcềrtsell[error]1
Failedcêr.tse'l[error]1
Faileddê̄rde'l[error]1
Faileddếrder'l[error]1
Faileddê̌rdeel[error]1
Faileddềrdell[error]1
Faileddêr.de'l[error]1
Failedē're'le'r13
Failedé'rer'le'r22
Failedě'ree'le'r32
Failedè'rehle'r42
Failede'r.e'le'r51
Failedê̄re'l[error]1
Failedếrer'l[error]1
Failedê̌reel[error]1
Failedềrell[error]1
Failedêr.e'l[error]1
Failedgê̄rge'l[error]1
Failedgếrger'l[error]1
Failedgê̌rgeel[error]1
Failedgềrgell[error]1
Failedgêr.ge'l[error]1
Failedhm̄rhmlhmr13
Failedhḿrhmrlhmr24
Failedhm̌rhmmlhmr33
Failedhm̀rhmllhmr43
Failedhmr.hmlhmr51
Failedhn̄grhnglhngr14
Failedhńgrhngrlhngr25
Failedhňgrhnnglhngr33
Failedhǹgrhngllhngr44
Failedhngr.hnglhngr51
Failedjiōrjiol[error]1
Failedjiórjyol[error]1
Failedjiǒrjeol[error]1
Failedjiòrjioll[error]1
Failedjior.jiol[error]1
Failedjūnrjiueljiul4
Failedjúnrjyueljyul4
Failedjǔnrjeueljeul4
Failedjùnrjiuelljiull4
Failedjunr.jiuel.jiul5
Failedkê̄rke'l[error]1
Failedkếrker'l[error]1
Failedkê̌rkeel[error]1
Failedkềrkell[error]1
Failedkêr.ke'l[error]1
Failedlǖnrlhiuellhiul5
Failedlǘnrliuelliul4
Failedlǚnrleuelleul4
Failedlǜnrliuellliull4
Failedlünr.liuel.liul5
Failedm̄rmlmr12
Failedḿrmrlmr23
Failedm̌rmmlmr32
Failedm̀rmllmr42
Failedmr.mlmr51
Failedmê̄nrmhe'lmhèl3
Failedmếnrme'lmèl2
Failedmê̌nrmeelmèèl2
Failedmềnrmellmèll2
Failedmênr.me'l.mèl3
Failedn̄rnlnr12
Failedńrnrlnr23
Failedňrnnlnr32
Failedǹrnllnr42
Failednr.nlnr51
Failednê̄rnhe'l[error]1
Failednếrne'l[error]1
Failednê̌rneel[error]1
Failednềrnell[error]1
Failednêr.ne'l[error]1
Failedn̄grnglngr13
Failedńgrngrlngr24
Failedňgrnnglngr32
Failedǹgrngllngr43
Failedngr.nglngr51
Failedpê̄rpe'l[error]1
Failedpếrper'l[error]1
Failedpê̌rpeel[error]1
Failedpềrpell[error]1
Failedpêr.pe'l[error]1
Failedqiōrchiol[error]1
Failedqiórchyol[error]1
Failedqiǒrcheol[error]1
Failedqiòrchioll[error]1
Failedqior.chiol[error]1
Failedqūnrchiuelchiul5
Failedqúnrchyuelchyul5
Failedqǔnrcheuelcheul5
Failedqùnrchiuellchiull5
Failedqunr.chiuel.chiul6
Failedshê̄rshe'l[error]1
Failedshếrsher'l[error]1
Failedshê̌rsheel[error]1
Failedshềrshell[error]1
Failedshêr.she'l[error]1
Failedtê̄rte'l[error]1
Failedtếrter'l[error]1
Failedtê̌rteel[error]1
Failedtềrtell[error]1
Failedtêr.te'l[error]1
Failedvê̄rve'l[error]1
Failedvếrver'l[error]1
Failedvê̌rveel[error]1
Failedvềrvell[error]1
Failedvêr.ve'l[error]1
Failedwê̄rue'l[error]1
Failedwếrwe'l[error]1
Failedwê̌rwoel[error]1
Failedwềrwell[error]1
Failedwêr.ue'l[error]1
Failedwǒrwoolwuuol2
Failedxūnrshiuelshiul5
Failedxúnrshyuelshyul5
Failedxǔnrsheuelsheul5
Failedxùnrshiuellshiull5
Failedxunr.shiuel.shiul6
Failedyěryeelyiiel2
Failedyǐryeelyiiel2
Failedyǐnryeelyiiel2
Failedyǐngryeenglyiiengl2
Failedyūnriueliul3
Failedyúnryuelyul3
Failedyǔnryeuelyeul4
Failedyùnryuellyull3
Failedyunr.iuel.iul4
Failedzê̄rtze'l[error]1
Failedzếrtzer'l[error]1
Failedzê̌rtzeel[error]1
Failedzềrtzell[error]1
Failedzêr.tze'l[error]1
Failedzhê̄rje'l[error]1
Failedzhếrjer'l[error]1
Failedzhê̌rjeel[error]1
Failedzhềrjell[error]1
Failedzhêr.je'l[error]1
Failedziōrtziol[error]1
Failedziórtzyol[error]1
Failedziǒrtzeol[error]1
Failedziòrtzioll[error]1
Failedzior.tziol[error]1
Erhua monosyllables: 150 of 2365 tests failed.
TextExpectedActualDiffers at
test_py_ipa:
Monosyllables: 0 of 2365 tests failed.
TextExpectedActualDiffers at
test_py_palladius:
Failedmê̄nмэйньмэнь3
Failedmếnмэйньмэнь3
Failedmê̌nмэйньмэнь3
Failedmềnмэйньмэнь3
Failedmênмэйньмэнь3
Failedquōцюоцюйо3
Failedquóцюоцюйо3
Failedquǒцюоцюйо3
Failedquòцюоцюйо3
Failedquoцюоцюйо3
Failedsīngсинсын2
Failedsíngсинсын2
Failedsǐngсинсын2
Failedsìngсинсын2
Failedsingсинсын2
Monosyllables: 15 of 2365 tests failed.
TextExpectedActualDiffers at
test_py_tongyong:
Failedsiāosiaosihao3
Failedsiáosiáosiháo3
Failedsiǎosiǎosihǎo3
Failedsiàosiàosihào3
Failedsiaosiåosihåo3
Failedsīngsingsihng3
Failedsíngsíngsíhng3
Failedsǐngsǐngsǐhng3
Failedsìngsìngsìhng3
Failedsingsi̊ngsi̊hng4
Failedziōzioziho3
Failedzióziózihó3
Failedziǒziǒzihǒ3
Failedziòziòzihò3
Failedziozio̊ziho̊3
Monosyllables: 15 of 2365 tests failed.
TextExpectedActualDiffers at
test_py_wg:
Monosyllables: 0 of 2365 tests failed.
Erhua monosyllables: 0 of 2365 tests failed.
TextExpectedActualDiffers at
test_py_yale:
Faileddwō2
Faileddwó2
Faileddwǒ2
Faileddwò2
Faileddododwo2
Failedquōchywōchyuwō4
Failedquóchywóchyuwó4
Failedquǒchywǒchyuwǒ4
Failedquòchywòchyuwò4
Failedquochywochyuwo4
Failedshōshōshwō3
Failedshóshóshwó3
Failedshǒshǒshwǒ3
Failedshòshòshwò3
Failedshoshoshwo3
Failedzhōjwō2
Failedzhójwó2
Failedzhǒjwǒ2
Failedzhòjwò2
Failedzhojojwo2
Faileddzōdzwō3
Faileddzódzwó3
Faileddzǒdzwǒ3
Faileddzòdzwò3
Failedzodzodzwo3
Monosyllables: 25 of 2365 tests failed.
TextExpectedActualDiffers at
test_py_zhuyin:
Failedhm̄ㄏㄇ2
Failedhḿㄏㄇˊˊ2
Failedhm̌ㄏㄇˇˇ2
Failedhm̀ㄏㄇˋˋ2
Failedhm˙ㄏㄇ˙ㄏ3
Failedhn̄gㄏㄫ2
Failedhńgㄏㄫˊˊ2
Failedhňgㄏㄫˇˇ2
Failedhǹgㄏㄫˋˋ2
Failedhng˙ㄏㄫ˙ㄏ3
Failed1
Failedḿㄇˊㆬˊ1
Failedㄇˇㆬˇ1
Failedㄇˋㆬˋ1
Failedm˙ㄇ˙ㆬ2
Failedmê̄nㄇㄝㄋㄇㄝ3
Failedmếnㄇㄝㄋˊㄇㄝˊ3
Failedmê̌nㄇㄝㄋˇㄇㄝˇ3
Failedmềnㄇㄝㄋˋㄇㄝˋ3
Failedmên˙ㄇㄝㄋ˙ㄇㄝ4
Failed1
Failedńㄋˊㄯˊ1
Failedňㄋˇㄯˇ1
Failedǹㄋˋㄯˋ1
Failedn˙ㄋ˙ㄯ2
Failedn̄g1
Failedńgㄫˊㆭˊ1
Failedňgㄫˇㆭˇ1
Failedǹgㄫˋㆭˋ1
Failedng˙ㄫ˙ㆭ2
Failedōngㄛㄥ2
Failedóngㄛㄥˊˊ2
Failedǒngㄛㄥˇˇ2
Failedòngㄛㄥˋˋ2
Failedong˙ㄛㄥ˙ㄛ3
Monosyllables: 35 of 2365 tests failed.
Failedhm̄rㄏㄇㄦ2
Failedhḿrㄏㄇˊㄦˊㄦ2
Failedhm̌rㄏㄇˇㄦˇㄦ2
Failedhm̀rㄏㄇˋㄦˋㄦ2
Failedhmr˙ㄏㄇㄦ˙ㄏ3
Failedhn̄grㄏㄫㄦ2
Failedhńgrㄏㄫˊㄦˊㄦ2
Failedhňgrㄏㄫˇㄦˇㄦ2
Failedhǹgrㄏㄫˋㄦˋㄦ2
Failedhngr˙ㄏㄫㄦ˙ㄏ3
Failedm̄rㄇㄦㆬㄦ1
Failedḿrㄇˊㄦㆬˊㄦ1
Failedm̌rㄇˇㄦㆬˇㄦ1
Failedm̀rㄇˋㄦㆬˋㄦ1
Failedmr˙ㄇㄦ˙ㆬㄦ2
Failedmê̄nrㄇㄝㄋㄦㄇㄝ3
Failedmếnrㄇㄝㄋˊㄦㄇㄝˊㄦ3
Failedmê̌nrㄇㄝㄋˇㄦㄇㄝˇㄦ3
Failedmềnrㄇㄝㄋˋㄦㄇㄝˋㄦ3
Failedmênr˙ㄇㄝㄋㄦ˙ㄇㄝ4
Failedn̄rㄋㄦㄯㄦ1
Failedńrㄋˊㄦㄯˊㄦ1
Failedňrㄋˇㄦㄯˇㄦ1
Failedǹrㄋˋㄦㄯˋㄦ1
Failednr˙ㄋㄦ˙ㄯㄦ2
Failedn̄grㄫㄦㆭㄦ1
Failedńgrㄫˊㄦㆭˊㄦ1
Failedňgrㄫˇㄦㆭˇㄦ1
Failedǹgrㄫˋㄦㆭˋㄦ1
Failedngr˙ㄫㄦ˙ㆭㄦ2
Failedōngrㄛㄥㄦ2
Failedóngrㄛㄥˊㄦˊㄦ2
Failedǒngrㄛㄥˇㄦˇㄦ2
Failedòngrㄛㄥˋㄦˋㄦ2
Failedongr˙ㄛㄥㄦ˙ㄛ3
Erhua monosyllables: 35 of 2365 tests failed.

local p = require("Module:UnitTests")
local m_pron = require("Module:cmn-pron")

local gsub = mw.ustring.gsub
local toNFC = mw.ustring.toNFC
local u = mw.ustring.char

local raw_pinyin = {"a!", "a!i", "a!n", "a!ng", "a!o", "ba!", "ba!i", "ba!n", "ba!ng", "ba!o", "be!", "bê!", "be!i", "be!n", "be!ng", "bi!", "bia!n", "bia!ng", "bia!o", "bie!", "bi!n", "bi!ng", "biu!", "bo!", "bo!ng", "bu!", "ca!", "ca!i", "ca!n", "ca!ng", "ca!o", "ce!", "cê!", "ce!i", "ce!n", "ce!ng", "cha!", "cha!i", "cha!n", "cha!ng", "cha!o", "che!", "che!n", "che!ng", "chi!", "cho!ng", "cho!u", "chu!", "chua!", "chua!i", "chua!n", "chua!ng", "chui!", "chu!n", "chuo!", "ci!", "co!ng", "co!u", "cu!", "cua!n", "cüa!n", "cui!", "cu!n", "cuo!", "da!", "da!i", "da!n", "da!ng", "da!o", "de!", "dê!", "de!i", "de!n", "de!ng", "di!", "dia!", "dia!n", "dia!ng", "dia!o", "die!", "di!ng", "diu!", "do!", "do!ng", "do!u", "du!", "dua!n", "dua!ng", "dui!", "du!n", "duo!", "e!", "ê!", "e!i", "e!n", "e!ng", "e!r", "fa!", "fa!i", "fa!n", "fa!ng", "fe!i", "fe!n", "fe!ng", "fia!o", "fo!", "fo!ng", "fo!u", "fu!", "ga!", "ga!i", "ga!n", "ga!ng", "ga!o", "ge!", "gê!", "ge!i", "ge!n", "ge!ng", "gi!", "gi!ng", "go!ng", "go!u", "gu!", "gua!", "gua!i", "gua!n", "gua!ng", "gui!", "gu!n", "guo!", "ha!", "ha!i", "ha!n", "ha!ng", "ha!o", "he!", "he!i", "he!n", "he!ng", "hm!", "hn!g", "ho!ng", "ho!u", "hu!", "hua!", "hua!i", "hua!n", "hua!ng", "hui!", "hu!n", "huo!", "ji!", "jia!", "jia!i", "jia!n", "jia!ng", "jia!o", "jie!", "ji!n", "ji!ng", "jio!", "jio!ng", "jiu!", "ju!", "jua!n", "jue!", "ju!n", "ka!", "ka!i", "ka!n", "ka!ng", "ka!o", "ke!", "kê!", "ke!i", "ke!n", "ke!ng", "kia!", "kia!ng", "kiu!", "ko!ng", "ko!u", "ku!", "kua!", "kua!i", "kua!n", "kua!ng", "kui!", "ku!n", "kuo!", "la!", "la!i", "la!n", "la!ng", "la!o", "le!", "le!i", "le!n", "le!ng", "li!", "lia!", "lia!n", "lia!ng", "lia!o", "lie!", "li!n", "li!ng", "liu!", "lo!", "lo!ng", "lo!u", "lu!", "lü!", "lua!n", "lüa!n", "lüe!", "lui!", "lu!n", "lü!n", "luo!", "m!", "ma!", "ma!i", "ma!n", "ma!ng", "ma!o", "me!", "me!i", "me!n", "mê!n", "me!ng", "mi!", "mia!n", "mia!o", "mie!", "mi!n", "mi!ng", "miu!", "mo!", "mo!u", "mu!", "mua!", "n!", "na!", "na!i", "na!n", "na!ng", "na!o", "ne!", "nê!", "ne!i", "ne!n", "ne!ng", "n!g", "ni!", "nia!", "nia!n", "nia!ng", "nia!o", "nie!", "ni!n", "ni!ng", "niu!", "no!ng", "no!u", "nu!", "nü!", "nua!n", "nüe!", "nu!n", "nuo!", "o!", "o!ng", "o!u", "pa!", "pa!i", "pa!n", "pa!ng", "pa!o", "pe!", "pê!", "pe!i", "pe!n", "pe!ng", "pi!", "pia!", "pia!n", "pia!o", "pie!", "pi!n", "pi!ng", "po!", "po!u", "pu!", "pu!n", "qi!", "qia!", "qia!n", "qia!ng", "qia!o", "qie!", "qi!n", "qi!ng", "qio!", "qio!ng", "qiu!", "qu!", "qua!n", "que!", "qu!n", "quo!", "ra!n", "ra!ng", "ra!o", "re!", "re!n", "re!ng", "ri!", "ro!ng", "ro!u", "ru!", "rua!", "rua!n", "rui!", "ru!n", "ruo!", "sa!", "sa!i", "sa!n", "sa!ng", "sa!o", "se!", "se!i", "se!n", "se!ng", "sha!", "sha!i", "sha!n", "sha!ng", "sha!o", "she!", "shê!", "she!i", "she!n", "she!ng", "shi!", "sho!", "sho!u", "shu!", "shua!", "shua!i", "shua!n", "shua!ng", "shui!", "shu!n", "shuo!", "si!", "sia!o", "si!ng", "so!ng", "so!u", "su!", "sua!n", "sui!", "su!n", "suo!", "ta!", "ta!i", "ta!n", "ta!ng", "ta!o", "te!", "tê!", "te!i", "te!ng", "ti!", "tia!n", "tia!o", "tie!", "ti!ng", "to!ng", "to!u", "tu!", "tua!n", "tui!", "tu!n", "tuo!", "vo!", "vê!", "vu!", "wa!", "wa!i", "wa!n", "wa!ng", "wê!", "we!i", "we!n", "we!ng", "wo!", "wu!", "xi!", "xia!", "xia!n", "xia!ng", "xia!o", "xie!", "xi!n", "xi!ng", "xio!ng", "xiu!", "xu!", "xua!n", "xue!", "xu!n", "ya!", "ya!i", "ya!n", "ya!ng", "ya!o", "ye!", "yi!", "yi!n", "yi!ng", "yo!", "yo!ng", "yo!u", "yu!", "yua!n", "yue!", "yu!n", "za!", "za!i", "za!n", "za!ng", "za!o", "ze!", "zê!", "ze!i", "ze!n", "ze!ng", "zha!", "zha!i", "zha!n", "zha!ng", "zha!o", "zhe!", "zhê!", "zhe!i", "zhe!n", "zhe!ng", "zhi!", "zho!", "zho!ng", "zho!u", "zhu!", "zhua!", "zhua!i", "zhua!n", "zhua!ng", "zhui!", "zhu!n", "zhuo!", "zi!", "zio!", "zo!", "zo!ng", "zo!u", "zu!", "zua!n", "zui!", "zu!n", "zuo!"}

local raw_pinyin_erhua = {}
for k, v in ipairs(raw_pinyin) do
	if v == "e!" then
		table.insert(raw_pinyin_erhua, v .. "'r")
	elseif v == "e!r" then
		table.insert(raw_pinyin_erhua, v)
	else
		table.insert(raw_pinyin_erhua, v .. "r")
	end
end

local pinyin_tones = {u(0x304), u(0x301), u(0x30C), u(0x300), ""}

local pinyin = {}
setmetatable(pinyin, {
	__index = function(t, k)
		local v = raw_pinyin[math.ceil(k/5)]
		local tone = pinyin_tones[(k - 1) % 5 + 1]
		v = v:gsub("!", tone)
		return toNFC(v)
	end}
)

local pinyin_erhua = {}
setmetatable(pinyin_erhua, {
	__index = function(t, k)
		local v = raw_pinyin_erhua[math.ceil(k/5)]
		local tone = pinyin_tones[(k - 1) % 5 + 1]
		v = v:gsub("!", tone)
		return toNFC(v)
	end}
)
 
function p:check_convert(text, expected)
	self:equals(text, m_pron.py_zhuyin(text), expected)
end
 
function p:check_diacr2num(text, expected)
	self:equals(text, m_pron.py_transform(text,true), expected)
end

function p:iterate_conversions(examples, tests, func, name)
	local fail, total = 0, 0
	for i, expected in ipairs(examples) do
		local ok, actual = pcall(func, tests[i])
		if not (ok and actual == expected) then
			fail = fail + 1
			self:display_difference(false, tests[i], ok and actual or "[error]", expected, {show_difference = true})
		else
			self.total_tests = self.total_tests + 1
		end
		total = total + 1
	end
	self:header(name .. ": " .. tostring(fail) .. " of " .. tostring(total) .. " tests failed.")
end

function p:zhuyin_py(text, expected)
	self:equals(text, m_pron.zhuyin_py(text), expected)
end

function p:gwoyeu(text, expected)
	self:equals(text, m_pron.py_gwoyeu(text), expected)
end

function p:py_wg(text, expected)
	self:equals(text, m_pron.py_wg(text), expected)
end

function p:yale(text, expected)
	self:equals(text, m_pron.py_yale(text), expected)
end

function p:palladius(text, expected)
	self:equals(text, m_pron.py_palladius(text), expected)
end

function p:test_convert_diacritics()
	local examples = {
		{'ōyō','ㄛ ㄧㄛ'},	
		--èr, ěr and apostrophe
		{'ěrduo','ㄦˇ ˙ㄉㄨㄛ'},
		{'èr','ㄦˋ'},
		{"dì'èr shǒu","ㄉㄧˋ ㄦˋ ㄕㄡˇ"},
		{'Běijīng','ㄅㄟˇ ㄐㄧㄥ'},
		{'Zhōngguó','ㄓㄨㄥ ㄍㄨㄛˊ'},
		{'biān ... biān ...','ㄅㄧㄢ ... ㄅㄧㄢ ...'},
		{'bùyóu fēnshuō','ㄅㄨˋ ㄧㄡˊ ㄈㄣ ㄕㄨㄛ'},
		--erhua (???)
		{'wánr','ㄨㄢˊㄦ'},
		{'dàir','ㄉㄞˋㄦ'},
		-- neutral tone
		{'fèiyong','ㄈㄟˋ ˙ㄩㄥ'},
		{'zhùyīn','ㄓㄨˋ ㄧㄣ'},
		{'fúhào','ㄈㄨˊ ㄏㄠˋ'},
		{'Dōngnán-Yà','ㄉㄨㄥ ㄋㄢˊ ㄧㄚˋ'},	
	}
	self:iterate(examples, 'check_convert')
end
 
function p:test_diacritics_to_numeric()
	local examples = {
		{'Běijīng','bei3 jing1'},
		{'Zhōngguó','zhong1 guo2'},
		{'zhong','zhong5'},
	}
	self:iterate(examples, 'check_diacr2num')
end

function p:test_convert_pinyin()
	local examples = {
		{'ㄉㄧˋ ㄦˋ ㄕㄡˇ', "dì èr shǒu"},
		--erhua
		{'ㄨㄢˊㄦ', 'wánr'},
		{'ㄉㄞˋㄦ', 'dàir'}
	}
	self:iterate(examples, 'zhuyin_py')
end

function p:test_gwoyeu_romatzyh()
	local examples = {
		{'qīnghǎi','chinghae'},
		{'fújiàn','fwujiann'},
		{'guǎngdōng','goangdong'},
		{'héběi','herbeei'},
		{'húnán','hwunan'},
		{'zhèjiāng','jehjiang'},
		{'nèiménggǔ','neymengguu'},
		{'shǎnxī','shaanshi'},
		{'xīnjiāng','shinjiang'},
		{'xīzàng','shitzanq'},
		{'sìchuān','syhchuan'},
		{'yě','yee'},
		{'yǐn','yiin'},
		{'biě','biee'},
		{'wǒ','woo'},
		{'duǒ','duoo'},
		{'cí','tsyr'},
		{'yù','yuh'},
		{'jù','jiuh'},
		{'yīdiǎnr','ideal'},
		{'nǚháir','neuharl'},
		{'huìr','huell'},
		{'ér','erl'},
		{'ěr','eel'},
		{'èr','ell'},
		{'chēr',"che'l"},
		{'kér',"ker'l"},
		{'gěr',"gee'l"},
		{'gèr','gehl'},
		{'yuēr',"iue'l"},
		{'jiér',"jye'l"},
		{'jiěr',"jieel"},
		{'yèr','yell'},
		{'yàngr','yanql'},
		{'diàor','diawl'},
		{'húr','hwul'},
		{'wǔr','wuul'},
		{'tùr','tull'},
		{'wùr','wull'},
		{'le','.le'},
	}
	self:iterate(examples, 'gwoyeu')
end

function p:test_py_ipa()
	local raw_examples = {"ˀä", "ˀaɪ̯", "ˀän", "ˀɑŋ", "ˀɑʊ̯", "pä", "paɪ̯", "pän", "pɑŋ", "pɑʊ̯", "pɤ", "pɛ", "peɪ̯", "pən", "pɤŋ", "pi", "pi̯ɛn", "pi̯ɑŋ", "pi̯ɑʊ̯", "pi̯ɛ", "pin", "piŋ", "pi̯oʊ̯", "pu̯ɔ", "pʊŋ", "pu", "t͡sʰä", "t͡sʰaɪ̯", "t͡sʰän", "t͡sʰɑŋ", "t͡sʰɑʊ̯", "t͡sʰɤ", "t͡sʰɛ", "t͡sʰeɪ̯", "t͡sʰən", "t͡sʰɤŋ", "ʈ͡ʂʰä", "ʈ͡ʂʰaɪ̯", "ʈ͡ʂʰän", "ʈ͡ʂʰɑŋ", "ʈ͡ʂʰɑʊ̯", "ʈ͡ʂʰɤ", "ʈ͡ʂʰən", "ʈ͡ʂʰɤŋ", "ʈ͡ʂʰʐ̩", "ʈ͡ʂʰʊŋ", "ʈ͡ʂʰoʊ̯", "ʈ͡ʂʰu", "ʈ͡ʂʰu̯ä", "ʈ͡ʂʰu̯aɪ̯", "ʈ͡ʂʰu̯än", "ʈ͡ʂʰu̯ɑŋ", "ʈ͡ʂʰu̯eɪ̯", "ʈ͡ʂʰu̯ən", "ʈ͡ʂʰu̯ɔ", "t͡sʰz̩", "t͡sʰʊŋ", "t͡sʰoʊ̯", "t͡sʰu", "t͡sʰu̯än", "t͡sʰy̯ɛn", "t͡sʰu̯eɪ̯", "t͡sʰu̯ən", "t͡sʰu̯ɔ", "tä", "taɪ̯", "tän", "tɑŋ", "tɑʊ̯", "tɤ", "tɛ", "teɪ̯", "tən", "tɤŋ", "ti", "ti̯ä", "ti̯ɛn", "ti̯ɑŋ", "ti̯ɑʊ̯", "ti̯ɛ", "tiŋ", "ti̯oʊ̯", "tɔ", "tʊŋ", "toʊ̯", "tu", "tu̯än", "tu̯ɑŋ", "tu̯eɪ̯", "tu̯ən", "tu̯ɔ", "ˀɤ", "ˀɛ", "ˀeɪ̯", "ˀən", "ˀɤŋ", "ˀɤɻ", "fä", "faɪ̯", "fän", "fɑŋ", "feɪ̯", "fən", "fɤŋ", "fi̯ɑʊ̯", "fu̯ɔ", "fʊŋ", "foʊ̯", "fu", "kä", "kaɪ̯", "kän", "kɑŋ", "kɑʊ̯", "kɤ", "kɛ", "keɪ̯", "kən", "kɤŋ", "ki", "kiŋ", "kʊŋ", "koʊ̯", "ku", "ku̯ä", "ku̯aɪ̯", "ku̯än", "ku̯ɑŋ", "ku̯eɪ̯", "ku̯ən", "ku̯ɔ", "xä", "xaɪ̯", "xän", "xɑŋ", "xɑʊ̯", "xɤ", "xeɪ̯", "xən", "xɤŋ", "xm̩", "xŋ̍", "xʊŋ", "xoʊ̯", "xu", "xu̯ä", "xu̯aɪ̯", "xu̯än", "xu̯ɑŋ", "xu̯eɪ̯", "xu̯ən", "xu̯ɔ", "t͡ɕi", "t͡ɕi̯ä", "t͡ɕi̯aɪ̯", "t͡ɕi̯ɛn", "t͡ɕi̯ɑŋ", "t͡ɕi̯ɑʊ̯", "t͡ɕi̯ɛ", "t͡ɕin", "t͡ɕiŋ", "t͡ɕi̯ɔ", "t͡ɕi̯ʊŋ", "t͡ɕi̯oʊ̯", "t͡ɕy", "t͡ɕy̯ɛn", "t͡ɕy̯ɛ", "t͡ɕyn", "kʰä", "kʰaɪ̯", "kʰän", "kʰɑŋ", "kʰɑʊ̯", "kʰɤ", "kʰɛ", "kʰeɪ̯", "kʰən", "kʰɤŋ", "kʰi̯ä", "kʰi̯ɑŋ", "kʰi̯oʊ̯", "kʰʊŋ", "kʰoʊ̯", "kʰu", "kʰu̯ä", "kʰu̯aɪ̯", "kʰu̯än", "kʰu̯ɑŋ", "kʰu̯eɪ̯", "kʰu̯ən", "kʰu̯ɔ", "lä", "laɪ̯", "län", "lɑŋ", "lɑʊ̯", "lɤ", "leɪ̯", "lən", "lɤŋ", "li", "li̯ä", "li̯ɛn", "li̯ɑŋ", "li̯ɑʊ̯", "li̯ɛ", "lin", "liŋ", "li̯oʊ̯", "lɔ", "lʊŋ", "loʊ̯", "lu", "ly", "lu̯än", "ly̯ɛn", "ly̯ɛ", "lu̯eɪ̯", "lu̯ən", "lyn", "lu̯ɔ", "m̩", "mä", "maɪ̯", "män", "mɑŋ", "mɑʊ̯", "mɤ", "meɪ̯", "mən", "mɛn", "mɤŋ", "mi", "mi̯ɛn", "mi̯ɑʊ̯", "mi̯ɛ", "min", "miŋ", "mi̯oʊ̯", "mu̯ɔ", "moʊ̯", "mu", "mu̯ä", "n̩", "nä", "naɪ̯", "nän", "nɑŋ", "nɑʊ̯", "nɤ", "nɛ", "neɪ̯", "nən", "nɤŋ", "ŋ̍", "ni", "ni̯ä", "ni̯ɛn", "ni̯ɑŋ", "ni̯ɑʊ̯", "ni̯ɛ", "nin", "niŋ", "ni̯oʊ̯", "nʊŋ", "noʊ̯", "nu", "ny", "nu̯än", "ny̯ɛ", "nu̯ən", "nu̯ɔ", "ˀɔ", "ˀʊŋ", "ˀoʊ̯", "pʰä", "pʰaɪ̯", "pʰän", "pʰɑŋ", "pʰɑʊ̯", "pʰɤ", "pʰɛ", "pʰeɪ̯", "pʰən", "pʰɤŋ", "pʰi", "pʰi̯ä", "pʰi̯ɛn", "pʰi̯ɑʊ̯", "pʰi̯ɛ", "pʰin", "pʰiŋ", "pʰu̯ɔ", "pʰoʊ̯", "pʰu", "pʰu̯ən", "t͡ɕʰi", "t͡ɕʰi̯ä", "t͡ɕʰi̯ɛn", "t͡ɕʰi̯ɑŋ", "t͡ɕʰi̯ɑʊ̯", "t͡ɕʰi̯ɛ", "t͡ɕʰin", "t͡ɕʰiŋ", "t͡ɕʰi̯ɔ", "t͡ɕʰi̯ʊŋ", "t͡ɕʰi̯oʊ̯", "t͡ɕʰy", "t͡ɕʰy̯ɛn", "t͡ɕʰy̯ɛ", "t͡ɕʰyn", "t͡ɕʰy̯ɔ", "ʐän", "ʐɑŋ", "ʐɑʊ̯", "ʐɤ", "ʐən", "ʐɤŋ", "ʐ̩", "ʐʊŋ", "ʐoʊ̯", "ʐu", "ʐu̯ä", "ʐu̯än", "ʐu̯eɪ̯", "ʐu̯ən", "ʐu̯ɔ", "sä", "saɪ̯", "sän", "sɑŋ", "sɑʊ̯", "sɤ", "seɪ̯", "sən", "sɤŋ", "ʂä", "ʂaɪ̯", "ʂän", "ʂɑŋ", "ʂɑʊ̯", "ʂɤ", "ʂɛ", "ʂeɪ̯", "ʂən", "ʂɤŋ", "ʂʐ̩", "ʂɔ", "ʂoʊ̯", "ʂu", "ʂu̯ä", "ʂu̯aɪ̯", "ʂu̯än", "ʂu̯ɑŋ", "ʂu̯eɪ̯", "ʂu̯ən", "ʂu̯ɔ", "sz̩", "si̯ɑʊ̯", "siŋ", "sʊŋ", "soʊ̯", "su", "su̯än", "su̯eɪ̯", "su̯ən", "su̯ɔ", "tʰä", "tʰaɪ̯", "tʰän", "tʰɑŋ", "tʰɑʊ̯", "tʰɤ", "tʰɛ", "tʰeɪ̯", "tʰɤŋ", "tʰi", "tʰi̯ɛn", "tʰi̯ɑʊ̯", "tʰi̯ɛ", "tʰiŋ", "tʰʊŋ", "tʰoʊ̯", "tʰu", "tʰu̯än", "tʰu̯eɪ̯", "tʰu̯ən", "tʰu̯ɔ", "vu̯ɔ", "vɛ", "vu", "wä", "waɪ̯", "wän", "wɑŋ", "wɛ", "weɪ̯", "wən", "wəŋ", "wɔ", "u", "ɕi", "ɕi̯ä", "ɕi̯ɛn", "ɕi̯ɑŋ", "ɕi̯ɑʊ̯", "ɕi̯ɛ", "ɕin", "ɕiŋ", "ɕi̯ʊŋ", "ɕi̯oʊ̯", "ɕy", "ɕy̯ɛn", "ɕy̯ɛ", "ɕyn", "jä", "jaɪ̯", "jɛn", "jɑŋ", "jɑʊ̯", "jɛ", "i", "in", "iŋ", "jɔ", "jʊŋ", "joʊ̯", "y", "ɥɛn", "ɥɛ", "yn", "t͡sä", "t͡saɪ̯", "t͡sän", "t͡sɑŋ", "t͡sɑʊ̯", "t͡sɤ", "t͡sɛ", "t͡seɪ̯", "t͡sən", "t͡sɤŋ", "ʈ͡ʂä", "ʈ͡ʂaɪ̯", "ʈ͡ʂän", "ʈ͡ʂɑŋ", "ʈ͡ʂɑʊ̯", "ʈ͡ʂɤ", "ʈ͡ʂɛ", "ʈ͡ʂeɪ̯", "ʈ͡ʂən", "ʈ͡ʂɤŋ", "ʈ͡ʂʐ̩", "ʈ͡ʂɔ", "ʈ͡ʂʊŋ", "ʈ͡ʂoʊ̯", "ʈ͡ʂu", "ʈ͡ʂu̯ä", "ʈ͡ʂu̯aɪ̯", "ʈ͡ʂu̯än", "ʈ͡ʂu̯ɑŋ", "ʈ͡ʂu̯eɪ̯", "ʈ͡ʂu̯ən", "ʈ͡ʂu̯ɔ", "t͡sz̩", "t͡si̯ɔ", "t͡sɔ", "t͡sʊŋ", "t͡soʊ̯", "t͡su", "t͡su̯än", "t͡su̯eɪ̯", "t͡su̯ən", "t͡su̯ɔ"}
	
	local examples = {}
	
	local ipa_tones = {"⁵⁵", "³⁵", "²¹⁴", "⁵¹", ""}
	
	local ipa_tl_subs = {
		{"ɤ$", "^t͡ɕ([^ʰ])", "^ʈ͡ʂ([^ʰ])", "^t͡s([^ʰ])", "^p([^ʰ])", "^t([^ʰ͡])", "^k([^ʰ])"},
		{"ə", "d͡ʑ̥%1", "ɖ͡ʐ̥%1", "d͡z̥%1", "b̥%1", "d̥%1", "g̊%1"}
	}
	
	local iter = function (t, k)
		k = k + 1
		local v = raw_examples[math.ceil(k/5)]
		if v then
			local tone = ipa_tones[(k - 1) % 5 + 1]
			if tone == "" then
				for i, from in ipairs(ipa_tl_subs[1]) do
					v = gsub(v, from, ipa_tl_subs[2][i])
				end
				return k, v
			else
				return k, v .. tone
			end
		end
	end
	
	local mt = {
		__ipairs = function(t)
			return iter, t, 0
		end
	}
	
	setmetatable(examples, mt)
	
	self:iterate_conversions(examples, pinyin, m_pron.py_ipa, "Monosyllables")
end

function p:test_py_zhuyin()
	local raw_examples = {"ㄚ", "ㄞ", "ㄢ", "ㄤ", "ㄠ", "ㄅㄚ", "ㄅㄞ", "ㄅㄢ", "ㄅㄤ", "ㄅㄠ", "ㄅㄜ", "ㄅㄝ", "ㄅㄟ", "ㄅㄣ", "ㄅㄥ", "ㄅㄧ", "ㄅㄧㄢ", "ㄅㄧㄤ", "ㄅㄧㄠ", "ㄅㄧㄝ", "ㄅㄧㄣ", "ㄅㄧㄥ", "ㄅㄧㄡ", "ㄅㄛ", "ㄅㄨㄥ", "ㄅㄨ", "ㄘㄚ", "ㄘㄞ", "ㄘㄢ", "ㄘㄤ", "ㄘㄠ", "ㄘㄜ", "ㄘㄝ", "ㄘㄟ", "ㄘㄣ", "ㄘㄥ", "ㄔㄚ", "ㄔㄞ", "ㄔㄢ", "ㄔㄤ", "ㄔㄠ", "ㄔㄜ", "ㄔㄣ", "ㄔㄥ", "ㄔ", "ㄔㄨㄥ", "ㄔㄡ", "ㄔㄨ", "ㄔㄨㄚ", "ㄔㄨㄞ", "ㄔㄨㄢ", "ㄔㄨㄤ", "ㄔㄨㄟ", "ㄔㄨㄣ", "ㄔㄨㄛ", "ㄘ", "ㄘㄨㄥ", "ㄘㄡ", "ㄘㄨ", "ㄘㄨㄢ", "ㄘㄩㄢ", "ㄘㄨㄟ", "ㄘㄨㄣ", "ㄘㄨㄛ", "ㄉㄚ", "ㄉㄞ", "ㄉㄢ", "ㄉㄤ", "ㄉㄠ", "ㄉㄜ", "ㄉㄝ", "ㄉㄟ", "ㄉㄣ", "ㄉㄥ", "ㄉㄧ", "ㄉㄧㄚ", "ㄉㄧㄢ", "ㄉㄧㄤ", "ㄉㄧㄠ", "ㄉㄧㄝ", "ㄉㄧㄥ", "ㄉㄧㄡ", "ㄉㄛ", "ㄉㄨㄥ", "ㄉㄡ", "ㄉㄨ", "ㄉㄨㄢ", "ㄉㄨㄤ", "ㄉㄨㄟ", "ㄉㄨㄣ", "ㄉㄨㄛ", "ㄜ", "ㄝ", "ㄟ", "ㄣ", "ㄥ", "ㄦ", "ㄈㄚ", "ㄈㄞ", "ㄈㄢ", "ㄈㄤ", "ㄈㄟ", "ㄈㄣ", "ㄈㄥ", "ㄈㄧㄠ", "ㄈㄛ", "ㄈㄨㄥ", "ㄈㄡ", "ㄈㄨ", "ㄍㄚ", "ㄍㄞ", "ㄍㄢ", "ㄍㄤ", "ㄍㄠ", "ㄍㄜ", "ㄍㄝ", "ㄍㄟ", "ㄍㄣ", "ㄍㄥ", "ㄍㄧ", "ㄍㄧㄥ", "ㄍㄨㄥ", "ㄍㄡ", "ㄍㄨ", "ㄍㄨㄚ", "ㄍㄨㄞ", "ㄍㄨㄢ", "ㄍㄨㄤ", "ㄍㄨㄟ", "ㄍㄨㄣ", "ㄍㄨㄛ", "ㄏㄚ", "ㄏㄞ", "ㄏㄢ", "ㄏㄤ", "ㄏㄠ", "ㄏㄜ", "ㄏㄟ", "ㄏㄣ", "ㄏㄥ", "ㄏㄇ", "ㄏㄫ", "ㄏㄨㄥ", "ㄏㄡ", "ㄏㄨ", "ㄏㄨㄚ", "ㄏㄨㄞ", "ㄏㄨㄢ", "ㄏㄨㄤ", "ㄏㄨㄟ", "ㄏㄨㄣ", "ㄏㄨㄛ", "ㄐㄧ", "ㄐㄧㄚ", "ㄐㄧㄞ", "ㄐㄧㄢ", "ㄐㄧㄤ", "ㄐㄧㄠ", "ㄐㄧㄝ", "ㄐㄧㄣ", "ㄐㄧㄥ", "ㄐㄧㄛ", "ㄐㄩㄥ", "ㄐㄧㄡ", "ㄐㄩ", "ㄐㄩㄢ", "ㄐㄩㄝ", "ㄐㄩㄣ", "ㄎㄚ", "ㄎㄞ", "ㄎㄢ", "ㄎㄤ", "ㄎㄠ", "ㄎㄜ", "ㄎㄝ", "ㄎㄟ", "ㄎㄣ", "ㄎㄥ", "ㄎㄧㄚ", "ㄎㄧㄤ", "ㄎㄧㄡ", "ㄎㄨㄥ", "ㄎㄡ", "ㄎㄨ", "ㄎㄨㄚ", "ㄎㄨㄞ", "ㄎㄨㄢ", "ㄎㄨㄤ", "ㄎㄨㄟ", "ㄎㄨㄣ", "ㄎㄨㄛ", "ㄌㄚ", "ㄌㄞ", "ㄌㄢ", "ㄌㄤ", "ㄌㄠ", "ㄌㄜ", "ㄌㄟ", "ㄌㄣ", "ㄌㄥ", "ㄌㄧ", "ㄌㄧㄚ", "ㄌㄧㄢ", "ㄌㄧㄤ", "ㄌㄧㄠ", "ㄌㄧㄝ", "ㄌㄧㄣ", "ㄌㄧㄥ", "ㄌㄧㄡ", "ㄌㄛ", "ㄌㄨㄥ", "ㄌㄡ", "ㄌㄨ", "ㄌㄩ", "ㄌㄨㄢ", "ㄌㄩㄢ", "ㄌㄩㄝ", "ㄌㄨㄟ", "ㄌㄨㄣ", "ㄌㄩㄣ", "ㄌㄨㄛ", "ㄇ", "ㄇㄚ", "ㄇㄞ", "ㄇㄢ", "ㄇㄤ", "ㄇㄠ", "ㄇㄜ", "ㄇㄟ", "ㄇㄣ", "ㄇㄝㄋ", "ㄇㄥ", "ㄇㄧ", "ㄇㄧㄢ", "ㄇㄧㄠ", "ㄇㄧㄝ", "ㄇㄧㄣ", "ㄇㄧㄥ", "ㄇㄧㄡ", "ㄇㄛ", "ㄇㄡ", "ㄇㄨ", "ㄇㄨㄚ", "ㄋ", "ㄋㄚ", "ㄋㄞ", "ㄋㄢ", "ㄋㄤ", "ㄋㄠ", "ㄋㄜ", "ㄋㄝ", "ㄋㄟ", "ㄋㄣ", "ㄋㄥ", "ㄫ", "ㄋㄧ", "ㄋㄧㄚ", "ㄋㄧㄢ", "ㄋㄧㄤ", "ㄋㄧㄠ", "ㄋㄧㄝ", "ㄋㄧㄣ", "ㄋㄧㄥ", "ㄋㄧㄡ", "ㄋㄨㄥ", "ㄋㄡ", "ㄋㄨ", "ㄋㄩ", "ㄋㄨㄢ", "ㄋㄩㄝ", "ㄋㄨㄣ", "ㄋㄨㄛ", "ㄛ", "ㄛㄥ", "ㄡ", "ㄆㄚ", "ㄆㄞ", "ㄆㄢ", "ㄆㄤ", "ㄆㄠ", "ㄆㄜ", "ㄆㄝ", "ㄆㄟ", "ㄆㄣ", "ㄆㄥ", "ㄆㄧ", "ㄆㄧㄚ", "ㄆㄧㄢ", "ㄆㄧㄠ", "ㄆㄧㄝ", "ㄆㄧㄣ", "ㄆㄧㄥ", "ㄆㄛ", "ㄆㄡ", "ㄆㄨ", "ㄆㄨㄣ", "ㄑㄧ", "ㄑㄧㄚ", "ㄑㄧㄢ", "ㄑㄧㄤ", "ㄑㄧㄠ", "ㄑㄧㄝ", "ㄑㄧㄣ", "ㄑㄧㄥ", "ㄑㄧㄛ", "ㄑㄩㄥ", "ㄑㄧㄡ", "ㄑㄩ", "ㄑㄩㄢ", "ㄑㄩㄝ", "ㄑㄩㄣ", "ㄑㄩㄛ", "ㄖㄢ", "ㄖㄤ", "ㄖㄠ", "ㄖㄜ", "ㄖㄣ", "ㄖㄥ", "ㄖ", "ㄖㄨㄥ", "ㄖㄡ", "ㄖㄨ", "ㄖㄨㄚ", "ㄖㄨㄢ", "ㄖㄨㄟ", "ㄖㄨㄣ", "ㄖㄨㄛ", "ㄙㄚ", "ㄙㄞ", "ㄙㄢ", "ㄙㄤ", "ㄙㄠ", "ㄙㄜ", "ㄙㄟ", "ㄙㄣ", "ㄙㄥ", "ㄕㄚ", "ㄕㄞ", "ㄕㄢ", "ㄕㄤ", "ㄕㄠ", "ㄕㄜ", "ㄕㄝ", "ㄕㄟ", "ㄕㄣ", "ㄕㄥ", "ㄕ", "ㄕㄛ", "ㄕㄡ", "ㄕㄨ", "ㄕㄨㄚ", "ㄕㄨㄞ", "ㄕㄨㄢ", "ㄕㄨㄤ", "ㄕㄨㄟ", "ㄕㄨㄣ", "ㄕㄨㄛ", "ㄙ", "ㄙㄧㄠ", "ㄙㄧㄥ", "ㄙㄨㄥ", "ㄙㄡ", "ㄙㄨ", "ㄙㄨㄢ", "ㄙㄨㄟ", "ㄙㄨㄣ", "ㄙㄨㄛ", "ㄊㄚ", "ㄊㄞ", "ㄊㄢ", "ㄊㄤ", "ㄊㄠ", "ㄊㄜ", "ㄊㄝ", "ㄊㄟ", "ㄊㄥ", "ㄊㄧ", "ㄊㄧㄢ", "ㄊㄧㄠ", "ㄊㄧㄝ", "ㄊㄧㄥ", "ㄊㄨㄥ", "ㄊㄡ", "ㄊㄨ", "ㄊㄨㄢ", "ㄊㄨㄟ", "ㄊㄨㄣ", "ㄊㄨㄛ", "ㄪㄛ", "ㄪㄝ", "ㄪㄨ", "ㄨㄚ", "ㄨㄞ", "ㄨㄢ", "ㄨㄤ", "ㄨㄝ", "ㄨㄟ", "ㄨㄣ", "ㄨㄥ", "ㄨㄛ", "ㄨ", "ㄒㄧ", "ㄒㄧㄚ", "ㄒㄧㄢ", "ㄒㄧㄤ", "ㄒㄧㄠ", "ㄒㄧㄝ", "ㄒㄧㄣ", "ㄒㄧㄥ", "ㄒㄩㄥ", "ㄒㄧㄡ", "ㄒㄩ", "ㄒㄩㄢ", "ㄒㄩㄝ", "ㄒㄩㄣ", "ㄧㄚ", "ㄧㄞ", "ㄧㄢ", "ㄧㄤ", "ㄧㄠ", "ㄧㄝ", "ㄧ", "ㄧㄣ", "ㄧㄥ", "ㄧㄛ", "ㄩㄥ", "ㄧㄡ", "ㄩ", "ㄩㄢ", "ㄩㄝ", "ㄩㄣ", "ㄗㄚ", "ㄗㄞ", "ㄗㄢ", "ㄗㄤ", "ㄗㄠ", "ㄗㄜ", "ㄗㄝ", "ㄗㄟ", "ㄗㄣ", "ㄗㄥ", "ㄓㄚ", "ㄓㄞ", "ㄓㄢ", "ㄓㄤ", "ㄓㄠ", "ㄓㄜ", "ㄓㄝ", "ㄓㄟ", "ㄓㄣ", "ㄓㄥ", "ㄓ", "ㄓㄛ", "ㄓㄨㄥ", "ㄓㄡ", "ㄓㄨ", "ㄓㄨㄚ", "ㄓㄨㄞ", "ㄓㄨㄢ", "ㄓㄨㄤ", "ㄓㄨㄟ", "ㄓㄨㄣ", "ㄓㄨㄛ", "ㄗ", "ㄗㄧㄛ", "ㄗㄛ", "ㄗㄨㄥ", "ㄗㄡ", "ㄗㄨ", "ㄗㄨㄢ", "ㄗㄨㄟ", "ㄗㄨㄣ", "ㄗㄨㄛ"}
	
	local examples = {}
	
	local zhuyin_tones = {"", "ˊ", "ˇ", "ˋ", "˙"}
	
	local iter = function (t, k)
		k = k + 1
		local v = raw_examples[math.ceil(k/5)]
		if v then
			local tone = zhuyin_tones[(k - 1) % 5 + 1]
			if tone == "˙" then
				return k, tone .. v
			else
				return k, v .. tone
			end
		end
	end
	
	local mt = {
		__ipairs = function(t)
			return iter, t, 0
		end
	}
	
	setmetatable(examples, mt)
	
	self:iterate_conversions(examples, pinyin, m_pron.py_zhuyin, "Monosyllables")
	
	iter = function (t, k)
		k = k + 1
		local v = raw_examples[math.ceil(k/5)]
		if v then
			local tone, ret = zhuyin_tones[(k - 1) % 5 + 1]
			if tone == "˙" then
				ret = tone .. v
			else
				ret = v .. tone
			end
			if v == "ㄦ" then
				return k, ret
			else
				return k, ret .. "ㄦ"
			end
		end
	end
	
	self:iterate_conversions(examples, pinyin_erhua, m_pron.py_zhuyin, "Erhua monosyllables")
end

function p:test_py_tongyong()
	local raw_examples = {"a!", "a!i", "a!n", "a!ng", "a!o", "ba!", "ba!i", "ba!n", "ba!ng", "ba!o", "be!", "bê!", "be!i", "be!n", "be!ng", "bi!", "bia!n", "bia!ng", "bia!o", "bie!", "bi!n", "bi!ng", "bio!u", "bo!", "bo!ng", "bu!", "ca!", "ca!i", "ca!n", "ca!ng", "ca!o", "ce!", "cê!", "ce!i", "ce!n", "ce!ng", "cha!", "cha!i", "cha!n", "cha!ng", "cha!o", "che!", "che!n", "che!ng", "chi!h", "cho!ng", "cho!u", "chu!", "chua!", "chua!i", "chua!n", "chua!ng", "chue!i", "chu!n", "chuo!", "ci!h", "co!ng", "co!u", "cu!", "cua!n", "cyua!n", "cue!i", "cu!n", "cuo!", "da!", "da!i", "da!n", "da!ng", "da!o", "de!", "dê!", "de!i", "de!n", "de!ng", "di!", "dia!", "dia!n", "dia!ng", "dia!o", "die!", "di!ng", "dio!u", "do!", "do!ng", "do!u", "du!", "dua!n", "dua!ng", "due!i", "du!n", "duo!", "e!", "ê!", "e!i", "e!n", "e!ng", "e!r", "fa!", "fa!i", "fa!n", "fa!ng", "fe!i", "fe!n", "fo!ng", "fia!o", "fo!", "fo!ng", "fo!u", "fu!", "ga!", "ga!i", "ga!n", "ga!ng", "ga!o", "ge!", "gê!", "ge!i", "ge!n", "ge!ng", "gi!", "gi!ng", "go!ng", "go!u", "gu!", "gua!", "gua!i", "gua!n", "gua!ng", "gue!i", "gu!n", "guo!", "ha!", "ha!i", "ha!n", "ha!ng", "ha!o", "he!", "he!i", "he!n", "he!ng", "hm!", "hn!g", "ho!ng", "ho!u", "hu!", "hua!", "hua!i", "hua!n", "hua!ng", "hue!i", "hu!n", "huo!", "ji!", "jia!", "jia!i", "jia!n", "jia!ng", "jia!o", "jie!", "ji!n", "ji!ng", "jio!", "jyo!ng", "jio!u", "jyu!", "jyua!n", "jyue!", "jyu!n", "ka!", "ka!i", "ka!n", "ka!ng", "ka!o", "ke!", "kê!", "ke!i", "ke!n", "ke!ng", "kia!", "kia!ng", "kio!u", "ko!ng", "ko!u", "ku!", "kua!", "kua!i", "kua!n", "kua!ng", "kue!i", "ku!n", "kuo!", "la!", "la!i", "la!n", "la!ng", "la!o", "le!", "le!i", "le!n", "le!ng", "li!", "lia!", "lia!n", "lia!ng", "lia!o", "lie!", "li!n", "li!ng", "lio!u", "lo!", "lo!ng", "lo!u", "lu!", "lyu!", "lua!n", "lyua!n", "lyue!", "lue!i", "lu!n", "lyu!n", "luo!", "m!", "ma!", "ma!i", "ma!n", "ma!ng", "ma!o", "me!", "me!i", "me!n", "mê!n", "me!ng", "mi!", "mia!n", "mia!o", "mie!", "mi!n", "mi!ng", "mio!u", "mo!", "mo!u", "mu!", "mua!", "n!", "na!", "na!i", "na!n", "na!ng", "na!o", "ne!", "nê!", "ne!i", "ne!n", "ne!ng", "n!g", "ni!", "nia!", "nia!n", "nia!ng", "nia!o", "nie!", "ni!n", "ni!ng", "nio!u", "no!ng", "no!u", "nu!", "nyu!", "nua!n", "nyue!", "nu!n", "nuo!", "o!", "o!ng", "o!u", "pa!", "pa!i", "pa!n", "pa!ng", "pa!o", "pe!", "pê!", "pe!i", "pe!n", "pe!ng", "pi!", "pia!", "pia!n", "pia!o", "pie!", "pi!n", "pi!ng", "po!", "po!u", "pu!", "pu!n", "ci!", "cia!", "cia!n", "cia!ng", "cia!o", "cie!", "ci!n", "ci!ng", "cio!", "cyo!ng", "cio!u", "cyu!", "cyua!n", "cyue!", "cyu!n", "cyuo!", "ra!n", "ra!ng", "ra!o", "re!", "re!n", "re!ng", "ri!h", "ro!ng", "ro!u", "ru!", "rua!", "rua!n", "rue!i", "ru!n", "ruo!", "sa!", "sa!i", "sa!n", "sa!ng", "sa!o", "se!", "se!i", "se!n", "se!ng", "sha!", "sha!i", "sha!n", "sha!ng", "sha!o", "she!", "shê!", "she!i", "she!n", "she!ng", "shi!h", "sho!", "sho!u", "shu!", "shua!", "shua!i", "shua!n", "shua!ng", "shue!i", "shu!n", "shuo!", "si!h", "sia!o", "si!ng", "so!ng", "so!u", "su!", "sua!n", "sue!i", "su!n", "suo!", "ta!", "ta!i", "ta!n", "ta!ng", "ta!o", "te!", "tê!", "te!i", "te!ng", "ti!", "tia!n", "tia!o", "tie!", "ti!ng", "to!ng", "to!u", "tu!", "tua!n", "tue!i", "tu!n", "tuo!", "vo!", "vê!", "vu!", "wa!", "wa!i", "wa!n", "wa!ng", "wê!", "we!i", "wu!n", "wo!ng", "wo!", "wu!", "si!", "sia!", "sia!n", "sia!ng", "sia!o", "sie!", "si!n", "si!ng", "syo!ng", "sio!u", "syu!", "syua!n", "syue!", "syu!n", "ya!", "ya!i", "ya!n", "ya!ng", "ya!o", "ye!", "yi!", "yi!n", "yi!ng", "yo!", "yo!ng", "yo!u", "yu!", "yua!n", "yue!", "yu!n", "za!", "za!i", "za!n", "za!ng", "za!o", "ze!", "zê!", "ze!i", "ze!n", "ze!ng", "jha!", "jha!i", "jha!n", "jha!ng", "jha!o", "jhe!", "jhê!", "jhe!i", "jhe!n", "jhe!ng", "jhi!h", "jho!", "jho!ng", "jho!u", "jhu!", "jhua!", "jhua!i", "jhua!n", "jhua!ng", "jhue!i", "jhu!n", "jhuo!", "zi!h", "zio!", "zo!", "zo!ng", "zo!u", "zu!", "zua!n", "zue!i", "zu!n", "zuo!"}
	
	local examples = {}
	
	local tongyong_tones = {"", u(0x301), u(0x30C), u(0x300), u(0x30A)}
	
	local iter = function (t, k)
		k = k + 1
		local v = raw_examples[math.ceil(k/5)]
		if v then
			local tone = tongyong_tones[(k - 1) % 5 + 1]
			v = v:gsub("!", tone)
			return k, toNFC(v)
		end
	end
	
	local mt = {
		__ipairs = function(t)
			return iter, t, 0
		end
	}
	
	setmetatable(examples, mt)
	
	self:iterate_conversions(examples, pinyin, m_pron.py_tongyong, "Monosyllables")
end

function p:test_py_wg()
	local raw_examples = {"a", "ai", "an", "ang", "ao", "pa", "pai", "pan", "pang", "pao", "pê", "peh", "pei", "pên", "pêng", "pi", "pien", "piang", "piao", "pieh", "pin", "ping", "piu", "po", "pung", "pu", "tsʻa", "tsʻai", "tsʻan", "tsʻang", "tsʻao", "tsʻê", "tsʻeh", "tsʻei", "tsʻên", "tsʻêng", "chʻa", "chʻai", "chʻan", "chʻang", "chʻao", "chʻê", "chʻên", "chʻêng", "chʻih", "chʻung", "chʻou", "chʻu", "chʻua", "chʻuai", "chʻuan", "chʻuang", "chʻui", "chʻun", "chʻo", "tzʻŭ", "tsʻung", "tsʻou", "tsʻu", "tsʻuan", "tsʻüan", "tsʻui", "tsʻun", "tsʻo", "ta", "tai", "tan", "tang", "tao", "tê", "teh", "tei", "tên", "têng", "ti", "tia", "tien", "tiang", "tiao", "tieh", "ting", "tiu", "to", "tung", "tou", "tu", "tuan", "tuang", "tui", "tun", "to", "o", "eh", "ei", "ên", "êng", "êrh", "fa", "fai", "fan", "fang", "fei", "fên", "fêng", "fiao", "fo", "fung", "fou", "fu", "ka", "kai", "kan", "kang", "kao", "ko", "keh", "kei", "kên", "kêng", "ki", "king", "kung", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kuei", "kun", "kuo", "ha", "hai", "han", "hang", "hao", "ho", "hei", "hên", "hêng", "hm", "hng", "hung", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "chi", "chia", "chiai", "chien", "chiang", "chiao", "chieh", "chin", "ching", "chio", "chiung", "chiu", "chü", "chüan", "chüeh", "chün", "kʻa", "kʻai", "kʻan", "kʻang", "kʻao", "kʻo", "kʻeh", "kʻei", "kʻên", "kʻêng", "kʻia", "kʻiang", "kʻiu", "kʻung", "kʻou", "kʻu", "kʻua", "kʻuai", "kʻuan", "kʻuang", "kʻuei", "kʻun", "kʻuo", "la", "lai", "lan", "lang", "lao", "lê", "lei", "lên", "lêng", "li", "lia", "lien", "liang", "liao", "lieh", "lin", "ling", "liu", "lo", "lung", "lou", "lu", "lü", "luan", "lüan", "lüeh", "lui", "lun", "lün", "lo", "m", "ma", "mai", "man", "mang", "mao", "mê", "mei", "mên", "mehn", "mêng", "mi", "mien", "miao", "mieh", "min", "ming", "miu", "mo", "mou", "mu", "mua", "n", "na", "nai", "nan", "nang", "nao", "nê", "neh", "nei", "nên", "nêng", "ng", "ni", "nia", "nien", "niang", "niao", "nieh", "nin", "ning", "niu", "nung", "nou", "nu", "nü", "nuan", "nüeh", "nun", "no", "o", "ung", "ou", "pʻa", "pʻai", "pʻan", "pʻang", "pʻao", "pʻê", "pʻeh", "pʻei", "pʻên", "pʻêng", "pʻi", "pʻia", "pʻien", "pʻiao", "pʻieh", "pʻin", "pʻing", "pʻo", "pʻou", "pʻu", "pʻun", "chʻi", "chʻia", "chʻien", "chʻiang", "chʻiao", "chʻieh", "chʻin", "chʻing", "chʻio", "chʻiung", "chʻiu", "chʻü", "chʻüan", "chʻüeh", "chʻün", "chʻüo", "jan", "jang", "jao", "jê", "jên", "jêng", "jih", "jung", "jou", "ju", "jua", "juan", "jui", "jun", "jo", "sa", "sai", "san", "sang", "sao", "sê", "sei", "sên", "sêng", "sha", "shai", "shan", "shang", "shao", "shê", "sheh", "shei", "shên", "shêng", "shih", "sho", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "ssŭ", "siao", "sing", "sung", "sou", "su", "suan", "sui", "sun", "so", "tʻa", "tʻai", "tʻan", "tʻang", "tʻao", "tʻê", "tʻeh", "tʻei", "tʻêng", "tʻi", "tʻien", "tʻiao", "tʻieh", "tʻing", "tʻung", "tʻou", "tʻu", "tʻuan", "tʻui", "tʻun", "tʻo", "vo", "veh", "vu", "wa", "wai", "wan", "wang", "weh", "wei", "wên", "wêng", "wo", "wu", "hsi", "hsia", "hsien", "hsiang", "hsiao", "hsieh", "hsin", "hsing", "hsiung", "hsiu", "hsü", "hsüan", "hsüeh", "hsün", "ya", "yai", "yen", "yang", "yao", "yeh", "i", "yin", "ying", "yo", "yung", "yu", "yü", "yüan", "yüeh", "yün", "tsa", "tsai", "tsan", "tsang", "tsao", "tsê", "tseh", "tsei", "tsên", "tsêng", "cha", "chai", "chan", "chang", "chao", "chê", "cheh", "chei", "chên", "chêng", "chih", "cho", "chung", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", "cho", "tzŭ", "tsio", "tso", "tsung", "tsou", "tsu", "tsuan", "tsui", "tsun", "tso"}
	
	local examples = {}
	
	local iter = function (t, k)
		k = k + 1
		local v = raw_examples[math.ceil(k/5)]
		if v then
			local tone = (k - 1) % 5 + 1
			return k, v .. "<sup>" .. tone .. "</sup>"
		end
	end
	
	local mt = {
		__ipairs = function(t)
			return iter, t, 0
		end
	}
	
	setmetatable(examples, mt)
	
	self:iterate_conversions(examples, pinyin, m_pron.py_wg, "Monosyllables")
	
	iter = function (t, k)
		k = k + 1
		local v = raw_examples[math.ceil(k/5)]
		if v then
			local tone = (k - 1) % 5 + 1
			if v == "êrh" then
				return k, v .. "<sup>" .. tone .. "</sup>"
			else
				return k, v .. "<sup>" .. tone .. "</sup>-ʼrh"
			end
		end
	end
	
	self:iterate_conversions(examples, pinyin_erhua, m_pron.py_wg, "Erhua monosyllables")
end

function p:test_py_yale()
	local raw_examples = {"a!", "a!i", "a!n", "a!ng", "a!u", "ba!", "ba!i", "ba!n", "ba!ng", "ba!u", "be!", "be!", "be!i", "be!n", "be!ng", "bi!", "bya!n", "bya!ng", "bya!u", "bye!", "bi!n", "bi!ng", "byo!u", "bwo!", "bu!ng", "bu!", "tsa!", "tsa!i", "tsa!n", "tsa!ng", "tsa!u", "tse!", "tse!", "tse!i", "tse!n", "tse!ng", "cha!", "cha!i", "cha!n", "cha!ng", "cha!u", "che!", "che!n", "che!ng", "chr!", "chu!ng", "cho!u", "chu!", "chwa!", "chwa!i", "chwa!n", "chwa!ng", "chwe!i", "chwu!n", "chwo!", "tsz!", "tsu!ng", "tso!u", "tsu!", "tswa!n", "tsywa!n", "tswe!i", "tswu!n", "tswo!", "da!", "da!i", "da!n", "da!ng", "da!u", "de!", "de!", "de!i", "de!n", "de!ng", "di!", "dya!", "dya!n", "dya!ng", "dya!u", "dye!", "di!ng", "dyo!u", "do!", "du!ng", "do!u", "du!", "dwa!n", "dwa!ng", "dwe!i", "dwu!n", "dwo!", "e!", "e!", "e!i", "e!n", "e!ng", "e!r", "fa!", "fa!i", "fa!n", "fa!ng", "fe!i", "fe!n", "fe!ng", "fya!u", "fwo!", "fu!ng", "fo!u", "fu!", "ga!", "ga!i", "ga!n", "ga!ng", "ga!u", "ge!", "ge!", "ge!i", "ge!n", "ge!ng", "gi!", "gi!ng", "gu!ng", "go!u", "gu!", "gwa!", "gwa!i", "gwa!n", "gwa!ng", "gwe!i", "gwu!n", "gwo!", "ha!", "ha!i", "ha!n", "ha!ng", "ha!u", "he!", "he!i", "he!n", "he!ng", "hm!", "hn!g", "hu!ng", "ho!u", "hu!", "hwa!", "hwa!i", "hwa!n", "hwa!ng", "hwe!i", "hwu!n", "hwo!", "ji!", "jya!", "jya!i", "jya!n", "jya!ng", "jya!u", "jye!", "ji!n", "ji!ng", "jyo!", "jyu!ng", "jyo!u", "jyu!", "jywa!n", "jywe!", "jyu!n", "ka!", "ka!i", "ka!n", "ka!ng", "ka!u", "ke!", "ke!", "ke!i", "ke!n", "ke!ng", "kya!", "kya!ng", "kyo!u", "ku!ng", "ko!u", "ku!", "kwa!", "kwa!i", "kwa!n", "kwa!ng", "kwe!i", "kwu!n", "kwo!", "la!", "la!i", "la!n", "la!ng", "la!u", "le!", "le!i", "le!n", "le!ng", "li!", "lya!", "lya!n", "lya!ng", "lya!u", "lye!", "li!n", "li!ng", "lyo!u", "lo!", "lu!ng", "lo!u", "lu!", "lyu!", "lwa!n", "lywa!n", "lywe!", "lwe!i", "lwu!n", "lyu!n", "lwo!", "m!", "ma!", "ma!i", "ma!n", "ma!ng", "ma!u", "me!", "me!i", "me!n", "me!n", "me!ng", "mi!", "mya!n", "mya!u", "mye!", "mi!n", "mi!ng", "myo!u", "mwo!", "mo!u", "mu!", "mwa!", "n!", "na!", "na!i", "na!n", "na!ng", "na!u", "ne!", "ne!", "ne!i", "ne!n", "ne!ng", "n!g", "ni!", "nya!", "nya!n", "nya!ng", "nya!u", "nye!", "ni!n", "ni!ng", "nyo!u", "nu!ng", "no!u", "nu!", "nyu!", "nwa!n", "nywe!", "nwu!n", "nwo!", "o!", "u!ng", "o!u", "pa!", "pa!i", "pa!n", "pa!ng", "pa!u", "pe!", "pe!", "pe!i", "pe!n", "pe!ng", "pi!", "pya!", "pya!n", "pya!u", "pye!", "pi!n", "pi!ng", "pwo!", "po!u", "pu!", "pwu!n", "chi!", "chya!", "chya!n", "chya!ng", "chya!u", "chye!", "chi!n", "chi!ng", "chyo!", "chyu!ng", "chyo!u", "chyu!", "chywa!n", "chywe!", "chyu!n", "chywo!", "ra!n", "ra!ng", "ra!u", "re!", "re!n", "re!ng", "r!", "ru!ng", "ro!u", "ru!", "rwa!", "rwa!n", "rwe!i", "rwu!n", "rwo!", "sa!", "sa!i", "sa!n", "sa!ng", "sa!u", "se!", "se!i", "se!n", "se!ng", "sha!", "sha!i", "sha!n", "sha!ng", "sha!u", "she!", "she!", "she!i", "she!n", "she!ng", "shr!", "sho!", "sho!u", "shu!", "shwa!", "shwa!i", "shwa!n", "shwa!ng", "shwe!i", "shwu!n", "shwo!", "sz!", "sya!u", "si!ng", "su!ng", "so!u", "su!", "swa!n", "swe!i", "swu!n", "swo!", "ta!", "ta!i", "ta!n", "ta!ng", "ta!u", "te!", "te!", "te!i", "te!ng", "ti!", "tya!n", "tya!u", "tye!", "ti!ng", "tu!ng", "to!u", "tu!", "twa!n", "twe!i", "twu!n", "two!", "vwo!", "ve!", "vu!", "wa!", "wa!i", "wa!n", "wa!ng", "we!", "we!i", "we!n", "we!ng", "wo!", "wu!", "syi!", "sya!", "sya!n", "sya!ng", "sya!u", "sye!", "syi!n", "syi!ng", "syu!ng", "syo!u", "syu!", "sywa!n", "sywe!", "syu!n", "ya!", "ya!i", "ya!n", "ya!ng", "ya!u", "ye!", "yi!", "yi!n", "yi!ng", "yo!", "yu!ng", "yo!u", "yu!", "ywa!n", "ywe!", "yu!n", "dza!", "dza!i", "dza!n", "dza!ng", "dza!u", "dze!", "dze!", "dze!i", "dze!n", "dze!ng", "ja!", "ja!i", "ja!n", "ja!ng", "ja!u", "je!", "je!", "je!i", "je!n", "je!ng", "jr!", "jo!", "ju!ng", "jo!u", "ju!", "jwa!", "jwa!i", "jwa!n", "jwa!ng", "jwe!i", "jwu!n", "jwo!", "dz!", "dzyo!", "dzo!", "dzu!ng", "dzo!u", "dzu!", "dzwa!n", "dzwe!i", "dzwu!n", "dzwo!"}
	
	local examples = {}
	
	local yale_tones = pinyin_tones
	
	local iter = function (t, k)
		k = k + 1
		local v = raw_examples[math.ceil(k/5)]
		if v then
			local tone = yale_tones[(k - 1) % 5 + 1]
			v = v:gsub("!", tone)
			return k, toNFC(v)
		end
	end
	
	local mt = {
		__ipairs = function(t)
			return iter, t, 0
		end
	}
	
	setmetatable(examples, mt)
	
	self:iterate_conversions(examples, pinyin, m_pron.py_yale, "Monosyllables")
end

function p:test_py_gwoyeu()
	local examples = {"a", "ar", "aa", "ah", ".a", "ai", "air", "ae", "ay", ".ai", "an", "arn", "aan", "ann", ".an", "ang", "arng", "aang", "anq", ".ang", "au", "aur", "ao", "aw", ".au", "ba", "bar", "baa", "bah", ".ba", "bai", "bair", "bae", "bay", ".bai", "ban", "barn", "baan", "bann", ".ban", "bang", "barng", "baang", "banq", ".bang", "bau", "baur", "bao", "baw", ".bau", "be", "ber", "bee", "beh", ".be", "bè", "bèr", "bèè", "bèh", ".bè", "bei", "beir", "beei", "bey", ".bei", "ben", "bern", "been", "benn", ".ben", "beng", "berng", "beeng", "benq", ".beng", "bi", "byi", "bii", "bih", ".bi", "bian", "byan", "bean", "biann", ".bian", "biang", "byang", "beang", "bianq", ".biang", "biau", "byau", "beau", "biaw", ".biau", "bie", "bye", "biee", "bieh", ".bie", "bin", "byn", "biin", "binn", ".bin", "bing", "byng", "biing", "binq", ".bing", "biou", "byou", "beou", "biow", ".biou", "bo", "bor", "boo", "boh", ".bo", "bong", "borng", "boong", "bonq", ".bong", "bu", "bwu", "buu", "buh", ".bu", "tsa", "tsar", "tsaa", "tsah", ".tsa", "tsai", "tsair", "tsae", "tsay", ".tsai", "tsan", "tsarn", "tsaan", "tsann", ".tsan", "tsang", "tsarng", "tsaang", "tsanq", ".tsang", "tsau", "tsaur", "tsao", "tsaw", ".tsau", "tse", "tser", "tsee", "tseh", ".tse", "tsè", "tsèr", "tsèè", "tsèh", ".tsè", "tsei", "tseir", "tseei", "tsey", ".tsei", "tsen", "tsern", "tseen", "tsenn", ".tsen", "tseng", "tserng", "tseeng", "tsenq", ".tseng", "cha", "char", "chaa", "chah", ".cha", "chai", "chair", "chae", "chay", ".chai", "chan", "charn", "chaan", "chann", ".chan", "chang", "charng", "chaang", "chanq", ".chang", "chau", "chaur", "chao", "chaw", ".chau", "che", "cher", "chee", "cheh", ".che", "chen", "chern", "cheen", "chenn", ".chen", "cheng", "cherng", "cheeng", "chenq", ".cheng", "chy", "chyr", "chyy", "chyh", ".chy", "chong", "chorng", "choong", "chonq", ".chong", "chou", "chour", "choou", "chow", ".chou", "chu", "chwu", "chuu", "chuh", ".chu", "chua", "chwa", "choa", "chuah", ".chua", "chuai", "chwai", "choai", "chuay", ".chuai", "chuan", "chwan", "choan", "chuann", ".chuan", "chuang", "chwang", "choang", "chuanq", ".chuang", "chuei", "chwei", "choei", "chuey", ".chuei", "chuen", "chwen", "choen", "chuenn", ".chuen", "chuo", "chwo", "chuoo", "chuoh", ".chuo", "tsy", "tsyr", "tsyy", "tsyh", ".tsy", "tsong", "tsorng", "tsoong", "tsonq", ".tsong", "tsou", "tsour", "tsoou", "tsow", ".tsou", "tsu", "tswu", "tsuu", "tsuh", ".tsu", "tsuan", "tswan", "tsoan", "tsuann", ".tsuan", "tsiuan", "tsyuan", "tseuan", "tsiuann", ".tsiuan", "tsuei", "tswei", "tsoei", "tsuey", ".tsuei", "tsuen", "tswen", "tsoen", "tsuenn", ".tsuen", "tsuo", "tswo", "tsuoo", "tsuoh", ".tsuo", "da", "dar", "daa", "dah", ".da", "dai", "dair", "dae", "day", ".dai", "dan", "darn", "daan", "dann", ".dan", "dang", "darng", "daang", "danq", ".dang", "dau", "daur", "dao", "daw", ".dau", "de", "der", "dee", "deh", ".de", "dè", "dèr", "dèè", "dèh", ".dè", "dei", "deir", "deei", "dey", ".dei", "den", "dern", "deen", "denn", ".den", "deng", "derng", "deeng", "denq", ".deng", "di", "dyi", "dii", "dih", ".di", "dia", "dya", "dea", "diah", ".dia", "dian", "dyan", "dean", "diann", ".dian", "diang", "dyang", "deang", "dianq", ".diang", "diau", "dyau", "deau", "diaw", ".diau", "die", "dye", "diee", "dieh", ".die", "ding", "dyng", "diing", "dinq", ".ding", "diou", "dyou", "deou", "diow", ".diou", "do", "dor", "doo", "doh", ".do", "dong", "dorng", "doong", "donq", ".dong", "dou", "dour", "doou", "dow", ".dou", "du", "dwu", "duu", "duh", ".du", "duan", "dwan", "doan", "duann", ".duan", "duang", "dwang", "doang", "duanq", ".duang", "duei", "dwei", "doei", "duey", ".duei", "duen", "dwen", "doen", "duenn", ".duen", "duo", "dwo", "duoo", "duoh", ".duo", "e", "er", "ee", "eh", ".e", "è", "èr", "èè", "èh", ".è", "ei", "eir", "eei", "ey", ".ei", "en", "ern", "een", "enn", ".en", "eng", "erng", "eeng", "enq", ".eng", "el", "erl", "eel", "ell", ".el", "fa", "far", "faa", "fah", ".fa", "fai", "fair", "fae", "fay", ".fai", "fan", "farn", "faan", "fann", ".fan", "fang", "farng", "faang", "fanq", ".fang", "fei", "feir", "feei", "fey", ".fei", "fen", "fern", "feen", "fenn", ".fen", "feng", "ferng", "feeng", "fenq", ".feng", "fiau", "fyau", "feau", "fiaw", ".fiau", "fo", "for", "foo", "foh", ".fo", "fong", "forng", "foong", "fonq", ".fong", "fou", "four", "foou", "fow", ".fou", "fu", "fwu", "fuu", "fuh", ".fu", "ga", "gar", "gaa", "gah", ".ga", "gai", "gair", "gae", "gay", ".gai", "gan", "garn", "gaan", "gann", ".gan", "gang", "garng", "gaang", "ganq", ".gang", "gau", "gaur", "gao", "gaw", ".gau", "ge", "ger", "gee", "geh", ".ge", "gè", "gèr", "gèè", "gèh", ".gè", "gei", "geir", "geei", "gey", ".gei", "gen", "gern", "geen", "genn", ".gen", "geng", "gerng", "geeng", "genq", ".geng", "gi", "gyi", "gii", "gih", ".gi", "ging", "gyng", "giing", "ginq", ".ging", "gong", "gorng", "goong", "gonq", ".gong", "gou", "gour", "goou", "gow", ".gou", "gu", "gwu", "guu", "guh", ".gu", "gua", "gwa", "goa", "guah", ".gua", "guai", "gwai", "goai", "guay", ".guai", "guan", "gwan", "goan", "guann", ".guan", "guang", "gwang", "goang", "guanq", ".guang", "guei", "gwei", "goei", "guey", ".guei", "guen", "gwen", "goen", "guenn", ".guen", "guo", "gwo", "guoo", "guoh", ".guo", "ha", "har", "haa", "hah", ".ha", "hai", "hair", "hae", "hay", ".hai", "han", "harn", "haan", "hann", ".han", "hang", "harng", "haang", "hanq", ".hang", "hau", "haur", "hao", "haw", ".hau", "he", "her", "hee", "heh", ".he", "hei", "heir", "heei", "hey", ".hei", "hen", "hern", "heen", "henn", ".hen", "heng", "herng", "heeng", "henq", ".heng", "hm", "hmr", "hmm", "hmh", ".hm", "hng", "hngr", "hnng", "hngh", ".hng", "hong", "horng", "hoong", "honq", ".hong", "hou", "hour", "hoou", "how", ".hou", "hu", "hwu", "huu", "huh", ".hu", "hua", "hwa", "hoa", "huah", ".hua", "huai", "hwai", "hoai", "huay", ".huai", "huan", "hwan", "hoan", "huann", ".huan", "huang", "hwang", "hoang", "huanq", ".huang", "huei", "hwei", "hoei", "huey", ".huei", "huen", "hwen", "hoen", "huenn", ".huen", "huo", "hwo", "huoo", "huoh", ".huo", "ji", "jyi", "jii", "jih", ".ji", "jia", "jya", "jea", "jiah", ".jia", "jiai", "jyai", "jeai", "jiay", ".jiai", "jian", "jyan", "jean", "jiann", ".jian", "jiang", "jyang", "jeang", "jianq", ".jiang", "jiau", "jyau", "jeau", "jiaw", ".jiau", "jie", "jye", "jiee", "jieh", ".jie", "jin", "jyn", "jiin", "jinn", ".jin", "jing", "jyng", "jiing", "jinq", ".jing", "jio", "jyo", "jeo", "jioh", ".jio", "jiong", "jyong", "jeong", "jionq", ".jiong", "jiou", "jyou", "jeou", "jiow", ".jiou", "jiu", "jyu", "jeu", "jiuh", ".jiu", "jiuan", "jyuan", "jeuan", "jiuann", ".jiuan", "jiue", "jyue", "jeue", "jiueh", ".jiue", "jiun", "jyun", "jeun", "jiunn", ".jiun", "ka", "kar", "kaa", "kah", ".ka", "kai", "kair", "kae", "kay", ".kai", "kan", "karn", "kaan", "kann", ".kan", "kang", "karng", "kaang", "kanq", ".kang", "kau", "kaur", "kao", "kaw", ".kau", "ke", "ker", "kee", "keh", ".ke", "kè", "kèr", "kèè", "kèh", ".kè", "kei", "keir", "keei", "key", ".kei", "ken", "kern", "keen", "kenn", ".ken", "keng", "kerng", "keeng", "kenq", ".keng", "kia", "kya", "kea", "kiah", ".kia", "kiang", "kyang", "keang", "kianq", ".kiang", "kiou", "kyou", "keou", "kiow", ".kiou", "kong", "korng", "koong", "konq", ".kong", "kou", "kour", "koou", "kow", ".kou", "ku", "kwu", "kuu", "kuh", ".ku", "kua", "kwa", "koa", "kuah", ".kua", "kuai", "kwai", "koai", "kuay", ".kuai", "kuan", "kwan", "koan", "kuann", ".kuan", "kuang", "kwang", "koang", "kuanq", ".kuang", "kuei", "kwei", "koei", "kuey", ".kuei", "kuen", "kwen", "koen", "kuenn", ".kuen", "kuo", "kwo", "kuoo", "kuoh", ".kuo", "lha", "la", "laa", "lah", ".la", "lhai", "lai", "lae", "lay", ".lai", "lhan", "lan", "laan", "lann", ".lan", "lhang", "lang", "laang", "lanq", ".lang", "lhau", "lau", "lao", "law", ".lau", "lhe", "le", "lee", "leh", ".le", "lhei", "lei", "leei", "ley", ".lei", "lhen", "len", "leen", "lenn", ".len", "lheng", "leng", "leeng", "lenq", ".leng", "lhi", "li", "lii", "lih", ".li", "lhia", "lia", "lea", "liah", ".lia", "lhian", "lian", "lean", "liann", ".lian", "lhiang", "liang", "leang", "lianq", ".liang", "lhiau", "liau", "leau", "liaw", ".liau", "lhie", "lie", "liee", "lieh", ".lie", "lhin", "lin", "liin", "linn", ".lin", "lhing", "ling", "liing", "linq", ".ling", "lhiou", "liou", "leou", "liow", ".liou", "lho", "lo", "loo", "loh", ".lo", "lhong", "long", "loong", "lonq", ".long", "lhou", "lou", "loou", "low", ".lou", "lhu", "lu", "luu", "luh", ".lu", "lhiu", "liu", "leu", "liuh", ".liu", "lhuan", "luan", "loan", "luann", ".luan", "lhiuan", "liuan", "leuan", "liuann", ".liuan", "lhiue", "liue", "leue", "liueh", ".liue", "lhuei", "luei", "loei", "luey", ".luei", "lhuen", "luen", "loen", "luenn", ".luen", "lhiun", "liun", "leun", "liunn", ".liun", "lhuo", "luo", "luoo", "luoh", ".luo", "m", "mr", "mm", "mh", ".m", "mha", "ma", "maa", "mah", ".ma", "mhai", "mai", "mae", "may", ".mai", "mhan", "man", "maan", "mann", ".man", "mhang", "mang", "maang", "manq", ".mang", "mhau", "mau", "mao", "maw", ".mau", "mhe", "me", "mee", "meh", ".me", "mhei", "mei", "meei", "mey", ".mei", "mhen", "men", "meen", "menn", ".men", "mhèn", "mèn", "mèèn", "mènn", ".mèn", "mheng", "meng", "meeng", "menq", ".meng", "mhi", "mi", "mii", "mih", ".mi", "mhian", "mian", "mean", "miann", ".mian", "mhiau", "miau", "meau", "miaw", ".miau", "mhie", "mie", "miee", "mieh", ".mie", "mhin", "min", "miin", "minn", ".min", "mhing", "ming", "miing", "minq", ".ming", "mhiou", "miou", "meou", "miow", ".miou", "mho", "mo", "moo", "moh", ".mo", "mhou", "mou", "moou", "mow", ".mou", "mhu", "mu", "muu", "muh", ".mu", "mhua", "mua", "moa", "muah", ".mua", "n", "nr", "nn", "nh", ".n", "nha", "na", "naa", "nah", ".na", "nhai", "nai", "nae", "nay", ".nai", "nhan", "nan", "naan", "nann", ".nan", "nhang", "nang", "naang", "nanq", ".nang", "nhau", "nau", "nao", "naw", ".nau", "nhe", "ne", "nee", "neh", ".ne", "nhè", "nè", "nèè", "nèh", ".nè", "nhei", "nei", "neei", "ney", ".nei", "nhen", "nen", "neen", "nenn", ".nen", "nheng", "neng", "neeng", "nenq", ".neng", "ng", "ngr", "nng", "ngh", ".ng", "nhi", "ni", "nii", "nih", ".ni", "nhia", "nia", "nea", "niah", ".nia", "nhian", "nian", "nean", "niann", ".nian", "nhiang", "niang", "neang", "nianq", ".niang", "nhiau", "niau", "neau", "niaw", ".niau", "nhie", "nie", "niee", "nieh", ".nie", "nhin", "nin", "niin", "ninn", ".nin", "nhing", "ning", "niing", "ninq", ".ning", "nhiou", "niou", "neou", "niow", ".niou", "nhong", "nong", "noong", "nonq", ".nong", "nhou", "nou", "noou", "now", ".nou", "nhu", "nu", "nuu", "nuh", ".nu", "nhiu", "niu", "neu", "niuh", ".niu", "nhuan", "nuan", "noan", "nuann", ".nuan", "nhiue", "niue", "neue", "niueh", ".niue", "nhuen", "nuen", "noen", "nuenn", ".nuen", "nhuo", "nuo", "nuoo", "nuoh", ".nuo", "o", "or", "oo", "oh", ".o", "ong", "orng", "oong", "onq", ".ong", "ou", "our", "oou", "ow", ".ou", "pa", "par", "paa", "pah", ".pa", "pai", "pair", "pae", "pay", ".pai", "pan", "parn", "paan", "pann", ".pan", "pang", "parng", "paang", "panq", ".pang", "pau", "paur", "pao", "paw", ".pau", "pe", "per", "pee", "peh", ".pe", "pè", "pèr", "pèè", "pèh", ".pè", "pei", "peir", "peei", "pey", ".pei", "pen", "pern", "peen", "penn", ".pen", "peng", "perng", "peeng", "penq", ".peng", "pi", "pyi", "pii", "pih", ".pi", "pia", "pya", "pea", "piah", ".pia", "pian", "pyan", "pean", "piann", ".pian", "piau", "pyau", "peau", "piaw", ".piau", "pie", "pye", "piee", "pieh", ".pie", "pin", "pyn", "piin", "pinn", ".pin", "ping", "pyng", "piing", "pinq", ".ping", "po", "por", "poo", "poh", ".po", "pou", "pour", "poou", "pow", ".pou", "pu", "pwu", "puu", "puh", ".pu", "puen", "pwen", "poen", "puenn", ".puen", "chi", "chyi", "chii", "chih", ".chi", "chia", "chya", "chea", "chiah", ".chia", "chian", "chyan", "chean", "chiann", ".chian", "chiang", "chyang", "cheang", "chianq", ".chiang", "chiau", "chyau", "cheau", "chiaw", ".chiau", "chie", "chye", "chiee", "chieh", ".chie", "chin", "chyn", "chiin", "chinn", ".chin", "ching", "chyng", "chiing", "chinq", ".ching", "chio", "chyo", "cheo", "chioh", ".chio", "chiong", "chyong", "cheong", "chionq", ".chiong", "chiou", "chyou", "cheou", "chiow", ".chiou", "chiu", "chyu", "cheu", "chiuh", ".chiu", "chiuan", "chyuan", "cheuan", "chiuann", ".chiuan", "chiue", "chyue", "cheue", "chiueh", ".chiue", "chiun", "chyun", "cheun", "chiunn", ".chiun", "chiuo", "chyuo", "cheuo", "chiuoh", ".chiuo", "rhan", "ran", "raan", "rann", ".ran", "rhang", "rang", "raang", "ranq", ".rang", "rhau", "rau", "rao", "raw", ".rau", "rhe", "re", "ree", "reh", ".re", "rhen", "ren", "reen", "renn", ".ren", "rheng", "reng", "reeng", "renq", ".reng", "rhy", "ry", "ryy", "ryh", ".ry", "rhong", "rong", "roong", "ronq", ".rong", "rhou", "rou", "roou", "row", ".rou", "rhu", "ru", "ruu", "ruh", ".ru", "rhua", "rua", "roa", "ruah", ".rua", "rhuan", "ruan", "roan", "ruann", ".ruan", "rhuei", "ruei", "roei", "ruey", ".ruei", "rhuen", "ruen", "roen", "ruenn", ".ruen", "rhuo", "ruo", "ruoo", "ruoh", ".ruo", "sa", "sar", "saa", "sah", ".sa", "sai", "sair", "sae", "say", ".sai", "san", "sarn", "saan", "sann", ".san", "sang", "sarng", "saang", "sanq", ".sang", "sau", "saur", "sao", "saw", ".sau", "se", "ser", "see", "seh", ".se", "sei", "seir", "seei", "sey", ".sei", "sen", "sern", "seen", "senn", ".sen", "seng", "serng", "seeng", "senq", ".seng", "sha", "shar", "shaa", "shah", ".sha", "shai", "shair", "shae", "shay", ".shai", "shan", "sharn", "shaan", "shann", ".shan", "shang", "sharng", "shaang", "shanq", ".shang", "shau", "shaur", "shao", "shaw", ".shau", "she", "sher", "shee", "sheh", ".she", "shè", "shèr", "shèè", "shèh", ".shè", "shei", "sheir", "sheei", "shey", ".shei", "shen", "shern", "sheen", "shenn", ".shen", "sheng", "sherng", "sheeng", "shenq", ".sheng", "shy", "shyr", "shyy", "shyh", ".shy", "sho", "shor", "shoo", "shoh", ".sho", "shou", "shour", "shoou", "show", ".shou", "shu", "shwu", "shuu", "shuh", ".shu", "shua", "shwa", "shoa", "shuah", ".shua", "shuai", "shwai", "shoai", "shuay", ".shuai", "shuan", "shwan", "shoan", "shuann", ".shuan", "shuang", "shwang", "shoang", "shuanq", ".shuang", "shuei", "shwei", "shoei", "shuey", ".shuei", "shuen", "shwen", "shoen", "shuenn", ".shuen", "shuo", "shwo", "shuoo", "shuoh", ".shuo", "sy", "syr", "syy", "syh", ".sy", "siau", "syau", "seau", "siaw", ".siau", "sing", "syng", "siing", "sinq", ".sing", "song", "sorng", "soong", "sonq", ".song", "sou", "sour", "soou", "sow", ".sou", "su", "swu", "suu", "suh", ".su", "suan", "swan", "soan", "suann", ".suan", "suei", "swei", "soei", "suey", ".suei", "suen", "swen", "soen", "suenn", ".suen", "suo", "swo", "suoo", "suoh", ".suo", "ta", "tar", "taa", "tah", ".ta", "tai", "tair", "tae", "tay", ".tai", "tan", "tarn", "taan", "tann", ".tan", "tang", "tarng", "taang", "tanq", ".tang", "tau", "taur", "tao", "taw", ".tau", "te", "ter", "tee", "teh", ".te", "tè", "tèr", "tèè", "tèh", ".tè", "tei", "teir", "teei", "tey", ".tei", "teng", "terng", "teeng", "tenq", ".teng", "ti", "tyi", "tii", "tih", ".ti", "tian", "tyan", "tean", "tiann", ".tian", "tiau", "tyau", "teau", "tiaw", ".tiau", "tie", "tye", "tiee", "tieh", ".tie", "ting", "tyng", "tiing", "tinq", ".ting", "tong", "torng", "toong", "tonq", ".tong", "tou", "tour", "toou", "tow", ".tou", "tu", "twu", "tuu", "tuh", ".tu", "tuan", "twan", "toan", "tuann", ".tuan", "tuei", "twei", "toei", "tuey", ".tuei", "tuen", "twen", "toen", "tuenn", ".tuen", "tuo", "two", "tuoo", "tuoh", ".tuo", "vo", "vor", "voo", "voh", ".vo", "vè", "vèr", "vèè", "vèh", ".vè", "vu", "vwu", "vuu", "vuh", ".vu", "ua", "wa", "woa", "wah", ".ua", "uai", "wai", "woai", "way", ".uai", "uan", "wan", "woan", "wann", ".uan", "uang", "wang", "woang", "wanq", ".uang", "uè", "wè", "woè", "wèh", ".uè", "uei", "wei", "woei", "wey", ".uei", "uen", "wen", "woen", "wenn", ".uen", "ueng", "weng", "woeng", "wenq", ".ueng", "uo", "wo", "woo", "woh", ".uo", "u", "wu", "wuu", "wuh", ".u", "shi", "shyi", "shii", "shih", ".shi", "shia", "shya", "shea", "shiah", ".shia", "shian", "shyan", "shean", "shiann", ".shian", "shiang", "shyang", "sheang", "shianq", ".shiang", "shiau", "shyau", "sheau", "shiaw", ".shiau", "shie", "shye", "shiee", "shieh", ".shie", "shin", "shyn", "shiin", "shinn", ".shin", "shing", "shyng", "shiing", "shinq", ".shing", "shiong", "shyong", "sheong", "shionq", ".shiong", "shiou", "shyou", "sheou", "shiow", ".shiou", "shiu", "shyu", "sheu", "shiuh", ".shiu", "shiuan", "shyuan", "sheuan", "shiuann", ".shiuan", "shiue", "shyue", "sheue", "shiueh", ".shiue", "shiun", "shyun", "sheun", "shiunn", ".shiun", "ia", "ya", "yea", "yah", ".ia", "iai", "yai", "yeai", "yay", ".iai", "ian", "yan", "yean", "yann", ".ian", "iang", "yang", "yeang", "yanq", ".iang", "iau", "yau", "yeau", "yaw", ".iau", "ie", "ye", "yee", "yeh", ".ie", "i", "yi", "yii", "yih", ".i", "in", "yn", "yiin", "yinn", ".in", "ing", "yng", "yiing", "yinq", ".ing", "io", "yo", "yeo", "yoh", ".io", "iong", "yong", "yeong", "yonq", ".iong", "iou", "you", "yeou", "yow", ".iou", "iu", "yu", "yeu", "yuh", ".iu", "iuan", "yuan", "yeuan", "yuann", ".iuan", "iue", "yue", "yeue", "yueh", ".iue", "iun", "yun", "yeun", "yunn", ".iun", "tza", "tzar", "tzaa", "tzah", ".tza", "tzai", "tzair", "tzae", "tzay", ".tzai", "tzan", "tzarn", "tzaan", "tzann", ".tzan", "tzang", "tzarng", "tzaang", "tzanq", ".tzang", "tzau", "tzaur", "tzao", "tzaw", ".tzau", "tze", "tzer", "tzee", "tzeh", ".tze", "tzè", "tzèr", "tzèè", "tzèh", ".tzè", "tzei", "tzeir", "tzeei", "tzey", ".tzei", "tzen", "tzern", "tzeen", "tzenn", ".tzen", "tzeng", "tzerng", "tzeeng", "tzenq", ".tzeng", "ja", "jar", "jaa", "jah", ".ja", "jai", "jair", "jae", "jay", ".jai", "jan", "jarn", "jaan", "jann", ".jan", "jang", "jarng", "jaang", "janq", ".jang", "jau", "jaur", "jao", "jaw", ".jau", "je", "jer", "jee", "jeh", ".je", "jè", "jèr", "jèè", "jèh", ".jè", "jei", "jeir", "jeei", "jey", ".jei", "jen", "jern", "jeen", "jenn", ".jen", "jeng", "jerng", "jeeng", "jenq", ".jeng", "jy", "jyr", "jyy", "jyh", ".jy", "jo", "jor", "joo", "joh", ".jo", "jong", "jorng", "joong", "jonq", ".jong", "jou", "jour", "joou", "jow", ".jou", "ju", "jwu", "juu", "juh", ".ju", "jua", "jwa", "joa", "juah", ".jua", "juai", "jwai", "joai", "juay", ".juai", "juan", "jwan", "joan", "juann", ".juan", "juang", "jwang", "joang", "juanq", ".juang", "juei", "jwei", "joei", "juey", ".juei", "juen", "jwen", "joen", "juenn", ".juen", "juo", "jwo", "juoo", "juoh", ".juo", "tzy", "tzyr", "tzyy", "tzyh", ".tzy", "tzio", "tzyo", "tzeo", "tzioh", ".tzio", "tzo", "tzor", "tzoo", "tzoh", ".tzo", "tzong", "tzorng", "tzoong", "tzonq", ".tzong", "tzou", "tzour", "tzoou", "tzow", ".tzou", "tzu", "tzwu", "tzuu", "tzuh", ".tzu", "tzuan", "tzwan", "tzoan", "tzuann", ".tzuan", "tzuei", "tzwei", "tzoei", "tzuey", ".tzuei", "tzuen", "tzwen", "tzoen", "tzuenn", ".tzuen", "tzuo", "tzwo", "tzuoo", "tzuoh", ".tzuo"}
		
	self:iterate_conversions(examples, pinyin, m_pron.py_gwoyeu, "Monosyllables")
	
	local examples_erhua = {"al", "arl", "aal", "all", ".al", "al", "arl", "aal", "all", ".al", "al", "arl", "aal", "all", ".al", "angl", "arngl", "aangl", "anql", ".angl", "aul", "aurl", "aol", "awl", ".aul", "bal", "barl", "baal", "ball", ".bal", "bal", "barl", "baal", "ball", ".bal", "bal", "barl", "baal", "ball", ".bal", "bangl", "barngl", "baangl", "banql", ".bangl", "baul", "baurl", "baol", "bawl", ".baul", "be'l", "ber'l", "bee'l", "behl", ".be'l", "be'l", "ber'l", "beel", "bell", ".be'l", "bel", "berl", "beel", "bell", ".bel", "bel", "berl", "beel", "bell", ".bel", "bengl", "berngl", "beengl", "benql", ".bengl", "biel", "byel", "bieel", "biell", ".biel", "bial", "byal", "beal", "biall", ".bial", "biangl", "byangl", "beangl", "bianql", ".biangl", "biaul", "byaul", "beaul", "biawl", ".biaul", "bie'l", "bye'l", "bieel", "biell", ".bie'l", "biel", "byel", "bieel", "biell", ".biel", "biengl", "byengl", "bieengl", "bienql", ".biengl", "bioul", "byoul", "beoul", "biowl", ".bioul", "bol", "borl", "bool", "boll", ".bol", "bongl", "borngl", "boongl", "bonql", ".bongl", "bul", "bwul", "buul", "bull", ".bul", "tsal", "tsarl", "tsaal", "tsall", ".tsal", "tsal", "tsarl", "tsaal", "tsall", ".tsal", "tsal", "tsarl", "tsaal", "tsall", ".tsal", "tsangl", "tsarngl", "tsaangl", "tsanql", ".tsangl", "tsaul", "tsaurl", "tsaol", "tsawl", ".tsaul", "tse'l", "tser'l", "tsee'l", "tsehl", ".tse'l", "tse'l", "tser'l", "tseel", "tsell", ".tse'l", "tsel", "tserl", "tseel", "tsell", ".tsel", "tsel", "tserl", "tseel", "tsell", ".tsel", "tsengl", "tserngl", "tseengl", "tsenql", ".tsengl", "chal", "charl", "chaal", "chall", ".chal", "chal", "charl", "chaal", "chall", ".chal", "chal", "charl", "chaal", "chall", ".chal", "changl", "charngl", "chaangl", "chanql", ".changl", "chaul", "chaurl", "chaol", "chawl", ".chaul", "che'l", "cher'l", "chee'l", "chehl", ".che'l", "chel", "cherl", "cheel", "chell", ".chel", "chengl", "cherngl", "cheengl", "chenql", ".chengl", "chel", "cherl", "cheel", "chell", ".chel", "chongl", "chorngl", "choongl", "chonql", ".chongl", "choul", "chourl", "chooul", "chowl", ".choul", "chul", "chwul", "chuul", "chull", ".chul", "chual", "chwal", "choal", "chuall", ".chual", "chual", "chwal", "choal", "chuall", ".chual", "chual", "chwal", "choal", "chuall", ".chual", "chuangl", "chwangl", "choangl", "chuanql", ".chuangl", "chuel", "chwel", "choel", "chuell", ".chuel", "chuel", "chwel", "choel", "chuell", ".chuel", "chuol", "chwol", "chuool", "chuoll", ".chuol", "tsel", "tserl", "tseel", "tsell", ".tsel", "tsongl", "tsorngl", "tsoongl", "tsonql", ".tsongl", "tsoul", "tsourl", "tsooul", "tsowl", ".tsoul", "tsul", "tswul", "tsuul", "tsull", ".tsul", "tsual", "tswal", "tsoal", "tsuall", ".tsual", "tsiual", "tsyual", "tseual", "tsiuall", ".tsiual", "tsuel", "tswel", "tsoel", "tsuell", ".tsuel", "tsuel", "tswel", "tsoel", "tsuell", ".tsuel", "tsuol", "tswol", "tsuool", "tsuoll", ".tsuol", "dal", "darl", "daal", "dall", ".dal", "dal", "darl", "daal", "dall", ".dal", "dal", "darl", "daal", "dall", ".dal", "dangl", "darngl", "daangl", "danql", ".dangl", "daul", "daurl", "daol", "dawl", ".daul", "de'l", "der'l", "dee'l", "dehl", ".de'l", "de'l", "der'l", "deel", "dell", ".de'l", "del", "derl", "deel", "dell", ".del", "del", "derl", "deel", "dell", ".del", "dengl", "derngl", "deengl", "denql", ".dengl", "diel", "dyel", "dieel", "diell", ".diel", "dial", "dyal", "deal", "diall", ".dial", "dial", "dyal", "deal", "diall", ".dial", "diangl", "dyangl", "deangl", "dianql", ".diangl", "diaul", "dyaul", "deaul", "diawl", ".diaul", "die'l", "dye'l", "dieel", "diell", ".die'l", "diengl", "dyengl", "dieengl", "dienql", ".diengl", "dioul", "dyoul", "deoul", "diowl", ".dioul", "dol", "dorl", "dool", "doll", ".dol", "dongl", "dorngl", "doongl", "donql", ".dongl", "doul", "dourl", "dooul", "dowl", ".doul", "dul", "dwul", "duul", "dull", ".dul", "dual", "dwal", "doal", "duall", ".dual", "duangl", "dwangl", "doangl", "duanql", ".duangl", "duel", "dwel", "doel", "duell", ".duel", "duel", "dwel", "doel", "duell", ".duel", "duol", "dwol", "duool", "duoll", ".duol", "e'l", "er'l", "ee'l", "ehl", ".e'l", "e'l", "er'l", "eel", "ell", ".e'l", "el", "erl", "eel", "ell", ".el", "el", "erl", "eel", "ell", ".el", "engl", "erngl", "eengl", "enql", ".engl", "el", "erl", "eel", "ell", ".el", "fal", "farl", "faal", "fall", ".fal", "fal", "farl", "faal", "fall", ".fal", "fal", "farl", "faal", "fall", ".fal", "fangl", "farngl", "faangl", "fanql", ".fangl", "fel", "ferl", "feel", "fell", ".fel", "fel", "ferl", "feel", "fell", ".fel", "fengl", "ferngl", "feengl", "fenql", ".fengl", "fiaul", "fyaul", "feaul", "fiawl", ".fiaul", "fol", "forl", "fool", "foll", ".fol", "fongl", "forngl", "foongl", "fonql", ".fongl", "foul", "fourl", "fooul", "fowl", ".foul", "ful", "fwul", "fuul", "full", ".ful", "gal", "garl", "gaal", "gall", ".gal", "gal", "garl", "gaal", "gall", ".gal", "gal", "garl", "gaal", "gall", ".gal", "gangl", "garngl", "gaangl", "ganql", ".gangl", "gaul", "gaurl", "gaol", "gawl", ".gaul", "ge'l", "ger'l", "gee'l", "gehl", ".ge'l", "ge'l", "ger'l", "geel", "gell", ".ge'l", "gel", "gerl", "geel", "gell", ".gel", "gel", "gerl", "geel", "gell", ".gel", "gengl", "gerngl", "geengl", "genql", ".gengl", "giel", "gyel", "gieel", "giell", ".giel", "giengl", "gyengl", "gieengl", "gienql", ".giengl", "gongl", "gorngl", "goongl", "gonql", ".gongl", "goul", "gourl", "gooul", "gowl", ".goul", "gul", "gwul", "guul", "gull", ".gul", "gual", "gwal", "goal", "guall", ".gual", "gual", "gwal", "goal", "guall", ".gual", "gual", "gwal", "goal", "guall", ".gual", "guangl", "gwangl", "goangl", "guanql", ".guangl", "guel", "gwel", "goel", "guell", ".guel", "guel", "gwel", "goel", "guell", ".guel", "guol", "gwol", "guool", "guoll", ".guol", "hal", "harl", "haal", "hall", ".hal", "hal", "harl", "haal", "hall", ".hal", "hal", "harl", "haal", "hall", ".hal", "hangl", "harngl", "haangl", "hanql", ".hangl", "haul", "haurl", "haol", "hawl", ".haul", "he'l", "her'l", "hee'l", "hehl", ".he'l", "hel", "herl", "heel", "hell", ".hel", "hel", "herl", "heel", "hell", ".hel", "hengl", "herngl", "heengl", "henql", ".hengl", "hml", "hmrl", "hmml", "hmll", ".hml", "hngl", "hngrl", "hnngl", "hngll", ".hngl", "hongl", "horngl", "hoongl", "honql", ".hongl", "houl", "hourl", "hooul", "howl", ".houl", "hul", "hwul", "huul", "hull", ".hul", "hual", "hwal", "hoal", "huall", ".hual", "hual", "hwal", "hoal", "huall", ".hual", "hual", "hwal", "hoal", "huall", ".hual", "huangl", "hwangl", "hoangl", "huanql", ".huangl", "huel", "hwel", "hoel", "huell", ".huel", "huel", "hwel", "hoel", "huell", ".huel", "huol", "hwol", "huool", "huoll", ".huol", "jiel", "jyel", "jieel", "jiell", ".jiel", "jial", "jyal", "jeal", "jiall", ".jial", "jial", "jyal", "jeal", "jiall", ".jial", "jial", "jyal", "jeal", "jiall", ".jial", "jiangl", "jyangl", "jeangl", "jianql", ".jiangl", "jiaul", "jyaul", "jeaul", "jiawl", ".jiaul", "jie'l", "jye'l", "jieel", "jiell", ".jie'l", "jiel", "jyel", "jieel", "jiell", ".jiel", "jiengl", "jyengl", "jieengl", "jienql", ".jiengl", "jiol", "jyol", "jeol", "jioll", ".jiol", "jiongl", "jyongl", "jeongl", "jionql", ".jiongl", "jioul", "jyoul", "jeoul", "jiowl", ".jioul", "jiuel", "jyuel", "jeuel", "jiuell", ".jiuel", "jiual", "jyual", "jeual", "jiuall", ".jiual", "jiue'l", "jyue'l", "jeuel", "jiuell", ".jiue'l", "jiuel", "jyuel", "jeuel", "jiuell", ".jiuel", "kal", "karl", "kaal", "kall", ".kal", "kal", "karl", "kaal", "kall", ".kal", "kal", "karl", "kaal", "kall", ".kal", "kangl", "karngl", "kaangl", "kanql", ".kangl", "kaul", "kaurl", "kaol", "kawl", ".kaul", "ke'l", "ker'l", "kee'l", "kehl", ".ke'l", "ke'l", "ker'l", "keel", "kell", ".ke'l", "kel", "kerl", "keel", "kell", ".kel", "kel", "kerl", "keel", "kell", ".kel", "kengl", "kerngl", "keengl", "kenql", ".kengl", "kial", "kyal", "keal", "kiall", ".kial", "kiangl", "kyangl", "keangl", "kianql", ".kiangl", "kioul", "kyoul", "keoul", "kiowl", ".kioul", "kongl", "korngl", "koongl", "konql", ".kongl", "koul", "kourl", "kooul", "kowl", ".koul", "kul", "kwul", "kuul", "kull", ".kul", "kual", "kwal", "koal", "kuall", ".kual", "kual", "kwal", "koal", "kuall", ".kual", "kual", "kwal", "koal", "kuall", ".kual", "kuangl", "kwangl", "koangl", "kuanql", ".kuangl", "kuel", "kwel", "koel", "kuell", ".kuel", "kuel", "kwel", "koel", "kuell", ".kuel", "kuol", "kwol", "kuool", "kuoll", ".kuol", "lhal", "lal", "laal", "lall", ".lal", "lhal", "lal", "laal", "lall", ".lal", "lhal", "lal", "laal", "lall", ".lal", "lhangl", "langl", "laangl", "lanql", ".langl", "lhaul", "laul", "laol", "lawl", ".laul", "lhe'l", "le'l", "lee'l", "lehl", ".le'l", "lhel", "lel", "leel", "lell", ".lel", "lhel", "lel", "leel", "lell", ".lel", "lhengl", "lengl", "leengl", "lenql", ".lengl", "lhiel", "liel", "lieel", "liell", ".liel", "lhial", "lial", "leal", "liall", ".lial", "lhial", "lial", "leal", "liall", ".lial", "lhiangl", "liangl", "leangl", "lianql", ".liangl", "lhiaul", "liaul", "leaul", "liawl", ".liaul", "lhie'l", "lie'l", "lieel", "liell", ".lie'l", "lhiel", "liel", "lieel", "liell", ".liel", "lhiengl", "liengl", "lieengl", "lienql", ".liengl", "lhioul", "lioul", "leoul", "liowl", ".lioul", "lhol", "lol", "lool", "loll", ".lol", "lhongl", "longl", "loongl", "lonql", ".longl", "lhoul", "loul", "looul", "lowl", ".loul", "lhul", "lul", "luul", "lull", ".lul", "lhiuel", "liuel", "leuel", "liuell", ".liuel", "lhual", "lual", "loal", "luall", ".lual", "lhiual", "liual", "leual", "liuall", ".liual", "lhiue'l", "liue'l", "leuel", "liuell", ".liue'l", "lhuel", "luel", "loel", "luell", ".luel", "lhuel", "luel", "loel", "luell", ".luel", "lhiuel", "liuel", "leuel", "liuell", ".liuel", "lhuol", "luol", "luool", "luoll", ".luol", "ml", "mrl", "mml", "mll", ".ml", "mhal", "mal", "maal", "mall", ".mal", "mhal", "mal", "maal", "mall", ".mal", "mhal", "mal", "maal", "mall", ".mal", "mhangl", "mangl", "maangl", "manql", ".mangl", "mhaul", "maul", "maol", "mawl", ".maul", "mhe'l", "me'l", "mee'l", "mehl", ".me'l", "mhel", "mel", "meel", "mell", ".mel", "mhel", "mel", "meel", "mell", ".mel", "mhe'l", "me'l", "meel", "mell", ".me'l", "mhengl", "mengl", "meengl", "menql", ".mengl", "mhiel", "miel", "mieel", "miell", ".miel", "mhial", "mial", "meal", "miall", ".mial", "mhiaul", "miaul", "meaul", "miawl", ".miaul", "mhie'l", "mie'l", "mieel", "miell", ".mie'l", "mhiel", "miel", "mieel", "miell", ".miel", "mhiengl", "miengl", "mieengl", "mienql", ".miengl", "mhioul", "mioul", "meoul", "miowl", ".mioul", "mhol", "mol", "mool", "moll", ".mol", "mhoul", "moul", "mooul", "mowl", ".moul", "mhul", "mul", "muul", "mull", ".mul", "mhual", "mual", "moal", "muall", ".mual", "nl", "nrl", "nnl", "nll", ".nl", "nhal", "nal", "naal", "nall", ".nal", "nhal", "nal", "naal", "nall", ".nal", "nhal", "nal", "naal", "nall", ".nal", "nhangl", "nangl", "naangl", "nanql", ".nangl", "nhaul", "naul", "naol", "nawl", ".naul", "nhe'l", "ne'l", "nee'l", "nehl", ".ne'l", "nhe'l", "ne'l", "neel", "nell", ".ne'l", "nhel", "nel", "neel", "nell", ".nel", "nhel", "nel", "neel", "nell", ".nel", "nhengl", "nengl", "neengl", "nenql", ".nengl", "ngl", "ngrl", "nngl", "ngll", ".ngl", "nhiel", "niel", "nieel", "niell", ".niel", "nhial", "nial", "neal", "niall", ".nial", "nhial", "nial", "neal", "niall", ".nial", "nhiangl", "niangl", "neangl", "nianql", ".niangl", "nhiaul", "niaul", "neaul", "niawl", ".niaul", "nhie'l", "nie'l", "nieel", "niell", ".nie'l", "nhiel", "niel", "nieel", "niell", ".niel", "nhiengl", "niengl", "nieengl", "nienql", ".niengl", "nhioul", "nioul", "neoul", "niowl", ".nioul", "nhongl", "nongl", "noongl", "nonql", ".nongl", "nhoul", "noul", "nooul", "nowl", ".noul", "nhul", "nul", "nuul", "null", ".nul", "nhiuel", "niuel", "neuel", "niuell", ".niuel", "nhual", "nual", "noal", "nuall", ".nual", "nhiue'l", "niue'l", "neuel", "niuell", ".niue'l", "nhuel", "nuel", "noel", "nuell", ".nuel", "nhuol", "nuol", "nuool", "nuoll", ".nuol", "ol", "orl", "ool", "oll", ".ol", "ongl", "orngl", "oongl", "onql", ".ongl", "oul", "ourl", "ooul", "owl", ".oul", "pal", "parl", "paal", "pall", ".pal", "pal", "parl", "paal", "pall", ".pal", "pal", "parl", "paal", "pall", ".pal", "pangl", "parngl", "paangl", "panql", ".pangl", "paul", "paurl", "paol", "pawl", ".paul", "pe'l", "per'l", "pee'l", "pehl", ".pe'l", "pe'l", "per'l", "peel", "pell", ".pe'l", "pel", "perl", "peel", "pell", ".pel", "pel", "perl", "peel", "pell", ".pel", "pengl", "perngl", "peengl", "penql", ".pengl", "piel", "pyel", "pieel", "piell", ".piel", "pial", "pyal", "peal", "piall", ".pial", "pial", "pyal", "peal", "piall", ".pial", "piaul", "pyaul", "peaul", "piawl", ".piaul", "pie'l", "pye'l", "pieel", "piell", ".pie'l", "piel", "pyel", "pieel", "piell", ".piel", "piengl", "pyengl", "pieengl", "pienql", ".piengl", "pol", "porl", "pool", "poll", ".pol", "poul", "pourl", "pooul", "powl", ".poul", "pul", "pwul", "puul", "pull", ".pul", "puel", "pwel", "poel", "puell", ".puel", "chiel", "chyel", "chieel", "chiell", ".chiel", "chial", "chyal", "cheal", "chiall", ".chial", "chial", "chyal", "cheal", "chiall", ".chial", "chiangl", "chyangl", "cheangl", "chianql", ".chiangl", "chiaul", "chyaul", "cheaul", "chiawl", ".chiaul", "chie'l", "chye'l", "chieel", "chiell", ".chie'l", "chiel", "chyel", "chieel", "chiell", ".chiel", "chiengl", "chyengl", "chieengl", "chienql", ".chiengl", "chiol", "chyol", "cheol", "chioll", ".chiol", "chiongl", "chyongl", "cheongl", "chionql", ".chiongl", "chioul", "chyoul", "cheoul", "chiowl", ".chioul", "chiuel", "chyuel", "cheuel", "chiuell", ".chiuel", "chiual", "chyual", "cheual", "chiuall", ".chiual", "chiue'l", "chyue'l", "cheuel", "chiuell", ".chiue'l", "chiuel", "chyuel", "cheuel", "chiuell", ".chiuel", "chiuol", "chyuol", "cheuol", "chiuoll", ".chiuol", "rhal", "ral", "raal", "rall", ".ral", "rhangl", "rangl", "raangl", "ranql", ".rangl", "rhaul", "raul", "raol", "rawl", ".raul", "rhe'l", "re'l", "ree'l", "rehl", ".re'l", "rhel", "rel", "reel", "rell", ".rel", "rhengl", "rengl", "reengl", "renql", ".rengl", "rhel", "rel", "reel", "rell", ".rel", "rhongl", "rongl", "roongl", "ronql", ".rongl", "rhoul", "roul", "rooul", "rowl", ".roul", "rhul", "rul", "ruul", "rull", ".rul", "rhual", "rual", "roal", "ruall", ".rual", "rhual", "rual", "roal", "ruall", ".rual", "rhuel", "ruel", "roel", "ruell", ".ruel", "rhuel", "ruel", "roel", "ruell", ".ruel", "rhuol", "ruol", "ruool", "ruoll", ".ruol", "sal", "sarl", "saal", "sall", ".sal", "sal", "sarl", "saal", "sall", ".sal", "sal", "sarl", "saal", "sall", ".sal", "sangl", "sarngl", "saangl", "sanql", ".sangl", "saul", "saurl", "saol", "sawl", ".saul", "se'l", "ser'l", "see'l", "sehl", ".se'l", "sel", "serl", "seel", "sell", ".sel", "sel", "serl", "seel", "sell", ".sel", "sengl", "serngl", "seengl", "senql", ".sengl", "shal", "sharl", "shaal", "shall", ".shal", "shal", "sharl", "shaal", "shall", ".shal", "shal", "sharl", "shaal", "shall", ".shal", "shangl", "sharngl", "shaangl", "shanql", ".shangl", "shaul", "shaurl", "shaol", "shawl", ".shaul", "she'l", "sher'l", "shee'l", "shehl", ".she'l", "she'l", "sher'l", "sheel", "shell", ".she'l", "shel", "sherl", "sheel", "shell", ".shel", "shel", "sherl", "sheel", "shell", ".shel", "shengl", "sherngl", "sheengl", "shenql", ".shengl", "shel", "sherl", "sheel", "shell", ".shel", "shol", "shorl", "shool", "sholl", ".shol", "shoul", "shourl", "shooul", "showl", ".shoul", "shul", "shwul", "shuul", "shull", ".shul", "shual", "shwal", "shoal", "shuall", ".shual", "shual", "shwal", "shoal", "shuall", ".shual", "shual", "shwal", "shoal", "shuall", ".shual", "shuangl", "shwangl", "shoangl", "shuanql", ".shuangl", "shuel", "shwel", "shoel", "shuell", ".shuel", "shuel", "shwel", "shoel", "shuell", ".shuel", "shuol", "shwol", "shuool", "shuoll", ".shuol", "sel", "serl", "seel", "sell", ".sel", "siaul", "syaul", "seaul", "siawl", ".siaul", "siengl", "syengl", "sieengl", "sienql", ".siengl", "songl", "sorngl", "soongl", "sonql", ".songl", "soul", "sourl", "sooul", "sowl", ".soul", "sul", "swul", "suul", "sull", ".sul", "sual", "swal", "soal", "suall", ".sual", "suel", "swel", "soel", "suell", ".suel", "suel", "swel", "soel", "suell", ".suel", "suol", "swol", "suool", "suoll", ".suol", "tal", "tarl", "taal", "tall", ".tal", "tal", "tarl", "taal", "tall", ".tal", "tal", "tarl", "taal", "tall", ".tal", "tangl", "tarngl", "taangl", "tanql", ".tangl", "taul", "taurl", "taol", "tawl", ".taul", "te'l", "ter'l", "tee'l", "tehl", ".te'l", "te'l", "ter'l", "teel", "tell", ".te'l", "tel", "terl", "teel", "tell", ".tel", "tengl", "terngl", "teengl", "tenql", ".tengl", "tiel", "tyel", "tieel", "tiell", ".tiel", "tial", "tyal", "teal", "tiall", ".tial", "tiaul", "tyaul", "teaul", "tiawl", ".tiaul", "tie'l", "tye'l", "tieel", "tiell", ".tie'l", "tiengl", "tyengl", "tieengl", "tienql", ".tiengl", "tongl", "torngl", "toongl", "tonql", ".tongl", "toul", "tourl", "tooul", "towl", ".toul", "tul", "twul", "tuul", "tull", ".tul", "tual", "twal", "toal", "tuall", ".tual", "tuel", "twel", "toel", "tuell", ".tuel", "tuel", "twel", "toel", "tuell", ".tuel", "tuol", "twol", "tuool", "tuoll", ".tuol", "vol", "vorl", "vool", "voll", ".vol", "ve'l", "ver'l", "veel", "vell", ".ve'l", "vul", "vwul", "vuul", "vull", ".vul", "ual", "wal", "woal", "wall", ".ual", "ual", "wal", "woal", "wall", ".ual", "ual", "wal", "woal", "wall", ".ual", "uangl", "wangl", "woangl", "wanql", ".uangl", "ue'l", "we'l", "woel", "well", ".ue'l", "uel", "wel", "woel", "well", ".uel", "uel", "wel", "woel", "well", ".uel", "uengl", "wengl", "woengl", "wenql", ".uengl", "uol", "wol", "wool", "woll", ".uol", "ul", "wul", "wuul", "wull", ".ul", "shiel", "shyel", "shieel", "shiell", ".shiel", "shial", "shyal", "sheal", "shiall", ".shial", "shial", "shyal", "sheal", "shiall", ".shial", "shiangl", "shyangl", "sheangl", "shianql", ".shiangl", "shiaul", "shyaul", "sheaul", "shiawl", ".shiaul", "shie'l", "shye'l", "shieel", "shiell", ".shie'l", "shiel", "shyel", "shieel", "shiell", ".shiel", "shiengl", "shyengl", "shieengl", "shienql", ".shiengl", "shiongl", "shyongl", "sheongl", "shionql", ".shiongl", "shioul", "shyoul", "sheoul", "shiowl", ".shioul", "shiuel", "shyuel", "sheuel", "shiuell", ".shiuel", "shiual", "shyual", "sheual", "shiuall", ".shiual", "shiue'l", "shyue'l", "sheuel", "shiuell", ".shiue'l", "shiuel", "shyuel", "sheuel", "shiuell", ".shiuel", "ial", "yal", "yeal", "yall", ".ial", "ial", "yal", "yeal", "yall", ".ial", "ial", "yal", "yeal", "yall", ".ial", "iangl", "yangl", "yeangl", "yanql", ".iangl", "iaul", "yaul", "yeaul", "yawl", ".iaul", "ie'l", "ye'l", "yeel", "yell", ".ie'l", "iel", "yel", "yeel", "yell", ".iel", "iel", "yel", "yeel", "yell", ".iel", "iengl", "yengl", "yeengl", "yenql", ".iengl", "iol", "yol", "yeol", "yoll", ".iol", "iongl", "yongl", "yeongl", "yonql", ".iongl", "ioul", "youl", "yeoul", "yowl", ".ioul", "iuel", "yuel", "yeuel", "yuell", ".iuel", "iual", "yual", "yeual", "yuall", ".iual", "iue'l", "yue'l", "yeuel", "yuell", ".iue'l", "iuel", "yuel", "yeuel", "yuell", ".iuel", "tzal", "tzarl", "tzaal", "tzall", ".tzal", "tzal", "tzarl", "tzaal", "tzall", ".tzal", "tzal", "tzarl", "tzaal", "tzall", ".tzal", "tzangl", "tzarngl", "tzaangl", "tzanql", ".tzangl", "tzaul", "tzaurl", "tzaol", "tzawl", ".tzaul", "tze'l", "tzer'l", "tzee'l", "tzehl", ".tze'l", "tze'l", "tzer'l", "tzeel", "tzell", ".tze'l", "tzel", "tzerl", "tzeel", "tzell", ".tzel", "tzel", "tzerl", "tzeel", "tzell", ".tzel", "tzengl", "tzerngl", "tzeengl", "tzenql", ".tzengl", "jal", "jarl", "jaal", "jall", ".jal", "jal", "jarl", "jaal", "jall", ".jal", "jal", "jarl", "jaal", "jall", ".jal", "jangl", "jarngl", "jaangl", "janql", ".jangl", "jaul", "jaurl", "jaol", "jawl", ".jaul", "je'l", "jer'l", "jee'l", "jehl", ".je'l", "je'l", "jer'l", "jeel", "jell", ".je'l", "jel", "jerl", "jeel", "jell", ".jel", "jel", "jerl", "jeel", "jell", ".jel", "jengl", "jerngl", "jeengl", "jenql", ".jengl", "jel", "jerl", "jeel", "jell", ".jel", "jol", "jorl", "jool", "joll", ".jol", "jongl", "jorngl", "joongl", "jonql", ".jongl", "joul", "jourl", "jooul", "jowl", ".joul", "jul", "jwul", "juul", "jull", ".jul", "jual", "jwal", "joal", "juall", ".jual", "jual", "jwal", "joal", "juall", ".jual", "jual", "jwal", "joal", "juall", ".jual", "juangl", "jwangl", "joangl", "juanql", ".juangl", "juel", "jwel", "joel", "juell", ".juel", "juel", "jwel", "joel", "juell", ".juel", "juol", "jwol", "juool", "juoll", ".juol", "tzel", "tzerl", "tzeel", "tzell", ".tzel", "tziol", "tzyol", "tzeol", "tzioll", ".tziol", "tzol", "tzorl", "tzool", "tzoll", ".tzol", "tzongl", "tzorngl", "tzoongl", "tzonql", ".tzongl", "tzoul", "tzourl", "tzooul", "tzowl", ".tzoul", "tzul", "tzwul", "tzuul", "tzull", ".tzul", "tzual", "tzwal", "tzoal", "tzuall", ".tzual", "tzuel", "tzwel", "tzoel", "tzuell", ".tzuel", "tzuel", "tzwel", "tzoel", "tzuell", ".tzuel", "tzuol", "tzwol", "tzuool", "tzuoll", ".tzuol"}
	
	self:iterate_conversions(examples_erhua, pinyin_erhua, m_pron.py_gwoyeu, "Erhua monosyllables")
end

function p:test_py_palladius()
	local raw_examples = {"а", "ай", "ань", "ан", "ао", "ба", "бай", "бань", "бан", "бао", "бэ", "бэй", "бэй", "бэнь", "бэн", "би", "бянь", "бян", "бяо", "бе", "бинь", "бин", "бю", "бо", "бун", "бу", "ца", "цай", "цань", "цан", "цао", "цэ", "цэй", "цэй", "цэнь", "цэн", "ча", "чай", "чань", "чан", "чао", "чэ", "чэнь", "чэн", "чи", "чун", "чоу", "чу", "чуа", "чуай", "чуань", "чуан", "чуй", "чунь", "чо", "цы", "цун", "цоу", "цу", "цуань", "цюань", "цуй", "цунь", "цо", "да", "дай", "дань", "дан", "дао", "дэ", "дэй", "дэй", "дэнь", "дэн", "ди", "дя", "дянь", "дян", "дяо", "де", "дин", "дю", "до", "дун", "доу", "ду", "дуань", "дуан", "дуй", "дунь", "до", "э", "эй", "эй", "энь", "эн", "эр", "фа", "фай", "фань", "фан", "фэй", "фэнь", "фэн", "фяо", "фо", "фун", "фоу", "фу", "га", "гай", "гань", "ган", "гао", "гэ", "гэй", "гэй", "гэнь", "гэн", "ги", "гин", "гун", "гоу", "гу", "гуа", "гуай", "гуань", "гуан", "гуй", "гунь", "го", "ха", "хай", "хань", "хан", "хао", "хэ", "хэй", "хэнь", "хэн", "хм", "хн", "хун", "хоу", "ху", "хуа", "хуай", "хуань", "хуан", "хуэй", "хунь", "хо", "цзи", "цзя", "цзяй", "цзянь", "цзян", "цзяо", "цзе", "цзинь", "цзин", "цзё", "цзюн", "цзю", "цзюй", "цзюань", "цзюэ", "цзюнь", "ка", "кай", "кань", "кан", "као", "кэ", "кэй", "кэй", "кэнь", "кэн", "кя", "кян", "кю", "кун", "коу", "ку", "куа", "куай", "куань", "куан", "куй", "кунь", "ко", "ла", "лай", "лань", "лан", "лао", "лэ", "лэй", "лэнь", "лэн", "ли", "ля", "лянь", "лян", "ляо", "ле", "линь", "лин", "лю", "ло", "лун", "лоу", "лу", "люй", "луань", "люань", "люэ", "луй", "лунь", "люнь", "ло", "м", "ма", "май", "мань", "ман", "мао", "мэ", "мэй", "мэнь", "мэйнь", "мэн", "ми", "мянь", "мяо", "ме", "минь", "мин", "мю", "мо", "моу", "му", "муа", "нь", "на", "най", "нань", "нан", "нао", "нэ", "нэй", "нэй", "нэнь", "нэн", "н", "ни", "ня", "нянь", "нян", "няо", "не", "нинь", "нин", "ню", "нун", "ноу", "ну", "нюй", "нуань", "нюэ", "нунь", "но", "о", "ун", "оу", "па", "пай", "пань", "пан", "пао", "пэ", "пэй", "пэй", "пэнь", "пэн", "пи", "пя", "пянь", "пяо", "пе", "пинь", "пин", "по", "поу", "пу", "пунь", "ци", "ця", "цянь", "цян", "цяо", "це", "цинь", "цин", "цё", "цюн", "цю", "цюй", "цюань", "цюэ", "цюнь", "цюо", "жань", "жан", "жао", "жэ", "жэнь", "жэн", "жи", "жун", "жоу", "жу", "жуа", "жуань", "жуй", "жунь", "жо", "са", "сай", "сань", "сан", "сао", "сэ", "сэй", "сэнь", "сэн", "ша", "шай", "шань", "шан", "шао", "шэ", "шэй", "шэй", "шэнь", "шэн", "ши", "шо", "шоу", "шу", "шуа", "шуай", "шуань", "шуан", "шуй", "шунь", "шо", "сы", "сяо", "син", "сун", "соу", "су", "суань", "суй", "сунь", "со", "та", "тай", "тань", "тан", "тао", "тэ", "тэй", "тэй", "тэн", "ти", "тянь", "тяо", "те", "тин", "тун", "тоу", "ту", "туань", "туй", "тунь", "то", "во", "вэй", "ву", "ва", "вай", "вань", "ван", "вэй", "вэй", "вэнь", "вэн", "во", "у", "си", "ся", "сянь", "сян", "сяо", "се", "синь", "син", "сюн", "сю", "сюй", "сюань", "сюэ", "сюнь", "я", "яй", "янь", "ян", "яо", "е", "и", "инь", "ин", "ё", "юн", "ю", "юй", "юань", "юэ", "юнь", "цза", "цзай", "цзань", "цзан", "цзао", "цзэ", "цзэй", "цзэй", "цзэнь", "цзэн", "чжа", "чжай", "чжань", "чжан", "чжао", "чжэ", "чжэй", "чжэй", "чжэнь", "чжэн", "чжи", "чжо", "чжун", "чжоу", "чжу", "чжуа", "чжуай", "чжуань", "чжуан", "чжуй", "чжунь", "чжо", "цзы", "цзё", "цзо", "цзун", "цзоу", "цзу", "цзуань", "цзуй", "цзунь", "цзо"}
	
	local examples = {}
	
	setmetatable(examples, {
		__ipairs = function(t)
			local function iter(t, k)
				k = k + 1
				local v = raw_examples[math.ceil(k/5)]
				if v then
					return k, v
				end
			end
			return iter, t, 0
		end
	})
	
	self:iterate_conversions(examples, pinyin, m_pron.py_palladius, "Monosyllables")
end

function p:test_erhua()
	local examples = {
		{"tuō'érsuǒ", "y", "tuō'érsuǒr"},
	}
	
	self:iterate(examples, function (self, text, erhua_pos, expected)
		-- Third argument and first return value are not needed.
		local _, erhua = m_pron.erhua(text, erhua_pos, "托兒所")
		self:equals(text, erhua, expected)
	end)
end

return p