MCPcopy
hub / github.com/buger/jsonparser / TestTraversalDeterminism

Function TestTraversalDeterminism

obligation_property_test.go:113–179  ·  view source on GitHub ↗

Verifies: SYS-REQ-097 MCDC SYS-REQ-097: traversal_called_twice_with_same_input=T, traversal_returns_identical_results=T => TRUE

(t *testing.T)

Source from the content-addressed store, hash-verified

111// Verifies: SYS-REQ-097
112// MCDC SYS-REQ-097: traversal_called_twice_with_same_input=T, traversal_returns_identical_results=T => TRUE
113func TestTraversalDeterminism(t *testing.T) {
114 t.Run("ArrayEach", func(t *testing.T) {
115 data := []byte(`{"arr":[1,2,3]}`)
116 var vals1, vals2 []string
117
118 ArrayEach(data, func(value []byte, dataType ValueType, offset int, err error) {
119 vals1 = append(vals1, string(value))
120 }, "arr")
121 ArrayEach(data, func(value []byte, dataType ValueType, offset int, err error) {
122 vals2 = append(vals2, string(value))
123 }, "arr")
124
125 if len(vals1) != len(vals2) {
126 t.Fatalf("ArrayEach length mismatch: %d vs %d", len(vals1), len(vals2))
127 }
128 for i := range vals1 {
129 if vals1[i] != vals2[i] {
130 t.Fatalf("ArrayEach element %d mismatch: %q vs %q", i, vals1[i], vals2[i])
131 }
132 }
133 })
134
135 t.Run("ObjectEach", func(t *testing.T) {
136 data := []byte(`{"a":1,"b":2,"c":3}`)
137 var keys1, keys2 []string
138
139 ObjectEach(data, func(key []byte, value []byte, dataType ValueType, offset int) error {
140 keys1 = append(keys1, string(key))
141 return nil
142 })
143 ObjectEach(data, func(key []byte, value []byte, dataType ValueType, offset int) error {
144 keys2 = append(keys2, string(key))
145 return nil
146 })
147
148 if len(keys1) != len(keys2) {
149 t.Fatalf("ObjectEach length mismatch: %d vs %d", len(keys1), len(keys2))
150 }
151 for i := range keys1 {
152 if keys1[i] != keys2[i] {
153 t.Fatalf("ObjectEach key %d mismatch: %q vs %q", i, keys1[i], keys2[i])
154 }
155 }
156 })
157
158 t.Run("EachKey", func(t *testing.T) {
159 data := []byte(`{"name":"test","age":30}`)
160 paths := [][]string{{"name"}, {"age"}, {"missing"}}
161 var results1, results2 []string
162
163 EachKey(data, func(idx int, value []byte, vt ValueType, err error) {
164 results1 = append(results1, fmt.Sprintf("%d:%s:%v", idx, string(value), vt))
165 }, paths...)
166 EachKey(data, func(idx int, value []byte, vt ValueType, err error) {
167 results2 = append(results2, fmt.Sprintf("%d:%s:%v", idx, string(value), vt))
168 }, paths...)
169
170 if len(results1) != len(results2) {

Callers

nothing calls this directly

Calls 3

ArrayEachFunction · 0.85
ObjectEachFunction · 0.85
EachKeyFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…