Hey again,
Sorry it took me awhile to do the test due the fact I was abit busy back then.
When I was trying to compile the test-lookup.c with a set of examples of 
existent domains I got this error msg:
expected rc 0 got rc -206

I have attached the file in case you want to see them.

Abdulrahman,

-----Original Message-----
From: Simon Josefsson [mailto:[email protected]] 
Sent: 30/Mar/2011 10:47 AM
To: Abdulrahman I. ALGhadir
Cc: [email protected]
Subject: Re: testing Context O/J

"Abdulrahman I. ALGhadir" <[email protected]> writes:

> Dear Simon,
> I am Abdulrahman from SaudiNIC and I am willing to help in testing the
> part which is related to Context O/J for R2L languages such as Arabic.
> I am going to inform you with details but do you have certain
> scenarios in your mind for test or just do my best?

Hi Abdulrahman, and welcome!  Your help is really important, I don't
have your expertise.

What would help if you have a bunch (say 10-20) common R2L domains to
make sure we don't introduce any serious regressions.  You want to add
them to tests/test-lookup.c like the following:

static const struct idna idna[] = {
...
  {"\xe6\xb5\x8b\xe8\xaf\x95", "xn--0zwm56d" },

The first string is escaped UTF-8 and the second is the ACE encoding.

Second, and perhaps more challenging, is to prepare real corner-case
test vectors that triggers the IDNA2008 rules related to CONTEXT O/J and
BIDI rules.  What we would want is to make sure all paths in the code is
tested.

I'm going to prepare code coverage charts for libidn2, which would help
to identify which parts needs testing -- that will help us find the
necessary test vectors.

/Simon

-----------------------------------------------------------------------------------
Disclaimer:
This message and its attachment, if any, are confidential and may contain 
legally
privileged information. If you are not the intended recipient, please contact 
the
sender immediately and delete this message and its attachment, if any, from your
system. You should not copy this message or disclose its contents to any other
person or use it for any purpose. Statements and opinions expressed in this 
e-mail
are those of the sender, and do not necessarily reflect those of the 
Communications
and Information Technology Commission (CITC). CITC accepts no liability for 
damage
caused by this email.
/* test-lookup.c --- Self tests for IDNA processing
   Copyright (C) 2011 Simon Josefsson

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include <config.h>

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <stdint.h>

#include <idn2.h>

struct idna
{
  const char *in;
  const char *out;
  int rc;
  int flags;
};

static const struct idna idna[] = {
  /* UTC's test vectors. */
#include "IdnaTest.inc"
    //----------------Testing existing domains with their idna2003 A-labels

{"\xd8\xa7\xd9\x84\xd9\x85\xd8\xb1\xd9\x83\xd8\xb2\x2d\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\x2d\xd9\x84\xd9\x85\xd8\xb9\xd9\x84\xd9\x88\xd9\x85\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9",
 "xn------nzebbbijg6cvanqv7ec6ooadfebehlc1fg8c"},
{"\xd8\xb5\xd8\xad\xd8\xa7\xd8\xb1\xd9\x89\x2d\xd9\x86\xd8\xaa", 
"xn----ymckjvv7jwa"},
{"\xd8\xa5\xd8\xaf\xd8\xa7\xd8\xb1\xd8\xa9\xd8\xa7\xd9\x84\xd8\xaa\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9\xd9\x88\xd8\xa7\xd9\x84\xd8\xaa\xd8\xb9\xd9\x84\xd9\x8a\xd9\x85\x2d\xd9\x84\xd9\x84\xd8\xa8\xd9\x86\xd8\xa7\xd8\xaa\x2d\xd8\xa8\xd9\x85\xd8\xad\xd8\xa7\xd9\x81\xd8\xb8\xd8\xa9\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd8\xa7",
 "xn-----4sdiaabbaaeccgchhdd6d1a9bd4pqal6sqcfcbalbsi6a9d2dh"},
{"\xd8\xa8\xd9\x86\xd9\x83\x2d\xd8\xa7\xd9\x84\xd8\xa8\xd9\x84\xd8\xa7\xd8\xaf",
 "xn----zmcabc7b5ikbo"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xa8\xd9\x84\xd8\xa7\xd8\xaf\x2d\xd9\x84\xd9\x84\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xab\xd9\x85\xd8\xa7\xd8\xb1",
 "xn-----ctdabadfpk4bslyf5vuabdaz"},
{"\xd8\xa7\xd9\x86\xd8\xac\xd8\xa7\xd8\xb2", "xn--mgbaoz1h"},
{"\xd9\x85\xd8\xa4\xd8\xb3\xd8\xb3\xd8\xa9\xd8\xa7\xd9\x84\xd8\xa7\xd9\x86\xd8\xb8\xd9\x85\xd8\xa9\xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xb1\xd8\xa7\xd8\xa8\xd8\xb7\xd8\xa9",
 "xn--jgbgaaagccdh1fra9di4qehidp"},
{"\xd8\xb3\xd9\x86\xd8\xa7\xd9\x81\xd9\x8a", "xn--mgbx7bsw"},
{"\xd8\xa3\xd9\x85\xd8\xa7\xd9\x86\xd8\xa9\xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd8\xb5\xd9\x85\xd8\xa9\xd8\xa7\xd9\x84\xd9\x85\xd9\x82\xd8\xaf\xd8\xb3\xd8\xa9",
 "xn--igbiaaajcb7czbs0c4hwafghdi"},
{"\xd8\xa7\xd9\x84\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x81\xd9\x86\xd9\x8a\xd8\xa9\x2d\xd9\x84\xd8\xaa\xd9\x88\xd8\xb7\xd9\x8a\xd9\x86\x2d\xd8\xa7\xd9\x84\xd8\xaa\xd9\x82\xd9\x86\xd9\x8a\xd8\xa9",
 "xn------nzebcjcdhc9eubzc8ixafpgde0bff6b9bgh"},
{"\xd9\x85\xd8\xa4\xd8\xb3\xd8\xb3\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xa7\xd9\x86\xd8\xb8\xd9\x85\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xb1\xd8\xa7\xd8\xa8\xd8\xb7\xd8\xa9",
 "xn-----1sdnabaicdej5gtaa9ej8sfhjeq"},
{"\xd9\x85\xd8\xa4\xd8\xb3\xd8\xb3\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xa7\xd9\x86\xd8\xb8\xd9\x85\xd8\xa9\xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xb1\xd8\xa7\xd8\xa8\xd8\xb7\xd8\xa9",
 "xn----smckaaahcddi8fsaa4ej6rehjdq"},
{"\xd9\x85\xd8\xa4\xd8\xb3\xd8\xb3\xd8\xa9\xd8\xa7\xd9\x84\xd8\xa7\xd9\x86\xd8\xb8\xd9\x85\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xb1\xd8\xa7\xd8\xa8\xd8\xb7\xd8\xa9",
 "xn----smcjabahccei8fsaa4ei6rfhiep"},
{"\xd9\x85\xd8\xa4\xd8\xb3\xd8\xb3\xd8\xa9\xd8\xa7\xd9\x84\xd9\x85\xd8\xaf\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x84\xd8\xaa\xd9\x82\xd9\x86\xd9\x8a",
 "xn--jgbgaahj6arna6osaedgx2e"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xa3\xd9\x85\xd9\x88\xd8\xa7\xd9\x84\x2d\xd9\x84\xd9\x84\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xa7\xd9\x84\xd9\x8a\xd8\xa9",
 "xn------7yeubaabamkhc9gi5akj50azabakbiq1e0d"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xa3\xd9\x85\xd9\x88\xd8\xa7\xd9\x84\x2d\xd9\x84\xd9\x84\xd8\xa7\xd8\xb3\xd8\xaa\xd8\xb4\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xa7\xd9\x84\xd9\x8a\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xad\xd8\xaf\xd9\x88\xd8\xaf\xd8\xa9",
 "xn-------g5fybaababokchc4dwbaxi7bqj59a5abakbdlqg8f0a2e"},
{"\xd9\x85\xd9\x83\xd8\xaa\xd8\xa8\x2d\xd8\xaf\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x84\xd8\xaa\xd9\x85\xd9\x88\xd9\x8a\xd9\x84\x2d\xd9\x84\xd9\x84\xd8\xae\xd8\xaf\xd9\x85\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd8\xaa\xd8\xac\xd8\xa7\xd8\xb1\xd9\x8a\xd8\xa9",
 "xn------ozeabbabsbecc4a0amf7am37a3abbaggkg7f0cq"},
{"\xd9\x87\xd9\x8a\xd8\xa6\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xa3\xd9\x85\xd8\xb1\x2d\xd8\xa8\xd8\xa7\xd9\x84\xd9\x85\xd8\xb9\xd8\xb1\xd9\x88\xd9\x81\x2d\xd9\x88\xd8\xa7\xd9\x84\xd9\x86\xd9\x87\xd9\x8a\x2d\xd8\xb9\xd9\x86\x2d\xd8\xa7\xd9\x84\xd9\x85\xd9\x86\xd9\x83\xd8\xb1",
 "xn--------ochtjcbcgi9idf3ke2mwbgffejflwcedu1ac5cxa"},
{"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xad\xd9\x8a\xd9\x84\xd9\x8a\x2d\xd9\x84\xd9\x84\xd8\xaa\xd8\xac\xd8\xa7\xd8\xb1\xd8\xa9\x2d\xd9\x88\xd8\xa7\xd9\x84\xd8\xa7\xd9\x86\xd9\x85\xd8\xa7\xd8\xa1",
 "xn-----usdvbbaaoiwj0dwa8wcbahvu4b9ab"},
{"\xd8\xa7\xd9\x84\xd9\x85\xd8\xa4\xd8\xb3\xd8\xb3\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\x2d\xd9\x84\xd9\x84\xd8\xb7\xd8\xa7\xd9\x82\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x83\xd9\x87\xd8\xb1\xd8\xa8\xd8\xa7\xd8\xa6\xd9\x8a\xd8\xa9",
 "xn------bzenbcbbakfccf0gvbzaad1gvb6p1ahgfagj8fsa1er"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xb5\xd9\x86\xd8\xa7\xd8\xb9\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd9\x83\xd9\x87\xd8\xb1\xd8\xa8\xd8\xa7\xd8\xa6\xd9\x8a\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xb9\xd8\xaf\xd8\xaf\xd9\x87",
 "xn------lzedaabachfjii4fati4cza3gm5tkashi3an3bn3g"},
{"\xd8\xa7\xd9\x84\xd9\x87\xd9\x8a\xd8\xa6\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xb9\xd8\xa7\xd9\x85\xd8\xa9\x2d\xd9\x84\xd9\x84\xd8\xba\xd8\xb0\xd8\xa7\xd8\xa1\x2d\xd9\x88\xd8\xa7\xd9\x84\xd8\xaf\xd9\x88\xd8\xa7\xd8\xa1",
 "xn------0yebzgcabcard9gl3mva5peeagn6b5bd8a"},
{"\xd8\xa7\xd9\x84\xd9\x85\xd8\xaa\xd8\xad\xd8\xaf", "xn--mgbgji6hg"},
{"\xd8\xad\xd8\xa7\xd8\xb3\xd8\xa8", "xn--mgbcnz"},
{"\xd9\x85\xd8\xb5\xd8\xb1\xd9\x81\x2d\xd8\xa7\xd9\x84\xd8\xa5\xd9\x86\xd9\x85\xd8\xa7\xd8\xa1",
 "xn----nmclhb0d1a1h3aehl"},
{"\xd8\xa7\xd9\x84\xd8\xa3\xd9\x84\xd9\x88\xd9\x83\xd8\xa9", "xn--igbhh7hdb2a"},
{"\xd8\xa5\xd8\xb9\xd9\x85\xd8\xa7\xd8\xb1", "xn--kgbe4a4a1d"},
{"\xd9\x81\xd8\xa7\xd8\xb1\xd9\x85", "xn--mgbu0cs"},
{"\xd9\x81\xd9\x86\xd8\xaa\xd9\x88\xd8\xb1\xd9\x8a", "xn--pgbo0culn"},
{"\xd8\xa7\xd9\x84\xd8\xaa\xd8\xa7\xd8\xac", "xn--mgbaij1j"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xb1\xd8\xa7\xd9\x85\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd8\xaf\xd9\x88\xd9\x84\xd9\x8a\xd8\xa9\x2d\xd9\x84\xd9\x84\xd8\xaa\xd9\x82\xd9\x86\xd9\x8a\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xad\xd8\xaf\xd9\x88\xd8\xaf\xd8\xa9",
 "xn-------05fabckfbcfe2czahavc3dvuka6abcafmr0a0dp7ch"},
{"\xd9\x85\xd8\xa4\xd8\xb3\xd8\xb3\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xb2\xd9\x86\xd9\x8a\xd8\xaa\xd8\xa7\xd9\x86\x2d\xd8\xa7\xd9\x84\xd8\xaa\xd8\xac\xd8\xa7\xd8\xb1\xd9\x8a\xd8\xa9",
 "xn-----1sdnabakgfdy0egla60afg2ac9fk"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xb7\xd9\x88\xd8\xaf\x2d\xd9\x84\xd8\xa5\xd8\xaf\xd8\xa7\xd8\xb1\xd8\xa9\x2d\xd9\x88\xd8\xaa\xd8\xb3\xd9\x88\xd9\x8a\xd9\x82\x2d\xd8\xa7\xd9\x84\xd8\xb9\xd9\x82\xd8\xa7\xd8\xb1",
 "xn-------r5fmcakem8ccwhg4af4duc6ldf3al3gjc2d"},
{"\xd9\x88\xd8\xb2\xd8\xa7\xd8\xb1\xd8\xa9\xd8\xa7\xd9\x84\xd8\xaa\xd8\xac\xd8\xa7\xd8\xb1\xd8\xa9\xd9\x88\xd8\xa7\xd9\x84\xd8\xb5\xd9\x86\xd8\xa7\xd8\xb9\xd8\xa9",
 "xn--mgbaaaaicceu5cff6c7cxjg1bxl"},
{"\xd8\xa7\xd9\x84\xd8\xa3\xd9\x88\xd9\x84\xd9\x89\x2d\xd9\x84\xd9\x84\xd8\xaa\xd8\xb7\xd9\x88\xd9\x8a\xd8\xb1",
 "xn----qmclo9a9a1fbba4bghu"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xb9\xd8\xb0\xd9\x8a\xd8\xa8\x2d\xd9\x86\xd8\xaa\x2d\xd8\xb3\xd9\x88\xd9\x84\x2d\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xad\xd8\xaf\xd9\x88\xd8\xaf\xd8\xa9",
 "xn--------gdhbchgcf9byaeaep9bcj7ij1u8acg2ao7dgi7bp"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xb9\xd8\xb0\xd9\x8a\xd8\xa8\x2d\xd9\x84\xd9\x84\xd9\x83\xd9\x85\xd8\xa8\xd9\x8a\xd9\x88\xd8\xaa\xd8\xb1\x2d\xd9\x88\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xad\xd8\xaf\xd9\x88\xd8\xaf\xd8\xa9",
 "xn-------25faaabcbilgdc7cwbaesh4dvb8f3mg1aageerq3gdp2ch"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd9\x85\xd8\xb1\xd8\xa8\xd8\xb7\x2d\xd8\xb9\xd8\xb0\xd8\xa8\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xad\xd8\xaf\xd9\x88\xd8\xaf\xd8\xa9",
 "xn------qzecbdec3bwagjc8b4cwb1n6akl5e"},
{"\xd9\x87\xd9\x8a\xd8\xa6\xd8\xa9\x2d\xd8\xaa\xd9\x86\xd8\xb8\xd9\x8a\xd9\x85\x2d\xd8\xa7\xd9\x84\xd9\x83\xd9\x87\xd8\xb1\xd8\xa8\xd8\xa7\xd8\xa1\x2d\xd9\x88\xd8\xa7\xd9\x84\xd8\xa7\xd9\x86\xd8\xaa\xd8\xa7\xd8\xac\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xb2\xd8\xaf\xd9\x88\xd8\xac",
 "xn-------64f1ajacaabfkqi9ac0d2a6a1j9kxahgjsioll2bn2bg"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xb9\xd8\xb0\xd9\x8a\xd8\xa8\x2d\xd9\x84\xd9\x84\xd8\xae\xd8\xaf\xd9\x85\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd8\xb7\xd8\xa8\xd9\x8a\xd8\xa9",
 "xn------pzebcebhg6bmjl8b8cya1pzaagr2io"},
{"\xd8\xb7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\x2d\xd9\x86\xd8\xa7\xd8\xb3", 
"xn----ymcb1bnt1ib5a"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xb9\xd8\xb0\xd9\x8a\xd8\xa8\x2d\xd8\xa7\xd9\x84\xd8\xaa\xd8\xac\xd8\xa7\xd8\xb1\xd9\x8a\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xad\xd8\xaf\xd9\x88\xd8\xaf\xd8\xa9",
 "xn------pzeabcgfcgyr2aaeoj0czg1j3ahy1fsbi"},
{"\xd9\x86\xd8\xa7\xd8\xb3", "xn--mgby7c"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x81\xd9\x86\xd8\xa7\xd8\xb1\x2d\xd9\x84\xd9\x84\xd8\xa5\xd8\xb3\xd8\xaa\xd8\xab\xd9\x85\xd8\xa7\xd8\xb1\x2d\xd8\xa7\xd9\x84\xd8\xaa\xd8\xac\xd8\xa7\xd8\xb1\xd9\x8a",
 "xn------hzeiacbalqdjs6deff2al1zmb0aeaiws9k"},
{"\xd8\xa7\xd9\x84\xd9\x81\xd9\x86\xd8\xa7\xd8\xb1\x2d\xd9\x84\xd8\xa3\xd9\x86\xd8\xb8\xd9\x85\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd8\xa8\xd9\x86\xd8\xa7\xd8\xa1",
 "xn-----usdgsadaih9f3drftbefnlfh"},
{"\xd8\xa7\xd9\x84\xd9\x81\xd9\x86\xd8\xa7\xd8\xb1\x2d\xd9\x84\xd9\x84\xd8\xa3\xd9\x86\xd8\xb8\xd9\x85\xd8\xa9\x2d\xd8\xa7\xd9\x84\xd9\x83\xd9\x87\xd8\xb1\xd8\xa8\xd8\xa7\xd8\xa6\xd9\x8a\xd8\xa9",
 "xn-----zsdnbadaihf1gf8g4frbheafrog5a3f"},
{"\xd8\xb4\xd8\xb1\xd9\x83\xd8\xa9\x2d\xd8\xb9\xd8\xb0\xd9\x8a\xd8\xa8\x2d\xd8\xa8\xd9\x8a\xd8\xb1\xd8\xaf\xd8\xa7\xd9\x86\xd8\xa7\x2d\xd9\x84\xd9\x84\xd9\x85\xd9\x82\xd8\xa7\xd9\x88\xd9\x84\xd8\xa7\xd8\xaa\x2d\xd8\xa7\xd9\x84\xd9\x85\xd8\xad\xd8\xaf\xd9\x88\xd8\xaf\xd8\xa9",
 "xn-------15fababcbill1cxajaerg2d2g1jma2bacewis7ej9bd"},
//-------------------------- END

  /* These comes from http://www.iana.org/domains/root/db see
     gen-idn-tld-tv.pl */
  {"\xe6\xb5\x8b\xe8\xaf\x95", "xn--0zwm56d" },
  
{"\xe0\xa4\xaa\xe0\xa4\xb0\xe0\xa5\x80\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xb7\xe0\xa4\xbe",
 "xn--11b5bs3a9aj6g" },
  {"\xed\x95\x9c\xea\xb5\xad", "xn--3e0b707e" },
  {"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4", "xn--45brj9c" },
  {"\xd0\x98\xd0\xa1\xd0\x9f\xd0\xab\xd0\xa2\xd0\x90\xd0\x9d\xd0\x98\xd0\x95", 
"xn--80akhbyknj4f", IDN2_DISALLOWED }, /* iana bug */
  {"испытание", "xn--80akhbyknj4f" }, /* corrected */
  {"\xd0\xa1\xd0\xa0\xd0\x91", "xn--90a3ac", IDN2_DISALLOWED }, /* iana bug */
  {"срб", "xn--90a3ac" }, /* corrected */
  {"\xed\x85\x8c\xec\x8a\xa4\xed\x8a\xb8", "xn--9t4b11yi5a" },
  
{"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d",
 "xn--clchc0ea0b2g2a9gcd" },
  {"\xd7\x98\xd7\xa2\xd7\xa1\xd7\x98", "xn--deba0ad" },
  {"\xe4\xb8\xad\xe5\x9b\xbd", "xn--fiqs8s" },
  {"\xe4\xb8\xad\xe5\x9c\x8b", "xn--fiqz9s" },
  {"\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d", 
"xn--fpcrj9c3d" },
  {"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f", "xn--fzc2c9e2c" },
  {"\xe6\xb8\xac\xe8\xa9\xa6", "xn--g6w251d" },
  {"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4", "xn--gecrj9c" },
  {"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4", "xn--h2brj9c" },
  {"\xd8\xa2\xd8\xb2\xd9\x85\xd8\xa7\xdb\x8c\xd8\xb4\xdb\x8c", 
"xn--hgbk6aj7f53bba" },
  
{"\xe0\xae\xaa\xe0\xae\xb0\xe0\xae\xbf\xe0\xae\x9f\xe0\xaf\x8d\xe0\xae\x9a\xe0\xaf\x88",
 "xn--hlcj6aya9esc7a" },
  {"\xe9\xa6\x99\xe6\xb8\xaf", "xn--j6w193g" },
  {"\xce\x94\xce\x9f\xce\x9a\xce\x99\xce\x9c\xce\x89", "xn--jxalpdlp", 
IDN2_DISALLOWED }, /* iana bug */
  {"δοκιμή", "xn--jxalpdlp" },
  {"\xd8\xa5\xd8\xae\xd8\xaa\xd8\xa8\xd8\xa7\xd8\xb1", "xn--kgbechtv" },
  {"\xe5\x8f\xb0\xe6\xb9\xbe", "xn--kprw13d" },
  {"\xe5\x8f\xb0\xe7\x81\xa3", "xn--kpry57d" },
  {"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1", 
"xn--lgbbat1ad8j" },
  {"\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86", "xn--mgb9awbf" },
  {"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86", "xn--mgba3a4f16a" },
  {"\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa", "xn--mgbaam7a8h" },
  {"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86", "xn--mgbayh7gpa" },
  {"\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa", "xn--mgbbh1a71e" },
  {"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8", "xn--mgbc0a9azcg" },
  {"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9", 
"xn--mgberp4a5d4ar" },
  {"\xe1\x83\x92\xe1\x83\x94", "xn--node" },
  {"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2", "xn--o3cw4h" },
  {"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9", "xn--ogbpf8fl" },
  {"\xd0\xa0\xd0\xa4", "xn--p1ai", IDN2_DISALLOWED }, /* iana bug */
  {"рф", "xn--p1ai" }, /* corrected */
  {"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3", "xn--pgbs0dh" },
  {"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4", "xn--s9brj9c" },
  {"\xd9\x85\xd8\xb5\xd8\xb1", "xn--wgbh1c" },
  {"\xd9\x82\xd8\xb7\xd8\xb1", "xn--wgbl6a" },
  {"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88", 
"xn--xkc2al3hye2a" },
  
{"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe",
 "xn--xkc2dl3a5ee0h" },
  {"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1", "xn--yfro4i67o" },
  {"\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86", "xn--ygbi2ammx" },
  {"\xe3\x83\x86\xe3\x82\xb9\xe3\x83\x88", "xn--zckzah" },
  /* end of IANA strings */

  /* the following comes from IDNA2003 libidn
     with some new variants inspired by the old test vectors */
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc3\xad\x64\x6e", "example.xn--dn-mja"
   /* 1-1-1 Has an IDN in just the TLD */
  },
  {"\xc3\xab\x78\x2e\xc3\xad\x64\x6e", "xn--x-ega.xn--dn-mja"
   /* 1-1-2 Has an IDN in the TLD and SLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc3\xa5\xc3\xbe\xc3\xa7",
   "example.xn--5cae2e"
   /* 1-2-1 Latin-1 TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc4\x83\x62\xc4\x89",
   "example.xn--b-rhat"
   /* 1-2-2 Latin Extended A TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc8\xa7\xc6\x80\xc6\x88",
   "example.xn--lhaq98b"
   /* 1-2-3 Latin Extended B TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\xb8\x81\xe1\xb8\x83\xe1\xb8\x89",
   "example.xn--2fges"
   /* 1-2-4 Latin Extended Additional TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe4\xb8\xbf\xe4\xba\xba\xe5\xb0\xb8",
   "example.xn--xiqplj17a"
   /* 1-3-1 Han TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe3\x81\x8b\xe3\x81\x8c\xe3\x81\x8d",
   "example.xn--u8jcd"
   /* 1-3-2 Hiragana TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe3\x82\xab\xe3\x82\xac\xe3\x82\xad",
   "example.xn--lckcd"
   /* 1-3-3 Katakana TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x84\x80\xe1\x85\xa1\xe1\x86\xa8",
   "example.xn--p39a",
   IDN2_NOT_NFC
   /* 1-3-4 Hangul Jamo TLD */
   /* Don't resolve as example.xn--ypd8qrh */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xea\xb1\xa9\xeb\x93\x86\xec\x80\xba",
   "example.xn--o69aq2nl0j"
   /* 1-3-5 Hangul TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xea\x80\x8a\xea\x80\xa0\xea\x8a\xb8",
   "example.xn--6l7arby7j"
   /* 1-3-6 Yi TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xce\xb1\xce\xb2\xce\xb3",
   "example.xn--mxacd"
   /* 1-3-7 Greek TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\xbc\x82\xe1\xbc\xa6\xe1\xbd\x95",
   "example.xn--fng7dpg"
   /* 1-3-8 Greek Extended TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd0\xb0\xd0\xb1\xd0\xb2",
   "example.xn--80acd"
   /* 1-3-9 Cyrillic TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd5\xa1\xd5\xa2\xd5\xa3",
   "example.xn--y9acd"
   /* 1-3-10 Armeian TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x83\x90\xe1\x83\x91\xe1\x83\x92",
   "example.xn--lodcd"
   /* 1-3-11 Georgian TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe2\x88\xa1\xe2\x86\xba\xe2\x8a\x82",
   "example.xn--b7gxomk",
   /* 1-4-1 Symbols TLD */
   IDN2_DISALLOWED /* valid IDNA2003 invalid IDNA2008 */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xa4\x95\xe0\xa4\x96\xe0\xa4\x97",
   "example.xn--11bcd"
   /* 1-5-1 Devanagari TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xa6\x95\xe0\xa6\x96\xe0\xa6\x97",
   "example.xn--p5bcd"
   /* 1-5-2 Bengali TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xa8\x95\xe0\xa8\x96\xe0\xa8\x97",
   "example.xn--d9bcd"
   /* 1-5-3 Gurmukhi TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xaa\x95\xe0\xaa\x96\xe0\xaa\x97",
   "example.xn--0dccd"
   /* 1-5-4 Gujarati TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xac\x95\xe0\xac\x96\xe0\xac\x97",
   "example.xn--ohccd"
   /* 1-5-5 Oriya TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xae\x95\xe0\xae\x99\xe0\xae\x9a",
   "example.xn--clcid"
   /* 1-5-6 Tamil TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb0\x95\xe0\xb0\x96\xe0\xb0\x97",
   "example.xn--zoccd"
   /* 1-5-7 Telugu TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb2\x95\xe0\xb2\x96\xe0\xb2\x97",
   "example.xn--nsccd"
   /* 1-5-8 Kannada TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb4\x95\xe0\xb4\x96\xe0\xb4\x97",
   "example.xn--bwccd"
   /* 1-5-9 Malayalam TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb6\x9a\xe0\xb6\x9b\xe0\xb6\x9c",
   "example.xn--3zccd"
   /* 1-5-10 Sinhala TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xb8\x81\xe0\xb8\x82\xe0\xb8\x83",
   "example.xn--12ccd"
   /* 1-5-11 Thai TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xba\x81\xe0\xba\x82\xe0\xba\x84",
   "example.xn--p6ccg"
   /* 1-5-12 Lao TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe0\xbd\x80\xe0\xbd\x81\xe0\xbd\x82",
   "example.xn--5cdcd"
   /* 1-5-13 Tibetan TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x80\x80\xe1\x80\x81\xe1\x80\x82",
   "example.xn--nidcd"
   /* 1-5-14 Myanmar TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\x9e\x80\xe1\x9e\x81\xe1\x9e\x82",
   "example.xn--i2ecd"
   /* 1-5-15 Khmer TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xe1\xa0\xa0\xe1\xa0\xa1\xe1\xa0\xa2",
   "example.xn--26ecd"
   /* 1-5-16 Mongolian TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd8\xa7\xd8\xa8\xd8\xa9",
   "example.xn--mgbcd"
   /* 1-6-1 Arabic TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xd7\x90\xd7\x91\xd7\x92",
   "example.xn--4dbcd"
   /* 1-6-2 Hebrew TLD */
  },
  {"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xdc\x90\xdc\x91\xdc\x92",
   "example.xn--9mbcd"
   /* 1-6-3 Syriac TLD */
  },
  
