cleaned up twchartoutf8 test

This commit is contained in:
Araq 2015-08-21 21:40:24 +02:00
commit dd2a0ec431

View file

@ -1,9 +1,13 @@
discard """
output: '''OK'''
"""
#assume WideCharToMultiByte always produce correct result #assume WideCharToMultiByte always produce correct result
#windows only #windows only
when not defined(windows): when not defined(windows):
{.error: "windows only".} echo "OK"
else:
{.push gcsafe.} {.push gcsafe.}
const CP_UTF8 = 65001'i32 const CP_UTF8 = 65001'i32
@ -27,7 +31,7 @@ proc convertToUTF8(wc: WideCString, wclen: int32): string =
let res = WideCharToMultiByte(CP_UTF8, 0'i32, cast[LPWCSTR](addr(wc[0])), wclen, let res = WideCharToMultiByte(CP_UTF8, 0'i32, cast[LPWCSTR](addr(wc[0])), wclen,
cstring(result), size, cstring(nil), LPBOOL(nil)) cstring(result), size, cstring(nil), LPBOOL(nil))
result[size] = chr(0) result[size] = chr(0)
assert size == res doAssert size == res
proc testCP(wc: WideCString, lo, hi: int) = proc testCP(wc: WideCString, lo, hi: int) =
var x = 0 var x = 0
@ -38,12 +42,12 @@ proc testCP(wc: WideCString, lo, hi: int) =
wc[x] = Utf16Char(0) wc[x] = Utf16Char(0)
var a = convertToUTF8(wc, int32(x)) var a = convertToUTF8(wc, int32(x))
var b = wc $ chunk var b = wc $ chunk
assert a == b doAssert a == b
x = 0 x = 0
inc x inc x
proc testCP2(wc: WideCString, lo, hi: int) = proc testCP2(wc: WideCString, lo, hi: int) =
assert((lo >= 0x10000) and (hi <= 0x10FFFF)) doAssert((lo >= 0x10000) and (hi <= 0x10FFFF))
var x = 0 var x = 0
let chunk = 1024 let chunk = 1024
for i in lo..hi: for i in lo..hi:
@ -58,7 +62,7 @@ proc testCP2(wc: WideCString, lo, hi: int) =
wc[x] = Utf16Char(0) wc[x] = Utf16Char(0)
var a = convertToUTF8(wc, int32(x)) var a = convertToUTF8(wc, int32(x))
var b = wc $ chunk var b = wc $ chunk
assert a == b doAssert a == b
x = 0 x = 0
#RFC-2781 "UTF-16, an encoding of ISO 10646" #RFC-2781 "UTF-16, an encoding of ISO 10646"
@ -84,23 +88,23 @@ const
wc[0] = cast[Utf16Char](0xDC00) wc[0] = cast[Utf16Char](0xDC00)
wc[1] = Utf16Char(0) wc[1] = Utf16Char(0)
var a = $wc var a = $wc
assert a == b doAssert a == b
wc[0] = cast[Utf16Char](0xFFFF) wc[0] = cast[Utf16Char](0xFFFF)
wc[1] = cast[Utf16Char](0xDC00) wc[1] = cast[Utf16Char](0xDC00)
wc[2] = Utf16Char(0) wc[2] = Utf16Char(0)
a = $wc a = $wc
assert a == c & b doAssert a == c & b
wc[0] = cast[Utf16Char](0xD800) wc[0] = cast[Utf16Char](0xD800)
wc[1] = Utf16Char(0) wc[1] = Utf16Char(0)
a = $wc a = $wc
assert a == b doAssert a == b
wc[0] = cast[Utf16Char](0xD800) wc[0] = cast[Utf16Char](0xD800)
wc[1] = cast[Utf16Char](0xFFFF) wc[1] = cast[Utf16Char](0xFFFF)
wc[2] = Utf16Char(0) wc[2] = Utf16Char(0)
a = $wc a = $wc
assert a == b & c doAssert a == b & c
echo "OK" echo "OK"