summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-14 14:27:18 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-18 22:45:54 -0700
commit218edcc3878394a6942d4f72e3be99137c22825a (patch)
treebdff24c7d278da78fc65026e27586e162892aa54
parentd240d0b06c7b5711f583d961eddfc37d07d4546e (diff)
reencode: Fix trimming trailing zeros
-rw-r--r--ReleaseNotes.md11
-rw-r--r--reencode_compactnum.go12
-rw-r--r--reencode_test.go18
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