|
@@ -0,0 +1,108 @@
|
|
|
+package goja
|
|
|
+
|
|
|
+import (
|
|
|
+ "reflect"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestArray1(t *testing.T) {
|
|
|
+ r := &Runtime{}
|
|
|
+ a := r.newArray(nil)
|
|
|
+ a.setOwnIdx(valueInt(0), asciiString("test"), true)
|
|
|
+ if l := a.getStr("length", nil).ToInteger(); l != 1 {
|
|
|
+ t.Fatalf("Unexpected length: %d", l)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestArrayExportProps(t *testing.T) {
|
|
|
+ vm := New()
|
|
|
+ arr := vm.NewArray()
|
|
|
+ err := arr.DefineDataProperty("0", vm.ToValue(true), FLAG_TRUE, FLAG_FALSE, FLAG_TRUE)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatal(err)
|
|
|
+ }
|
|
|
+ actual := arr.Export()
|
|
|
+ expected := []interface{}{true}
|
|
|
+ if !reflect.DeepEqual(actual, expected) {
|
|
|
+ t.Fatalf("Expected: %#v, actual: %#v", expected, actual)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func BenchmarkArrayGetStr(b *testing.B) {
|
|
|
+ b.StopTimer()
|
|
|
+ r := New()
|
|
|
+ v := &Object{runtime: r}
|
|
|
+
|
|
|
+ a := &arrayObject{
|
|
|
+ baseObject: baseObject{
|
|
|
+ val: v,
|
|
|
+ extensible: true,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ v.self = a
|
|
|
+
|
|
|
+ a.init()
|
|
|
+
|
|
|
+ v.setOwn(valueInt(0), asciiString("test"), false)
|
|
|
+ b.StartTimer()
|
|
|
+
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ a.getStr("0", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func BenchmarkArrayGet(b *testing.B) {
|
|
|
+ b.StopTimer()
|
|
|
+ r := New()
|
|
|
+ v := &Object{runtime: r}
|
|
|
+
|
|
|
+ a := &arrayObject{
|
|
|
+ baseObject: baseObject{
|
|
|
+ val: v,
|
|
|
+ extensible: true,
|
|
|
+ },
|
|
|
+ }
|
|
|
+ v.self = a
|
|
|
+
|
|
|
+ a.init()
|
|
|
+
|
|
|
+ var idx Value = valueInt(0)
|
|
|
+
|
|
|
+ v.setOwn(idx, asciiString("test"), false)
|
|
|
+
|
|
|
+ b.StartTimer()
|
|
|
+
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ v.get(idx, nil)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func BenchmarkArrayPut(b *testing.B) {
|
|
|
+ b.StopTimer()
|
|
|
+ r := New()
|
|
|
+
|
|
|
+ v := &Object{runtime: r}
|
|
|
+
|
|
|
+ a := &arrayObject{
|
|
|
+ baseObject: baseObject{
|
|
|
+ val: v,
|
|
|
+ extensible: true,
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ v.self = a
|
|
|
+
|
|
|
+ a.init()
|
|
|
+
|
|
|
+ var idx Value = valueInt(0)
|
|
|
+ var val Value = asciiString("test")
|
|
|
+
|
|
|
+ b.StartTimer()
|
|
|
+
|
|
|
+ for i := 0; i < b.N; i++ {
|
|
|
+ v.setOwn(idx, val, false)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|