1
0
forked from Mirror/wren

Move codePointAt() to separate CodePointSequence class.

This commit is contained in:
Bob Nystrom
2015-09-11 07:56:01 -07:00
parent bda9ad880a
commit c0b5ec9f15
30 changed files with 202 additions and 76 deletions

View File

@ -0,0 +1,29 @@
var codePoints = "abçd".codePoints
IO.print(codePoints.iterate(null)) // expect: 0
IO.print(codePoints.iterate(0)) // expect: 1
IO.print(codePoints.iterate(1)) // expect: 2
// Skip 3 because that's the middle of the ç sequence.
IO.print(codePoints.iterate(2)) // expect: 4
// Iterating from the middle of a UTF-8 sequence goes to the next one.
IO.print(codePoints.iterate(3)) // expect: 4
IO.print(codePoints.iterate(4)) // expect: false
// Out of bounds.
IO.print(codePoints.iterate(123)) // expect: false
IO.print(codePoints.iterate(-1)) // expect: false
// Nothing to iterate in an empty string.
IO.print("".codePoints.iterate(null)) // expect: false
// 8-bit clean.
IO.print("a\0b\0c".codePoints.iterate(null)) // expect: 0
IO.print("a\0b\0c".codePoints.iterate(0)) // expect: 1
IO.print("a\0b\0c".codePoints.iterate(1)) // expect: 2
IO.print("a\0b\0c".codePoints.iterate(2)) // expect: 3
IO.print("a\0b\0c".codePoints.iterate(3)) // expect: 4
IO.print("a\0b\0c".codePoints.iterate(4)) // expect: false
// Iterates over invalid UTF-8 one byte at a time.
IO.print("\xef\xf7".codePoints.iterate(null)) // expect: 0
IO.print("\xef\xf7".codePoints.iterate(0)) // expect: 1
IO.print("\xef\xf7".codePoints.iterate(1)) // expect: false

View File

@ -0,0 +1 @@
"s".codePoints.iterate(1.5) // expect runtime error: Iterator must be an integer.

View File

@ -0,0 +1 @@
"s".codePoints.iterate("2") // expect runtime error: Iterator must be a number.

View File

@ -0,0 +1,42 @@
// Bytes: 11111
// 012345678901234
// Chars: sø mé ஃ thî ng
var codePoints = "søméஃthîng".codePoints
IO.print(codePoints.iteratorValue(0)) // expect: 115
IO.print(codePoints.iteratorValue(1)) // expect: 248
IO.print(codePoints.iteratorValue(2)) // expect: -1
IO.print(codePoints.iteratorValue(3)) // expect: 109
IO.print(codePoints.iteratorValue(4)) // expect: 233
IO.print(codePoints.iteratorValue(5)) // expect: -1
IO.print(codePoints.iteratorValue(6)) // expect: 2947
IO.print(codePoints.iteratorValue(7)) // expect: -1
IO.print(codePoints.iteratorValue(8)) // expect: -1
IO.print(codePoints.iteratorValue(9)) // expect: 116
IO.print(codePoints.iteratorValue(10)) // expect: 104
IO.print(codePoints.iteratorValue(11)) // expect: 238
IO.print(codePoints.iteratorValue(12)) // expect: -1
IO.print(codePoints.iteratorValue(13)) // expect: 110
IO.print(codePoints.iteratorValue(14)) // expect: 103
IO.print(codePoints.iteratorValue(-15)) // expect: 115
IO.print(codePoints.iteratorValue(-14)) // expect: 248
IO.print(codePoints.iteratorValue(-13)) // expect: -1
IO.print(codePoints.iteratorValue(-12)) // expect: 109
IO.print(codePoints.iteratorValue(-11)) // expect: 233
IO.print(codePoints.iteratorValue(-10)) // expect: -1
IO.print(codePoints.iteratorValue(-9)) // expect: 2947
IO.print(codePoints.iteratorValue(-8)) // expect: -1
IO.print(codePoints.iteratorValue(-7)) // expect: -1
IO.print(codePoints.iteratorValue(-6)) // expect: 116
IO.print(codePoints.iteratorValue(-5)) // expect: 104
IO.print(codePoints.iteratorValue(-4)) // expect: 238
IO.print(codePoints.iteratorValue(-3)) // expect: -1
IO.print(codePoints.iteratorValue(-2)) // expect: 110
IO.print(codePoints.iteratorValue(-1)) // expect: 103
IO.print("\0".codePoints.iteratorValue(0)) // expect: 0
// Returns -1 for invalid UTF-8 sequences.
IO.print("\xef\xf7".codePoints.iteratorValue(0)) // expect: -1
IO.print("\xef\xf7".codePoints.iteratorValue(1)) // expect: -1

