@@ -96,7 +96,7 @@ func BenchmarkNdjsonStage1(b *testing.B) {
9696
9797 for i := 0 ; i < b .N ; i ++ {
9898 // Create new channel (large enough so we won't block)
99- pj .index_chan = make (chan indexChan , 128 * 10240 )
99+ pj .indexChans = make (chan indexChan , 128 * 10240 )
100100 findStructuralIndices ([]byte (ndjson ), & pj )
101101 }
102102}
@@ -210,24 +210,30 @@ func TestParseNumber(t *testing.T) {
210210 expectedD float64
211211 expectedI int64
212212 expectedU uint64
213+ flags FloatFlags
213214 }{
214- {"1" , TagInteger , 0.0 , 1 , 0 },
215- {"-1" , TagInteger , 0.0 , - 1 , 0 },
216- {"10000000000000000000" , TagUint , 0.0 , 0 , 10000000000000000000 },
217- {"10000000000000000001" , TagUint , 0.0 , 0 , 10000000000000000001 },
218- {"-10000000000000000000" , TagFloat , - 10000000000000000000 , 0 , 0 },
219- {"1.0" , TagFloat , 1.0 , 0 , 0 },
220- {"1234567890" , TagInteger , 0.0 , 1234567890 , 0 },
221- {"9876.543210" , TagFloat , 9876.543210 , 0 , 0 },
222- {"0.123456789e-12" , TagFloat , 1.23456789e-13 , 0 , 0 },
223- {"1.234567890E+34" , TagFloat , 1.234567890e+34 , 0 , 0 },
224- {"23456789012E66" , TagFloat , 23456789012e66 , 0 , 0 },
225- {"-9876.543210" , TagFloat , - 9876.543210 , 0 , 0 },
226- {"-65.619720000000029" , TagFloat , - 65.61972000000003 , 0 , 0 },
215+ {input : "1" , wantTag : TagInteger , expectedI : 1 },
216+ {input : "-1" , wantTag : TagInteger , expectedI : - 1 },
217+ {input : "10000000000000000000" , wantTag : TagUint , expectedU : 10000000000000000000 },
218+ {input : "10000000000000000001" , wantTag : TagUint , expectedU : 10000000000000000001 },
219+ // math.MinInt64 - 1
220+ {input : "-9223372036854775809" , wantTag : TagFloat , expectedD : - 9.223372036854776e+18 , flags : FloatOverflowedInteger .Flags ()},
221+ {input : "-10000000000000000000" , wantTag : TagFloat , expectedD : - 10000000000000000000 , flags : FloatOverflowedInteger .Flags ()},
222+ {input : "100000000000000000000" , wantTag : TagFloat , expectedD : 100000000000000000000 , flags : FloatOverflowedInteger .Flags ()},
223+ // math.MaxUint64 +1
224+ {input : "18446744073709551616" , wantTag : TagFloat , expectedD : 1.8446744073709552e+19 , flags : FloatOverflowedInteger .Flags ()},
225+ {input : "1.0" , wantTag : TagFloat , expectedD : 1.0 },
226+ {input : "1234567890" , wantTag : TagInteger , expectedI : 1234567890 },
227+ {input : "9876.543210" , wantTag : TagFloat , expectedD : 9876.543210 },
228+ {input : "0.123456789e-12" , wantTag : TagFloat , expectedD : 1.23456789e-13 },
229+ {input : "1.234567890E+34" , wantTag : TagFloat , expectedD : 1.234567890e+34 },
230+ {input : "23456789012E66" , wantTag : TagFloat , expectedD : 23456789012e66 },
231+ {input : "-9876.543210" , wantTag : TagFloat , expectedD : - 9876.543210 },
232+ {input : "-65.619720000000029" , wantTag : TagFloat , expectedD : - 65.61972000000003 },
227233 }
228234
229235 for _ , tc := range testCases {
230- tag , val := parseNumber ([]byte (fmt .Sprintf (`%s:` , tc .input )))
236+ tag , val , flags := parseNumber ([]byte (fmt .Sprintf (`%s:` , tc .input )))
231237 if tag != tc .wantTag {
232238 t .Errorf ("TestParseNumber: got: %v want: %v" , tag , tc .wantTag )
233239 }
@@ -246,6 +252,9 @@ func TestParseNumber(t *testing.T) {
246252 t .Errorf ("TestParseNumber: got: %d want: %d" , val , tc .expectedU )
247253 }
248254 }
255+ if flags != uint64 (tc .flags ) {
256+ t .Errorf ("TestParseNumber flags; got: %d want: %d" , flags , tc .flags )
257+ }
249258 }
250259}
251260
@@ -295,7 +304,7 @@ func TestParseInt64(t *testing.T) {
295304 test := & parseInt64Tests [i ]
296305 t .Run (test .in , func (t * testing.T ) {
297306
298- tag , val := parseNumber ([]byte (fmt .Sprintf (`%s:` , test .in )))
307+ tag , val , _ := parseNumber ([]byte (fmt .Sprintf (`%s:` , test .in )))
299308 if tag != test .tag {
300309 // Ignore intentionally bad syntactical errors
301310 t .Errorf ("TestParseInt64: got: %v want: %v" , tag , test .tag )
@@ -478,7 +487,7 @@ func TestParseFloat64(t *testing.T) {
478487 for i := 0 ; i < len (atoftests ); i ++ {
479488 test := & atoftests [i ]
480489 t .Run (test .in , func (t * testing.T ) {
481- tag , val := parseNumber ([]byte (fmt .Sprintf (`%s:` , test .in )))
490+ tag , val , _ := parseNumber ([]byte (fmt .Sprintf (`%s:` , test .in )))
482491 switch tag {
483492 case TagEnd :
484493 if test .err == nil {
0 commit comments