@safe unittest { import std.encoding; assert(encodingName!(char) == "UTF-8"); assert(encodingName!(wchar) == "UTF-16"); assert(encodingName!(dchar) == "UTF-32"); assert(encodingName!(AsciiChar) == "ASCII"); assert(encodingName!(Latin1Char) == "ISO-8859-1"); assert(encodingName!(Latin2Char) == "ISO-8859-2"); assert(encodingName!(Windows1250Char) == "windows-1250"); assert(encodingName!(Windows1251Char) == "windows-1251"); assert(encodingName!(Windows1252Char) == "windows-1252"); } @safe pure unittest { import std.encoding; assert( canEncode!(Latin1Char)('A')); assert( canEncode!(Latin2Char)('A')); assert(!canEncode!(AsciiChar)('\u00A0')); assert( canEncode!(Latin1Char)('\u00A0')); assert( canEncode!(Latin2Char)('\u00A0')); assert( canEncode!(Windows1250Char)('\u20AC')); assert(!canEncode!(Windows1250Char)('\u20AD')); assert(!canEncode!(Windows1250Char)('\uFFFD')); assert( canEncode!(Windows1251Char)('\u0402')); assert(!canEncode!(Windows1251Char)('\u20AD')); assert(!canEncode!(Windows1251Char)('\uFFFD')); assert( canEncode!(Windows1252Char)('\u20AC')); assert(!canEncode!(Windows1252Char)('\u20AD')); assert(!canEncode!(Windows1252Char)('\uFFFD')); assert(!canEncode!(char)(cast(dchar) 0x110000)); } @safe pure unittest { import std.encoding; import std.algorithm.searching : find; import std.utf : byDchar; assert("The quick brown fox" .byDchar .find!(x => !canEncode!AsciiChar(x)) .empty); } @system pure unittest { import std.encoding; assert(!isValidCodeUnit(cast(char) 0xC0)); assert(!isValidCodeUnit(cast(char) 0xFF)); assert( isValidCodeUnit(cast(wchar) 0xD800)); assert(!isValidCodeUnit(cast(dchar) 0xD800)); assert(!isValidCodeUnit(cast(AsciiChar) 0xA0)); assert( isValidCodeUnit(cast(Windows1250Char) 0x80)); assert(!isValidCodeUnit(cast(Windows1250Char) 0x81)); assert( isValidCodeUnit(cast(Windows1251Char) 0x80)); assert(!isValidCodeUnit(cast(Windows1251Char) 0x98)); assert( isValidCodeUnit(cast(Windows1252Char) 0x80)); assert(!isValidCodeUnit(cast(Windows1252Char) 0x81)); } @system pure unittest { import std.encoding; assert( isValid("\u20AC100")); assert(!isValid(cast(char[3])[167, 133, 175])); } @system pure unittest { import std.encoding; assert(sanitize("hello \xF0\x80world") == "hello \xEF\xBF\xBDworld"); } @system pure unittest { import std.encoding; assert(firstSequence("\u20AC1000") == "\u20AC".length); assert(firstSequence("hel") == "h".length); } @system pure unittest { import std.encoding; assert(lastSequence("1000\u20AC") == "\u20AC".length); assert(lastSequence("hellö") == "ö".length); } @system pure unittest { import std.encoding; assert(index("\u20AC100",1) == 3); assert(index("hällo",2) == 3); } @system unittest { import std.encoding; string s = "hello"; string t; foreach (c;codePoints(s)) { t ~= cast(char) c; } assert(s == t); } @system unittest { import std.encoding; char[] a; foreach (c;codeUnits!(char)(cast(dchar)'\u20AC')) { a ~= c; } assert(a.length == 3); assert(a[0] == 0xE2); assert(a[1] == 0x82); assert(a[2] == 0xAC); } @system pure unittest { import std.encoding; wstring ws; // transcode from UTF-8 to UTF-16 transcode("hello world",ws); assert(ws == "hello world"w); Latin1String ls; // transcode from UTF-16 to ISO-8859-1 transcode(ws, ls); assert(ls == "hello world"); } @system unittest { import std.encoding; import std.format : format; auto ts = dchar(0x0000FEFF) ~ "Hello World"d; auto entry = getBOM(cast(ubyte[]) ts); version (BigEndian) { assert(entry.schema == BOM.utf32be, format("%s", entry.schema)); } else { assert(entry.schema == BOM.utf32le, format("%s", entry.schema)); } }