package humanize
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
)
|
|
|
|
type TestStruct struct {
|
|
name string
|
|
format string
|
|
num float64
|
|
formatted string
|
|
}
|
|
|
|
func TestFormatFloat(t *testing.T) {
|
|
tests := []TestStruct{
|
|
{"default", "", 12345.6789, "12,345.68"},
|
|
{"#", "#", 12345.6789, "12345.678900000"},
|
|
{"#.", "#.", 12345.6789, "12346"},
|
|
{"#,#", "#,#", 12345.6789, "12345,7"},
|
|
{"#,##", "#,##", 12345.6789, "12345,68"},
|
|
{"#,###", "#,###", 12345.6789, "12345,679"},
|
|
{"#,###.", "#,###.", 12345.6789, "12,346"},
|
|
{"#,###.##", "#,###.##", 12345.6789, "12,345.68"},
|
|
{"#,###.###", "#,###.###", 12345.6789, "12,345.679"},
|
|
{"#,###.####", "#,###.####", 12345.6789, "12,345.6789"},
|
|
{"#.###,######", "#.###,######", 12345.6789, "12.345,678900"},
|
|
{"bug46", "#,###.##", 52746220055.92342, "52,746,220,055.92"},
|
|
{"#\u202f###,##", "#\u202f###,##", 12345.6789, "12 345,68"},
|
|
|
|
// special cases
|
|
{"NaN", "#", math.NaN(), "NaN"},
|
|
{"+Inf", "#", math.Inf(1), "Infinity"},
|
|
{"-Inf", "#", math.Inf(-1), "-Infinity"},
|
|
{"signStr <= -0.000000001", "", -0.000000002, "-0.00"},
|
|
{"signStr = 0", "", 0, "0.00"},
|
|
{"Format directive must start with +", "+000", 12345.6789, "+12345.678900000"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
got := FormatFloat(test.format, test.num)
|
|
if got != test.formatted {
|
|
t.Errorf("On %v (%v, %v), got %v, wanted %v",
|
|
test.name, test.format, test.num, got, test.formatted)
|
|
}
|
|
}
|
|
// Test a single integer
|
|
got := FormatInteger("#", 12345)
|
|
if got != "12345.000000000" {
|
|
t.Errorf("On %v (%v, %v), got %v, wanted %v",
|
|
"integerTest", "#", 12345, got, "12345.000000000")
|
|
}
|
|
// Test the things that could panic
|
|
panictests := []TestStruct{
|
|
{"RenderFloat(): invalid positive sign directive", "-", 12345.6789, "12,345.68"},
|
|
{"RenderFloat(): thousands separator directive must be followed by 3 digit-specifiers", "0.01", 12345.6789, "12,345.68"},
|
|
}
|
|
for _, test := range panictests {
|
|
didPanic := false
|
|
var message interface{}
|
|
func() {
|
|
|
|
defer func() {
|
|
if message = recover(); message != nil {
|
|
didPanic = true
|
|
}
|
|
}()
|
|
|
|
// call the target function
|
|
_ = FormatFloat(test.format, test.num)
|
|
|
|
}()
|
|
if didPanic != true {
|
|
t.Errorf("On %v, should have panic and did not.",
|
|
test.name)
|
|
}
|
|
}
|
|
|
|
}
|