73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func TestMomentaryOutput(t *testing.T) {
|
||
|
mo := momentaryOutput{}
|
||
|
mo.trigger()
|
||
|
mo.process()
|
||
|
if !mo.output {
|
||
|
t.Fatalf("output didn't trigger")
|
||
|
}
|
||
|
mo.process()
|
||
|
if !mo.output {
|
||
|
t.Fatalf("output didn't keep triggered")
|
||
|
}
|
||
|
time.Sleep(time.Second)
|
||
|
mo.process()
|
||
|
if mo.output {
|
||
|
t.Fatalf("output didn't untrigger")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestThresholdOutput(t *testing.T) {
|
||
|
to := thresholdOutput{
|
||
|
threshold: 1,
|
||
|
}
|
||
|
to.process(0)
|
||
|
if to.output {
|
||
|
t.Fatalf("output shouldn't have triggered")
|
||
|
}
|
||
|
to.process(2)
|
||
|
if !to.output {
|
||
|
t.Fatalf("output should have triggered")
|
||
|
}
|
||
|
to.process(0)
|
||
|
if !to.output {
|
||
|
t.Fatalf("output should have triggered (in debounce)")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRingbufferInput(t *testing.T) {
|
||
|
ri := ringbufferInput{
|
||
|
limit: 3,
|
||
|
}
|
||
|
if ri.saturated() {
|
||
|
t.Fatal("ringbuffer shouldn't be saturated yet")
|
||
|
}
|
||
|
ri.process(1)
|
||
|
if ri.saturated() {
|
||
|
t.Fatal("ringbuffer shouldn't be saturated yet")
|
||
|
}
|
||
|
ri.process(2)
|
||
|
if ri.saturated() {
|
||
|
t.Fatal("ringbuffer shouldn't be saturated yet")
|
||
|
}
|
||
|
ri.process(3)
|
||
|
if !ri.saturated() {
|
||
|
t.Fatalf("ringbuffer should be saturated")
|
||
|
}
|
||
|
|
||
|
if diff := math.Abs(float64(ri.avg) - 2); diff > 0.01 {
|
||
|
t.Fatalf("ringbuffer avg should be ~2, is %f", ri.avg)
|
||
|
}
|
||
|
ri.process(10)
|
||
|
if diff := math.Abs(float64(ri.avg) - 5); diff > 0.01 {
|
||
|
t.Fatalf("ringbuffer avg should be ~5, is %f", ri.avg)
|
||
|
}
|
||
|
}
|