diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-20 12:47:10 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-20 12:47:10 -0700 |
commit | f5ca3478c68e47ae20fd12748c1552fdf81f75f9 (patch) | |
tree | b3d3f889ed25084fe33ed9e01554d6ca51104bb5 /reencode_test.go | |
parent | d240d0b06c7b5711f583d961eddfc37d07d4546e (diff) | |
parent | 49ee8be679add0bd3cf08a2669331b3be7a835f8 (diff) |
Merge branch 'lukeshu/fixes'
Diffstat (limited to 'reencode_test.go')
-rw-r--r-- | reencode_test.go | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/reencode_test.go b/reencode_test.go index 83660ef..715e976 100644 --- a/reencode_test.go +++ b/reencode_test.go @@ -9,6 +9,8 @@ import ( "testing" "github.com/stretchr/testify/assert" + + "git.lukeshu.com/go/lowmemjson/internal/fastio" ) func TestReEncode(t *testing.T) { @@ -131,6 +133,26 @@ func TestReEncode(t *testing.T) { โยป9 โ]`, }, + "numbers": { + enc: ReEncoderConfig{ + Compact: true, + CompactFloats: true, + }, + in: []any{ + Number("1.200e003"), + }, + exp: `[1.2e3]`, + }, + "numbers-zero": { + enc: ReEncoderConfig{ + Compact: true, + CompactFloats: true, + }, + in: []any{ + Number("1.000e000"), + }, + exp: `[1.0e0]`, + }, } for tcName, tc := range testcases { tc := tc @@ -143,3 +165,78 @@ func TestReEncode(t *testing.T) { }) } } + +func TestReEncodeWriteSize(t *testing.T) { + t.Parallel() + + multibyteRune := `๐` + assert.Len(t, multibyteRune, 4) + + input := `"` + multibyteRune + `"` + + t.Run("bytes-bigwrite", func(t *testing.T) { + t.Parallel() + var out strings.Builder + enc := NewReEncoder(&out, ReEncoderConfig{}) + + n, err := enc.Write([]byte(input)) + assert.NoError(t, err) + assert.Equal(t, len(input), n) + + assert.Equal(t, input, out.String()) + }) + t.Run("string-bigwrite", func(t *testing.T) { + t.Parallel() + var out strings.Builder + enc := NewReEncoder(&out, ReEncoderConfig{}) + + n, err := enc.WriteString(input) + assert.NoError(t, err) + assert.Equal(t, len(input), n) + + assert.Equal(t, input, out.String()) + }) + + t.Run("bytes-smallwrites", func(t *testing.T) { + t.Parallel() + var out strings.Builder + enc := NewReEncoder(&out, ReEncoderConfig{}) + + var buf [1]byte + for i := 0; i < len(input); i++ { + buf[0] = input[i] + n, err := enc.Write(buf[:]) + assert.NoError(t, err) + assert.Equal(t, 1, n) + } + + assert.Equal(t, input, out.String()) + }) + t.Run("string-smallwrites", func(t *testing.T) { + t.Parallel() + var out strings.Builder + enc := NewReEncoder(&out, ReEncoderConfig{}) + + for i := 0; i < len(input); i++ { + n, err := enc.WriteString(input[i : i+1]) + assert.NoError(t, err) + assert.Equal(t, 1, n) + } + + assert.Equal(t, input, out.String()) + }) +} + +func TestReEncoderStackSize(t *testing.T) { + t.Parallel() + + enc := NewReEncoder(fastio.Discard, ReEncoderConfig{}) + assert.Equal(t, 0, enc.stackSize()) + + for i := 0; i < 5; i++ { + assert.NoError(t, enc.WriteByte('[')) + assert.Equal(t, i+1, enc.stackSize()) + enc.pushWriteBarrier() + assert.Equal(t, i+2, enc.stackSize()) + } +} |