array_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package goja
  2. import (
  3. "reflect"
  4. "testing"
  5. )
  6. func TestArray1(t *testing.T) {
  7. r := &Runtime{}
  8. a := r.newArray(nil)
  9. a.setOwnIdx(valueInt(0), asciiString("test"), true)
  10. if l := a.getStr("length", nil).ToInteger(); l != 1 {
  11. t.Fatalf("Unexpected length: %d", l)
  12. }
  13. }
  14. func TestArrayExportProps(t *testing.T) {
  15. vm := New()
  16. arr := vm.NewArray()
  17. err := arr.DefineDataProperty("0", vm.ToValue(true), FLAG_TRUE, FLAG_FALSE, FLAG_TRUE)
  18. if err != nil {
  19. t.Fatal(err)
  20. }
  21. actual := arr.Export()
  22. expected := []interface{}{true}
  23. if !reflect.DeepEqual(actual, expected) {
  24. t.Fatalf("Expected: %#v, actual: %#v", expected, actual)
  25. }
  26. }
  27. func BenchmarkArrayGetStr(b *testing.B) {
  28. b.StopTimer()
  29. r := New()
  30. v := &Object{runtime: r}
  31. a := &arrayObject{
  32. baseObject: baseObject{
  33. val: v,
  34. extensible: true,
  35. },
  36. }
  37. v.self = a
  38. a.init()
  39. v.setOwn(valueInt(0), asciiString("test"), false)
  40. b.StartTimer()
  41. for i := 0; i < b.N; i++ {
  42. a.getStr("0", nil)
  43. }
  44. }
  45. func BenchmarkArrayGet(b *testing.B) {
  46. b.StopTimer()
  47. r := New()
  48. v := &Object{runtime: r}
  49. a := &arrayObject{
  50. baseObject: baseObject{
  51. val: v,
  52. extensible: true,
  53. },
  54. }
  55. v.self = a
  56. a.init()
  57. var idx Value = valueInt(0)
  58. v.setOwn(idx, asciiString("test"), false)
  59. b.StartTimer()
  60. for i := 0; i < b.N; i++ {
  61. v.get(idx, nil)
  62. }
  63. }
  64. func BenchmarkArrayPut(b *testing.B) {
  65. b.StopTimer()
  66. r := New()
  67. v := &Object{runtime: r}
  68. a := &arrayObject{
  69. baseObject: baseObject{
  70. val: v,
  71. extensible: true,
  72. },
  73. }
  74. v.self = a
  75. a.init()
  76. var idx Value = valueInt(0)
  77. var val Value = asciiString("test")
  78. b.StartTimer()
  79. for i := 0; i < b.N; i++ {
  80. v.setOwn(idx, val, false)
  81. }
  82. }
  83. func BenchmarkArraySetEmpty(b *testing.B) {
  84. r := New()
  85. r.Get("Array").(*Object).Get("prototype").String() // materialise Array.prototype
  86. a := r.NewArray(0, 0)
  87. values := a.self.(*arrayObject).values
  88. b.ResetTimer()
  89. for i := 0; i < b.N; i++ {
  90. values[0] = nil
  91. a.self.setOwnIdx(0, valueTrue, true)
  92. }
  93. }