1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
package gcc
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestKalman(t *testing.T) {
cases := []struct {
name string
opts []kalmanOption
measurements []time.Duration
expected []time.Duration
}{
{
name: "empty",
opts: []kalmanOption{},
measurements: []time.Duration{},
expected: []time.Duration{},
},
{
name: "kalmanfilter.netExample",
opts: []kalmanOption{
initEstimate(10 * time.Millisecond),
initEstimateError(100),
initProcessUncertainty(0.15),
initMeasurementUncertainty(0.01),
},
measurements: []time.Duration{
time.Duration(50.45 * float64(time.Millisecond)),
time.Duration(50.967 * float64(time.Millisecond)),
time.Duration(51.6 * float64(time.Millisecond)),
time.Duration(52.106 * float64(time.Millisecond)),
time.Duration(52.492 * float64(time.Millisecond)),
time.Duration(52.819 * float64(time.Millisecond)),
time.Duration(53.433 * float64(time.Millisecond)),
time.Duration(54.007 * float64(time.Millisecond)),
time.Duration(54.523 * float64(time.Millisecond)),
time.Duration(54.99 * float64(time.Millisecond)),
},
expected: []time.Duration{
time.Duration(50.449959 * float64(time.Millisecond)),
time.Duration(50.936547 * float64(time.Millisecond)),
time.Duration(51.560411 * float64(time.Millisecond)),
time.Duration(52.07324 * float64(time.Millisecond)),
time.Duration(52.466566 * float64(time.Millisecond)),
time.Duration(52.797787 * float64(time.Millisecond)),
time.Duration(53.395303 * float64(time.Millisecond)),
time.Duration(53.970236 * float64(time.Millisecond)),
time.Duration(54.489652 * float64(time.Millisecond)),
time.Duration(54.960137 * float64(time.Millisecond)),
},
},
}
for _, tc := range cases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
k := newKalman(append(tc.opts, setDisableMeasurementUncertaintyUpdates(true))...)
estimates := []time.Duration{}
for _, m := range tc.measurements {
estimates = append(estimates, k.updateEstimate(m))
}
assert.Equal(t, tc.expected, estimates, "%v != %v", tc.expected, estimates)
})
}
}
|