Files
mercury/tests/hard_coded/string_codepoint_offset_ilseq.exp
Peter Wang 7350e7f0b6 Define behaviour of string.codepoint_offset on ill-formed sequences.
library/string.m:
    Define how string.codepoint_offset counts code units in ill-formed
    sequences.

    Delete C and C# foreign implementations in favour of the Mercury
    implementation that has the intended behaviour.
    (The Java implementation uses String.offsetByCodePoints which
    also matches our intended behaviour.)

tests/hard_coded/Mmakefile:
tests/hard_coded/string_codepoint_offset_ilseq.exp2:
tests/hard_coded/string_codepoint_offset_ilseq.m:
    Add test case.
2019-10-24 09:22:13 +11:00

31 lines
1.2 KiB
Plaintext

start counting from offset 0
string.codepoint_offset(S, 0, 0, 0); Char = a
string.codepoint_offset(S, 0, 1, 1); Char = 😀
string.codepoint_offset(S, 0, 2, 5); Char = b
string.codepoint_offset(S, 0, 3, 6); Char = 0xfffd
string.codepoint_offset(S, 0, 4, 7); Char = 0xfffd
string.codepoint_offset(S, 0, 5, 8); Char = 0xfffd
string.codepoint_offset(S, 0, 6, 9); Char = z
string.codepoint_offset(S, 0, 7, _) failed
start counting from offset 1
string.codepoint_offset(S, 1, 0, 1); Char = 😀
string.codepoint_offset(S, 1, 1, 5); Char = b
string.codepoint_offset(S, 1, 2, 6); Char = 0xfffd
string.codepoint_offset(S, 1, 3, 7); Char = 0xfffd
string.codepoint_offset(S, 1, 4, 8); Char = 0xfffd
string.codepoint_offset(S, 1, 5, 9); Char = z
string.codepoint_offset(S, 1, 6, _) failed
start counting from offset 2
string.codepoint_offset(S, 2, 0, 2); Char = 0xfffd
string.codepoint_offset(S, 2, 1, 3); Char = 0xfffd
string.codepoint_offset(S, 2, 2, 4); Char = 0xfffd
string.codepoint_offset(S, 2, 3, 5); Char = b
string.codepoint_offset(S, 2, 4, 6); Char = 0xfffd
string.codepoint_offset(S, 2, 5, 7); Char = 0xfffd
string.codepoint_offset(S, 2, 6, 8); Char = 0xfffd
string.codepoint_offset(S, 2, 7, 9); Char = z
string.codepoint_offset(S, 2, 8, _) failed