cleaned up twchartoutf8 test
This commit is contained in:
parent
c56a1f8266
commit
dd2a0ec431
1 changed files with 91 additions and 87 deletions
|
|
@ -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"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue