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.
70 lines
2.5 KiB
70 lines
2.5 KiB
package status
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestEvaluate(t *testing.T) {
|
|
valid := func(power float64) Sample { return Sample{Power: power, Valid: true} }
|
|
for _, tt := range []struct {
|
|
name string
|
|
samples []Sample
|
|
state string
|
|
message string
|
|
}{
|
|
{"no samples", nil, "waiting", "Waiting for data..."},
|
|
{"one sample", []Sample{valid(10)}, "waiting", "Waiting for data..."},
|
|
{"two samples with gap", []Sample{valid(10), {}}, "waiting", "Waiting for data..."},
|
|
{"all zero", []Sample{valid(0), valid(0), valid(0)}, "done", "Laundry done"},
|
|
{"below threshold", []Sample{valid(2.99), valid(2.99), valid(2.99)}, "done", "Laundry done"},
|
|
{"at threshold", []Sample{valid(0), valid(3), valid(0)}, "running", "Laundry not yet done"},
|
|
{"mixed", []Sample{valid(47.7), valid(0), valid(2.99)}, "running", "Laundry not yet done"},
|
|
{"gap overrides active", []Sample{valid(47.7), {}, valid(0)}, "incomplete", "Incomplete data"},
|
|
{"all missing", []Sample{{}, {}, {}}, "incomplete", "Incomplete data"},
|
|
} {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := Evaluate(tt.samples)
|
|
if got.State != tt.state || got.Message != tt.message {
|
|
t.Fatalf("Evaluate() = %q, %q; want %q, %q", got.State, got.Message, tt.state, tt.message)
|
|
}
|
|
if len(got.Readings) != len(tt.samples) || got.Readings == nil {
|
|
t.Fatalf("readings = %#v; want non-nil slice of length %d", got.Readings, len(tt.samples))
|
|
}
|
|
for i, sample := range tt.samples {
|
|
if got.Readings[i] != sample {
|
|
t.Errorf("readings[%d] = %+v; want %+v", i, got.Readings[i], sample)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestWindowKeepsLastThreeOldestFirst(t *testing.T) {
|
|
var window Window
|
|
if got := window.Readings(); len(got) != 0 {
|
|
t.Fatalf("new window = %v", got)
|
|
}
|
|
for i := range 7 {
|
|
window.Add(Sample{Power: float64(i), Valid: true})
|
|
}
|
|
want := []Sample{{Power: 4, Valid: true}, {Power: 5, Valid: true}, {Power: 6, Valid: true}}
|
|
if got := window.Readings(); !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("Readings() = %v; want %v", got, want)
|
|
}
|
|
snapshot := window.Readings()
|
|
snapshot[0].Power = 999
|
|
if got := window.Readings(); !reflect.DeepEqual(got, want) {
|
|
t.Fatal("mutating a snapshot changed the window")
|
|
}
|
|
for range 3 {
|
|
window.Add(Sample{Valid: true})
|
|
}
|
|
if got := Evaluate(window.Readings()); got.State != "done" {
|
|
t.Fatalf("old active samples did not age out: %+v", got)
|
|
}
|
|
window.Add(Sample{})
|
|
if got := Evaluate(window.Readings()); got.State != "incomplete" {
|
|
t.Fatalf("missing sample was not recorded: %+v", got)
|
|
}
|
|
}
|
|
|