summaryrefslogtreecommitdiff
path: root/reencode_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'reencode_test.go')
-rw-r--r--reencode_test.go97
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())
+ }
+}