Reorganize tests and benchmark scripts.

Mainly to get rid of one top level directory. But this will
also be useful when there are tests of the embedding API.
This commit is contained in:
Bob Nystrom
2015-03-14 12:45:56 -07:00
parent e2a72282a1
commit 64eccdd9be
562 changed files with 32 additions and 8 deletions
+7
View File
@@ -0,0 +1,7 @@
var a = {1: 1, 2: 2, 3: 3}
a.clear()
IO.print(a) // expect: {}
IO.print(a.count) // expect: 0
// Returns null.
IO.print({1: 2}.clear()) // expect: null
+11
View File
@@ -0,0 +1,11 @@
var map = {
"one": 1,
"two": 2,
"three": 3
}
IO.print(map.containsKey("one")) // expect: true
IO.print(map.containsKey("two")) // expect: true
IO.print(map.containsKey("three")) // expect: true
IO.print(map.containsKey("four")) // expect: false
IO.print(map.containsKey("five")) // expect: false
@@ -0,0 +1 @@
var result = {}.containsKey([]) // expect runtime error: Key must be a value type.
+12
View File
@@ -0,0 +1,12 @@
var map = {}
IO.print(map.count) // expect: 0
map["one"] = "value"
IO.print(map.count) // expect: 1
map["two"] = "value"
IO.print(map.count) // expect: 2
map["three"] = "value"
IO.print(map.count) // expect: 3
// Adding existing key does not increase count.
map["two"] = "new value"
IO.print(map.count) // expect: 3
+45
View File
@@ -0,0 +1,45 @@
var a = {"one": 1, "two": 2, "three": 3, "four": 4}.keys
// The precise numeric values aren't defined since they are indexes into the
// entry table and the hashing process isn't specified. So we just validate
// what we can assume about them.
IO.print(a.iterate(null) is Num) // expect: true
IO.print(a.iterate(null) >= 0) // expect: true
IO.print(a.iterate(0) is Num) // expect: true
IO.print(a.iterate(0) > 0) // expect: true
IO.print(a.iterate(1) is Num) // expect: true
IO.print(a.iterate(1) > 0) // expect: true
IO.print(a.iterate(2) is Num) // expect: true
IO.print(a.iterate(2) > 0) // expect: true
IO.print(a.iterate(3) is Num) // expect: true
IO.print(a.iterate(3) > 0) // expect: true
var previous = -1
var iterator = a.iterate(null)
while (iterator) {
IO.print(iterator > previous)
IO.print(iterator is Num)
previous = iterator
iterator = a.iterate(iterator)
}
// First entry:
// expect: true
// expect: true
// Second entry:
// expect: true
// expect: true
// Third entry:
// expect: true
// expect: true
// Fourth entry:
// expect: true
// expect: true
// Out of bounds.
IO.print(a.iterate(16)) // expect: false
IO.print(a.iterate(-1)) // expect: false
// Nothing to iterate in an empty map.
IO.print({}.keys.iterate(null)) // expect: false
@@ -0,0 +1,2 @@
var a = {1: 2, 3: 4}
a.keys.iterate(1.5) // expect runtime error: Iterator must be an integer.
@@ -0,0 +1,2 @@
var a = {1: 2, 3: 4}
a.keys.iterate("2") // expect runtime error: Iterator must be a number.
+43
View File
@@ -0,0 +1,43 @@
var map = {
null: "null value",
true: "true value",
false: "false value",
0: "zero",
1.2: "1 point 2",
List: "list class",
"null": "string value",
(1..3): "1 to 3"
}
IO.print(map[null]) // expect: null value
IO.print(map[true]) // expect: true value
IO.print(map[false]) // expect: false value
IO.print(map[0]) // expect: zero
IO.print(map[1.2]) // expect: 1 point 2
IO.print(map[List]) // expect: list class
IO.print(map["null"]) // expect: string value
IO.print(map[1..3]) // expect: 1 to 3
IO.print(map.count) // expect: 8
// Use the same keys (but sometimes different objects) to ensure keys have the
// right equality semantics.
map[null] = "new null value"
map[!false] = "new true value"
map[!true] = "new false value"
map[2 - 2] = "new zero"
map[1.2] = "new 1 point 2"
map[[].type] = "new list class"
map["nu" + "ll"] = "new string value"
map[(3 - 2)..(1 + 2)] = "new 1 to 3"
IO.print(map[null]) // expect: new null value
IO.print(map[true]) // expect: new true value
IO.print(map[false]) // expect: new false value
IO.print(map[0]) // expect: new zero
IO.print(map[1.2]) // expect: new 1 point 2
IO.print(map[List]) // expect: new list class
IO.print(map["null"]) // expect: new string value
IO.print(map[1..3]) // expect: new 1 to 3
IO.print(map.count) // expect: 8
+4
View File
@@ -0,0 +1,4 @@
var map = new Map
IO.print(map.count) // expect: 0
IO.print(map) // expect: {}
+18
View File
@@ -0,0 +1,18 @@
var map = {
"one": 1,
"two": 2,
"three": 3
}
IO.print(map.count) // expect: 3
IO.print(map.remove("two")) // expect: 2
IO.print(map.count) // expect: 2
IO.print(map.remove("three")) // expect: 3
IO.print(map.count) // expect: 1
// Remove an already removed entry.
IO.print(map.remove("two")) // expect: null
IO.print(map.count) // expect: 1
IO.print(map.remove("one")) // expect: 1
IO.print(map.count) // expect: 0
+1
View File
@@ -0,0 +1 @@
var result = {}.remove([]) // expect runtime error: Key must be a value type.
+4
View File
@@ -0,0 +1,4 @@
// This is a regression test to ensure map handles a null entry array.
var map = {}
IO.print(map["key"]) // expect: null
@@ -0,0 +1 @@
var result = {}[[]] // expect runtime error: Key must be a value type.
@@ -0,0 +1 @@
var result = {}[[]] = "value" // expect runtime error: Key must be a value type.
+27
View File
@@ -0,0 +1,27 @@
// Handle empty map.
IO.print({}.toString) // expect: {}
// Does not quote strings.
IO.print({"1": "2"}.toString) // expect: {1: 2}
// Nested maps.
IO.print({1: {2: {}}}) // expect: {1: {2: {}}}
// Calls toString on elements.
class Foo {
toString { "Foo.toString" }
}
IO.print({1: new Foo}) // expect: {1: Foo.toString}
// Since iteration order is unspecified, we don't know what order the results
// will be.
var s = {1: 2, 3: 4, 5: 6}.toString
IO.print(s == "{1: 2, 3: 4, 5: 6}" ||
s == "{1: 2, 5: 6, 3: 4}" ||
s == "{3: 4, 1: 2, 5: 6}" ||
s == "{3: 4, 5: 6, 1: 2}" ||
s == "{5: 6, 1: 2, 3: 4}" ||
s == "{5: 6, 3: 4, 1: 2}") // expect: true
// TODO: Handle maps that contain themselves.
+5
View File
@@ -0,0 +1,5 @@
IO.print({} is Map) // expect: true
// TODO: Abstract base class for associations.
IO.print({} is Object) // expect: true
IO.print({} is Bool) // expect: false
IO.print({}.type == Map) // expect: true
+45
View File
@@ -0,0 +1,45 @@
var a = {"one": 1, "two": 2, "three": 3, "four": 4}.values
// The precise numeric values aren't defined since they are indexes into the
// entry table and the hashing process isn't specified. So we just validate
// what we can assume about them.
IO.print(a.iterate(null) is Num) // expect: true
IO.print(a.iterate(null) >= 0) // expect: true
IO.print(a.iterate(0) is Num) // expect: true
IO.print(a.iterate(0) > 0) // expect: true
IO.print(a.iterate(1) is Num) // expect: true
IO.print(a.iterate(1) > 0) // expect: true
IO.print(a.iterate(2) is Num) // expect: true
IO.print(a.iterate(2) > 0) // expect: true
IO.print(a.iterate(3) is Num) // expect: true
IO.print(a.iterate(3) > 0) // expect: true
var previous = -1
var iterator = a.iterate(null)
while (iterator) {
IO.print(iterator > previous)
IO.print(iterator is Num)
previous = iterator
iterator = a.iterate(iterator)
}
// First entry:
// expect: true
// expect: true
// Second entry:
// expect: true
// expect: true
// Third entry:
// expect: true
// expect: true
// Fourth entry:
// expect: true
// expect: true
// Out of bounds.
IO.print(a.iterate(16)) // expect: false
IO.print(a.iterate(-1)) // expect: false
// Nothing to iterate in an empty map.
IO.print({}.values.iterate(null)) // expect: false
@@ -0,0 +1,2 @@
var a = {1: 2, 3: 4}
a.values.iterate(1.5) // expect runtime error: Iterator must be an integer.
@@ -0,0 +1,2 @@
var a = {1: 2, 3: 4}
a.values.iterate("2") // expect runtime error: Iterator must be a number.