123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- 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 TestArrayCanonicalIndex(t *testing.T) {
- const SCRIPT = `
- var a = [];
- a["00"] = 1;
- a["01"] = 2;
- if (a[0] !== undefined) {
- throw new Error("a[0]");
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- 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)
- }
- }
- func BenchmarkArraySetEmpty(b *testing.B) {
- r := New()
- _ = r.Get("Array").(*Object).Get("prototype").String() // materialise Array.prototype
- a := r.NewArray(0, 0)
- values := a.self.(*arrayObject).values
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- values[0] = nil
- a.self.setOwnIdx(0, valueTrue, true)
- }
- }
|