WELL-FORMED

AaBbCcDd
AaBbCcDd-x-y-any-x
abcd-Latn
ab-x-abc-a-a   	 # ditto
ab-x-abc-a-a 	 # ditto
ab-x-abc-x-abc 	 # anything goes after x
ab-x-abc-x-abc 	 # anything goes after x
ax-TZ 	 # Not in the registry, but well-formed
az-Arab-x-AZE-derbend
de-a-value
de-CH-1996
de-Latg-1996
en
en-a-bbb-x-a-ccc
en-enx
en-enx-eny-enz-latn-us
en-gb-oed
en-Latn
en-Latn-001
en-Latn-GB-boont-r-extended-sequence-x-private
en-Latn-US
en-Latn-US-lojban-gaulish
en-Latn-US-lojban-gaulish-a-12345678-ABCD-b-ABCDEFGH
en-Latn-US-lojban-gaulish-a-12345678-ABCD-b-ABCDEFGH-x-a-b-c-12345678
en-US
en-US
en-US-boont
en-x-US
es-419
es-Latn-CO-x-private
fr 
fra
fra-FX
fra-Latn 	 # ISO 639 can be 3-letters
fr-FR
fr-fra 	 # Extended tag
fr-Lat 	 # Extended
fr-Latn
fr-Latn-419
fr-Latn-CA
fr-Latn-CA
fr-Latn-FR
fr-shadok 	 # Variant
fr-y-myext-myext2
i-default      	 # grandfathered
i-default 	 # grandfathered
i-enochian 	 # Grand fathered
i-klingon 	 # grandfathered
i-klingon 	 # grandfathered with singleton
mn-Cyrl-MN
mN-cYrL-Mn
no-bok 	 # grandfathered without singleton
sl-IT-nedis
sl-nedis
sr-Latn-CS
x-12345678-a
x-fr-CH

#all of the grandfathered codes; first the really goofy ones. Cased oddly for an extra test.
En-Gb-Oed
I-Ami
I-Bnn
I-Default
I-Enochian
I-Hak
I-Klingon
I-Lux
I-Mingo
I-Navajo
I-Pwn
I-Tao
I-Tay
I-Tsu
Sgn-Be-Fr
Sgn-Be-Nl
Sgn-Ch-De

#now the ones that are well-formed, but currently invalid
art-lojban
cel-gaulish
en-boont
en-scouse
no-bok
no-nyn
zh-cmn
zh-cmn-Hans
zh-cmn-Hant
zh-gan
zh-guoyu
zh-hakka
zh-min
zh-min-nan
zh-wuu
zh-xiang
zh-yue

# Now some randomly generated correct names

cfR-wOG-g-UkjoqWt8-ii8S04LL-rbBDq0gl-o-qmzs-ifnRSqVz-241T-lVFJq30L-0JWuHsb-C-WMThK-kbEOuA-tIQ-Lfjt-a-c1gdojdJ-7iv-b-NawXDK
JP-ubE-JtS-fOa-BOiO
BYE-fiX-mKH-BKdy
rc-Ajl-jpl-X-Lh-SPB-ANEXM
FwtsUTb
GH-NgZ-rW
x-GF-E7m-v2-V09q
qQ-THL-dth
TDGbw
Uif-eE
TDJVhlwx-HEwn-6M9a-4DvI-7WaG-8IRj-7QEk-7yID
rOO-yUE-UEY-bbcM
yY-jDQ-eDK-NsZ-a-oJQ-eLc-JTMc31-nhr-h-unOGj8-Os7-JMT5jeVq-pE-QK5
oJ-57b1OPWP-6MUqYs-Kesk65J-74oa-34Ys
vX-PCm-mnT-PsQ
eQh-ewFo-7mvP-EbJ0xx-0OEK-I0I8ju6
JwdjKtH-WD
QxxLG-X-lJNNX6Pu-7OfhbLoa
icb-AAk-EFU-dAyc-1rj2-3upg-8VMx-5nml-DF45sBf
en-GB-oed
oHSgh-x-SpoWfaO8-J-NATtSLZ1
Ehl-hpi-Bbb-zu-x-n6rrcoz0
UFhQ-GO-X-HULOlod-tkv
jVVxZr
HkFqh
tyg-mMk-YME-Nia-aJab-Ej
rI-aqM-gkp-ZNW-NW
Hv-acb-248
XMXIUasy-Djzc-eW
DGKW-oZRC-G-1P-SuP-A-GI2SuR-vX-rnH1Y8-heft
X-C5lAw-Hn-XdR7x
tsQpkxE-xwuk
i-pwn
SQrky-AWCe-xo-x-cU-fo2-u1KhUJ
aNCzqvs-IVeQ-ZY
sj
jeMSw
UPm-sMd-Dn
Hho-sG-GpcoS1-IxGcI
EDrfxBz
qpW-HBWu-ta
AIl-FGV
Lqn-bid-DpI
Jm
xE-Lxs-qu
RliJDAg
ct-gwQ-SIu
csneMbEX-Umid-r-AfHD-gDWov-DfxmF4ew-0ENgU-S-pBN9O4c-9HK-c0ElsKnC
jH-BIYY-pT
en-GB-oed

ILL-FORMED