{"\x65\x78\x61\x6d\x70\x6c\x65\x2e\x61\x62\x63\xe3\x82\xab\xe3\x82\xac\xe3\x82\xad",
   "example.xn--abc-mj4bfg"
   /* 1-7-1 ASCII and non-Latin TLD */
  },
  
{"\x65\x78\x61\x6d\x70\x6c\x65\x2e\xc3\xa5\xc3\xbe\xc3\xa7\xe3\x82\xab\xe3\x82\xac\xe3\x82\xad",
   "example.xn--5cae2e328wfag"
   /* 1-7-2 Latin (non-ASCII) and non-Latin TLD */
  },
  {"\xc3\xad\x21\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_DISALLOWED
   /* 2-3-1-1 Includes ! before Nameprep */
   /* Don't resolve as xn--!dn-qma.example */
  },
  {"\xc3\xad\x24\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_DISALLOWED
   /* 2-3-1-2 Includes $ before Nameprep */
   /* Don't resolve as xn--$dn-qma.example */
  },
  {"\xc3\xad\x2b\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_DISALLOWED
   /* 2-3-1-3 Includes + before Nameprep */
   /* Don't resolve as xn--+dn-qma.example */
  },
  {"\x2d\xc3\xad\x31\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn---1dn-vpa.example"
   /* 2-3-2-1 Leading hyphen before Nameprep */
   /* Don't resolve as xn---1dn-vpa.example */
   /* Valid according to IDNA2008-lookup! */
  },
  {"\xc3\xad\x31\x64\x6e\x2d\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--1dn--upa.example"
   /* 2-3-2-2 Trailing hyphen before Nameprep */
   /* Don't resolve as xn--1dn--upa.example */
   /* Valid according to IDNA2008-lookup! */
  },
  {"\xc3\xad\xef\xbc\x8b\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_DISALLOWED
   /* 2-3-3-1 Gets a + after Nameprep */
   /* Don't resolve as xn--dn-mja0331x.example */
  },
  {"\xc3\xad\xe2\x81\xbc\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_DISALLOWED
   /* 2-3-3-2 Gets a = after Nameprep */
   /* Don't resolve as xn--dn-mja0343a.example */
  },
  {"\xef\xb9\xa3\xc3\xad\x32\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_DISALLOWED
   /* 2-3-4-1 Leading hyphen after Nameprep */
   /* Don't resolve as xn--2dn-qma32863a.example */
   /* Don't resolve as xn---2dn-vpa.example */
  },
  {"\xc3\xad\x32\x64\x6e\xef\xbc\x8d\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_DISALLOWED
   /* 2-3-4-2 Trailing hyphen after Nameprep */
   /* Don't resolve as xn--2dn-qma79363a.example */
   /* Don't resolve as xn--2dn--upa.example */
  },
  {"\xc2\xb9\x31\x2e\x65\x78\x61\x6d\x70\x6c\x65", "11.example",
   IDN2_DISALLOWED
   /* 2-4-1 All-ASCII check, Latin */
  },
  {"\xe2\x85\xa5\x76\x69\x2e\x65\x78\x61\x6d\x70\x6c\x65", "vivi.example",
   IDN2_DISALLOWED
   /* 2-4-2 All-ASCII check, symbol */
  },
  {"\xc3\x9f\x73\x73\x2e\x65\x78\x61\x6d\x70\x6c\x65", "xn--ss-fia.example"
   /* 2-4-3 All-ASCII check, sharp S */
   /* Different output in IDNA2008-lookup compared to IDNA2003! */
  },
  {"\x78\x6e\x2d\x2d\xc3\xaf\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65", "",
   IDN2_2HYPHEN
   /* 2-5-1 ACE prefix before Nameprep, body */
   /* Don't resolve as xn--xn--dn-sja.example */
   /* Don't resolve as xn--dn-sja.example */
  },
  {"\xe2\x85\xb9\x6e\x2d\x2d\xc3\xa4\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_2HYPHEN
   /* 2-5-2 ACE prefix before Nameprep, prefix */
   /* Don't resolve as xn--xn--dn-uia.example */
   /* Don't resolve as xn--dn-uia.example */
  },
  {"", ""
   /* 2-8-1 Zero-length label after Nameprep */
   /* Don't resolve as xn--kba.example */
   /* Don't resolve as xn--.example */
  },
  {"\x33\x30\x30\x32\x2d\x74\x65\x73\x74\xe3\x80\x82\xc3\xad\x64\x6e",
   "3002-test.xn--dn-mja",
   IDN2_DISALLOWED
   /* 2-9-1 U+3002 acts as a label separator */
   /* Don't resolve as xn--3002-testdn-wcb2087m.example */
   /* Not valid in IDNA2008! */
  },
  {"\x66\x66\x30\x65\x2d\x74\x65\x73\x74\xef\xbc\x8e\xc3\xad\x64\x6e",
   "ff0e-test.xn--dn-mja",
   IDN2_DISALLOWED
   /* 2-9-2 U+FF0E acts as a label separator */
   /* Don't resolve as xn--ff0e-testdn-wcb45865f.example */
   /* Not valid in IDNA2008! */
  },
  {"\x66\x66\x36\x31\x2d\x74\x65\x73\x74\xef\xbd\xa1\xc3\xad\x64\x6e",
   "ff61-test.xn--dn-mja",
   IDN2_DISALLOWED
   /* 2-9-3 U+FF61 acts as a label separator */
   /* Don't resolve as xn--ff61-testdn-wcb33975f.example */
   /* Not valid in IDNA2008! */
  },
  
