mirror of
https://gitlab.com/pulsechaincom/go-pulse.git
synced 2024-12-22 11:31:02 +00:00
fda93f643e
* log: fix formatting of big.Int The implementation of formatLogfmtBigInt had two issues: it crashed when the number was actually large enough to hit the big integer case, and modified the big.Int while formatting it. * log: don't call FormatLogfmtInt64 for int16 * log: separate from decimals back, not front Co-authored-by: Péter Szilágyi <peterke@gmail.com>
96 lines
2.0 KiB
Go
96 lines
2.0 KiB
Go
package log
|
|
|
|
import (
|
|
"math"
|
|
"math/big"
|
|
"math/rand"
|
|
"testing"
|
|
)
|
|
|
|
func TestPrettyInt64(t *testing.T) {
|
|
tests := []struct {
|
|
n int64
|
|
s string
|
|
}{
|
|
{0, "0"},
|
|
{10, "10"},
|
|
{-10, "-10"},
|
|
{100, "100"},
|
|
{-100, "-100"},
|
|
{1000, "1000"},
|
|
{-1000, "-1000"},
|
|
{10000, "10000"},
|
|
{-10000, "-10000"},
|
|
{99999, "99999"},
|
|
{-99999, "-99999"},
|
|
{100000, "100,000"},
|
|
{-100000, "-100,000"},
|
|
{1000000, "1,000,000"},
|
|
{-1000000, "-1,000,000"},
|
|
{math.MaxInt64, "9,223,372,036,854,775,807"},
|
|
{math.MinInt64, "-9,223,372,036,854,775,808"},
|
|
}
|
|
for i, tt := range tests {
|
|
if have := FormatLogfmtInt64(tt.n); have != tt.s {
|
|
t.Errorf("test %d: format mismatch: have %s, want %s", i, have, tt.s)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPrettyUint64(t *testing.T) {
|
|
tests := []struct {
|
|
n uint64
|
|
s string
|
|
}{
|
|
{0, "0"},
|
|
{10, "10"},
|
|
{100, "100"},
|
|
{1000, "1000"},
|
|
{10000, "10000"},
|
|
{99999, "99999"},
|
|
{100000, "100,000"},
|
|
{1000000, "1,000,000"},
|
|
{math.MaxUint64, "18,446,744,073,709,551,615"},
|
|
}
|
|
for i, tt := range tests {
|
|
if have := FormatLogfmtUint64(tt.n); have != tt.s {
|
|
t.Errorf("test %d: format mismatch: have %s, want %s", i, have, tt.s)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPrettyBigInt(t *testing.T) {
|
|
tests := []struct {
|
|
int string
|
|
s string
|
|
}{
|
|
{"111222333444555678999", "111,222,333,444,555,678,999"},
|
|
{"-111222333444555678999", "-111,222,333,444,555,678,999"},
|
|
{"11122233344455567899900", "11,122,233,344,455,567,899,900"},
|
|
{"-11122233344455567899900", "-11,122,233,344,455,567,899,900"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
v, _ := new(big.Int).SetString(tt.int, 10)
|
|
if have := formatLogfmtBigInt(v); have != tt.s {
|
|
t.Errorf("invalid output %s, want %s", have, tt.s)
|
|
}
|
|
}
|
|
}
|
|
|
|
var sink string
|
|
|
|
func BenchmarkPrettyInt64Logfmt(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
sink = FormatLogfmtInt64(rand.Int63())
|
|
}
|
|
}
|
|
|
|
func BenchmarkPrettyUint64Logfmt(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
sink = FormatLogfmtUint64(rand.Uint64())
|
|
}
|
|
}
|