View File

@ -0,0 +1,8 @@
// The first byte of a two-octet sequence.
IO.print("\xc0".codePoints.iteratorValue(0)) // expect: -1
// The first byte of a three-octet sequence.
IO.print("\xe0".codePoints.iteratorValue(0)) // expect: -1
// The first two bytes of a three-octet sequence.
IO.print("\xe0\xae".codePoints.iteratorValue(0)) // expect: -1

View File

@ -0,0 +1 @@
IO.print("string".codePoints.iteratorValue(12.34)) // expect runtime error: Index must be an integer.

View File

@ -0,0 +1 @@
IO.print("string".codePoints.iteratorValue("not num")) // expect runtime error: Index must be a number.

View File

@ -0,0 +1 @@
IO.print("string".codePoints.iteratorValue(6)) // expect runtime error: Index out of bounds.

View File

@ -0,0 +1 @@
IO.print("string".codePoints.iteratorValue(-7)) // expect runtime error: Index out of bounds.

View File

@ -0,0 +1,42 @@
// Bytes: 11111
// 012345678901234
// Chars: sø mé ஃ thî ng
var codePoints = "søméஃthîng".codePoints
IO.print(codePoints[0]) // expect: 115
IO.print(codePoints[1]) // expect: 248
IO.print(codePoints[2]) // expect: -1
IO.print(codePoints[3]) // expect: 109
IO.print(codePoints[4]) // expect: 233
IO.print(codePoints[5]) // expect: -1
IO.print(codePoints[6]) // expect: 2947
IO.print(codePoints[7]) // expect: -1
IO.print(codePoints[8]) // expect: -1
IO.print(codePoints[9]) // expect: 116
IO.print(codePoints[10]) // expect: 104
IO.print(codePoints[11]) // expect: 238
IO.print(codePoints[12]) // expect: -1
IO.print(codePoints[13]) // expect: 110
IO.print(codePoints[14]) // expect: 103
IO.print(codePoints[-15]) // expect: 115
IO.print(codePoints[-14]) // expect: 248
IO.print(codePoints[-13]) // expect: -1
IO.print(codePoints[-12]) // expect: 109
IO.print(codePoints[-11]) // expect: 233
IO.print(codePoints[-10]) // expect: -1
IO.print(codePoints[-9]) // expect: 2947
IO.print(codePoints[-8]) // expect: -1
IO.print(codePoints[-7]) // expect: -1
IO.print(codePoints[-6]) // expect: 116
IO.print(codePoints[-5]) // expect: 104
IO.print(codePoints[-4]) // expect: 238
IO.print(codePoints[-3]) // expect: -1
IO.print(codePoints[-2]) // expect: 110
IO.print(codePoints[-1]) // expect: 103
IO.print("\0".codePoints[0]) // expect: 0
// Returns -1 for invalid UTF-8 sequences.
IO.print("\xef\xf7".codePoints[0]) // expect: -1
IO.print("\xef\xf7".codePoints[1]) // expect: -1

View File

@ -0,0 +1,8 @@
// The first byte of a two-octet sequence.
IO.print("\xc0".codePoints[0]) // expect: -1
// The first byte of a three-octet sequence.
IO.print("\xe0".codePoints[0]) // expect: -1
// The first two bytes of a three-octet sequence.
IO.print("\xe0\xae".codePoints[0]) // expect: -1

View File

@ -0,0 +1 @@
IO.print("string".codePoints[12.34]) // expect runtime error: Index must be an integer.

View File

@ -0,0 +1 @@
IO.print("string".codePoints["not num"]) // expect runtime error: Index must be a number.

View File

@ -0,0 +1 @@
IO.print("string".codePoints[6]) // expect runtime error: Index out of bounds.

View File

@ -0,0 +1 @@
IO.print("string".codePoints[-7]) // expect runtime error: Index out of bounds.