{"\x30\x30\x61\x64\x6f\x75\x74\xc2\xad\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--00adoutdn-m5a.example", IDN2_DISALLOWED
   /* 4-1-1-1 00adout<00AD><00ED>dn.example -> 00adout<00ED>dn.example */
   /* Don't resolve as xn--00adoutdn-cna81e.example */
   /* Not valid in IDNA2008! */
  },
  
{"\x32\x30\x30\x64\x6f\x75\x74\xe2\x80\x8d\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--200doutdn-m5a.example", IDN2_CONTEXTJ
   /* 4-1-1-2 200dout<200D><00ED>dn.example -> 200dout<00ED>dn.example */
   /* Don't resolve as xn--200doutdn-m5a1678f.example */
   /* Not valid in IDNA2008!" */
  },
  /* To find Virama's, use:
     grep -E '^[^;]+;[^;]+;[^;]+;9;' UnicodeData.txt */
  {"\xe0\xa5\x8d\xe2\x80\x8d", "", IDN2_LEADING_COMBINING
   /* U+094D U+200D => U+094D is combining mark */
  },
  {"foo\xe0\xa5\x8d\xe2\x80\x8d", "xn--foo-umh4320a", IDN2_OK
   /* foo U+094D U+200D => OK due to Virama + U+200D. */
  },
  {"foo𐨿\xe2\x80\x8d\x65\x65", "xn--fooee-zt3bn006o", IDN2_OK
   /* foo U+10A3F U+200D ee => OK due to Virama + U+200D. */
  },
  {"foo྄\xe2\x80\x8d\x65\x65", "xn--fooee-c3s855o", IDN2_OK
   /* foo U+0f84 U+200D ee => OK due to Virama + U+200D. */
  },
  {"foo᮪\xe2\x80\x8d\x65\x65", "xn--fooee-hc8as55a", IDN2_OK
   /* foo U+1bAA (Mc) U+200D ee => OK due to Virama + U+200D. */
  },
  
