|
|
|
@ -0,0 +1,78 @@ |
|
|
|
|
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"}, |
|
|
|
|
{"#\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) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |