From 218edcc3878394a6942d4f72e3be99137c22825a Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 14 Feb 2023 14:27:18 -0700 Subject: reencode: Fix trimming trailing zeros --- ReleaseNotes.md | 11 +++++++++++ reencode_compactnum.go | 12 +++++------- reencode_test.go | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 081644e..623d5da 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,3 +1,14 @@ +# v0.3.7 (TBD) + + Theme: TBD + + User-facing changes: + + - General bugfixes: + + + Encoder, ReEncoder: Now correctly trims unnecessary the + trailing '0's from the fraction-part when compacting numbers. + # v0.3.6 (2023-02-16) Theme: Architectural improvements diff --git a/reencode_compactnum.go b/reencode_compactnum.go index 5da2c54..bdf1f4e 100644 --- a/reencode_compactnum.go +++ b/reencode_compactnum.go @@ -33,14 +33,12 @@ func (enc *reEncodeCompactNum) HandleRune(c rune, t jsonparse.RuneType, escape B if c == '0' && !enc.fracFirst { enc.fracZeros++ return nil - } - fallthrough - default: - for enc.fracZeros > 0 { - if err := enc.out.HandleRune('0', jsonparse.RuneTypeNumberFracDig, escape, stackSize); err != nil { - return err + } else { + for ; enc.fracZeros > 0; enc.fracZeros-- { + if err := enc.out.HandleRune('0', jsonparse.RuneTypeNumberFracDig, escape, stackSize); err != nil { + return err + } } - enc.fracZeros-- } enc.fracFirst = false } diff --git a/reencode_test.go b/reencode_test.go index 83660ef..f135aa5 100644 --- a/reencode_test.go +++ b/reencode_test.go @@ -131,6 +131,24 @@ func TestReEncode(t *testing.T) { —»9 —]`, }, + "numbers": { + enc: ReEncoderConfig{ + Compact: true, + }, + in: []any{ + Number("1.200e003"), + }, + exp: `[1.2e3]`, + }, + "numbers-zero": { + enc: ReEncoderConfig{ + Compact: true, + }, + in: []any{ + Number("1.000e000"), + }, + exp: `[1.0e0]`, + }, } for tcName, tc := range testcases { tc := tc -- cgit v1.1-4-g5e80