...
1 package goja
2
3 import (
4 "reflect"
5 "testing"
6 )
7
8 func TestArray1(t *testing.T) {
9 r := &Runtime{}
10 a := r.newArray(nil)
11 a.setOwnIdx(valueInt(0), asciiString("test"), true)
12 if l := a.getStr("length", nil).ToInteger(); l != 1 {
13 t.Fatalf("Unexpected length: %d", l)
14 }
15 }
16
17 func TestArrayExportProps(t *testing.T) {
18 vm := New()
19 arr := vm.NewArray()
20 err := arr.DefineDataProperty("0", vm.ToValue(true), FLAG_TRUE, FLAG_FALSE, FLAG_TRUE)
21 if err != nil {
22 t.Fatal(err)
23 }
24 actual := arr.Export()
25 expected := []interface{}{true}
26 if !reflect.DeepEqual(actual, expected) {
27 t.Fatalf("Expected: %#v, actual: %#v", expected, actual)
28 }
29 }
30
31 func TestArrayCanonicalIndex(t *testing.T) {
32 const SCRIPT = `
33 var a = [];
34 a["00"] = 1;
35 a["01"] = 2;
36 if (a[0] !== undefined) {
37 throw new Error("a[0]");
38 }
39 `
40
41 testScript(SCRIPT, _undefined, t)
42 }
43
44 func BenchmarkArrayGetStr(b *testing.B) {
45 b.StopTimer()
46 r := New()
47 v := &Object{runtime: r}
48
49 a := &arrayObject{
50 baseObject: baseObject{
51 val: v,
52 extensible: true,
53 },
54 }
55 v.self = a
56
57 a.init()
58
59 v.setOwn(valueInt(0), asciiString("test"), false)
60 b.StartTimer()
61
62 for i := 0; i < b.N; i++ {
63 a.getStr("0", nil)
64 }
65
66 }
67
68 func BenchmarkArrayGet(b *testing.B) {
69 b.StopTimer()
70 r := New()
71 v := &Object{runtime: r}
72
73 a := &arrayObject{
74 baseObject: baseObject{
75 val: v,
76 extensible: true,
77 },
78 }
79 v.self = a
80
81 a.init()
82
83 var idx Value = valueInt(0)
84
85 v.setOwn(idx, asciiString("test"), false)
86
87 b.StartTimer()
88
89 for i := 0; i < b.N; i++ {
90 v.get(idx, nil)
91 }
92
93 }
94
95 func BenchmarkArrayPut(b *testing.B) {
96 b.StopTimer()
97 r := New()
98
99 v := &Object{runtime: r}
100
101 a := &arrayObject{
102 baseObject: baseObject{
103 val: v,
104 extensible: true,
105 },
106 }
107
108 v.self = a
109
110 a.init()
111
112 var idx Value = valueInt(0)
113 var val Value = asciiString("test")
114
115 b.StartTimer()
116
117 for i := 0; i < b.N; i++ {
118 v.setOwn(idx, val, false)
119 }
120
121 }
122
123 func BenchmarkArraySetEmpty(b *testing.B) {
124 r := New()
125 _ = r.Get("Array").(*Object).Get("prototype").String()
126 a := r.NewArray(0, 0)
127 values := a.self.(*arrayObject).values
128 b.ResetTimer()
129 for i := 0; i < b.N; i++ {
130 values[0] = nil
131 a.self.setOwnIdx(0, valueTrue, true)
132 }
133 }
134
View as plain text