{"\x73\x69\x6d\x70\x6c\x65\x63\x61\x70\x44\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--simplecapddn-1fb.example", IDN2_DISALLOWED
   /* 4-1-2-1 simplecap<0044><00ED>dn.example -> 
simplecap<0064><00ED>dn.example */
   /* Uppercase not valid in IDNA2008! */
  },
  
{"\x6c\x61\x74\x69\x6e\x74\x6f\x67\x72\x65\x65\x6b\xc2\xb5\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--latintogreekdn-cmb716i.example", IDN2_DISALLOWED
   /* 4-1-2-2 latintogreek<00B5><00ED>dn.example -> 
latintogreek<03BC><00ED>dn.example */
   /* Don't resolve as xn--latintogreekdn-cxa01g.example */
   /* B5 not valid in IDNA2008! */
  },
  
{"\x6c\x61\x74\x69\x6e\x65\x78\x74\xc3\x87\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--latinextdn-v6a6e.example", IDN2_DISALLOWED
   /* 4-1-2-3 latinext<00C7><00ED>dn.example -> latinext<00E7><00ED>dn.example 
*/
   /* Don't resolve as xn--latinextdn-twa07b.example */
   /* C7 not valid in IDNA2008! */
  },
  
{"\x73\x68\x61\x72\x70\x73\xc3\x9f\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--sharpsdn-vya4l.example"
   /* 4-1-2-4 sharps<00DF><00ED>dn.example -> sharpsss<00ED>dn.example */
   /* Don't resolve as xn--sharpsdn-vya4l.example */
   /* Changed in IDNA2008! */
  },
  