-a
a-
a1-Hant-ZH
aabbccddE
a--b
ab-123-abc
ab-123-abc
ab-123-abcd
ab-123-abcd
ab-1abc-abc
ab-1abc-abc
ab-1abc-abcd
ab-1abc-abcd
ab--ab
ab--ab
ab-a-b
ab-a-b
ab-ab-abc
ab-ab-abc
ab-ab-abcd
ab-ab-abcd
-ab-abc
-ab-abc
ab-abc-
ab-abc-
ab-abc-abc-abc-abc
ab-abc-abc-abc-abc
ab-abcd-abc
ab-abcd-abc
ab-abcde-abc
ab-abcde-abc
ab-abcde-abcd
ab-abcde-abcd
ab-a-x
ab-a-x
abcd-efg
abcdefghi-012345678
abcdefghi-012345678
a-foo
a-Hant-ZH
a-value
a-x
b-fish
en-enx-eny-enz-enw
en-UK-oed
en-US-Latn
f
f-Latn
fr-Latn-F
overlongone
tlh-a-b-foo

i-notexist          	 # grandfathered but not registered: invalid, even if we only test well-formedness

# the following have multiple singletons
ab-a-abc-a-abc
en-a-bbb-a-ccc	 # 'a' appears twice 
ab-c-abc-r-toto-c-abc  	 # 'c' appears twice 

#mechanically generated ill-formed items
EdY-z_H791Xx6_m_kj
qWt85_8S0-L_rbBDq0gl_m_O_zsAx_nRS
VzyL2
T_VFJq-L-0JWuH_u2_VW-hK-kbE
u-t
Q-f_ZVJXyc-doj_k-i
JWB7gNa_K-5GB-25t_W-s-ZbGVwDu1-H3E
b-2T-Qob_L-C9v_2CZxK86
fQTpX_0_4Vg_L3L_g7VtALh2
S-Z-E_J
f6wsq-02_i-F
9_GcUPq_G
QjsIy_9-0-7_Dv2yPV09_D-JXWXM
D_se-f-k
ON47Wv1_2_W
f-z-R_s-ha
N3APeiw_195_Bx2-mM-pf-Z-Ip5lXWa-5r
IRjxU-E_6kS_D_b1b_H
NB-3-5-AyW_FQ-9hB-TrRJg3JV_3C
yF-3a_V_FoJQAHeL_Z-Mc-u
n_w_bbunOG_1-s-tJMT5je
Q-AEWE_X
57b1O_k_R6MU_sb
hK_65J_i-o_SI-Y
wB4B7u_5I2_I_NZPI
J24Nb_q_d-zE
v6-dHjJmvPS_IEb-x_A-O-i
8_8_dl-ZgBr84u-P-E
nIn-xD7EVhe_C
5_N-6P_x7Of_Lo_6_YX_R
0_46Oo0sZ-YNwiU8Wr_d-M-pg1OriV
laiY-5
K-8Mdd-j_ila0sSpo_aO8_J
wNATtSL-Cp4_gPa_fD41_9z
H_FGz5V8_n6rrcoz0_1O6d-kH-7-N
wDOrnHU-odqJ_vWl
gP_qO-I-jH
h
dJ0hX-o_csBykEhU-F
L-Vf7_BV_eRJ5goSF_Kp
y-oF-chnavU-H
9FkG-8Q-8_v
W_l_NDQqI-O_SFSAOVq
kDG3fzXw
t-nsSp-7-t-mUK2
Yw-F
1-S_3_l
u-v_brn-Y
4_ft_3ZPZC5lA_D
n_dR-QodsqJnh_e
Hwvt-bSwZwj_KL-hxg0m-3_hUG
mQHzvcV-UL-o2O_1KhUJQo_G2_uryk3-a
b-UTn33HF
r-Ep-jY-aFM_N_H
K-k-krEZ0gwD_k_ua-9dm3Oy-s_v
XS_oS-p
EIx_h-zf5
p_z-0_i-omQCo3B
1_q0N_jo_9
0Ai-6-S
L-LZEp_HtW
Zj-A4JD_2A5Aj7_b-m3
x
p-qPuXQpp_d-jeKifB-c-7_G-X
X94cvJ_A
F2D25R_qk_W-w_Okf_kx
rc-f
D
gD_WrDfxmF-wu-E-U4t
Z_BN9O4_D9-D_0E_KnCwZF-84b-19
T-8_g-u-0_E
lXTtys9j_X_A_m-vtNiNMw_X_b-C6Nr
V_Ps-4Y-S
X5wGEA
mIbHFf_ALu4_Jo1Z1
ET-TacYx_c
Z-Lm5cAP_ri88-d_q_fi8-x
rTi2ah-4j_j_4AlxTs6m_8-g9zqncIf-N5
FBaLB85_u-0NxhAy-ZU_9c
x_j_l-5_aV95_s_tY_jp4
PL768_D-m7jNWjfD-Nl_7qvb_bs_8_Vg
9-yOc-gbh
6DYxZ_SL-S_Ye
ZCa-U-muib-6-d-f_oEh_O
Qt-S-o8340F_f_aGax-c-jbV0gfK_p
WE_SzOI_OGuoBDk-gDp
cs-Y_9
m1_uj
Y-ob_PT
li-B
f-2-7-9m_f8den_J_T_d
p-Os0dua-H_o-u
L
rby-w


