diff --git a/feature_any_nil.go b/feature_any_nil.go index 172e6ce..6ef4fd2 100644 --- a/feature_any_nil.go +++ b/feature_any_nil.go @@ -49,7 +49,7 @@ func (any *nilAny) ToFloat64() float64 { } func (any *nilAny) ToString() string { - return "nil" + return "" } func (any *nilAny) WriteTo(stream *Stream) { diff --git a/feature_iter_skip.go b/feature_iter_skip.go index ec37e72..ad00fdd 100644 --- a/feature_iter_skip.go +++ b/feature_iter_skip.go @@ -197,7 +197,9 @@ func (iter *Iterator) skipFixedBytes(n int) { if (iter.head >= iter.tail) { more := iter.head - iter.tail; if !iter.loadMore() { - iter.reportError("skipFixedBytes", "unexpected end"); + if more > 0 { + iter.reportError("skipFixedBytes", "unexpected end"); + } return } iter.head += more; diff --git a/jsoniter_find_end_test.go b/jsoniter_find_end_test.go index c85ddbd..28c2872 100644 --- a/jsoniter_find_end_test.go +++ b/jsoniter_find_end_test.go @@ -3,6 +3,7 @@ package jsoniter import ( "io" "testing" + "github.com/json-iterator/go/require" ) func Test_string_end(t *testing.T) { @@ -89,52 +90,41 @@ func (reader *StagedReader) Read(p []byte) (n int, err error) { } func Test_skip_string(t *testing.T) { + should := require.New(t) iter := ParseString(`"abc`) iter.skipString() - if iter.head != 1 { - t.Fatal(iter.head) - } + should.Equal(1, iter.head) iter = ParseString(`\""abc`) iter.skipString() - if iter.head != 3 { - t.Fatal(iter.head) - } + should.Equal(3, iter.head) reader := &StagedReader{ r1: `abc`, r2: `"`, } iter = Parse(reader, 4096) iter.skipString() - if iter.head != 1 { - t.Fatal(iter.head) - } + should.Equal(1, iter.head) reader = &StagedReader{ r1: `abc`, r2: `1"`, } iter = Parse(reader, 4096) iter.skipString() - if iter.head != 2 { - t.Fatal(iter.head) - } + should.Equal(2, iter.head) reader = &StagedReader{ r1: `abc\`, r2: `"`, } iter = Parse(reader, 4096) iter.skipString() - if iter.Error != io.EOF { - t.Fatal(iter.Error) - } + should.NotNil(iter.Error) reader = &StagedReader{ r1: `abc\`, r2: `""`, } iter = Parse(reader, 4096) iter.skipString() - if iter.head != 2 { - t.Fatal(iter.head) - } + should.Equal(2, iter.head) } func Test_skip_object(t *testing.T) { diff --git a/jsoniter_object_test.go b/jsoniter_object_test.go index d5261d7..91f25ea 100644 --- a/jsoniter_object_test.go +++ b/jsoniter_object_test.go @@ -221,12 +221,11 @@ func Test_write_object(t *testing.T) { should.Equal("{\n \"hello\":1,\n \"world\":2\n}", buf.String()) } -type TestObj struct { - Field1 string - Field2 uint64 -} - func Benchmark_jsoniter_object(b *testing.B) { + type TestObj struct { + Field1 string + Field2 uint64 + } for n := 0; n < b.N; n++ { iter := ParseString(`{"field1": "1", "field2": 2}`) obj := TestObj{} @@ -244,6 +243,10 @@ func Benchmark_jsoniter_object(b *testing.B) { } func Benchmark_json_object(b *testing.B) { + type TestObj struct { + Field1 string + Field2 uint64 + } for n := 0; n < b.N; n++ { result := TestObj{} json.Unmarshal([]byte(`{"field1": "1", "field2": 2}`), &result)