{"\x74\x75\x72\x6b\x69\x73\x68\x69\xc4\xb0\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--turkishiidn-wcb701e.example", IDN2_DISALLOWED
   /* 4-1-2-5 turkishi<0130><00ED>dn.example -> 
turkishi<0069><0307><00ED>dn.example */
   /* Don't resolve as xn--turkishidn-r8a71f.example */
   /* U+0130 not valid in IDNA2008! */
  },
  
{"\x65\x78\x70\x74\x77\x6f\xc5\x89\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--exptwondn-m5a502c.example", IDN2_DISALLOWED
   /* 4-1-2-6 exptwo<0149><00ED>dn.example -> 
exptwo<02BC><006E><00ED>dn.example */
   /* Don't resolve as xn--exptwodn-h2a33g.example */
   /* U+0149 not valid in IDNA2008 */
  },
  
{"\x61\x64\x64\x66\x6f\x6c\x64\xcf\x92\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--addfolddn-m5a121f.example", IDN2_DISALLOWED
   /* 4-1-2-7 addfold<03D2><00ED>dn.example -> addfold<03C5><00ED>dn.example */
   /* Don't resolve as xn--addfolddn-m5a462f.example */
   /* U+03D2 not valid in IDNA2008 */
  },
  
{"\x65\x78\x70\x74\x68\x72\x65\x65\xe1\xbd\x92\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--expthreedn-r8a5844g.example"
   /* 4-1-2-8 expthree<1F52><00ED>dn.example -> 
expthree<03C5><0313><0300><00ED>dn.example */
  },
  
