More stuff for working with strings and bytes!

- "\x" escape sequence to put byte values in strings: "\x34"
- String.byteAt(index) gets value of byte in string.
- String.bytes returns a raw sequence of bytes for a string.
- String.codePointAt(index) gets the code point at an offset as a raw number.
This commit is contained in:
Bob Nystrom
2015-03-27 20:44:07 -07:00
parent 7d45dda383
commit 72c38a59ce
36 changed files with 402 additions and 15 deletions

View File

@ -0,0 +1,38 @@
// Bytes: 11111
// 012345678901234
// Chars: sø mé ஃ thî ng
var s = "søméஃthîng"
IO.print(s.byteAt(0)) // expect: 115
IO.print(s.byteAt(1)) // expect: 195
IO.print(s.byteAt(2)) // expect: 184
IO.print(s.byteAt(3)) // expect: 109
IO.print(s.byteAt(4)) // expect: 195
IO.print(s.byteAt(5)) // expect: 169
IO.print(s.byteAt(6)) // expect: 224
IO.print(s.byteAt(7)) // expect: 174
IO.print(s.byteAt(8)) // expect: 131
IO.print(s.byteAt(9)) // expect: 116
IO.print(s.byteAt(10)) // expect: 104
IO.print(s.byteAt(11)) // expect: 195
IO.print(s.byteAt(12)) // expect: 174
IO.print(s.byteAt(13)) // expect: 110
IO.print(s.byteAt(14)) // expect: 103
IO.print(s.byteAt(-15)) // expect: 115
IO.print(s.byteAt(-14)) // expect: 195
IO.print(s.byteAt(-13)) // expect: 184
IO.print(s.byteAt(-12)) // expect: 109
IO.print(s.byteAt(-11)) // expect: 195
IO.print(s.byteAt(-10)) // expect: 169
IO.print(s.byteAt(-9)) // expect: 224
IO.print(s.byteAt(-8)) // expect: 174
IO.print(s.byteAt(-7)) // expect: 131
IO.print(s.byteAt(-6)) // expect: 116
IO.print(s.byteAt(-5)) // expect: 104
IO.print(s.byteAt(-4)) // expect: 195
IO.print(s.byteAt(-3)) // expect: 174
IO.print(s.byteAt(-2)) // expect: 110
IO.print(s.byteAt(-1)) // expect: 103
IO.print("\0".byteAt(0)) // expect: 0

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,6 @@
// Bytes: 11111
// 012345678901234
// Chars: sø mé ஃ thî ng
var s = "søméஃthîng"
IO.print(s.bytes is StringByteSequence) // expect: true

View File

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

View File

@ -0,0 +1,3 @@
// The first two bytes of a three-octet sequence.
var s = "\xe0\xae"
IO.print(s.codePointAt(0)) // expect: -1

View File

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

View File

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

View File

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

View File

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