You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.2 KiB
98 lines
2.2 KiB
package humanize
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
)
|
|
|
|
func TestSI(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
num float64
|
|
formatted string
|
|
}{
|
|
{"e-24", 1e-24, "1yF"},
|
|
{"e-21", 1e-21, "1zF"},
|
|
{"e-18", 1e-18, "1aF"},
|
|
{"e-15", 1e-15, "1fF"},
|
|
{"e-12", 1e-12, "1pF"},
|
|
{"e-12", 2.2345e-12, "2.2345pF"},
|
|
{"e-12", 2.23e-12, "2.23pF"},
|
|
{"e-11", 2.23e-11, "22.3pF"},
|
|
{"e-10", 2.2e-10, "220pF"},
|
|
{"e-9", 2.2e-9, "2.2nF"},
|
|
{"e-8", 2.2e-8, "22nF"},
|
|
{"e-7", 2.2e-7, "220nF"},
|
|
{"e-6", 2.2e-6, "2.2µF"},
|
|
{"e-6", 1e-6, "1µF"},
|
|
{"e-5", 2.2e-5, "22µF"},
|
|
{"e-4", 2.2e-4, "220µF"},
|
|
{"e-3", 2.2e-3, "2.2mF"},
|
|
{"e-2", 2.2e-2, "22mF"},
|
|
{"e-1", 2.2e-1, "220mF"},
|
|
{"e+0", 2.2e-0, "2.2F"},
|
|
{"e+0", 2.2, "2.2F"},
|
|
{"e+1", 2.2e+1, "22F"},
|
|
{"0", 0, "0F"},
|
|
{"e+1", 22, "22F"},
|
|
{"e+2", 2.2e+2, "220F"},
|
|
{"e+2", 220, "220F"},
|
|
{"e+3", 2.2e+3, "2.2kF"},
|
|
{"e+3", 2200, "2.2kF"},
|
|
{"e+4", 2.2e+4, "22kF"},
|
|
{"e+4", 22000, "22kF"},
|
|
{"e+5", 2.2e+5, "220kF"},
|
|
{"e+6", 2.2e+6, "2.2MF"},
|
|
{"e+6", 1e+6, "1MF"},
|
|
{"e+7", 2.2e+7, "22MF"},
|
|
{"e+8", 2.2e+8, "220MF"},
|
|
{"e+9", 2.2e+9, "2.2GF"},
|
|
{"e+10", 2.2e+10, "22GF"},
|
|
{"e+11", 2.2e+11, "220GF"},
|
|
{"e+12", 2.2e+12, "2.2TF"},
|
|
{"e+15", 2.2e+15, "2.2PF"},
|
|
{"e+18", 2.2e+18, "2.2EF"},
|
|
{"e+21", 2.2e+21, "2.2ZF"},
|
|
{"e+24", 2.2e+24, "2.2YF"},
|
|
|
|
// special case
|
|
{"1F", 1000 * 1000, "1MF"},
|
|
{"1F", 1e6, "1MF"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
got := SI(test.num, "F")
|
|
if got != test.formatted {
|
|
t.Errorf("On %v (%v), got %v, wanted %v",
|
|
test.name, test.num, got, test.formatted)
|
|
}
|
|
|
|
gotf, gotu, err := ParseSI(test.formatted)
|
|
if err != nil {
|
|
t.Errorf("Error parsing %v (%v): %v", test.name, test.formatted, err)
|
|
continue
|
|
}
|
|
|
|
if math.Abs(1-(gotf/test.num)) > 0.01 {
|
|
t.Errorf("On %v (%v), got %v, wanted %v (±%v)",
|
|
test.name, test.formatted, gotf, test.num,
|
|
math.Abs(1-(gotf/test.num)))
|
|
}
|
|
if gotu != "F" {
|
|
t.Errorf("On %v (%v), expected unit F, got %v",
|
|
test.name, test.formatted, gotu)
|
|
}
|
|
}
|
|
|
|
// Parse error
|
|
gotf, gotu, err := ParseSI("x1.21JW") // 1.21 jigga whats
|
|
if err == nil {
|
|
t.Errorf("Expected error on x1.21JW, got %v %v", gotf, gotu)
|
|
}
|
|
}
|
|
|
|
func BenchmarkParseSI(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
ParseSI("2.2346ZB")
|
|
}
|
|
}
|
|
|