{"\x6e\x6f\x6e\x62\x6d\x70\xf0\x90\x90\x80\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--nonbmpdn-h2a34747d.example", IDN2_DISALLOWED
   /* 4-1-2-9 nonbmp<10400><00ED>dn.example -> nonbmp<10428><00ED>dn.example */
   /* Don't resolve as xn--nonbmpdn-h2a37046d.example */
   /* U+10400 not valid under IDNA2008 */
  },
  
{"\x6e\x6f\x6e\x62\x6d\x70\x74\x6f\x61\x73\x63\x69\x69\xf0\x9d\x90\x80\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--nonbmptoasciiadn-msb.example", IDN2_DISALLOWED
   /* 4-1-2-10 nonbmptoascii<1D400><00ED>dn.example -> 
nonbmptoasciia<00ED>dn.example */
   /* Don't resolve as xn--nonbmptoasciidn-hpb54112i.example */
   /* U+1d400 not valid IDNA2008 */
  },
  
{"\x72\x65\x67\x63\x6f\x6d\x62\x65\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--regcombdn-h4a8b.example", IDN2_NOT_NFC
   /* 4-2-1-1 regcomb<0065><0301><00ED>dn.example -> 
regcomb<00E9><00ED>dn.example */
   /* Don't resolve as xn--regcombedn-r8a794d.example */
   /* Input not NFC */
  },
  {"regcombéídn.example", "xn--regcombdn-h4a8b.example"
   /* NFKC of previous */
  },
  
