94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package controllogic
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/uopi/uopi/internal/confmgr"
|
|
)
|
|
|
|
func TestFormatAny(t *testing.T) {
|
|
cases := []struct {
|
|
in any
|
|
want string
|
|
}{
|
|
{3.5, "3.5"},
|
|
{float64(42), "42"},
|
|
{"hello", "hello"},
|
|
{true, "true"},
|
|
{int64(7), "7"},
|
|
}
|
|
for _, c := range cases {
|
|
if got := formatAny(c.in); got != c.want {
|
|
t.Errorf("formatAny(%v) = %q, want %q", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTestThreshold(t *testing.T) {
|
|
cases := []struct {
|
|
val float64
|
|
op string
|
|
cmp float64
|
|
want bool
|
|
}{
|
|
{1, "<", 2, true},
|
|
{3, "<", 2, false},
|
|
{2, ">=", 2, true},
|
|
{1, ">=", 2, false},
|
|
{2, "<=", 2, true},
|
|
{3, "<=", 2, false},
|
|
{2, "==", 2, true},
|
|
{2, "!=", 3, true},
|
|
{5, ">", 2, true}, // default branch
|
|
{1, "", 0, true}, // empty op → ">"
|
|
{math.NaN(), "<", 1, false}, // NaN never satisfies
|
|
}
|
|
for _, c := range cases {
|
|
if got := testThreshold(c.val, c.op, c.cmp); got != c.want {
|
|
t.Errorf("testThreshold(%v,%q,%v) = %v, want %v", c.val, c.op, c.cmp, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseFloat(t *testing.T) {
|
|
cases := []struct {
|
|
in string
|
|
want float64
|
|
}{
|
|
{"3.14", 3.14},
|
|
{" 10 ", 10},
|
|
{"", 0},
|
|
{"not-a-number", 0},
|
|
}
|
|
for _, c := range cases {
|
|
if got := parseFloat(c.in); got != c.want {
|
|
t.Errorf("parseFloat(%q) = %v, want %v", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCoerceParamValue(t *testing.T) {
|
|
if v := coerceParamValue(confmgr.Parameter{Type: confmgr.TypeInt}, 3.9); v != int64(3) {
|
|
t.Errorf("int coerce = %v, want 3", v)
|
|
}
|
|
if v := coerceParamValue(confmgr.Parameter{Type: confmgr.TypeBool}, 0); v != false {
|
|
t.Errorf("bool 0 = %v, want false", v)
|
|
}
|
|
if v := coerceParamValue(confmgr.Parameter{Type: confmgr.TypeBool}, 1); v != true {
|
|
t.Errorf("bool 1 = %v, want true", v)
|
|
}
|
|
if v := coerceParamValue(confmgr.Parameter{Type: confmgr.TypeString}, 2.5); v != "2.5" {
|
|
t.Errorf("string coerce = %v, want \"2.5\"", v)
|
|
}
|
|
if v := coerceParamValue(confmgr.Parameter{Type: confmgr.TypeFloat}, 1.25); v != 1.25 {
|
|
t.Errorf("float coerce = %v, want 1.25", v)
|
|
}
|
|
}
|
|
|
|
func TestSign(t *testing.T) {
|
|
if signOf(5) != 1 || signOf(-5) != -1 || signOf(0) != 0 {
|
|
t.Errorf("sign mismatch: %d %d %d", signOf(5), signOf(-5), signOf(0))
|
|
}
|
|
}
|