blob: 7db69dc5a75537d02fbd54940fb5c592e470f9e5 [file] [log] [blame]
//go:build go1.18
// +build go1.18
package humanize_test
import (
"math"
"strconv"
"strings"
"testing"
"github.com/dustin/go-humanize"
)
func FuzzComma(f *testing.F) {
f.Add(int64(0))
f.Add(int64(-1))
f.Add(int64(10))
f.Add(int64(100))
f.Add(int64(1000))
f.Add(int64(-1000))
f.Add(int64(math.MaxInt64))
f.Add(int64(math.MaxInt64) - 1)
f.Add(int64(math.MinInt64))
f.Add(int64(math.MinInt64) + 1)
f.Fuzz(func(t *testing.T, v int64) {
got := humanize.Comma(v)
gotNoCommas := strings.ReplaceAll(got, ",", "")
expected := strconv.FormatInt(v, 10)
if gotNoCommas != expected {
t.Fatalf("%d: got %q, expected %q", v, got, expected)
}
if v < 0 {
if got[0] != '-' {
t.Fatalf("%d: got: %q", v, got)
}
// Remove sign
got = got[1:]
}
// Check that commas are located every 3 digits
l := len(got)
for i := l - 1; i >= 0; i-- {
var ok bool
if (l-1-i)%4 == 3 {
ok = got[i] == ','
} else {
ok = got[i] >= '0' && got[i] <= '9'
}
if !ok {
t.Log(l - 1 - i)
t.Log((l - 1 - i) % 4)
t.Fatalf("%d: got: %q", v, got)
}
}
})
}