authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-01-22 03:09:14 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-01-22 03:09:14 -08:00
log96facb375b873ab50b97dc82176df879bdb97cb0
tree9c6677c879f08757e2c6630c886aea3703ae40f8
parent683fd20f3f01b096e6964e50e2888aaa76efa979

└─ run test 3213 passed


3 files changed, 812 insertions(+), 19 deletions(-)

generate.ts+8-9
...@@ -37,8 +37,8 @@ w.write(`...@@ -37,8 +37,8 @@ w.write(`
37pub fn parseFail(input: []const u8, base: ?[]const u8) !void {37pub fn parseFail(input: []const u8, base: ?[]const u8) !void {
38 const allocator = std.testing.allocator;38 const allocator = std.testing.allocator;
39 _ = url.URL.parse(allocator, input, base) catch |err| switch (err) {39 _ = url.URL.parse(allocator, input, base) catch |err| switch (err) {
40 error.SkipZigTest => |e| return e,40 error.InvalidURL => return,
41 else => return,41 error.OutOfMemory => return error.OutOfMemory,
42 };42 };
43 return error.FailZigTest;43 return error.FailZigTest;
44}44}
...@@ -63,21 +63,22 @@ pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin:...@@ -63,21 +63,22 @@ pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin:
63pub fn parseIDNAFail(comptime input: []const u8) !void {63pub fn parseIDNAFail(comptime input: []const u8) !void {
64 const allocator = std.testing.allocator;64 const allocator = std.testing.allocator;
65 _ = url.URL.parse(allocator, "https://" ++ input ++ "/x", null) catch |err| switch (err) {65 _ = url.URL.parse(allocator, "https://" ++ input ++ "/x", null) catch |err| switch (err) {
66 error.SkipZigTest => |e| return e,66 error.InvalidURL => return,
67 else => return,67 error.OutOfMemory => return error.OutOfMemory,
68 };68 };
69 return error.FailZigTest;69 return error.FailZigTest;
70}70}
7171
72pub fn parseIDNAPass(input: []const u8, output: []const u8) !void {72pub fn parseIDNAPass(comptime input: []const u8, comptime output: []const u8) !void {
73 _ = input;
74 _ = output;73 _ = output;
75 // new URL('https://{idnaTest.input}/x');74 // new URL('https://{idnaTest.input}/x');
75 const allocator = std.testing.allocator;
76 const u = try url.URL.parse(allocator, "https://" ++ input ++ "/x", null);
77 defer allocator.free(u.href);
76 // assert_equals(url.host, idnaTest.output);78 // assert_equals(url.host, idnaTest.output);
77 // assert_equals(url.hostname, idnaTest.output);79 // assert_equals(url.hostname, idnaTest.output);
78 // assert_equals(url.pathname, "/x");80 // assert_equals(url.pathname, "/x");
79 // assert_equals(url.href, 'https://{idnaTest.output}/x');81 // assert_equals(url.href, 'https://{idnaTest.output}/x');
80 return error.SkipZigTest;
81}82}
82`);83`);
8384
...@@ -111,8 +112,6 @@ for (const c of casesidna.filter((v) => typeof v !== "string").filter((v) => v.o...@@ -111,8 +112,6 @@ for (const c of casesidna.filter((v) => typeof v !== "string").filter((v) => v.o
111}112}
112113
113w.write(`\n`);114w.write(`\n`);
114// prettier-ignore
115if (false)
116for (const c of casesidna.filter((v) => typeof v !== "string").filter((v) => v.output !== null)) {115for (const c of casesidna.filter((v) => typeof v !== "string").filter((v) => v.output !== null)) {
117 w.write(`test { try parseIDNAPass("${stringEscape(c.input)}", "${stringEscape(c.output!)}"); }\n`);116 w.write(`test { try parseIDNAPass("${stringEscape(c.input)}", "${stringEscape(c.output!)}"); }\n`);
118}117}
url.zig+3-3
...@@ -27,9 +27,9 @@ pub const URL = struct {...@@ -27,9 +27,9 @@ pub const URL = struct {
27 }27 }
2828
29 /// https://url.spec.whatwg.org/#concept-basic-url-parser29 /// https://url.spec.whatwg.org/#concept-basic-url-parser
30 fn parseBasic(alloc: std.mem.Allocator, input: []const u8, base: ?URL, state_override: ?BasicParserState) error{ SkipZigTest, InvalidURL, OutOfMemory }!URL {30 fn parseBasic(alloc: std.mem.Allocator, input: []const u8, base: ?URL, state_override: ?BasicParserState) error{ InvalidURL, OutOfMemory }!URL {
31 // input is a scalar value string31 // input is a scalar value string
32 if (!std.unicode.utf8ValidateSlice(input)) return error.SkipZigTest;32 if (!std.unicode.utf8ValidateSlice(input)) return error.InvalidURL;
3333
34 var inputl = std.ArrayList(u8).init(alloc);34 var inputl = std.ArrayList(u8).init(alloc);
35 defer inputl.deinit();35 defer inputl.deinit();
...@@ -190,7 +190,7 @@ pub const URL = struct {...@@ -190,7 +190,7 @@ pub const URL = struct {
190 // 2. Otherwise, if base has an opaque path and c is U+0023 (#), set url’s scheme to base’s scheme, url’s path to base’s path, url’s query to base’s query, url’s fragment to the empty string, and set state to fragment state.190 // 2. Otherwise, if base has an opaque path and c is U+0023 (#), set url’s scheme to base’s scheme, url’s path to base’s path, url’s query to base’s query, url’s fragment to the empty string, and set state to fragment state.
191 // 3. Otherwise, if base’s scheme is not "file", set state to relative state and decrease pointer by 1.191 // 3. Otherwise, if base’s scheme is not "file", set state to relative state and decrease pointer by 1.
192 // 4. Otherwise, set state to file state and decrease pointer by 1.192 // 4. Otherwise, set state to file state and decrease pointer by 1.
193 return error.SkipZigTest;193 return error.InvalidURL;
194 },194 },
195 .special_relative_or_authority => {195 .special_relative_or_authority => {
196 // 1. If c is U+002F (/) and remaining starts with U+002F (/), then set state to special authority ignore slashes state and increase pointer by 1.196 // 1. If c is U+002F (/) and remaining starts with U+002F (/), then set state to special authority ignore slashes state and increase pointer by 1.
zig-out/test.zig+801-7
...@@ -7,8 +7,8 @@ const expect = @import("expect").expect;...@@ -7,8 +7,8 @@ const expect = @import("expect").expect;
7pub fn parseFail(input: []const u8, base: ?[]const u8) !void {7pub fn parseFail(input: []const u8, base: ?[]const u8) !void {
8 const allocator = std.testing.allocator;8 const allocator = std.testing.allocator;
9 _ = url.URL.parse(allocator, input, base) catch |err| switch (err) {9 _ = url.URL.parse(allocator, input, base) catch |err| switch (err) {
10 error.SkipZigTest => |e| return e,10 error.InvalidURL => return,
11 else => return,11 error.OutOfMemory => return error.OutOfMemory,
12 };12 };
13 return error.FailZigTest;13 return error.FailZigTest;
14}14}
...@@ -33,21 +33,22 @@ pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin:...@@ -33,21 +33,22 @@ pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin:
33pub fn parseIDNAFail(comptime input: []const u8) !void {33pub fn parseIDNAFail(comptime input: []const u8) !void {
34 const allocator = std.testing.allocator;34 const allocator = std.testing.allocator;
35 _ = url.URL.parse(allocator, "https://" ++ input ++ "/x", null) catch |err| switch (err) {35 _ = url.URL.parse(allocator, "https://" ++ input ++ "/x", null) catch |err| switch (err) {
36 error.SkipZigTest => |e| return e,36 error.InvalidURL => return,
37 else => return,37 error.OutOfMemory => return error.OutOfMemory,
38 };38 };
39 return error.FailZigTest;39 return error.FailZigTest;
40}40}
4141
42pub fn parseIDNAPass(input: []const u8, output: []const u8) !void {42pub fn parseIDNAPass(comptime input: []const u8, comptime output: []const u8) !void {
43 _ = input;
44 _ = output;43 _ = output;
45 // new URL('https://{idnaTest.input}/x');44 // new URL('https://{idnaTest.input}/x');
45 const allocator = std.testing.allocator;
46 const u = try url.URL.parse(allocator, "https://" ++ input ++ "/x", null);
47 defer allocator.free(u.href);
46 // assert_equals(url.host, idnaTest.output);48 // assert_equals(url.host, idnaTest.output);
47 // assert_equals(url.hostname, idnaTest.output);49 // assert_equals(url.hostname, idnaTest.output);
48 // assert_equals(url.pathname, "/x");50 // assert_equals(url.pathname, "/x");
49 // assert_equals(url.href, 'https://{idnaTest.output}/x');51 // assert_equals(url.href, 'https://{idnaTest.output}/x');
50 return error.SkipZigTest;
51}52}
5253
53test { try parseFail("file://example:1/", null); }54test { try parseFail("file://example:1/", null); }
...@@ -2474,3 +2475,796 @@ test { try parseIDNAFail("\xf0\x91\x86\x80\xe4\x81\xb4\xf1\xa4\xa7\xa3\xef\xbc\x...@@ -2474,3 +2475,796 @@ test { try parseIDNAFail("\xf0\x91\x86\x80\xe4\x81\xb4\xf1\xa4\xa7\xa3\xef\xbc\x
2474test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb324h"); }2475test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb324h"); }
2475test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb324h32o"); }2476test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb324h32o"); }
24762477
2478test { try parseIDNAPass("fass.de", "fass.de"); }
2479test { try parseIDNAPass("fa\xc3\x9f.de", "xn--fa-hia.de"); }
2480test { try parseIDNAPass("Fa\xc3\x9f.de", "xn--fa-hia.de"); }
2481test { try parseIDNAPass("xn--fa-hia.de", "xn--fa-hia.de"); }
2482test { try parseIDNAPass("\xc3\xa0.\xd7\x90\xcc\x88", "xn--0ca.xn--ssa73l"); }
2483test { try parseIDNAPass("a\xcc\x80.\xd7\x90\xcc\x88", "xn--0ca.xn--ssa73l"); }
2484test { try parseIDNAPass("A\xcc\x80.\xd7\x90\xcc\x88", "xn--0ca.xn--ssa73l"); }
2485test { try parseIDNAPass("\xc3\x80.\xd7\x90\xcc\x88", "xn--0ca.xn--ssa73l"); }
2486test { try parseIDNAPass("xn--0ca.xn--ssa73l", "xn--0ca.xn--ssa73l"); }
2487test { try parseIDNAPass("\xc3\xa0\xcc\x88.\xd7\x90", "xn--0ca81i.xn--4db"); }
2488test { try parseIDNAPass("a\xcc\x80\xcc\x88.\xd7\x90", "xn--0ca81i.xn--4db"); }
2489test { try parseIDNAPass("A\xcc\x80\xcc\x88.\xd7\x90", "xn--0ca81i.xn--4db"); }
2490test { try parseIDNAPass("\xc3\x80\xcc\x88.\xd7\x90", "xn--0ca81i.xn--4db"); }
2491test { try parseIDNAPass("xn--0ca81i.xn--4db", "xn--0ca81i.xn--4db"); }
2492test { try parseIDNAPass("ab", "ab"); }
2493test { try parseIDNAPass("a\xe0\xa5\x8d\xe2\x80\x8cb", "xn--ab-fsf604u"); }
2494test { try parseIDNAPass("A\xe0\xa5\x8d\xe2\x80\x8cB", "xn--ab-fsf604u"); }
2495test { try parseIDNAPass("A\xe0\xa5\x8d\xe2\x80\x8cb", "xn--ab-fsf604u"); }
2496test { try parseIDNAPass("xn--ab-fsf", "xn--ab-fsf"); }
2497test { try parseIDNAPass("a\xe0\xa5\x8db", "xn--ab-fsf"); }
2498test { try parseIDNAPass("A\xe0\xa5\x8dB", "xn--ab-fsf"); }
2499test { try parseIDNAPass("A\xe0\xa5\x8db", "xn--ab-fsf"); }
2500test { try parseIDNAPass("xn--ab-fsf604u", "xn--ab-fsf604u"); }
2501test { try parseIDNAPass("a\xe0\xa5\x8d\xe2\x80\x8db", "xn--ab-fsf014u"); }
2502test { try parseIDNAPass("A\xe0\xa5\x8d\xe2\x80\x8dB", "xn--ab-fsf014u"); }
2503test { try parseIDNAPass("A\xe0\xa5\x8d\xe2\x80\x8db", "xn--ab-fsf014u"); }
2504test { try parseIDNAPass("xn--ab-fsf014u", "xn--ab-fsf014u"); }
2505test { try parseIDNAPass("\xc2\xa1", "xn--7a"); }
2506test { try parseIDNAPass("xn--7a", "xn--7a"); }
2507test { try parseIDNAPass("\xe1\xa7\x9a", "xn--pkf"); }
2508test { try parseIDNAPass("xn--pkf", "xn--pkf"); }
2509test { try parseIDNAPass("", ""); }
2510test { try parseIDNAPass("\xe3\x80\x82", "."); }
2511test { try parseIDNAPass(".", "."); }
2512test { try parseIDNAPass("\xea\xad\xa0", "xn--3y9a"); }
2513test { try parseIDNAPass("xn--3y9a", "xn--3y9a"); }
2514test { try parseIDNAPass("1234567890\xc3\xa41234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); }
2515test { try parseIDNAPass("1234567890a\xcc\x881234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); }
2516test { try parseIDNAPass("1234567890A\xcc\x881234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); }
2517test { try parseIDNAPass("1234567890\xc3\x841234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); }
2518test { try parseIDNAPass("xn--12345678901234567890123456789012345678901234567890123456-fxe", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); }
2519test { try parseIDNAPass("www.eXample.cOm", "www.example.com"); }
2520test { try parseIDNAPass("B\xc3\xbccher.de", "xn--bcher-kva.de"); }
2521test { try parseIDNAPass("Bu\xcc\x88cher.de", "xn--bcher-kva.de"); }
2522test { try parseIDNAPass("bu\xcc\x88cher.de", "xn--bcher-kva.de"); }
2523test { try parseIDNAPass("b\xc3\xbccher.de", "xn--bcher-kva.de"); }
2524test { try parseIDNAPass("B\xc3\x9cCHER.DE", "xn--bcher-kva.de"); }
2525test { try parseIDNAPass("BU\xcc\x88CHER.DE", "xn--bcher-kva.de"); }
2526test { try parseIDNAPass("xn--bcher-kva.de", "xn--bcher-kva.de"); }
2527test { try parseIDNAPass("\xc3\x96BB", "xn--bb-eka"); }
2528test { try parseIDNAPass("O\xcc\x88BB", "xn--bb-eka"); }
2529test { try parseIDNAPass("o\xcc\x88bb", "xn--bb-eka"); }
2530test { try parseIDNAPass("\xc3\xb6bb", "xn--bb-eka"); }
2531test { try parseIDNAPass("\xc3\x96bb", "xn--bb-eka"); }
2532test { try parseIDNAPass("O\xcc\x88bb", "xn--bb-eka"); }
2533test { try parseIDNAPass("xn--bb-eka", "xn--bb-eka"); }
2534test { try parseIDNAPass("FA\xe1\xba\x9e.de", "xn--fa-hia.de"); }
2535test { try parseIDNAPass("FA\xe1\xba\x9e.DE", "xn--fa-hia.de"); }
2536test { try parseIDNAPass("\xce\xb2\xcf\x8c\xce\xbb\xce\xbf\xcf\x82.com", "xn--nxasmm1c.com"); }
2537test { try parseIDNAPass("\xce\xb2\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x82.com", "xn--nxasmm1c.com"); }
2538test { try parseIDNAPass("\xce\x92\xce\x9f\xcc\x81\xce\x9b\xce\x9f\xce\xa3.COM", "xn--nxasmq6b.com"); }
2539test { try parseIDNAPass("\xce\x92\xce\x8c\xce\x9b\xce\x9f\xce\xa3.COM", "xn--nxasmq6b.com"); }
2540test { try parseIDNAPass("\xce\xb2\xcf\x8c\xce\xbb\xce\xbf\xcf\x83.com", "xn--nxasmq6b.com"); }
2541test { try parseIDNAPass("\xce\xb2\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x83.com", "xn--nxasmq6b.com"); }
2542test { try parseIDNAPass("\xce\x92\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x83.com", "xn--nxasmq6b.com"); }
2543test { try parseIDNAPass("\xce\x92\xcf\x8c\xce\xbb\xce\xbf\xcf\x83.com", "xn--nxasmq6b.com"); }
2544test { try parseIDNAPass("xn--nxasmq6b.com", "xn--nxasmq6b.com"); }
2545test { try parseIDNAPass("\xce\x92\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x82.com", "xn--nxasmm1c.com"); }
2546test { try parseIDNAPass("\xce\x92\xcf\x8c\xce\xbb\xce\xbf\xcf\x82.com", "xn--nxasmm1c.com"); }
2547test { try parseIDNAPass("xn--nxasmm1c.com", "xn--nxasmm1c.com"); }
2548test { try parseIDNAPass("xn--nxasmm1c", "xn--nxasmm1c"); }
2549test { try parseIDNAPass("\xce\xb2\xcf\x8c\xce\xbb\xce\xbf\xcf\x82", "xn--nxasmm1c"); }
2550test { try parseIDNAPass("\xce\xb2\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x82", "xn--nxasmm1c"); }
2551test { try parseIDNAPass("\xce\x92\xce\x9f\xcc\x81\xce\x9b\xce\x9f\xce\xa3", "xn--nxasmq6b"); }
2552test { try parseIDNAPass("\xce\x92\xce\x8c\xce\x9b\xce\x9f\xce\xa3", "xn--nxasmq6b"); }
2553test { try parseIDNAPass("\xce\xb2\xcf\x8c\xce\xbb\xce\xbf\xcf\x83", "xn--nxasmq6b"); }
2554test { try parseIDNAPass("\xce\xb2\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x83", "xn--nxasmq6b"); }
2555test { try parseIDNAPass("\xce\x92\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x83", "xn--nxasmq6b"); }
2556test { try parseIDNAPass("\xce\x92\xcf\x8c\xce\xbb\xce\xbf\xcf\x83", "xn--nxasmq6b"); }
2557test { try parseIDNAPass("xn--nxasmq6b", "xn--nxasmq6b"); }
2558test { try parseIDNAPass("\xce\x92\xcf\x8c\xce\xbb\xce\xbf\xcf\x82", "xn--nxasmm1c"); }
2559test { try parseIDNAPass("\xce\x92\xce\xbf\xcc\x81\xce\xbb\xce\xbf\xcf\x82", "xn--nxasmm1c"); }
2560test { try parseIDNAPass("www.\xe0\xb7\x81\xe0\xb7\x8a\xe2\x80\x8d\xe0\xb6\xbb\xe0\xb7\x93.com", "www.xn--10cl1a0b660p.com"); }
2561test { try parseIDNAPass("WWW.\xe0\xb7\x81\xe0\xb7\x8a\xe2\x80\x8d\xe0\xb6\xbb\xe0\xb7\x93.COM", "www.xn--10cl1a0b660p.com"); }
2562test { try parseIDNAPass("Www.\xe0\xb7\x81\xe0\xb7\x8a\xe2\x80\x8d\xe0\xb6\xbb\xe0\xb7\x93.com", "www.xn--10cl1a0b660p.com"); }
2563test { try parseIDNAPass("www.xn--10cl1a0b.com", "www.xn--10cl1a0b.com"); }
2564test { try parseIDNAPass("www.\xe0\xb7\x81\xe0\xb7\x8a\xe0\xb6\xbb\xe0\xb7\x93.com", "www.xn--10cl1a0b.com"); }
2565test { try parseIDNAPass("WWW.\xe0\xb7\x81\xe0\xb7\x8a\xe0\xb6\xbb\xe0\xb7\x93.COM", "www.xn--10cl1a0b.com"); }
2566test { try parseIDNAPass("Www.\xe0\xb7\x81\xe0\xb7\x8a\xe0\xb6\xbb\xe0\xb7\x93.com", "www.xn--10cl1a0b.com"); }
2567test { try parseIDNAPass("www.xn--10cl1a0b660p.com", "www.xn--10cl1a0b660p.com"); }
2568test { try parseIDNAPass("\xd9\x86\xd8\xa7\xd9\x85\xd9\x87\xe2\x80\x8c\xd8\xa7\xdb\x8c", "xn--mgba3gch31f060k"); }
2569test { try parseIDNAPass("xn--mgba3gch31f", "xn--mgba3gch31f"); }
2570test { try parseIDNAPass("\xd9\x86\xd8\xa7\xd9\x85\xd9\x87\xd8\xa7\xdb\x8c", "xn--mgba3gch31f"); }
2571test { try parseIDNAPass("xn--mgba3gch31f060k", "xn--mgba3gch31f060k"); }
2572test { try parseIDNAPass("xn--mgba3gch31f060k.com", "xn--mgba3gch31f060k.com"); }
2573test { try parseIDNAPass("\xd9\x86\xd8\xa7\xd9\x85\xd9\x87\xe2\x80\x8c\xd8\xa7\xdb\x8c.com", "xn--mgba3gch31f060k.com"); }
2574test { try parseIDNAPass("\xd9\x86\xd8\xa7\xd9\x85\xd9\x87\xe2\x80\x8c\xd8\xa7\xdb\x8c.COM", "xn--mgba3gch31f060k.com"); }
2575test { try parseIDNAPass("xn--mgba3gch31f.com", "xn--mgba3gch31f.com"); }
2576test { try parseIDNAPass("\xd9\x86\xd8\xa7\xd9\x85\xd9\x87\xd8\xa7\xdb\x8c.com", "xn--mgba3gch31f.com"); }
2577test { try parseIDNAPass("\xd9\x86\xd8\xa7\xd9\x85\xd9\x87\xd8\xa7\xdb\x8c.COM", "xn--mgba3gch31f.com"); }
2578test { try parseIDNAPass("a.b\xef\xbc\x8ec\xe3\x80\x82d\xef\xbd\xa1", "a.b.c.d."); }
2579test { try parseIDNAPass("a.b.c\xe3\x80\x82d\xe3\x80\x82", "a.b.c.d."); }
2580test { try parseIDNAPass("A.B.C\xe3\x80\x82D\xe3\x80\x82", "a.b.c.d."); }
2581test { try parseIDNAPass("A.b.c\xe3\x80\x82D\xe3\x80\x82", "a.b.c.d."); }
2582test { try parseIDNAPass("a.b.c.d.", "a.b.c.d."); }
2583test { try parseIDNAPass("A.B\xef\xbc\x8eC\xe3\x80\x82D\xef\xbd\xa1", "a.b.c.d."); }
2584test { try parseIDNAPass("A.b\xef\xbc\x8ec\xe3\x80\x82D\xef\xbd\xa1", "a.b.c.d."); }
2585test { try parseIDNAPass("U\xcc\x88.xn--tda", "xn--tda.xn--tda"); }
2586test { try parseIDNAPass("\xc3\x9c.xn--tda", "xn--tda.xn--tda"); }
2587test { try parseIDNAPass("\xc3\xbc.xn--tda", "xn--tda.xn--tda"); }
2588test { try parseIDNAPass("u\xcc\x88.xn--tda", "xn--tda.xn--tda"); }
2589test { try parseIDNAPass("U\xcc\x88.XN--TDA", "xn--tda.xn--tda"); }
2590test { try parseIDNAPass("\xc3\x9c.XN--TDA", "xn--tda.xn--tda"); }
2591test { try parseIDNAPass("\xc3\x9c.xn--Tda", "xn--tda.xn--tda"); }
2592test { try parseIDNAPass("U\xcc\x88.xn--Tda", "xn--tda.xn--tda"); }
2593test { try parseIDNAPass("xn--tda.xn--tda", "xn--tda.xn--tda"); }
2594test { try parseIDNAPass("\xc3\xbc.\xc3\xbc", "xn--tda.xn--tda"); }
2595test { try parseIDNAPass("u\xcc\x88.u\xcc\x88", "xn--tda.xn--tda"); }
2596test { try parseIDNAPass("U\xcc\x88.U\xcc\x88", "xn--tda.xn--tda"); }
2597test { try parseIDNAPass("\xc3\x9c.\xc3\x9c", "xn--tda.xn--tda"); }
2598test { try parseIDNAPass("\xc3\x9c.\xc3\xbc", "xn--tda.xn--tda"); }
2599test { try parseIDNAPass("U\xcc\x88.u\xcc\x88", "xn--tda.xn--tda"); }
2600test { try parseIDNAPass("a1.com", "a1.com"); }
2601test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\xe3\x80\x82\xef\xbc\xaa\xef\xbc\xb0", "xn--wgv71a119e.jp"); }
2602test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\xe3\x80\x82JP", "xn--wgv71a119e.jp"); }
2603test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\xe3\x80\x82jp", "xn--wgv71a119e.jp"); }
2604test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\xe3\x80\x82Jp", "xn--wgv71a119e.jp"); }
2605test { try parseIDNAPass("xn--wgv71a119e.jp", "xn--wgv71a119e.jp"); }
2606test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e.jp", "xn--wgv71a119e.jp"); }
2607test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e.JP", "xn--wgv71a119e.jp"); }
2608test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e.Jp", "xn--wgv71a119e.jp"); }
2609test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\xe3\x80\x82\xef\xbd\x8a\xef\xbd\x90", "xn--wgv71a119e.jp"); }
2610test { try parseIDNAPass("\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\xe3\x80\x82\xef\xbc\xaa\xef\xbd\x90", "xn--wgv71a119e.jp"); }
2611test { try parseIDNAPass("\xe2\x98\x95", "xn--53h"); }
2612test { try parseIDNAPass("xn--53h", "xn--53h"); }
2613test { try parseIDNAPass("1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); }
2614test { try parseIDNAPass("1.assbcssssssssd\xcf\x83\xcf\x83ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\xc5\x9dssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); }
2615test { try parseIDNAPass("1.assbcssssssssd\xcf\x83\xcf\x83ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\xcc\x82ssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); }
2616test { try parseIDNAPass("1.ASSBCSSSSSSSSD\xce\xa3\xce\xa3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\xcc\x82SSZ", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); }
2617test { try parseIDNAPass("1.ASSBCSSSSSSSSD\xce\xa3\xce\xa3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSS\xc5\x9cSSZ", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); }
2618test { try parseIDNAPass("1.Assbcssssssssd\xcf\x83\xcf\x83ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\xc5\x9dssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); }
2619test { try parseIDNAPass("1.Assbcssssssssd\xcf\x83\xcf\x83ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\xcc\x82ssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); }
2620test { try parseIDNAPass("xn--bss", "xn--bss"); }
2621test { try parseIDNAPass("\xe5\xa4\x99", "xn--bss"); }
2622test { try parseIDNAPass("\xcb\xa3\xcd\x8f\xe2\x84\x95\xe2\x80\x8b\xef\xb9\xa3\xc2\xad\xef\xbc\x8d\xe1\xa0\x8c\xe2\x84\xac\xef\xb8\x80\xc5\xbf\xe2\x81\xa4\xf0\x9d\x94\xb0\xf3\xa0\x87\xaf\xef\xac\x84", "xn--bssffl"); }
2623test { try parseIDNAPass("x\xcd\x8fN\xe2\x80\x8b-\xc2\xad-\xe1\xa0\x8cB\xef\xb8\x80s\xe2\x81\xa4s\xf3\xa0\x87\xafffl", "xn--bssffl"); }
2624test { try parseIDNAPass("x\xcd\x8fn\xe2\x80\x8b-\xc2\xad-\xe1\xa0\x8cb\xef\xb8\x80s\xe2\x81\xa4s\xf3\xa0\x87\xafffl", "xn--bssffl"); }
2625test { try parseIDNAPass("X\xcd\x8fN\xe2\x80\x8b-\xc2\xad-\xe1\xa0\x8cB\xef\xb8\x80S\xe2\x81\xa4S\xf3\xa0\x87\xafFFL", "xn--bssffl"); }
2626test { try parseIDNAPass("X\xcd\x8fn\xe2\x80\x8b-\xc2\xad-\xe1\xa0\x8cB\xef\xb8\x80s\xe2\x81\xa4s\xf3\xa0\x87\xafffl", "xn--bssffl"); }
2627test { try parseIDNAPass("xn--bssffl", "xn--bssffl"); }
2628test { try parseIDNAPass("\xe5\xa4\xa1\xe5\xa4\x9e\xe5\xa4\x9c\xe5\xa4\x99", "xn--bssffl"); }
2629test { try parseIDNAPass("\xcb\xa3\xcd\x8f\xe2\x84\x95\xe2\x80\x8b\xef\xb9\xa3\xc2\xad\xef\xbc\x8d\xe1\xa0\x8c\xe2\x84\xac\xef\xb8\x80S\xe2\x81\xa4\xf0\x9d\x94\xb0\xf3\xa0\x87\xafFFL", "xn--bssffl"); }
2630test { try parseIDNAPass("x\xcd\x8fN\xe2\x80\x8b-\xc2\xad-\xe1\xa0\x8cB\xef\xb8\x80S\xe2\x81\xa4s\xf3\xa0\x87\xafFFL", "xn--bssffl"); }
2631test { try parseIDNAPass("\xcb\xa3\xcd\x8f\xe2\x84\x95\xe2\x80\x8b\xef\xb9\xa3\xc2\xad\xef\xbc\x8d\xe1\xa0\x8c\xe2\x84\xac\xef\xb8\x80s\xe2\x81\xa4\xf0\x9d\x94\xb0\xf3\xa0\x87\xafffl", "xn--bssffl"); }
2632test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2633test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2634test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2635test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2636test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2637test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2638test { try parseIDNAPass("\xc3\xa41234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); }
2639test { try parseIDNAPass("a\xcc\x881234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); }
2640test { try parseIDNAPass("A\xcc\x881234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); }
2641test { try parseIDNAPass("\xc3\x841234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); }
2642test { try parseIDNAPass("xn--1234567890123456789012345678901234567890123456789012345-9te", "xn--1234567890123456789012345678901234567890123456789012345-9te"); }
2643test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\xa4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2644test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2645test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2646test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x84123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2647test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2648test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\xa4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2649test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2650test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2651test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x84123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2652test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2653test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\xa4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2654test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2655test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901C", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2656test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x84123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901C", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2657test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2658test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\xa41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2659test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2660test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2661test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x841234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2662test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2663test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\xa41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2664test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2665test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2666test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x841234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2667test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2668test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\xa41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2669test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2670test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2671test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x841234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2672test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2673test { try parseIDNAPass("a.b..-q--a-.e", "a.b..-q--a-.e"); }
2674test { try parseIDNAPass("a.b..-q--\xc3\xa4-.e", "a.b..xn---q----jra.e"); }
2675test { try parseIDNAPass("a.b..-q--a\xcc\x88-.e", "a.b..xn---q----jra.e"); }
2676test { try parseIDNAPass("A.B..-Q--A\xcc\x88-.E", "a.b..xn---q----jra.e"); }
2677test { try parseIDNAPass("A.B..-Q--\xc3\x84-.E", "a.b..xn---q----jra.e"); }
2678test { try parseIDNAPass("A.b..-Q--\xc3\x84-.E", "a.b..xn---q----jra.e"); }
2679test { try parseIDNAPass("A.b..-Q--A\xcc\x88-.E", "a.b..xn---q----jra.e"); }
2680test { try parseIDNAPass("a.b..xn---q----jra.e", "a.b..xn---q----jra.e"); }
2681test { try parseIDNAPass("a..c", "a..c"); }
2682test { try parseIDNAPass("a.-b.", "a.-b."); }
2683test { try parseIDNAPass("a.b-.c", "a.b-.c"); }
2684test { try parseIDNAPass("a.-.c", "a.-.c"); }
2685test { try parseIDNAPass("a.bc--de.f", "a.bc--de.f"); }
2686test { try parseIDNAPass("\xc3\xa4.\xc2\xad.c", "xn--4ca..c"); }
2687test { try parseIDNAPass("a\xcc\x88.\xc2\xad.c", "xn--4ca..c"); }
2688test { try parseIDNAPass("A\xcc\x88.\xc2\xad.C", "xn--4ca..c"); }
2689test { try parseIDNAPass("\xc3\x84.\xc2\xad.C", "xn--4ca..c"); }
2690test { try parseIDNAPass("xn--4ca..c", "xn--4ca..c"); }
2691test { try parseIDNAPass("\xc3\xa4.-b.", "xn--4ca.-b."); }
2692test { try parseIDNAPass("a\xcc\x88.-b.", "xn--4ca.-b."); }
2693test { try parseIDNAPass("A\xcc\x88.-B.", "xn--4ca.-b."); }
2694test { try parseIDNAPass("\xc3\x84.-B.", "xn--4ca.-b."); }
2695test { try parseIDNAPass("xn--4ca.-b.", "xn--4ca.-b."); }
2696test { try parseIDNAPass("\xc3\xa4.b-.c", "xn--4ca.b-.c"); }
2697test { try parseIDNAPass("a\xcc\x88.b-.c", "xn--4ca.b-.c"); }
2698test { try parseIDNAPass("A\xcc\x88.B-.C", "xn--4ca.b-.c"); }
2699test { try parseIDNAPass("\xc3\x84.B-.C", "xn--4ca.b-.c"); }
2700test { try parseIDNAPass("\xc3\x84.b-.C", "xn--4ca.b-.c"); }
2701test { try parseIDNAPass("A\xcc\x88.b-.C", "xn--4ca.b-.c"); }
2702test { try parseIDNAPass("xn--4ca.b-.c", "xn--4ca.b-.c"); }
2703test { try parseIDNAPass("\xc3\xa4.-.c", "xn--4ca.-.c"); }
2704test { try parseIDNAPass("a\xcc\x88.-.c", "xn--4ca.-.c"); }
2705test { try parseIDNAPass("A\xcc\x88.-.C", "xn--4ca.-.c"); }
2706test { try parseIDNAPass("\xc3\x84.-.C", "xn--4ca.-.c"); }
2707test { try parseIDNAPass("xn--4ca.-.c", "xn--4ca.-.c"); }
2708test { try parseIDNAPass("\xc3\xa4.bc--de.f", "xn--4ca.bc--de.f"); }
2709test { try parseIDNAPass("a\xcc\x88.bc--de.f", "xn--4ca.bc--de.f"); }
2710test { try parseIDNAPass("A\xcc\x88.BC--DE.F", "xn--4ca.bc--de.f"); }
2711test { try parseIDNAPass("\xc3\x84.BC--DE.F", "xn--4ca.bc--de.f"); }
2712test { try parseIDNAPass("\xc3\x84.bc--De.f", "xn--4ca.bc--de.f"); }
2713test { try parseIDNAPass("A\xcc\x88.bc--De.f", "xn--4ca.bc--de.f"); }
2714test { try parseIDNAPass("xn--4ca.bc--de.f", "xn--4ca.bc--de.f"); }
2715test { try parseIDNAPass("A0", "a0"); }
2716test { try parseIDNAPass("0A", "0a"); }
2717test { try parseIDNAPass("\xd7\x90\xd7\x87", "xn--vdbr"); }
2718test { try parseIDNAPass("xn--vdbr", "xn--vdbr"); }
2719test { try parseIDNAPass("\xd7\x909\xd7\x87", "xn--9-ihcz"); }
2720test { try parseIDNAPass("xn--9-ihcz", "xn--9-ihcz"); }
2721test { try parseIDNAPass("\xd7\x90\xd7\xaa", "xn--4db6c"); }
2722test { try parseIDNAPass("xn--4db6c", "xn--4db6c"); }
2723test { try parseIDNAPass("\xd7\x90\xd7\xb3\xd7\xaa", "xn--4db6c0a"); }
2724test { try parseIDNAPass("xn--4db6c0a", "xn--4db6c0a"); }
2725test { try parseIDNAPass("\xd7\x907\xd7\xaa", "xn--7-zhc3f"); }
2726test { try parseIDNAPass("xn--7-zhc3f", "xn--7-zhc3f"); }
2727test { try parseIDNAPass("\xd7\x90\xd9\xa7\xd7\xaa", "xn--4db6c6t"); }
2728test { try parseIDNAPass("xn--4db6c6t", "xn--4db6c6t"); }
2729test { try parseIDNAPass("\xe0\xae\xb9\xe0\xaf\x8d\xe2\x80\x8d", "xn--dmc4b194h"); }
2730test { try parseIDNAPass("xn--dmc4b", "xn--dmc4b"); }
2731test { try parseIDNAPass("\xe0\xae\xb9\xe0\xaf\x8d", "xn--dmc4b"); }
2732test { try parseIDNAPass("xn--dmc4b194h", "xn--dmc4b194h"); }
2733test { try parseIDNAPass("xn--dmc", "xn--dmc"); }
2734test { try parseIDNAPass("\xe0\xae\xb9", "xn--dmc"); }
2735test { try parseIDNAPass("\xe0\xae\xb9\xe0\xaf\x8d\xe2\x80\x8c", "xn--dmc4by94h"); }
2736test { try parseIDNAPass("xn--dmc4by94h", "xn--dmc4by94h"); }
2737test { try parseIDNAPass("\xd9\x84\xd9\xb0\xe2\x80\x8c\xdb\xad\xdb\xaf", "xn--ghb2gxqia7523a"); }
2738test { try parseIDNAPass("xn--ghb2gxqia", "xn--ghb2gxqia"); }
2739test { try parseIDNAPass("\xd9\x84\xd9\xb0\xdb\xad\xdb\xaf", "xn--ghb2gxqia"); }
2740test { try parseIDNAPass("xn--ghb2gxqia7523a", "xn--ghb2gxqia7523a"); }
2741test { try parseIDNAPass("\xd9\x84\xd9\xb0\xe2\x80\x8c\xdb\xaf", "xn--ghb2g3qq34f"); }
2742test { try parseIDNAPass("xn--ghb2g3q", "xn--ghb2g3q"); }
2743test { try parseIDNAPass("\xd9\x84\xd9\xb0\xdb\xaf", "xn--ghb2g3q"); }
2744test { try parseIDNAPass("xn--ghb2g3qq34f", "xn--ghb2g3qq34f"); }
2745test { try parseIDNAPass("\xd9\x84\xe2\x80\x8c\xdb\xad\xdb\xaf", "xn--ghb25aga828w"); }
2746test { try parseIDNAPass("xn--ghb25aga", "xn--ghb25aga"); }
2747test { try parseIDNAPass("\xd9\x84\xdb\xad\xdb\xaf", "xn--ghb25aga"); }
2748test { try parseIDNAPass("xn--ghb25aga828w", "xn--ghb25aga828w"); }
2749test { try parseIDNAPass("\xd9\x84\xe2\x80\x8c\xdb\xaf", "xn--ghb65a953d"); }
2750test { try parseIDNAPass("xn--ghb65a", "xn--ghb65a"); }
2751test { try parseIDNAPass("\xd9\x84\xdb\xaf", "xn--ghb65a"); }
2752test { try parseIDNAPass("xn--ghb65a953d", "xn--ghb65a953d"); }
2753test { try parseIDNAPass("xn--ghb2gxq", "xn--ghb2gxq"); }
2754test { try parseIDNAPass("\xd9\x84\xd9\xb0\xdb\xad", "xn--ghb2gxq"); }
2755test { try parseIDNAPass("xn--cmba", "xn--cmba"); }
2756test { try parseIDNAPass("\xdb\xaf\xdb\xaf", "xn--cmba"); }
2757test { try parseIDNAPass("xn--ghb", "xn--ghb"); }
2758test { try parseIDNAPass("\xd9\x84", "xn--ghb"); }
2759test { try parseIDNAPass("a\xe3\x80\x82\xe3\x80\x82b", "a..b"); }
2760test { try parseIDNAPass("A\xe3\x80\x82\xe3\x80\x82B", "a..b"); }
2761test { try parseIDNAPass("a..b", "a..b"); }
2762test { try parseIDNAPass("..xn--skb", "..xn--skb"); }
2763test { try parseIDNAPass("$", "$"); }
2764test { try parseIDNAPass("\xe2\x91\xb7.four", "(4).four"); }
2765test { try parseIDNAPass("(4).four", "(4).four"); }
2766test { try parseIDNAPass("\xe2\x91\xb7.FOUR", "(4).four"); }
2767test { try parseIDNAPass("\xe2\x91\xb7.Four", "(4).four"); }
2768test { try parseIDNAPass("ascii", "ascii"); }
2769test { try parseIDNAPass("unicode.org", "unicode.org"); }
2770test { try parseIDNAPass("\xef\xa5\x91\xf0\xaf\xa1\xa8\xf0\xaf\xa1\xb4\xf0\xaf\xa4\x9f\xf0\xaf\xa5\x9f\xf0\xaf\xa6\xbf", "xn--snl253bgitxhzwu2arn60c"); }
2771test { try parseIDNAPass("\xe9\x99\x8b\xe3\x9b\xbc\xe5\xbd\x93\xf0\xa4\x8e\xab\xe7\xab\xae\xe4\x97\x97", "xn--snl253bgitxhzwu2arn60c"); }
2772test { try parseIDNAPass("xn--snl253bgitxhzwu2arn60c", "xn--snl253bgitxhzwu2arn60c"); }
2773test { try parseIDNAPass("\xe9\x9b\xbb\xf0\xa1\x8d\xaa\xe5\xbc\xb3\xe4\x8e\xab\xe7\xaa\xae\xe4\xb5\x97", "xn--kbo60w31ob3z6t3av9z5b"); }
2774test { try parseIDNAPass("xn--kbo60w31ob3z6t3av9z5b", "xn--kbo60w31ob3z6t3av9z5b"); }
2775test { try parseIDNAPass("xn--A-1ga", "xn--a-1ga"); }
2776test { try parseIDNAPass("a\xc3\xb6", "xn--a-1ga"); }
2777test { try parseIDNAPass("ao\xcc\x88", "xn--a-1ga"); }
2778test { try parseIDNAPass("AO\xcc\x88", "xn--a-1ga"); }
2779test { try parseIDNAPass("A\xc3\x96", "xn--a-1ga"); }
2780test { try parseIDNAPass("A\xc3\xb6", "xn--a-1ga"); }
2781test { try parseIDNAPass("Ao\xcc\x88", "xn--a-1ga"); }
2782test { try parseIDNAPass("\xef\xbc\x9d\xcc\xb8", "xn--1ch"); }
2783test { try parseIDNAPass("\xe2\x89\xa0", "xn--1ch"); }
2784test { try parseIDNAPass("=\xcc\xb8", "xn--1ch"); }
2785test { try parseIDNAPass("xn--1ch", "xn--1ch"); }
2786test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2787test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x84123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2788test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2789test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x84123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); }
2790test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x88123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2791test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x84123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); }
2792test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2793test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x841234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); }
2794test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2795test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x841234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); }
2796test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\xcc\x881234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2797test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc3\x841234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); }
2798test { try parseIDNAPass("\xea\xa1\xa3.\xdf\x8f", "xn--8c9a.xn--qsb"); }
2799test { try parseIDNAPass("xn--8c9a.xn--qsb", "xn--8c9a.xn--qsb"); }
2800test { try parseIDNAPass("xn--jbf911clb.xn----p9j493ivi4l", "xn--jbf911clb.xn----p9j493ivi4l"); }
2801test { try parseIDNAPass("\xe2\x89\xa0\xe1\xa2\x99\xe2\x89\xaf.\xec\x86\xa3-\xe1\xa1\xb4\xe2\xb4\x80", "xn--jbf911clb.xn----p9j493ivi4l"); }
2802test { try parseIDNAPass("=\xcc\xb8\xe1\xa2\x99>\xcc\xb8.\xe1\x84\x89\xe1\x85\xa9\xe1\x86\xbe-\xe1\xa1\xb4\xe2\xb4\x80", "xn--jbf911clb.xn----p9j493ivi4l"); }
2803test { try parseIDNAPass("=\xcc\xb8\xe1\xa2\x99>\xcc\xb8.\xe1\x84\x89\xe1\x85\xa9\xe1\x86\xbe-\xe1\xa1\xb4\xe1\x82\xa0", "xn--jbf911clb.xn----p9j493ivi4l"); }
2804test { try parseIDNAPass("\xe2\x89\xa0\xe1\xa2\x99\xe2\x89\xaf.\xec\x86\xa3-\xe1\xa1\xb4\xe1\x82\xa0", "xn--jbf911clb.xn----p9j493ivi4l"); }
2805test { try parseIDNAPass("xn--gl0as212a.i.", "xn--gl0as212a.i."); }
2806test { try parseIDNAPass("\xe7\xb9\xb1\xf0\x91\x96\xbf.i.", "xn--gl0as212a.i."); }
2807test { try parseIDNAPass("\xe7\xb9\xb1\xf0\x91\x96\xbf.I.", "xn--gl0as212a.i."); }
2808test { try parseIDNAPass("xn--1ug6928ac48e.i.", "xn--1ug6928ac48e.i."); }
2809test { try parseIDNAPass("\xe7\xb9\xb1\xf0\x91\x96\xbf\xe2\x80\x8d.i.", "xn--1ug6928ac48e.i."); }
2810test { try parseIDNAPass("\xe7\xb9\xb1\xf0\x91\x96\xbf\xe2\x80\x8d.I.", "xn--1ug6928ac48e.i."); }
2811test { try parseIDNAPass("xn--ss-59d.", "xn--ss-59d."); }
2812test { try parseIDNAPass("ss\xdb\xab.", "xn--ss-59d."); }
2813test { try parseIDNAPass("SS\xdb\xab.", "xn--ss-59d."); }
2814test { try parseIDNAPass("Ss\xdb\xab.", "xn--ss-59d."); }
2815test { try parseIDNAPass("\xf0\x9e\xa4\xb7.\xf0\x90\xae\x90\xf0\x9e\xa2\x81\xf0\x90\xb9\xa0\xd8\xa4", "xn--ve6h.xn--jgb1694kz0b2176a"); }
2816test { try parseIDNAPass("\xf0\x9e\xa4\xb7.\xf0\x90\xae\x90\xf0\x9e\xa2\x81\xf0\x90\xb9\xa0\xd9\x88\xd9\x94", "xn--ve6h.xn--jgb1694kz0b2176a"); }
2817test { try parseIDNAPass("\xf0\x9e\xa4\x95.\xf0\x90\xae\x90\xf0\x9e\xa2\x81\xf0\x90\xb9\xa0\xd9\x88\xd9\x94", "xn--ve6h.xn--jgb1694kz0b2176a"); }
2818test { try parseIDNAPass("\xf0\x9e\xa4\x95.\xf0\x90\xae\x90\xf0\x9e\xa2\x81\xf0\x90\xb9\xa0\xd8\xa4", "xn--ve6h.xn--jgb1694kz0b2176a"); }
2819test { try parseIDNAPass("xn--ve6h.xn--jgb1694kz0b2176a", "xn--ve6h.xn--jgb1694kz0b2176a"); }
2820test { try parseIDNAPass("\xf0\x9e\xa4\xa5\xf3\xa0\x85\xae\xef\xbc\x8e\xe1\xa1\x84\xe1\x82\xae", "xn--de6h.xn--37e857h"); }
2821test { try parseIDNAPass("\xf0\x9e\xa4\xa5\xf3\xa0\x85\xae.\xe1\xa1\x84\xe1\x82\xae", "xn--de6h.xn--37e857h"); }
2822test { try parseIDNAPass("\xf0\x9e\xa4\xa5\xf3\xa0\x85\xae.\xe1\xa1\x84\xe2\xb4\x8e", "xn--de6h.xn--37e857h"); }
2823test { try parseIDNAPass("\xf0\x9e\xa4\x83\xf3\xa0\x85\xae.\xe1\xa1\x84\xe1\x82\xae", "xn--de6h.xn--37e857h"); }
2824test { try parseIDNAPass("\xf0\x9e\xa4\x83\xf3\xa0\x85\xae.\xe1\xa1\x84\xe2\xb4\x8e", "xn--de6h.xn--37e857h"); }
2825test { try parseIDNAPass("xn--de6h.xn--37e857h", "xn--de6h.xn--37e857h"); }
2826test { try parseIDNAPass("\xf0\x9e\xa4\xa5.\xe1\xa1\x84\xe2\xb4\x8e", "xn--de6h.xn--37e857h"); }
2827test { try parseIDNAPass("\xf0\x9e\xa4\x83.\xe1\xa1\x84\xe1\x82\xae", "xn--de6h.xn--37e857h"); }
2828test { try parseIDNAPass("\xf0\x9e\xa4\x83.\xe1\xa1\x84\xe2\xb4\x8e", "xn--de6h.xn--37e857h"); }
2829test { try parseIDNAPass("\xf0\x9e\xa4\xa5\xf3\xa0\x85\xae\xef\xbc\x8e\xe1\xa1\x84\xe2\xb4\x8e", "xn--de6h.xn--37e857h"); }
2830test { try parseIDNAPass("\xf0\x9e\xa4\x83\xf3\xa0\x85\xae\xef\xbc\x8e\xe1\xa1\x84\xe1\x82\xae", "xn--de6h.xn--37e857h"); }
2831test { try parseIDNAPass("\xf0\x9e\xa4\x83\xf3\xa0\x85\xae\xef\xbc\x8e\xe1\xa1\x84\xe2\xb4\x8e", "xn--de6h.xn--37e857h"); }
2832test { try parseIDNAPass("\xf0\x9e\xa4\xa5.\xe1\xa1\x84\xe1\x82\xae", "xn--de6h.xn--37e857h"); }
2833test { try parseIDNAPass("xn--ej0b.xn----d87b", "xn--ej0b.xn----d87b"); }
2834test { try parseIDNAPass("xn----1fa1788k.", "xn----1fa1788k."); }
2835test { try parseIDNAPass("xn--9ob.xn--4xa", "xn--9ob.xn--4xa"); }
2836test { try parseIDNAPass("\xdd\x96.\xcf\x83", "xn--9ob.xn--4xa"); }
2837test { try parseIDNAPass("\xdd\x96.\xce\xa3", "xn--9ob.xn--4xa"); }
2838test { try parseIDNAPass("\xc3\x9f\xef\xbd\xa1\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "xn--zca.xn--lgd921mvv0m"); }
2839test { try parseIDNAPass("\xc3\x9f\xe3\x80\x82\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "xn--zca.xn--lgd921mvv0m"); }
2840test { try parseIDNAPass("\xc3\x9f\xe3\x80\x82\xf0\x90\x8b\xb3\xe2\xb4\x8c\xe0\xbe\xb8", "xn--zca.xn--lgd921mvv0m"); }
2841test { try parseIDNAPass("SS\xe3\x80\x82\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2842test { try parseIDNAPass("ss\xe3\x80\x82\xf0\x90\x8b\xb3\xe2\xb4\x8c\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2843test { try parseIDNAPass("Ss\xe3\x80\x82\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2844test { try parseIDNAPass("ss.xn--lgd921mvv0m", "ss.xn--lgd921mvv0m"); }
2845test { try parseIDNAPass("ss.\xf0\x90\x8b\xb3\xe2\xb4\x8c\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2846test { try parseIDNAPass("SS.\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2847test { try parseIDNAPass("Ss.\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2848test { try parseIDNAPass("xn--zca.xn--lgd921mvv0m", "xn--zca.xn--lgd921mvv0m"); }
2849test { try parseIDNAPass("\xc3\x9f.\xf0\x90\x8b\xb3\xe2\xb4\x8c\xe0\xbe\xb8", "xn--zca.xn--lgd921mvv0m"); }
2850test { try parseIDNAPass("\xc3\x9f\xef\xbd\xa1\xf0\x90\x8b\xb3\xe2\xb4\x8c\xe0\xbe\xb8", "xn--zca.xn--lgd921mvv0m"); }
2851test { try parseIDNAPass("SS\xef\xbd\xa1\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2852test { try parseIDNAPass("ss\xef\xbd\xa1\xf0\x90\x8b\xb3\xe2\xb4\x8c\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2853test { try parseIDNAPass("Ss\xef\xbd\xa1\xf0\x90\x8b\xb3\xe1\x82\xac\xe0\xbe\xb8", "ss.xn--lgd921mvv0m"); }
2854test { try parseIDNAPass("\xe1\x9a\xad\xef\xbd\xa1\xf0\x9d\x8c\xa0\xc3\x9f\xf0\x96\xab\xb1", "xn--hwe.xn--zca4946pblnc"); }
2855test { try parseIDNAPass("\xe1\x9a\xad\xe3\x80\x82\xf0\x9d\x8c\xa0\xc3\x9f\xf0\x96\xab\xb1", "xn--hwe.xn--zca4946pblnc"); }
2856test { try parseIDNAPass("\xe1\x9a\xad\xe3\x80\x82\xf0\x9d\x8c\xa0SS\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2857test { try parseIDNAPass("\xe1\x9a\xad\xe3\x80\x82\xf0\x9d\x8c\xa0ss\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2858test { try parseIDNAPass("\xe1\x9a\xad\xe3\x80\x82\xf0\x9d\x8c\xa0Ss\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2859test { try parseIDNAPass("xn--hwe.xn--ss-ci1ub261a", "xn--hwe.xn--ss-ci1ub261a"); }
2860test { try parseIDNAPass("\xe1\x9a\xad.\xf0\x9d\x8c\xa0ss\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2861test { try parseIDNAPass("\xe1\x9a\xad.\xf0\x9d\x8c\xa0SS\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2862test { try parseIDNAPass("\xe1\x9a\xad.\xf0\x9d\x8c\xa0Ss\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2863test { try parseIDNAPass("xn--hwe.xn--zca4946pblnc", "xn--hwe.xn--zca4946pblnc"); }
2864test { try parseIDNAPass("\xe1\x9a\xad.\xf0\x9d\x8c\xa0\xc3\x9f\xf0\x96\xab\xb1", "xn--hwe.xn--zca4946pblnc"); }
2865test { try parseIDNAPass("\xe1\x9a\xad\xef\xbd\xa1\xf0\x9d\x8c\xa0SS\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2866test { try parseIDNAPass("\xe1\x9a\xad\xef\xbd\xa1\xf0\x9d\x8c\xa0ss\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2867test { try parseIDNAPass("\xe1\x9a\xad\xef\xbd\xa1\xf0\x9d\x8c\xa0Ss\xf0\x96\xab\xb1", "xn--hwe.xn--ss-ci1ub261a"); }
2868test { try parseIDNAPass("xn--09e4694e..xn--ye6h", "xn--09e4694e..xn--ye6h"); }
2869test { try parseIDNAPass("xn--1-o7j0610f..xn----381i", "xn--1-o7j0610f..xn----381i"); }
2870test { try parseIDNAPass("1.xn----zw5a.xn--kp5b", "1.xn----zw5a.xn--kp5b"); }
2871test { try parseIDNAPass("-\xf0\x90\x8b\xb7\xf0\x96\xbe\x91\xe3\x80\x82\xf3\xa0\x86\xac", "xn----991iq40y."); }
2872test { try parseIDNAPass("xn----991iq40y.", "xn----991iq40y."); }
2873test { try parseIDNAPass(".xn--hdh", ".xn--hdh"); }
2874test { try parseIDNAPass("\xf0\x9e\xa5\x93\xef\xbc\x8e\xdc\x98", "xn--of6h.xn--inb"); }
2875test { try parseIDNAPass("\xf0\x9e\xa5\x93.\xdc\x98", "xn--of6h.xn--inb"); }
2876test { try parseIDNAPass("xn--of6h.xn--inb", "xn--of6h.xn--inb"); }
2877test { try parseIDNAPass("\xf3\xa0\x84\xbd-\xef\xbc\x8e-\xe0\xb7\x8a", "-.xn----ptf"); }
2878test { try parseIDNAPass("\xf3\xa0\x84\xbd-.-\xe0\xb7\x8a", "-.xn----ptf"); }
2879test { try parseIDNAPass("-.xn----ptf", "-.xn----ptf"); }
2880test { try parseIDNAPass("\xe1\x82\xba\xf0\x90\x8b\xb8\xf3\xa0\x84\x84\xe3\x80\x82\xf0\x9d\x9f\x9d\xed\x9f\xb6\xe1\x80\xba", "xn--ilj2659d.xn--5-dug9054m"); }
2881test { try parseIDNAPass("\xe1\x82\xba\xf0\x90\x8b\xb8\xf3\xa0\x84\x84\xe3\x80\x825\xed\x9f\xb6\xe1\x80\xba", "xn--ilj2659d.xn--5-dug9054m"); }
2882test { try parseIDNAPass("\xe2\xb4\x9a\xf0\x90\x8b\xb8\xf3\xa0\x84\x84\xe3\x80\x825\xed\x9f\xb6\xe1\x80\xba", "xn--ilj2659d.xn--5-dug9054m"); }
2883test { try parseIDNAPass("xn--ilj2659d.xn--5-dug9054m", "xn--ilj2659d.xn--5-dug9054m"); }
2884test { try parseIDNAPass("\xe2\xb4\x9a\xf0\x90\x8b\xb8.5\xed\x9f\xb6\xe1\x80\xba", "xn--ilj2659d.xn--5-dug9054m"); }
2885test { try parseIDNAPass("\xe1\x82\xba\xf0\x90\x8b\xb8.5\xed\x9f\xb6\xe1\x80\xba", "xn--ilj2659d.xn--5-dug9054m"); }
2886test { try parseIDNAPass("\xe2\xb4\x9a\xf0\x90\x8b\xb8\xf3\xa0\x84\x84\xe3\x80\x82\xf0\x9d\x9f\x9d\xed\x9f\xb6\xe1\x80\xba", "xn--ilj2659d.xn--5-dug9054m"); }
2887test { try parseIDNAPass("\xe2\x89\xa0.\xe1\xa0\xbf", "xn--1ch.xn--y7e"); }
2888test { try parseIDNAPass("=\xcc\xb8.\xe1\xa0\xbf", "xn--1ch.xn--y7e"); }
2889test { try parseIDNAPass("xn--1ch.xn--y7e", "xn--1ch.xn--y7e"); }
2890test { try parseIDNAPass("\xdc\xa3\xd6\xa3\xef\xbd\xa1\xe3\x8c\xaa", "xn--ucb18e.xn--eck4c5a"); }
2891test { try parseIDNAPass("\xdc\xa3\xd6\xa3\xe3\x80\x82\xe3\x83\x8f\xe3\x82\xa4\xe3\x83\x84", "xn--ucb18e.xn--eck4c5a"); }
2892test { try parseIDNAPass("xn--ucb18e.xn--eck4c5a", "xn--ucb18e.xn--eck4c5a"); }
2893test { try parseIDNAPass("\xdc\xa3\xd6\xa3.\xe3\x83\x8f\xe3\x82\xa4\xe3\x83\x84", "xn--ucb18e.xn--eck4c5a"); }
2894test { try parseIDNAPass("xn--skb", "xn--skb"); }
2895test { try parseIDNAPass("\xda\xb9", "xn--skb"); }
2896test { try parseIDNAPass("\xe2\x89\xaf1.\xe3\x80\x82\xc3\x9f", "xn--1-ogo..xn--zca"); }
2897test { try parseIDNAPass(">\xcc\xb81.\xe3\x80\x82\xc3\x9f", "xn--1-ogo..xn--zca"); }
2898test { try parseIDNAPass(">\xcc\xb81.\xe3\x80\x82SS", "xn--1-ogo..ss"); }
2899test { try parseIDNAPass("\xe2\x89\xaf1.\xe3\x80\x82SS", "xn--1-ogo..ss"); }
2900test { try parseIDNAPass("\xe2\x89\xaf1.\xe3\x80\x82ss", "xn--1-ogo..ss"); }
2901test { try parseIDNAPass(">\xcc\xb81.\xe3\x80\x82ss", "xn--1-ogo..ss"); }
2902test { try parseIDNAPass(">\xcc\xb81.\xe3\x80\x82Ss", "xn--1-ogo..ss"); }
2903test { try parseIDNAPass("\xe2\x89\xaf1.\xe3\x80\x82Ss", "xn--1-ogo..ss"); }
2904test { try parseIDNAPass("xn--1-ogo..ss", "xn--1-ogo..ss"); }
2905test { try parseIDNAPass("xn--1-ogo..xn--zca", "xn--1-ogo..xn--zca"); }
2906test { try parseIDNAPass(".xn--1ch", ".xn--1ch"); }
2907test { try parseIDNAPass("\xea\xa1\x86\xe3\x80\x82\xe2\x86\x83\xe0\xbe\xb5\xeb\x86\xae-", "xn--fc9a.xn----qmg097k469k"); }
2908test { try parseIDNAPass("\xea\xa1\x86\xe3\x80\x82\xe2\x86\x83\xe0\xbe\xb5\xe1\x84\x82\xe1\x85\xaa\xe1\x87\x81-", "xn--fc9a.xn----qmg097k469k"); }
2909test { try parseIDNAPass("\xea\xa1\x86\xe3\x80\x82\xe2\x86\x84\xe0\xbe\xb5\xe1\x84\x82\xe1\x85\xaa\xe1\x87\x81-", "xn--fc9a.xn----qmg097k469k"); }
2910test { try parseIDNAPass("\xea\xa1\x86\xe3\x80\x82\xe2\x86\x84\xe0\xbe\xb5\xeb\x86\xae-", "xn--fc9a.xn----qmg097k469k"); }
2911test { try parseIDNAPass("xn--fc9a.xn----qmg097k469k", "xn--fc9a.xn----qmg097k469k"); }
2912test { try parseIDNAPass("\xc3\x9f\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa08\xe2\x82\x85", "xn--zca266bwrr.xn--85-psd"); }
2913test { try parseIDNAPass("\xc3\x9f\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa085", "xn--zca266bwrr.xn--85-psd"); }
2914test { try parseIDNAPass("SS\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa085", "xn--ss-e2f077r.xn--85-psd"); }
2915test { try parseIDNAPass("ss\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa085", "xn--ss-e2f077r.xn--85-psd"); }
2916test { try parseIDNAPass("Ss\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa085", "xn--ss-e2f077r.xn--85-psd"); }
2917test { try parseIDNAPass("xn--ss-e2f077r.xn--85-psd", "xn--ss-e2f077r.xn--85-psd"); }
2918test { try parseIDNAPass("ss\xe0\xa7\x81\xe1\xb7\xad.\xd8\xa085", "xn--ss-e2f077r.xn--85-psd"); }
2919test { try parseIDNAPass("SS\xe0\xa7\x81\xe1\xb7\xad.\xd8\xa085", "xn--ss-e2f077r.xn--85-psd"); }
2920test { try parseIDNAPass("Ss\xe0\xa7\x81\xe1\xb7\xad.\xd8\xa085", "xn--ss-e2f077r.xn--85-psd"); }
2921test { try parseIDNAPass("xn--zca266bwrr.xn--85-psd", "xn--zca266bwrr.xn--85-psd"); }
2922test { try parseIDNAPass("\xc3\x9f\xe0\xa7\x81\xe1\xb7\xad.\xd8\xa085", "xn--zca266bwrr.xn--85-psd"); }
2923test { try parseIDNAPass("SS\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa08\xe2\x82\x85", "xn--ss-e2f077r.xn--85-psd"); }
2924test { try parseIDNAPass("ss\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa08\xe2\x82\x85", "xn--ss-e2f077r.xn--85-psd"); }
2925test { try parseIDNAPass("Ss\xe0\xa7\x81\xe1\xb7\xad\xe3\x80\x82\xd8\xa08\xe2\x82\x85", "xn--ss-e2f077r.xn--85-psd"); }
2926test { try parseIDNAPass("\xef\xb8\x8d\xe0\xaa\x9b\xe3\x80\x82\xe5\xb5\xa8", "xn--6dc.xn--tot"); }
2927test { try parseIDNAPass("xn--6dc.xn--tot", "xn--6dc.xn--tot"); }
2928test { try parseIDNAPass("\xe0\xaa\x9b.\xe5\xb5\xa8", "xn--6dc.xn--tot"); }
2929test { try parseIDNAPass("\xef\xb8\x85\xe3\x80\x82\xe3\x80\x82\xf0\xa6\x80\xbe\xe1\xb3\xa0", "..xn--t6f5138v"); }
2930test { try parseIDNAPass("..xn--t6f5138v", "..xn--t6f5138v"); }
2931test { try parseIDNAPass("xn--t6f5138v", "xn--t6f5138v"); }
2932test { try parseIDNAPass("\xf0\xa6\x80\xbe\xe1\xb3\xa0", "xn--t6f5138v"); }
2933test { try parseIDNAPass("xn--p8e.xn--1ch3a7084l", "xn--p8e.xn--1ch3a7084l"); }
2934test { try parseIDNAPass("\xe1\xa1\x99.\xe2\x89\xaf\xf0\x90\x8b\xb2\xe2\x89\xa0", "xn--p8e.xn--1ch3a7084l"); }
2935test { try parseIDNAPass("\xe1\xa1\x99.>\xcc\xb8\xf0\x90\x8b\xb2=\xcc\xb8", "xn--p8e.xn--1ch3a7084l"); }
2936test { try parseIDNAPass("-3.xn--fbf115j", "-3.xn--fbf115j"); }
2937test { try parseIDNAPass("xn--u4e969b.xn--1ch", "xn--u4e969b.xn--1ch"); }
2938test { try parseIDNAPass("\xe2\x85\x8e\xe1\x9f\x92.\xe2\x89\xa0", "xn--u4e969b.xn--1ch"); }
2939test { try parseIDNAPass("\xe2\x85\x8e\xe1\x9f\x92.=\xcc\xb8", "xn--u4e969b.xn--1ch"); }
2940test { try parseIDNAPass("\xe2\x84\xb2\xe1\x9f\x92.=\xcc\xb8", "xn--u4e969b.xn--1ch"); }
2941test { try parseIDNAPass("\xe2\x84\xb2\xe1\x9f\x92.\xe2\x89\xa0", "xn--u4e969b.xn--1ch"); }
2942test { try parseIDNAPass("xn----zmb.1-", "xn----zmb.1-"); }
2943test { try parseIDNAPass("xn--8,-g9oy26fzu4d.xn--kmb6733w", "xn--8,-g9oy26fzu4d.xn--kmb6733w"); }
2944test { try parseIDNAPass("xn--9-mfs8024b.", "xn--9-mfs8024b."); }
2945test { try parseIDNAPass("9\xe9\x9a\x81\xe2\xaf\xae.", "xn--9-mfs8024b."); }
2946test { try parseIDNAPass("xn--2ib43l.xn--te6h", "xn--2ib43l.xn--te6h"); }
2947test { try parseIDNAPass("\xd9\xbd\xe0\xa5\x83.\xf0\x9e\xa4\xb5", "xn--2ib43l.xn--te6h"); }
2948test { try parseIDNAPass("\xd9\xbd\xe0\xa5\x83.\xf0\x9e\xa4\x93", "xn--2ib43l.xn--te6h"); }
2949test { try parseIDNAPass("\xea\xa7\x90\xd3\x80\xe1\xae\xaa\xe0\xa3\xb6\xef\xbc\x8e\xeb\x88\xb5", "xn--s5a04sn4u297k.xn--2e1b"); }
2950test { try parseIDNAPass("\xea\xa7\x90\xd3\x80\xe1\xae\xaa\xe0\xa3\xb6\xef\xbc\x8e\xe1\x84\x82\xe1\x85\xaf\xe1\x86\xbc", "xn--s5a04sn4u297k.xn--2e1b"); }
2951test { try parseIDNAPass("\xea\xa7\x90\xd3\x80\xe1\xae\xaa\xe0\xa3\xb6.\xeb\x88\xb5", "xn--s5a04sn4u297k.xn--2e1b"); }
2952test { try parseIDNAPass("\xea\xa7\x90\xd3\x80\xe1\xae\xaa\xe0\xa3\xb6.\xe1\x84\x82\xe1\x85\xaf\xe1\x86\xbc", "xn--s5a04sn4u297k.xn--2e1b"); }
2953test { try parseIDNAPass("\xea\xa7\x90\xd3\x8f\xe1\xae\xaa\xe0\xa3\xb6.\xe1\x84\x82\xe1\x85\xaf\xe1\x86\xbc", "xn--s5a04sn4u297k.xn--2e1b"); }
2954test { try parseIDNAPass("\xea\xa7\x90\xd3\x8f\xe1\xae\xaa\xe0\xa3\xb6.\xeb\x88\xb5", "xn--s5a04sn4u297k.xn--2e1b"); }
2955test { try parseIDNAPass("xn--s5a04sn4u297k.xn--2e1b", "xn--s5a04sn4u297k.xn--2e1b"); }
2956test { try parseIDNAPass("\xea\xa7\x90\xd3\x8f\xe1\xae\xaa\xe0\xa3\xb6\xef\xbc\x8e\xe1\x84\x82\xe1\x85\xaf\xe1\x86\xbc", "xn--s5a04sn4u297k.xn--2e1b"); }
2957test { try parseIDNAPass("\xea\xa7\x90\xd3\x8f\xe1\xae\xaa\xe0\xa3\xb6\xef\xbc\x8e\xeb\x88\xb5", "xn--s5a04sn4u297k.xn--2e1b"); }
2958test { try parseIDNAPass("xn--9hb7344k.", "xn--9hb7344k."); }
2959test { try parseIDNAPass("\xf0\x90\xab\x87\xd9\xa1.", "xn--9hb7344k."); }
2960test { try parseIDNAPass("\xe1\xa1\x8c.\xe3\x80\x82\xe1\xa2\x91", "xn--c8e..xn--bbf"); }
2961test { try parseIDNAPass("xn--c8e..xn--bbf", "xn--c8e..xn--bbf"); }
2962test { try parseIDNAPass("\xe3\x80\x82\xe3\x80\x82\xe1\x82\xa3\xe2\x89\xaf", "..xn--hdh782b"); }
2963test { try parseIDNAPass("\xe3\x80\x82\xe3\x80\x82\xe1\x82\xa3>\xcc\xb8", "..xn--hdh782b"); }
2964test { try parseIDNAPass("\xe3\x80\x82\xe3\x80\x82\xe2\xb4\x83>\xcc\xb8", "..xn--hdh782b"); }
2965test { try parseIDNAPass("\xe3\x80\x82\xe3\x80\x82\xe2\xb4\x83\xe2\x89\xaf", "..xn--hdh782b"); }
2966test { try parseIDNAPass("..xn--hdh782b", "..xn--hdh782b"); }
2967test { try parseIDNAPass("\xdf\xa5.\xda\xb5", "xn--dtb.xn--okb"); }
2968test { try parseIDNAPass("xn--dtb.xn--okb", "xn--dtb.xn--okb"); }
2969test { try parseIDNAPass(".xn--3e6h", ".xn--3e6h"); }
2970test { try parseIDNAPass("xn--3e6h", "xn--3e6h"); }
2971test { try parseIDNAPass("\xf0\x9e\xa4\xbf", "xn--3e6h"); }
2972test { try parseIDNAPass("\xf0\x9e\xa4\x9d", "xn--3e6h"); }
2973test { try parseIDNAPass("\xda\xb9\xef\xbc\x8e\xe1\xa1\xb3\xe1\x85\x9f", "xn--skb.xn--g9e"); }
2974test { try parseIDNAPass("\xda\xb9.\xe1\xa1\xb3\xe1\x85\x9f", "xn--skb.xn--g9e"); }
2975test { try parseIDNAPass("xn--skb.xn--g9e", "xn--skb.xn--g9e"); }
2976test { try parseIDNAPass("\xda\xb9.\xe1\xa1\xb3", "xn--skb.xn--g9e"); }
2977test { try parseIDNAPass("\xe3\xa8\x9b\xf0\x98\xb1\x8e.\xe3\x80\x827\xe0\xb4\x81", "xn--mbm8237g..xn--7-7hf"); }
2978test { try parseIDNAPass("xn--mbm8237g..xn--7-7hf", "xn--mbm8237g..xn--7-7hf"); }
2979test { try parseIDNAPass("xn--ss-4epx629f.xn--ifh802b6a", "xn--ss-4epx629f.xn--ifh802b6a"); }
2980test { try parseIDNAPass("ss\xea\xab\xb6\xe1\xa2\xa5.\xe2\x8a\xb6\xe2\xb4\xa1\xe2\xb4\x96", "xn--ss-4epx629f.xn--ifh802b6a"); }
2981test { try parseIDNAPass("SS\xea\xab\xb6\xe1\xa2\xa5.\xe2\x8a\xb6\xe1\x83\x81\xe1\x82\xb6", "xn--ss-4epx629f.xn--ifh802b6a"); }
2982test { try parseIDNAPass("Ss\xea\xab\xb6\xe1\xa2\xa5.\xe2\x8a\xb6\xe1\x83\x81\xe2\xb4\x96", "xn--ss-4epx629f.xn--ifh802b6a"); }
2983test { try parseIDNAPass("-.", "-."); }
2984test { try parseIDNAPass("xn----zmb.xn--rlj2573p", "xn----zmb.xn--rlj2573p"); }
2985test { try parseIDNAPass("\xe2\x89\xa0\xe3\x80\x82\xf0\x9f\x9e\xb3\xf0\x9d\x9f\xb2", "xn--1ch.xn--6-dl4s"); }
2986test { try parseIDNAPass("=\xcc\xb8\xe3\x80\x82\xf0\x9f\x9e\xb3\xf0\x9d\x9f\xb2", "xn--1ch.xn--6-dl4s"); }
2987test { try parseIDNAPass("\xe2\x89\xa0\xe3\x80\x82\xf0\x9f\x9e\xb36", "xn--1ch.xn--6-dl4s"); }
2988test { try parseIDNAPass("=\xcc\xb8\xe3\x80\x82\xf0\x9f\x9e\xb36", "xn--1ch.xn--6-dl4s"); }
2989test { try parseIDNAPass("xn--1ch.xn--6-dl4s", "xn--1ch.xn--6-dl4s"); }
2990test { try parseIDNAPass("\xe2\x89\xa0.\xf0\x9f\x9e\xb36", "xn--1ch.xn--6-dl4s"); }
2991test { try parseIDNAPass("=\xcc\xb8.\xf0\x9f\x9e\xb36", "xn--1ch.xn--6-dl4s"); }
2992test { try parseIDNAPass(".j", ".j"); }
2993test { try parseIDNAPass("j", "j"); }
2994test { try parseIDNAPass("xn--rt6a.", "xn--rt6a."); }
2995test { try parseIDNAPass("\xe9\xb1\x8a.", "xn--rt6a."); }
2996test { try parseIDNAPass("xn--4-0bd15808a.", "xn--4-0bd15808a."); }
2997test { try parseIDNAPass("\xf0\x9e\xa4\xba\xdf\x8c4.", "xn--4-0bd15808a."); }
2998test { try parseIDNAPass("\xf0\x9e\xa4\x98\xdf\x8c4.", "xn--4-0bd15808a."); }
2999test { try parseIDNAPass("-\xef\xbd\xa1\xe4\x8f\x9b", "-.xn--xco"); }
3000test { try parseIDNAPass("-\xe3\x80\x82\xe4\x8f\x9b", "-.xn--xco"); }
3001test { try parseIDNAPass("-.xn--xco", "-.xn--xco"); }
3002test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95\xe2\x89\xaf\xc3\x9f", "xn--tc1a.xn--5-qfa988w745i"); }
3003test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95>\xcc\xb8\xc3\x9f", "xn--tc1a.xn--5-qfa988w745i"); }
3004test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885\xe2\x89\xaf\xc3\x9f", "xn--tc1a.xn--5-qfa988w745i"); }
3005test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885>\xcc\xb8\xc3\x9f", "xn--tc1a.xn--5-qfa988w745i"); }
3006test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885>\xcc\xb8SS", "xn--tc1a.xn--5ss-3m2a5009e"); }
3007test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885\xe2\x89\xafSS", "xn--tc1a.xn--5ss-3m2a5009e"); }
3008test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885\xe2\x89\xafss", "xn--tc1a.xn--5ss-3m2a5009e"); }
3009test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885>\xcc\xb8ss", "xn--tc1a.xn--5ss-3m2a5009e"); }
3010test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885>\xcc\xb8Ss", "xn--tc1a.xn--5ss-3m2a5009e"); }
3011test { try parseIDNAPass("\xe8\x88\x8c.\xea\xa1\x885\xe2\x89\xafSs", "xn--tc1a.xn--5ss-3m2a5009e"); }
3012test { try parseIDNAPass("xn--tc1a.xn--5ss-3m2a5009e", "xn--tc1a.xn--5ss-3m2a5009e"); }
3013test { try parseIDNAPass("xn--tc1a.xn--5-qfa988w745i", "xn--tc1a.xn--5-qfa988w745i"); }
3014test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95>\xcc\xb8SS", "xn--tc1a.xn--5ss-3m2a5009e"); }
3015test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95\xe2\x89\xafSS", "xn--tc1a.xn--5ss-3m2a5009e"); }
3016test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95\xe2\x89\xafss", "xn--tc1a.xn--5ss-3m2a5009e"); }
3017test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95>\xcc\xb8ss", "xn--tc1a.xn--5ss-3m2a5009e"); }
3018test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95>\xcc\xb8Ss", "xn--tc1a.xn--5ss-3m2a5009e"); }
3019test { try parseIDNAPass("\xe2\xbe\x86\xef\xbc\x8e\xea\xa1\x88\xef\xbc\x95\xe2\x89\xafSs", "xn--tc1a.xn--5ss-3m2a5009e"); }
3020test { try parseIDNAPass("\xf0\x9e\xa4\xaa.\xcf\x82", "xn--ie6h.xn--3xa"); }
3021test { try parseIDNAPass("\xf0\x9e\xa4\x88.\xce\xa3", "xn--ie6h.xn--4xa"); }
3022test { try parseIDNAPass("\xf0\x9e\xa4\xaa.\xcf\x83", "xn--ie6h.xn--4xa"); }
3023test { try parseIDNAPass("\xf0\x9e\xa4\x88.\xcf\x83", "xn--ie6h.xn--4xa"); }
3024test { try parseIDNAPass("xn--ie6h.xn--4xa", "xn--ie6h.xn--4xa"); }
3025test { try parseIDNAPass("\xf0\x9e\xa4\x88.\xcf\x82", "xn--ie6h.xn--3xa"); }
3026test { try parseIDNAPass("xn--ie6h.xn--3xa", "xn--ie6h.xn--3xa"); }
3027test { try parseIDNAPass("\xf0\x9e\xa4\xaa.\xce\xa3", "xn--ie6h.xn--4xa"); }
3028test { try parseIDNAPass("xn--ilj.xn--4xa", "xn--ilj.xn--4xa"); }
3029test { try parseIDNAPass("\xe2\xb4\x9a.\xcf\x83", "xn--ilj.xn--4xa"); }
3030test { try parseIDNAPass("\xe1\x82\xba.\xce\xa3", "xn--ilj.xn--4xa"); }
3031test { try parseIDNAPass("\xe2\xb4\x9a.\xcf\x82", "xn--ilj.xn--3xa"); }
3032test { try parseIDNAPass("\xe1\x82\xba.\xcf\x82", "xn--ilj.xn--3xa"); }
3033test { try parseIDNAPass("xn--ilj.xn--3xa", "xn--ilj.xn--3xa"); }
3034test { try parseIDNAPass("\xe1\x82\xba.\xcf\x83", "xn--ilj.xn--4xa"); }
3035test { try parseIDNAPass("\xe6\xb7\xbd\xe3\x80\x82\xe1\xa0\xbe", "xn--34w.xn--x7e"); }
3036test { try parseIDNAPass("xn--34w.xn--x7e", "xn--34w.xn--x7e"); }
3037test { try parseIDNAPass("\xe6\xb7\xbd.\xe1\xa0\xbe", "xn--34w.xn--x7e"); }
3038test { try parseIDNAPass("..", ".."); }
3039test { try parseIDNAPass("xn---3-p9o.ss--", "xn---3-p9o.ss--"); }
3040test { try parseIDNAPass("51..xn--8-ogo", "51..xn--8-ogo"); }
3041test { try parseIDNAPass("\xea\xa1\xa0\xef\xbc\x8e\xdb\xb2", "xn--5c9a.xn--fmb"); }
3042test { try parseIDNAPass("\xea\xa1\xa0.\xdb\xb2", "xn--5c9a.xn--fmb"); }
3043test { try parseIDNAPass("xn--5c9a.xn--fmb", "xn--5c9a.xn--fmb"); }
3044test { try parseIDNAPass("1.2h", "1.2h"); }
3045test { try parseIDNAPass("xn--skjy82u.xn--gdh", "xn--skjy82u.xn--gdh"); }
3046test { try parseIDNAPass("\xe2\xb4\x81\xe7\x95\x9d.\xe2\x89\xae", "xn--skjy82u.xn--gdh"); }
3047test { try parseIDNAPass("\xe2\xb4\x81\xe7\x95\x9d.<\xcc\xb8", "xn--skjy82u.xn--gdh"); }
3048test { try parseIDNAPass("\xe1\x82\xa1\xe7\x95\x9d.<\xcc\xb8", "xn--skjy82u.xn--gdh"); }
3049test { try parseIDNAPass("\xe1\x82\xa1\xe7\x95\x9d.\xe2\x89\xae", "xn--skjy82u.xn--gdh"); }
3050test { try parseIDNAPass("\xf0\x9f\x95\xbc\xef\xbc\x8e\xef\xbe\xa0", "xn--my8h."); }
3051test { try parseIDNAPass("\xf0\x9f\x95\xbc.\xe1\x85\xa0", "xn--my8h."); }
3052test { try parseIDNAPass("xn--my8h.", "xn--my8h."); }
3053test { try parseIDNAPass("\xf0\x9f\x95\xbc.", "xn--my8h."); }
3054test { try parseIDNAPass("\xcf\x82\xe1\x83\x85\xe3\x80\x82\xdd\x9a", "xn--3xa403s.xn--epb"); }
3055test { try parseIDNAPass("\xcf\x82\xe2\xb4\xa5\xe3\x80\x82\xdd\x9a", "xn--3xa403s.xn--epb"); }
3056test { try parseIDNAPass("\xce\xa3\xe1\x83\x85\xe3\x80\x82\xdd\x9a", "xn--4xa203s.xn--epb"); }
3057test { try parseIDNAPass("\xcf\x83\xe2\xb4\xa5\xe3\x80\x82\xdd\x9a", "xn--4xa203s.xn--epb"); }
3058test { try parseIDNAPass("\xce\xa3\xe2\xb4\xa5\xe3\x80\x82\xdd\x9a", "xn--4xa203s.xn--epb"); }
3059test { try parseIDNAPass("xn--4xa203s.xn--epb", "xn--4xa203s.xn--epb"); }
3060test { try parseIDNAPass("\xcf\x83\xe2\xb4\xa5.\xdd\x9a", "xn--4xa203s.xn--epb"); }
3061test { try parseIDNAPass("\xce\xa3\xe1\x83\x85.\xdd\x9a", "xn--4xa203s.xn--epb"); }
3062test { try parseIDNAPass("\xce\xa3\xe2\xb4\xa5.\xdd\x9a", "xn--4xa203s.xn--epb"); }
3063test { try parseIDNAPass("xn--3xa403s.xn--epb", "xn--3xa403s.xn--epb"); }
3064test { try parseIDNAPass("\xcf\x82\xe2\xb4\xa5.\xdd\x9a", "xn--3xa403s.xn--epb"); }
3065test { try parseIDNAPass("xn--vkb.xn--08e172a", "xn--vkb.xn--08e172a"); }
3066test { try parseIDNAPass("\xda\xbc.\xe1\xba\x8f\xe1\xa1\xa4", "xn--vkb.xn--08e172a"); }
3067test { try parseIDNAPass("\xda\xbc.y\xcc\x87\xe1\xa1\xa4", "xn--vkb.xn--08e172a"); }
3068test { try parseIDNAPass("\xda\xbc.Y\xcc\x87\xe1\xa1\xa4", "xn--vkb.xn--08e172a"); }
3069test { try parseIDNAPass("\xda\xbc.\xe1\xba\x8e\xe1\xa1\xa4", "xn--vkb.xn--08e172a"); }
3070test { try parseIDNAPass("xn--pt9c.xn--0kjya", "xn--pt9c.xn--0kjya"); }
3071test { try parseIDNAPass("\xf0\x90\xa9\x97.\xe2\xb4\x89\xe2\xb4\x95", "xn--pt9c.xn--0kjya"); }
3072test { try parseIDNAPass("\xf0\x90\xa9\x97.\xe1\x82\xa9\xe1\x82\xb5", "xn--pt9c.xn--0kjya"); }
3073test { try parseIDNAPass("\xf0\x90\xa9\x97.\xe1\x82\xa9\xe2\xb4\x95", "xn--pt9c.xn--0kjya"); }
3074test { try parseIDNAPass("\xf0\xb2\xa4\xb120.\xe9\x9f\xb3.\xea\xa1\xa61.", "xn--20-9802c.xn--0w5a.xn--1-eg4e."); }
3075test { try parseIDNAPass("xn--20-9802c.xn--0w5a.xn--1-eg4e.", "xn--20-9802c.xn--0w5a.xn--1-eg4e."); }
3076test { try parseIDNAPass("\xe1\x82\xb5\xe3\x80\x82\xdb\xb0\xe2\x89\xae\xc3\x9f\xdd\x85", "xn--dlj.xn--zca912alh227g"); }
3077test { try parseIDNAPass("\xe1\x82\xb5\xe3\x80\x82\xdb\xb0<\xcc\xb8\xc3\x9f\xdd\x85", "xn--dlj.xn--zca912alh227g"); }
3078test { try parseIDNAPass("\xe2\xb4\x95\xe3\x80\x82\xdb\xb0<\xcc\xb8\xc3\x9f\xdd\x85", "xn--dlj.xn--zca912alh227g"); }
3079test { try parseIDNAPass("\xe2\xb4\x95\xe3\x80\x82\xdb\xb0\xe2\x89\xae\xc3\x9f\xdd\x85", "xn--dlj.xn--zca912alh227g"); }
3080test { try parseIDNAPass("\xe1\x82\xb5\xe3\x80\x82\xdb\xb0\xe2\x89\xaeSS\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3081test { try parseIDNAPass("\xe1\x82\xb5\xe3\x80\x82\xdb\xb0<\xcc\xb8SS\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3082test { try parseIDNAPass("\xe2\xb4\x95\xe3\x80\x82\xdb\xb0<\xcc\xb8ss\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3083test { try parseIDNAPass("\xe2\xb4\x95\xe3\x80\x82\xdb\xb0\xe2\x89\xaess\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3084test { try parseIDNAPass("\xe1\x82\xb5\xe3\x80\x82\xdb\xb0\xe2\x89\xaeSs\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3085test { try parseIDNAPass("\xe1\x82\xb5\xe3\x80\x82\xdb\xb0<\xcc\xb8Ss\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3086test { try parseIDNAPass("xn--dlj.xn--ss-jbe65aw27i", "xn--dlj.xn--ss-jbe65aw27i"); }
3087test { try parseIDNAPass("\xe2\xb4\x95.\xdb\xb0\xe2\x89\xaess\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3088test { try parseIDNAPass("\xe2\xb4\x95.\xdb\xb0<\xcc\xb8ss\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3089test { try parseIDNAPass("\xe1\x82\xb5.\xdb\xb0<\xcc\xb8SS\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3090test { try parseIDNAPass("\xe1\x82\xb5.\xdb\xb0\xe2\x89\xaeSS\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3091test { try parseIDNAPass("\xe1\x82\xb5.\xdb\xb0\xe2\x89\xaeSs\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3092test { try parseIDNAPass("\xe1\x82\xb5.\xdb\xb0<\xcc\xb8Ss\xdd\x85", "xn--dlj.xn--ss-jbe65aw27i"); }
3093test { try parseIDNAPass("xn--dlj.xn--zca912alh227g", "xn--dlj.xn--zca912alh227g"); }
3094test { try parseIDNAPass("\xe2\xb4\x95.\xdb\xb0\xe2\x89\xae\xc3\x9f\xdd\x85", "xn--dlj.xn--zca912alh227g"); }
3095test { try parseIDNAPass("\xe2\xb4\x95.\xdb\xb0<\xcc\xb8\xc3\x9f\xdd\x85", "xn--dlj.xn--zca912alh227g"); }
3096test { try parseIDNAPass("xn--ge6h.xn--oc9a", "xn--ge6h.xn--oc9a"); }
3097test { try parseIDNAPass("\xf0\x9e\xa4\xa8.\xea\xa1\x8f", "xn--ge6h.xn--oc9a"); }
3098test { try parseIDNAPass("\xf0\x9e\xa4\x86.\xea\xa1\x8f", "xn--ge6h.xn--oc9a"); }
3099test { try parseIDNAPass(".xn--ss--bi1b", ".xn--ss--bi1b"); }
3100test { try parseIDNAPass("\xe9\xbd\x99--\xf0\x9d\x9f\xb0.\xc3\x9f", "xn----4-p16k.xn--zca"); }
3101test { try parseIDNAPass("\xe9\xbd\x99--4.\xc3\x9f", "xn----4-p16k.xn--zca"); }
3102test { try parseIDNAPass("\xe9\xbd\x99--4.SS", "xn----4-p16k.ss"); }
3103test { try parseIDNAPass("\xe9\xbd\x99--4.ss", "xn----4-p16k.ss"); }
3104test { try parseIDNAPass("\xe9\xbd\x99--4.Ss", "xn----4-p16k.ss"); }
3105test { try parseIDNAPass("xn----4-p16k.ss", "xn----4-p16k.ss"); }
3106test { try parseIDNAPass("xn----4-p16k.xn--zca", "xn----4-p16k.xn--zca"); }
3107test { try parseIDNAPass("\xe9\xbd\x99--\xf0\x9d\x9f\xb0.SS", "xn----4-p16k.ss"); }
3108test { try parseIDNAPass("\xe9\xbd\x99--\xf0\x9d\x9f\xb0.ss", "xn----4-p16k.ss"); }
3109test { try parseIDNAPass("\xe9\xbd\x99--\xf0\x9d\x9f\xb0.Ss", "xn----4-p16k.ss"); }
3110test { try parseIDNAPass("xn--9-i0j5967eg3qz.ss", "xn--9-i0j5967eg3qz.ss"); }
3111test { try parseIDNAPass("\xf0\xb2\xae\x9a9\xea\x8d\xa9\xe1\x9f\x93.ss", "xn--9-i0j5967eg3qz.ss"); }
3112test { try parseIDNAPass("\xf0\xb2\xae\x9a9\xea\x8d\xa9\xe1\x9f\x93.SS", "xn--9-i0j5967eg3qz.ss"); }
3113test { try parseIDNAPass("\xea\x97\xb7\xf0\x91\x86\x80.\xdd\x9d\xf0\x90\xa9\x92", "xn--ju8a625r.xn--hpb0073k"); }
3114test { try parseIDNAPass("xn--ju8a625r.xn--hpb0073k", "xn--ju8a625r.xn--hpb0073k"); }
3115test { try parseIDNAPass("xn----3vs.xn--0kj", "xn----3vs.xn--0kj"); }
3116test { try parseIDNAPass("\xcf\x82.\xd9\x81\xd9\x85\xd9\x8a\xf0\x9f\x9e\x9b1.", "xn--3xa.xn--1-gocmu97674d."); }
3117test { try parseIDNAPass("\xce\xa3.\xd9\x81\xd9\x85\xd9\x8a\xf0\x9f\x9e\x9b1.", "xn--4xa.xn--1-gocmu97674d."); }
3118test { try parseIDNAPass("\xcf\x83.\xd9\x81\xd9\x85\xd9\x8a\xf0\x9f\x9e\x9b1.", "xn--4xa.xn--1-gocmu97674d."); }
3119test { try parseIDNAPass("xn--4xa.xn--1-gocmu97674d.", "xn--4xa.xn--1-gocmu97674d."); }
3120test { try parseIDNAPass("xn--3xa.xn--1-gocmu97674d.", "xn--3xa.xn--1-gocmu97674d."); }
3121test { try parseIDNAPass(".xn--hva754s.", ".xn--hva754s."); }
3122test { try parseIDNAPass("xn--hva754s.", "xn--hva754s."); }
3123test { try parseIDNAPass("\xe2\xb4\x96\xcd\xa6.", "xn--hva754s."); }
3124test { try parseIDNAPass("\xe1\x82\xb6\xcd\xa6.", "xn--hva754s."); }
3125test { try parseIDNAPass("xn--hzb.xn--ukj4430l", "xn--hzb.xn--ukj4430l"); }
3126test { try parseIDNAPass("\xe0\xa2\xbb.\xe2\xb4\x83\xf0\x9e\x80\x92", "xn--hzb.xn--ukj4430l"); }
3127test { try parseIDNAPass("\xe0\xa2\xbb.\xe1\x82\xa3\xf0\x9e\x80\x92", "xn--hzb.xn--ukj4430l"); }
3128test { try parseIDNAPass("\xf3\xa0\x86\x93\xe2\x9b\x8f-\xe3\x80\x82\xea\xa1\x92", "xn----o9p.xn--rc9a"); }
3129test { try parseIDNAPass("xn----o9p.xn--rc9a", "xn----o9p.xn--rc9a"); }
3130test { try parseIDNAPass("xn--p9ut19m.xn----mck373i", "xn--p9ut19m.xn----mck373i"); }
3131test { try parseIDNAPass("\xe6\x94\x8c\xea\xaf\xad.\xe1\xa2\x96-\xe2\xb4\x98", "xn--p9ut19m.xn----mck373i"); }
3132test { try parseIDNAPass("\xe6\x94\x8c\xea\xaf\xad.\xe1\xa2\x96-\xe1\x82\xb8", "xn--p9ut19m.xn----mck373i"); }
3133test { try parseIDNAPass("xn--9r8a.16.xn--3-nyc0117m", "xn--9r8a.16.xn--3-nyc0117m"); }
3134test { try parseIDNAPass("\xea\x96\xa8.16.3\xed\x88\x92\xdb\xb3", "xn--9r8a.16.xn--3-nyc0117m"); }
3135test { try parseIDNAPass("\xea\x96\xa8.16.3\xe1\x84\x90\xe1\x85\xad\xe1\x86\xa9\xdb\xb3", "xn--9r8a.16.xn--3-nyc0117m"); }
3136test { try parseIDNAPass("xn--1-5bt6845n.", "xn--1-5bt6845n."); }
3137test { try parseIDNAPass("1\xf0\x9d\xa8\x99\xe2\xb8\x96.", "xn--1-5bt6845n."); }
3138test { try parseIDNAPass(".1.xn--9-ogo", ".1.xn--9-ogo"); }
3139test { try parseIDNAPass("xn--ss-f4j.b.", "xn--ss-f4j.b."); }
3140test { try parseIDNAPass("ss\xe1\x80\xba.b.", "xn--ss-f4j.b."); }
3141test { try parseIDNAPass("SS\xe1\x80\xba.B.", "xn--ss-f4j.b."); }
3142test { try parseIDNAPass("Ss\xe1\x80\xba.b.", "xn--ss-f4j.b."); }
3143test { try parseIDNAPass("SS\xe1\x80\xba.b.", "xn--ss-f4j.b."); }
3144test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf\xef\xbc\x8e\xc3\x9f\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--zca216edt0r"); }
3145test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf.\xc3\x9f\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--zca216edt0r"); }
3146test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf.SS\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--ss-toj6092t"); }
3147test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf.ss\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--ss-toj6092t"); }
3148test { try parseIDNAPass("xn--clb2593k.xn--ss-toj6092t", "xn--clb2593k.xn--ss-toj6092t"); }
3149test { try parseIDNAPass("xn--clb2593k.xn--zca216edt0r", "xn--clb2593k.xn--zca216edt0r"); }
3150test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf\xef\xbc\x8eSS\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--ss-toj6092t"); }
3151test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf\xef\xbc\x8ess\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--ss-toj6092t"); }
3152test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf.Ss\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--ss-toj6092t"); }
3153test { try parseIDNAPass("\xdb\x8c\xf0\x90\xa8\xbf\xef\xbc\x8eSs\xe0\xbe\x84\xf0\x91\x8d\xac", "xn--clb2593k.xn--ss-toj6092t"); }
3154test { try parseIDNAPass("xn--8-ngo.", "xn--8-ngo."); }
3155test { try parseIDNAPass("8\xe2\x89\xae.", "xn--8-ngo."); }
3156test { try parseIDNAPass("8<\xcc\xb8.", "xn--8-ngo."); }
3157test { try parseIDNAPass("\xe7\xbe\x9a\xef\xbd\xa1\xe2\x89\xaf", "xn--xt0a.xn--hdh"); }
3158test { try parseIDNAPass("\xe7\xbe\x9a\xef\xbd\xa1>\xcc\xb8", "xn--xt0a.xn--hdh"); }
3159test { try parseIDNAPass("\xe7\xbe\x9a\xe3\x80\x82\xe2\x89\xaf", "xn--xt0a.xn--hdh"); }
3160test { try parseIDNAPass("\xe7\xbe\x9a\xe3\x80\x82>\xcc\xb8", "xn--xt0a.xn--hdh"); }
3161test { try parseIDNAPass("xn--xt0a.xn--hdh", "xn--xt0a.xn--hdh"); }
3162test { try parseIDNAPass("\xe7\xbe\x9a.\xe2\x89\xaf", "xn--xt0a.xn--hdh"); }
3163test { try parseIDNAPass("\xe7\xbe\x9a.>\xcc\xb8", "xn--xt0a.xn--hdh"); }
3164test { try parseIDNAPass(".xn--ye6h", ".xn--ye6h"); }
3165test { try parseIDNAPass("xn--ye6h", "xn--ye6h"); }
3166test { try parseIDNAPass("\xf0\x9e\xa4\xba", "xn--ye6h"); }
3167test { try parseIDNAPass("\xf0\x9e\xa4\x98", "xn--ye6h"); }
3168test { try parseIDNAPass("\xf0\x9d\x9f\x9b\xef\xbc\x8e\xef\xa7\xb8", "3.xn--6vz"); }
3169test { try parseIDNAPass("\xf0\x9d\x9f\x9b\xef\xbc\x8e\xe7\xac\xa0", "3.xn--6vz"); }
3170test { try parseIDNAPass("3.\xe7\xac\xa0", "3.xn--6vz"); }
3171test { try parseIDNAPass("3.xn--6vz", "3.xn--6vz"); }
3172test { try parseIDNAPass("-.xn--mlj8559d", "-.xn--mlj8559d"); }
3173test { try parseIDNAPass("xn--1ch.", "xn--1ch."); }
3174test { try parseIDNAPass("\xe2\x89\xa0.", "xn--1ch."); }
3175test { try parseIDNAPass("=\xcc\xb8.", "xn--1ch."); }
3176test { try parseIDNAPass("-\xe3\x80\x82\xe3\x80\x82", "-.."); }
3177test { try parseIDNAPass("-..", "-.."); }
3178test { try parseIDNAPass(".f", ".f"); }
3179test { try parseIDNAPass("f", "f"); }
3180test { try parseIDNAPass("xn--9bm.ss", "xn--9bm.ss"); }
3181test { try parseIDNAPass("\xe3\xa8\xb2.ss", "xn--9bm.ss"); }
3182test { try parseIDNAPass("\xe3\xa8\xb2.SS", "xn--9bm.ss"); }
3183test { try parseIDNAPass("\xe3\xa8\xb2.Ss", "xn--9bm.ss"); }
3184test { try parseIDNAPass("\xf0\x9d\x9f\x8e\xe3\x80\x82\xe7\x94\xaf", "0.xn--qny"); }
3185test { try parseIDNAPass("0\xe3\x80\x82\xe7\x94\xaf", "0.xn--qny"); }
3186test { try parseIDNAPass("0.xn--qny", "0.xn--qny"); }
3187test { try parseIDNAPass("0.\xe7\x94\xaf", "0.xn--qny"); }
3188test { try parseIDNAPass("-\xef\xbd\xa1\xe1\xa2\x98", "-.xn--ibf"); }
3189test { try parseIDNAPass("-\xe3\x80\x82\xe1\xa2\x98", "-.xn--ibf"); }
3190test { try parseIDNAPass("-.xn--ibf", "-.xn--ibf"); }
3191test { try parseIDNAPass("\xf0\x9f\x82\xb4\xe1\x82\xab.\xe2\x89\xae", "xn--2kj7565l.xn--gdh"); }
3192test { try parseIDNAPass("\xf0\x9f\x82\xb4\xe1\x82\xab.<\xcc\xb8", "xn--2kj7565l.xn--gdh"); }
3193test { try parseIDNAPass("\xf0\x9f\x82\xb4\xe2\xb4\x8b.<\xcc\xb8", "xn--2kj7565l.xn--gdh"); }
3194test { try parseIDNAPass("\xf0\x9f\x82\xb4\xe2\xb4\x8b.\xe2\x89\xae", "xn--2kj7565l.xn--gdh"); }
3195test { try parseIDNAPass("xn--2kj7565l.xn--gdh", "xn--2kj7565l.xn--gdh"); }
3196test { try parseIDNAPass("xn--gky8837e.", "xn--gky8837e."); }
3197test { try parseIDNAPass("\xe7\x92\xbc\xf0\x9d\xa8\xad.", "xn--gky8837e."); }
3198test { try parseIDNAPass("xn--157b.xn--gnb", "xn--157b.xn--gnb"); }
3199test { try parseIDNAPass("\xed\x8a\x9b.\xdc\x96", "xn--157b.xn--gnb"); }
3200test { try parseIDNAPass("\xe1\x84\x90\xe1\x85\xb1\xe1\x87\x82.\xdc\x96", "xn--157b.xn--gnb"); }
3201test { try parseIDNAPass("xn--84-s850a.xn--59h6326e", "xn--84-s850a.xn--59h6326e"); }
3202test { try parseIDNAPass("84\xf0\x9d\x88\xbb.\xf0\x90\x8b\xb5\xe2\x9b\xa7", "xn--84-s850a.xn--59h6326e"); }
3203test { try parseIDNAPass("\xe2\x89\xae\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96\xc3\x9f\xe2\x89\xaf", "xn--7-mgo.xn--zca892oly5e"); }
3204test { try parseIDNAPass("<\xcc\xb8\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96\xc3\x9f>\xcc\xb8", "xn--7-mgo.xn--zca892oly5e"); }
3205test { try parseIDNAPass("\xe2\x89\xae7.\xe8\xac\x96\xc3\x9f\xe2\x89\xaf", "xn--7-mgo.xn--zca892oly5e"); }
3206test { try parseIDNAPass("<\xcc\xb87.\xe8\xac\x96\xc3\x9f>\xcc\xb8", "xn--7-mgo.xn--zca892oly5e"); }
3207test { try parseIDNAPass("<\xcc\xb87.\xe8\xac\x96SS>\xcc\xb8", "xn--7-mgo.xn--ss-xjvv174c"); }
3208test { try parseIDNAPass("\xe2\x89\xae7.\xe8\xac\x96SS\xe2\x89\xaf", "xn--7-mgo.xn--ss-xjvv174c"); }
3209test { try parseIDNAPass("\xe2\x89\xae7.\xe8\xac\x96ss\xe2\x89\xaf", "xn--7-mgo.xn--ss-xjvv174c"); }
3210test { try parseIDNAPass("<\xcc\xb87.\xe8\xac\x96ss>\xcc\xb8", "xn--7-mgo.xn--ss-xjvv174c"); }
3211test { try parseIDNAPass("<\xcc\xb87.\xe8\xac\x96Ss>\xcc\xb8", "xn--7-mgo.xn--ss-xjvv174c"); }
3212test { try parseIDNAPass("\xe2\x89\xae7.\xe8\xac\x96Ss\xe2\x89\xaf", "xn--7-mgo.xn--ss-xjvv174c"); }
3213test { try parseIDNAPass("xn--7-mgo.xn--ss-xjvv174c", "xn--7-mgo.xn--ss-xjvv174c"); }
3214test { try parseIDNAPass("xn--7-mgo.xn--zca892oly5e", "xn--7-mgo.xn--zca892oly5e"); }
3215test { try parseIDNAPass("<\xcc\xb8\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96SS>\xcc\xb8", "xn--7-mgo.xn--ss-xjvv174c"); }
3216test { try parseIDNAPass("\xe2\x89\xae\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96SS\xe2\x89\xaf", "xn--7-mgo.xn--ss-xjvv174c"); }
3217test { try parseIDNAPass("\xe2\x89\xae\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96ss\xe2\x89\xaf", "xn--7-mgo.xn--ss-xjvv174c"); }
3218test { try parseIDNAPass("<\xcc\xb8\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96ss>\xcc\xb8", "xn--7-mgo.xn--ss-xjvv174c"); }
3219test { try parseIDNAPass("<\xcc\xb8\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96Ss>\xcc\xb8", "xn--7-mgo.xn--ss-xjvv174c"); }
3220test { try parseIDNAPass("\xe2\x89\xae\xf0\x9d\x9f\x95\xef\xbc\x8e\xe8\xac\x96Ss\xe2\x89\xaf", "xn--7-mgo.xn--ss-xjvv174c"); }
3221test { try parseIDNAPass(".xn--ss-bh7o", ".xn--ss-bh7o"); }
3222test { try parseIDNAPass("xn--ss-bh7o", "xn--ss-bh7o"); }
3223test { try parseIDNAPass("ss\xf0\x91\x93\x83", "xn--ss-bh7o"); }
3224test { try parseIDNAPass("SS\xf0\x91\x93\x83", "xn--ss-bh7o"); }
3225test { try parseIDNAPass("Ss\xf0\x91\x93\x83", "xn--ss-bh7o"); }
3226test { try parseIDNAPass(".xn--qekw60d.xn--gd9a", ".xn--qekw60d.xn--gd9a"); }
3227test { try parseIDNAPass("xn--qekw60d.xn--gd9a", "xn--qekw60d.xn--gd9a"); }
3228test { try parseIDNAPass("\xe3\x83\xb6\xe4\x92\xa9.\xea\xa1\xaa", "xn--qekw60d.xn--gd9a"); }
3229test { try parseIDNAPass("\xf0\x9d\x85\xb5\xe3\x80\x829\xf0\x9e\x80\x88\xe4\xac\xba1.", ".xn--91-030c1650n."); }
3230test { try parseIDNAPass(".xn--91-030c1650n.", ".xn--91-030c1650n."); }
3231test { try parseIDNAPass("xn--8c1a.xn--2ib8jn539l", "xn--8c1a.xn--2ib8jn539l"); }
3232test { try parseIDNAPass("\xe8\x88\x9b.\xd9\xbd\xf0\x9e\xa4\xb4\xda\xbb", "xn--8c1a.xn--2ib8jn539l"); }
3233test { try parseIDNAPass("\xe8\x88\x9b.\xd9\xbd\xf0\x9e\xa4\x92\xda\xbb", "xn--8c1a.xn--2ib8jn539l"); }
3234test { try parseIDNAPass("\xe1\x9e\xb4.\xec\xae\x87-", ".xn----938f"); }
3235test { try parseIDNAPass("\xe1\x9e\xb4.\xe1\x84\x8d\xe1\x85\xb0\xe1\x86\xae-", ".xn----938f"); }
3236test { try parseIDNAPass(".xn----938f", ".xn----938f"); }
3237test { try parseIDNAPass(".xn--hcb32bni", ".xn--hcb32bni"); }
3238test { try parseIDNAPass("xn--hcb32bni", "xn--hcb32bni"); }
3239test { try parseIDNAPass("\xda\xbd\xd9\xa3\xd6\x96", "xn--hcb32bni"); }
3240test { try parseIDNAPass("\xe1\xa2\x8c\xef\xbc\x8e-\xe0\xa1\x9a", "xn--59e.xn----5jd"); }
3241test { try parseIDNAPass("\xe1\xa2\x8c.-\xe0\xa1\x9a", "xn--59e.xn----5jd"); }
3242test { try parseIDNAPass("xn--59e.xn----5jd", "xn--59e.xn----5jd"); }
3243test { try parseIDNAPass("xn--8gb2338k.xn--lhb0154f", "xn--8gb2338k.xn--lhb0154f"); }
3244test { try parseIDNAPass("\xd8\xbd\xf0\x91\x88\xbe.\xd9\x89\xea\xa4\xab", "xn--8gb2338k.xn--lhb0154f"); }
3245test { try parseIDNAPass("\xe1\x83\x81\xe1\x82\xb16\xcc\x98\xe3\x80\x82\xc3\x9f\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--zca894k"); }
3246test { try parseIDNAPass("\xe2\xb4\xa1\xe2\xb4\x916\xcc\x98\xe3\x80\x82\xc3\x9f\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--zca894k"); }
3247test { try parseIDNAPass("\xe1\x83\x81\xe1\x82\xb16\xcc\x98\xe3\x80\x82SS\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--ss-2vq"); }
3248test { try parseIDNAPass("\xe2\xb4\xa1\xe2\xb4\x916\xcc\x98\xe3\x80\x82ss\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--ss-2vq"); }
3249test { try parseIDNAPass("\xe1\x83\x81\xe2\xb4\x916\xcc\x98\xe3\x80\x82Ss\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--ss-2vq"); }
3250test { try parseIDNAPass("xn--6-8cb7433a2ba.xn--ss-2vq", "xn--6-8cb7433a2ba.xn--ss-2vq"); }
3251test { try parseIDNAPass("\xe2\xb4\xa1\xe2\xb4\x916\xcc\x98.ss\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--ss-2vq"); }
3252test { try parseIDNAPass("\xe1\x83\x81\xe1\x82\xb16\xcc\x98.SS\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--ss-2vq"); }
3253test { try parseIDNAPass("\xe1\x83\x81\xe2\xb4\x916\xcc\x98.Ss\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--ss-2vq"); }
3254test { try parseIDNAPass("xn--6-8cb7433a2ba.xn--zca894k", "xn--6-8cb7433a2ba.xn--zca894k"); }
3255test { try parseIDNAPass("\xe2\xb4\xa1\xe2\xb4\x916\xcc\x98.\xc3\x9f\xe1\xac\x83", "xn--6-8cb7433a2ba.xn--zca894k"); }
3256test { try parseIDNAPass("xn--7zv.", "xn--7zv."); }
3257test { try parseIDNAPass("\xe6\xa2\x89.", "xn--7zv."); }
3258test { try parseIDNAPass("xn--iwb.ss", "xn--iwb.ss"); }
3259test { try parseIDNAPass("\xe0\xa1\x93.ss", "xn--iwb.ss"); }
3260test { try parseIDNAPass("\xe0\xa1\x93.SS", "xn--iwb.ss"); }
3261test { try parseIDNAPass("-\xef\xbd\xa1\xe2\xba\x90", "-.xn--6vj"); }
3262test { try parseIDNAPass("-\xe3\x80\x82\xe2\xba\x90", "-.xn--6vj"); }
3263test { try parseIDNAPass("-.xn--6vj", "-.xn--6vj"); }
3264test { try parseIDNAPass("xn--ix9c26l.xn--q0s", "xn--ix9c26l.xn--q0s"); }
3265test { try parseIDNAPass("\xf0\x90\xab\x9c\xf0\x91\x8c\xbc.\xe5\xa9\x80", "xn--ix9c26l.xn--q0s"); }
3266test { try parseIDNAPass("\xf0\x90\xab\x80\xef\xbc\x8e\xda\x89\xf0\x91\x8c\x80", "xn--pw9c.xn--fjb8658k"); }
3267test { try parseIDNAPass("\xf0\x90\xab\x80.\xda\x89\xf0\x91\x8c\x80", "xn--pw9c.xn--fjb8658k"); }
3268test { try parseIDNAPass("xn--pw9c.xn--fjb8658k", "xn--pw9c.xn--fjb8658k"); }
3269test { try parseIDNAPass("xn--r97c.", "xn--r97c."); }
3270test { try parseIDNAPass("\xf0\x90\x8b\xb7.", "xn--r97c."); }