{"\x63\x6f\x6d\x62\x61\x6e\x64\x63\x61\x73\x65\x45\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--combandcasedn-lhb4d.example", IDN2_NOT_NFC
   /* 4-2-1-2 combandcase<0045><0301><00ED>dn.example -> 
combandcase<00E9><00ED>dn.example */
   /* Don't resolve as xn--combandcaseedn-cmb526f.example */
  },
  {"combandcaseÉídn.example",
   "xn--combandcasedn-lhb4d.example", IDN2_DISALLOWED
   /* NFKC of previous, uppercase not IDNA2008-valid */
  },
  {"combandcaseéídn.example",
   "xn--combandcasedn-lhb4d.example"
   /* Lower case of previous */
  },
  
{"\x61\x64\x6a\x63\x6f\x6d\x62\xc2\xba\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--adjcombdn-m5a9d.example", IDN2_DISALLOWED
   /* 4-2-1-3 adjcomb<00BA><0301><00ED>dn.example -> 
adjcomb<00F3><00ED>dn.example */
   /* Don't resolve as xn--adjcombdn-1qa57cp3r.example */
   /* U+00BA not IDNA2008-valid */
  },
  
{"\x65\x78\x74\x63\x6f\x6d\x62\x6f\x63\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--extcombodn-r8a52a.example", IDN2_NOT_NFC
   /* 4-2-1-4 extcombo<0063><0301><00ED>dn.example -> 
extcombo<0107><00ED>dn.example */
   /* Don't resolve as xn--extcombocdn-wcb920e.example */
  },
  {"extcomboćídn.example",
   "xn--extcombodn-r8a52a.example"
   /* NFKC of previous */
  },
  
{"\x64\x6f\x75\x62\x6c\x65\x64\x69\x61\x63\x31\x75\xcc\x88\xcc\x81\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--doublediac1dn-6ib836a.example", IDN2_NOT_NFC
   /* 4-2-1-5 doublediac1<0075><0308><0301><00ED>dn.example -> 
doublediac2<01D8><00ED>dn.example */
   /* Don't resolve as xn--doublediac1udn-cmb526fnd.example */
  },
  {"doublediac1ǘídn.example",
   "xn--doublediac1dn-6ib836a.example"
   /* NFKC of previous */
  },
  
{"\x64\x6f\x75\x62\x6c\x65\x64\x69\x61\x63\x32\x75\xcc\x81\xcc\x88\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--doublediac2dn-6ib8qs73a.example", IDN2_NOT_NFC
   /* 4-2-1-6 doublediac2<0075><0301><0308><00ED>dn.example -> 
doublediac2<01D8><00ED>dn.example */
   /* Don't resolve as xn--doublediac2udn-cmb526fod.example */
  },
  {"doublediac2ú̈ídn.example",
   "xn--doublediac2dn-6ib8qs73a.example"
   /* 4-2-1-6 doublediac2<0075><0301><0308><00ED>dn.example -> 
doublediac2<01D8><00ED>dn.example */
   /* Don't resolve as xn--doublediac2udn-cmb526fod.example */
  },
  
{"\x6e\x65\x77\x6e\x6f\x72\x6d\xf0\xaf\xa1\xb4\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--newnormdn-m5a7856x.example", IDN2_DISALLOWED
   /* 4-2-2-1 newnorm<2F874><00ED>dn.example -> newnorm<5F33><00ED>dn.example 
should not become <5F53> */
   /* Don't resolve as xn--newnormdn-m5a9396x.example */
   /* Don't resolve as xn--newnormdn-m5a9968x.example */
   /* U+2f876 not IDNA2008-valid */
  },
  {"\xe2\x80\x80\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_NOT_NFC
   /* 4-3-1 Spacing */
   /* Don't resolve as xn--dn-mja3392a.example */
  },
  {" ídn.example", "", IDN2_DISALLOWED
   /* NFKC of previous.  U+0020 */
  },
  {"\xdb\x9d\xc3\xad\x64\x6e\x2d\x32\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-2 Control */
   /* Don't resolve as xn--dn-2-upa332g.example */
  },
  {"\xee\x80\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-3 Private use */
   /* Don't resolve as xn--dn-mja1659t.example */
  },
  {"\xf3\xb0\x80\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-4 Private use, non-BMP */
   /* Don't resolve as xn--dn-mja7922x.example */
  },
  {"\xef\xb7\x9d\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-5 Non-character */
   /* Don't resolve as xn--dn-mja1210x.example */
  },
  {"\xf0\x9f\xbf\xbe\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-6 Non-character, non-BMP */
   /* Don't resolve as xn--dn-mja7922x.example */
  },
  {"\xef\xbf\xbd\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-7 Surrogate points */
   /* Don't resolve as xn--dn-mja7922x.example */
  },
  {"\xef\xbf\xba\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-8 Inappropriate for plain */
   /* Don't resolve as xn--dn-mja5822x.example */
  },
  {"\xe2\xbf\xb5\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-9 Inappropriate for canonical */
   /* Don't resolve as xn--dn-mja3729b.example */
  },
  {"\xe2\x81\xaa\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-10 Change display simple */
   /* Don't resolve as xn--dn-mja7533a.example */
  },
  {"\xe2\x80\x8f\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-11 Change display RTL */
   /* Don't resolve as xn--dn-mja3992a.example */
  },
  
