jsoniter_array_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package jsoniter
  2. import (
  3. "testing"
  4. "encoding/json"
  5. )
  6. func Test_empty_array(t *testing.T) {
  7. iter := ParseString(`[]`)
  8. cont := iter.ReadArray()
  9. if cont != false {
  10. t.FailNow()
  11. }
  12. }
  13. func Test_one_element(t *testing.T) {
  14. iter := ParseString(`[1]`)
  15. cont := iter.ReadArray()
  16. if cont != true {
  17. t.FailNow()
  18. }
  19. if iter.ReadInt64() != 1 {
  20. t.FailNow()
  21. }
  22. cont = iter.ReadArray()
  23. if cont != false {
  24. t.FailNow()
  25. }
  26. }
  27. func Test_two_elements(t *testing.T) {
  28. iter := ParseString(`[1,2]`)
  29. cont := iter.ReadArray()
  30. if cont != true {
  31. t.FailNow()
  32. }
  33. if iter.ReadInt64() != 1 {
  34. t.FailNow()
  35. }
  36. cont = iter.ReadArray()
  37. if cont != true {
  38. t.FailNow()
  39. }
  40. if iter.ReadInt64() != 2 {
  41. t.FailNow()
  42. }
  43. cont = iter.ReadArray()
  44. if cont != false {
  45. t.FailNow()
  46. }
  47. }
  48. func Test_invalid_array(t *testing.T) {
  49. iter := ParseString(`[`)
  50. iter.ReadArray()
  51. if iter.Error == nil {
  52. t.FailNow()
  53. }
  54. }
  55. func Test_whitespace_in_head(t *testing.T) {
  56. iter := ParseString(` [1]`)
  57. cont := iter.ReadArray()
  58. if cont != true {
  59. t.FailNow()
  60. }
  61. if iter.ReadUint64() != 1 {
  62. t.FailNow()
  63. }
  64. }
  65. func Test_whitespace_after_array_start(t *testing.T) {
  66. iter := ParseString(`[ 1]`)
  67. cont := iter.ReadArray()
  68. if cont != true {
  69. t.FailNow()
  70. }
  71. if iter.ReadUint64() != 1 {
  72. t.FailNow()
  73. }
  74. }
  75. func Test_whitespace_before_array_end(t *testing.T) {
  76. iter := ParseString(`[1 ]`)
  77. cont := iter.ReadArray()
  78. if cont != true {
  79. t.FailNow()
  80. }
  81. if iter.ReadUint64() != 1 {
  82. t.FailNow()
  83. }
  84. cont = iter.ReadArray()
  85. if cont != false {
  86. t.FailNow()
  87. }
  88. }
  89. func Test_whitespace_before_comma(t *testing.T) {
  90. iter := ParseString(`[1 ,2]`)
  91. cont := iter.ReadArray()
  92. if cont != true {
  93. t.FailNow()
  94. }
  95. if iter.ReadUint64() != 1 {
  96. t.FailNow()
  97. }
  98. cont = iter.ReadArray()
  99. if cont != true {
  100. t.FailNow()
  101. }
  102. if iter.ReadUint64() != 2 {
  103. t.FailNow()
  104. }
  105. cont = iter.ReadArray()
  106. if cont != false {
  107. t.FailNow()
  108. }
  109. }
  110. func Benchmark_jsoniter_array(b *testing.B) {
  111. for n := 0; n < b.N; n++ {
  112. iter := ParseString(`[1,2,3]`)
  113. for iter.ReadArray() {
  114. iter.ReadUint64()
  115. }
  116. }
  117. }
  118. func Benchmark_json_array(b *testing.B) {
  119. for n := 0; n < b.N; n++ {
  120. result := []interface{}{}
  121. json.Unmarshal([]byte(`[1,2,3]`), &result)
  122. }
  123. }