mirror of
https://github.com/ClusterCockpit/cc-units.git
synced 2024-11-10 02:07:25 +01:00
115 lines
3.2 KiB
Go
115 lines
3.2 KiB
Go
|
package ccunits
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestUnitsExact(t *testing.T) {
|
||
|
testCases := []struct {
|
||
|
in string
|
||
|
want Unit
|
||
|
}{
|
||
|
{"b", NewUnit("Bytes")},
|
||
|
{"B", NewUnit("Bytes")},
|
||
|
{"byte", NewUnit("Bytes")},
|
||
|
{"bytes", NewUnit("Bytes")},
|
||
|
{"BYtes", NewUnit("Bytes")},
|
||
|
{"Mb", NewUnit("MBytes")},
|
||
|
{"MB", NewUnit("MBytes")},
|
||
|
{"Mbyte", NewUnit("MBytes")},
|
||
|
{"Mbytes", NewUnit("MBytes")},
|
||
|
{"MbYtes", NewUnit("MBytes")},
|
||
|
{"Gb", NewUnit("GBytes")},
|
||
|
{"GB", NewUnit("GBytes")},
|
||
|
{"Hz", NewUnit("Hertz")},
|
||
|
{"MHz", NewUnit("MHertz")},
|
||
|
{"GHertz", NewUnit("GHertz")},
|
||
|
{"pkts", NewUnit("Packets")},
|
||
|
{"packets", NewUnit("Packets")},
|
||
|
{"packet", NewUnit("Packets")},
|
||
|
{"flop", NewUnit("Flops")},
|
||
|
{"flops", NewUnit("Flops")},
|
||
|
{"floPS", NewUnit("Flops")},
|
||
|
{"Mflop", NewUnit("MFlops")},
|
||
|
{"Gflop", NewUnit("GFlops")},
|
||
|
{"gflop", NewUnit("GFlops")},
|
||
|
{"%", NewUnit("Percent")},
|
||
|
{"percent", NewUnit("Percent")},
|
||
|
{"degc", NewUnit("degC")},
|
||
|
{"degC", NewUnit("degC")},
|
||
|
{"degf", NewUnit("degF")},
|
||
|
{"°f", NewUnit("degF")},
|
||
|
{"events", NewUnit("events")},
|
||
|
{"event", NewUnit("events")},
|
||
|
{"EveNts", NewUnit("events")},
|
||
|
{"reqs", NewUnit("requests")},
|
||
|
{"requests", NewUnit("requests")},
|
||
|
{"Requests", NewUnit("requests")},
|
||
|
{"cyc", NewUnit("cycles")},
|
||
|
{"cy", NewUnit("cycles")},
|
||
|
{"Cycles", NewUnit("cycles")},
|
||
|
{"J", NewUnit("Joules")},
|
||
|
{"Joule", NewUnit("Joules")},
|
||
|
{"joule", NewUnit("Joules")},
|
||
|
{"W", NewUnit("Watt")},
|
||
|
{"Watts", NewUnit("Watt")},
|
||
|
{"watt", NewUnit("Watt")},
|
||
|
{"s", NewUnit("seconds")},
|
||
|
{"sec", NewUnit("seconds")},
|
||
|
{"secs", NewUnit("seconds")},
|
||
|
{"RPM", NewUnit("rpm")},
|
||
|
{"rPm", NewUnit("rpm")},
|
||
|
{"watt/byte", NewUnit("W/B")},
|
||
|
{"watts/bytes", NewUnit("W/B")},
|
||
|
{"flop/byte", NewUnit("flops/Bytes")},
|
||
|
{"F/B", NewUnit("flops/Bytes")},
|
||
|
}
|
||
|
compareUnitExact := func(in, out Unit) bool {
|
||
|
if in.getMeasure() == out.getMeasure() && in.getDivMeasure() == out.getDivMeasure() && in.getPrefix() == out.getPrefix() {
|
||
|
return true
|
||
|
}
|
||
|
return false
|
||
|
}
|
||
|
for _, c := range testCases {
|
||
|
u := NewUnit(c.in)
|
||
|
if (!u.Valid()) || (!compareUnitExact(u, c.want)) {
|
||
|
t.Errorf("func NewUnit(%q) == %q, want %q", c.in, u.String(), c.want.String())
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestUnitsDifferentPrefix(t *testing.T) {
|
||
|
testCases := []struct {
|
||
|
in string
|
||
|
want Unit
|
||
|
prefixFactor float64
|
||
|
}{
|
||
|
{"kb", NewUnit("Bytes"), 1000},
|
||
|
{"Mb", NewUnit("Bytes"), 1000000},
|
||
|
{"Mb/s", NewUnit("Bytes/s"), 1000000},
|
||
|
{"Flops/s", NewUnit("MFlops/s"), 1e-6},
|
||
|
{"Flops/s", NewUnit("GFlops/s"), 1e-9},
|
||
|
{"MHz", NewUnit("Hertz"), 1e6},
|
||
|
{"kb", NewUnit("Kib"), 1000.0 / 1024},
|
||
|
{"Mib", NewUnit("MBytes"), (1024 * 1024.0) / (1e6)},
|
||
|
{"mb", NewUnit("MBytes"), 1.0},
|
||
|
}
|
||
|
compareUnitWithPrefix := func(in, out Unit, factor float64) bool {
|
||
|
if in.getMeasure() == out.getMeasure() && in.getDivMeasure() == out.getDivMeasure() {
|
||
|
if f := GetPrefixFactor(in.getPrefix(), out.getPrefix()); f(1.0) == factor {
|
||
|
return true
|
||
|
} else {
|
||
|
fmt.Println(f(1.0))
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|
||
|
for _, c := range testCases {
|
||
|
u := NewUnit(c.in)
|
||
|
if (!u.Valid()) || (!compareUnitWithPrefix(u, c.want, c.prefixFactor)) {
|
||
|
t.Errorf("func NewUnit(%q) == %q, want %q with factor %f", c.in, u.String(), c.want.String(), c.prefixFactor)
|
||
|
}
|
||
|
}
|
||
|
}
|