{"\xf3\xa0\x80\x81\xf3\xa0\x81\x85\xf3\xa0\x81\x8e\x68\x69\x69\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_DISALLOWED
   /* 4-3-12 Language tags */
   /* Don't resolve as xn--hiidn-km43aaa.example */
  },
  {"\xd8\xa8\x6f\xd8\xb8\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_BIDI
   /* 4-4-1 Arabic RandALCat-LCat-RandALCat */
   /* Don't resolve as xn--o-0mc3c.example */
  },
  {"\xd8\xa8\xd8\xb8\x6f\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_BIDI
   /* 4-4-2 Arabic RandALCat-RandALCat-other */
   /* Don't resolve as xn--o-0mc2c.example */
  },
  {"\x6f\xd8\xa8\xd8\xb8\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_BIDI
   /* 4-4-3 Arabic other-RandALCat-RandALCat */
   /* Don't resolve as xn--o-1mc2c.example */
  },
  {"\xd7\x91\x6f\xd7\xa1\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_BIDI
   /* 4-4-4 Hebrew RandALCat-LCat-RandALCat */
   /* Don't resolve as xn--o-1hc3c.example */
  },
  {"\xd7\x91\xd7\xa1\x6f\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_BIDI
   /* 4-4-5 Hebrew RandALCat-RandALCat-other */
   /* Don't resolve as xn--o-1hc2c.example */
  },
  {"\x6f\xd7\x91\xd7\xa1\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "", IDN2_BIDI
   /* 4-4-6 Hebrew other-RandALCat-RandALCat */
   /* Don't resolve as xn--o-2hc2c.example */
  },
  {"\xc8\xb7\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--dn-mja33k.example"
   /* 5-1-1 Unassigned in BMP; zone editors should reject */
  },
  {"\xf0\x90\x88\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--dn-mja7734x.example", IDN2_UNASSIGNED
   /* 5-1-2 Unassinged outside BMP; zone editors should reject */
   /* Don't resolve as xn--dn-mja7922x.example */
  },
  {"\xc8\xb4\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--dn-mja12k.example"
   /* 5-2-1 Newly assigned in BMP; zone editors should reject */
  },
  {"\xf0\x90\x80\x85\xc3\xad\x64\x6e\x2e\x65\x78\x61\x6d\x70\x6c\x65",
   "xn--dn-mja9232x.example"
   /* 5-2-2 Newly assigned outside of BMP; zone editors should reject */
   /* Don't resolve as xn--dn-mja7922x.example */
  },

  /* Created while writing Libidn2 to trigger certain code paths. */

  {
    "\xe2\x80\x8c", "", IDN2_CONTEXTJ
    /* Standalone contextj U+200C. */
  },
  {
    "foo\xe2\x80\x8c\x65\x65", "", IDN2_CONTEXTJ
    /* Contextj U+200C with surrounding joining characters. */
  },
  {
    "\xdd\x90\xe2\x80\x8c\x65", "", IDN2_CONTEXTJ
    /* Contextj: U+0750 (0xD9 0x84) U+200C e.  U+0750 is D. */
  },
  {
    "\xdd\x90\xe2\x80\x8c\xdd\x90", "xn--3oba901q", IDN2_OK
    /* Contextj: U+0750 (0xDD 0x90) U+200C U+0750.  U+0750 is D. */
  },
  {
    "\xdd\x90\xcc\x80\xe2\x80\x8c\xcc\x80\xcc\x80\xcc\x80\xdd\x90",
    "xn--ksaaaa036cea4345b", IDN2_OK
    /* Contextj: U+750 U+0300 U+200C U+0300 U+0300 U+0300 U+0750.
       U+0300 is T, U+0750 is D. */
  },
  {
    "\xc2\xb7", "xn--uba", IDN2_OK
    /* Contexto: Lookup of U+00B7 should succeed. */
  },
  {
    "\xd0\x94\xd0\xb0\xc1\x80", "", IDN2_ENCODING_ERROR
  },
  {
    "\xe2\x84\xa6", "", IDN2_NOT_NFC
  },
#if 0 /* reject or not? */
  {
    "ab--", "", IDN2_2HYPHEN
  },
#endif
  {
    "--", "--", IDN2_OK
  },
  {
    "\xcd\x8f", "", IDN2_LEADING_COMBINING
    /* CCC=0 GC=M */
  },
  {
    "\xd2\x88", "", IDN2_LEADING_COMBINING
    /* CCC=0 GC=M */
  },
  {
    "\xcc\x80", "", IDN2_LEADING_COMBINING
    /* CCC!=0 GC=Mn */
  },
  {
    "\xe1\xad\x84", "", IDN2_LEADING_COMBINING
    /* CCC!=0 GC=Mc */
  },
  {
    "", "", IDN2_OK
  },
  {
    "\xc2\xb8", "", IDN2_DISALLOWED
  },
  {
    "\xf4\x8f\xbf\xbf", "", IDN2_DISALLOWED
  },
  {
    "\xe2\x80\x8d", "", IDN2_CONTEXTJ
  },
  {
    "\xcd\xb8", "", IDN2_UNASSIGNED
  },
  {
    "\xcd\xb9", "", IDN2_UNASSIGNED
  },
  {
    "\x72\xc3\xa4\x6b\x73\x6d\xc3\xb6\x72\x67\xc3\xa5\x73",
    "xn--rksmrgs-5wao1o", IDN2_OK
  },
  {
    "1\xde\x86", "", IDN2_BIDI
    /* Check that bidi rejects leading non-L/R/AL characters in bidi strings */
  },
  {
    "f\xd7\x99", "", IDN2_BIDI
    /* check that ltr string cannot contain R character */
  },
  {
    "-", "-", IDN2_OK
  },
  {
    "-a", "-a", IDN2_OK
  },
  {
    "a-", "a-", IDN2_OK
  },
  {
    "-a", "-a", IDN2_OK
  },
  {
    "-a-", "-a-", IDN2_OK
  },
  {
    "foo", "foo", IDN2_OK
  },
  {"\xe2\x84\xab", "", IDN2_NOT_NFC},
  {"\xe2\x84\xa6", "", IDN2_NOT_NFC},
};

int debug = 1;
int error_count = 0;
int break_on_error = 1;

void
fail (const char *format, ...)
{
  va_list arg_ptr;

  va_start (arg_ptr, format);
  vfprintf (stderr, format, arg_ptr);
  va_end (arg_ptr);
  error_count++;
  if (break_on_error)
    exit (EXIT_FAILURE);
}

void
hexprint (const char *str, size_t len)
{
  size_t i;

  printf ("\t;; ");
  if (str && len)
    for (i = 0; i < len; i++)
      {
        printf ("%02x ", (str[i] & 0xFF));
        if ((i + 1) % 8 == 0)
          printf (" ");
        if ((i + 1) % 16 == 0 && i + 1 < len)
          printf ("\n\t;; ");
      }
  printf ("\n");
}

int
main (void)
{
  uint8_t *out;
  size_t i;
  int rc;

  puts ("-----------------------------------------------------------"
        "-------------------------------------");
  puts ("                                          IDNA2008 Lookup\n");
  puts ("  #  Result                    ACE output                  "
        "             Unicode input");
  puts ("-----------------------------------------------------------"
        "-------------------------------------");
  for (i = 0; i < sizeof (idna) / sizeof (idna[0]); i++)
    {
      rc = idn2_lookup_u8 (idna[i].in, &out, idna[i].flags);
      printf ("%3d  %-25s %-40s %s\n", i, idn2_strerror_name (rc),
              rc == IDN2_OK ? idna[i].out : "", idna[i].in);
      if (rc != idna[i].rc && rc == IDN2_ENCODING_ERROR)
        printf ("utc bug %d\n", i);
      else if (rc != idna[i].rc && idna[i].rc != -1)
        fail ("expected rc %d got rc %d\n", idna[i].rc, rc);
      else if (rc == IDN2_OK && strcmp (out, idna[i].out) != 0)
        fail ("expected: %s\ngot: %s\n", idna[i].out, out);
      if (rc == IDN2_OK)
        free (out);
    }

  puts ("-----------------------------------------------------------"
        "-------------------------------------");

  return error_count;
}
_______________________________________________
Help-libidn mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-libidn

Reply via email to