55 lines
916 B
Go
55 lines
916 B
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestSM2(t *testing.T) {
|
|
ts := time.Date(2000, 1, 1, 0, 0, 0, 0, time.Local)
|
|
cases := map[string]struct {
|
|
history []int
|
|
want int
|
|
}{
|
|
"never before and no attempts": {
|
|
history: nil,
|
|
want: 1,
|
|
},
|
|
"0": {
|
|
history: []int{3, 3, 3, 0},
|
|
want: 1,
|
|
},
|
|
"1": {
|
|
history: []int{3, 3, 0, 3},
|
|
want: 1,
|
|
},
|
|
"2": {
|
|
history: []int{3, 0, 3, 3},
|
|
want: 6,
|
|
},
|
|
"3": {
|
|
history: []int{0, 3, 3, 3},
|
|
want: 8,
|
|
},
|
|
"4": {
|
|
history: []int{3, 3, 3, 3},
|
|
want: 27,
|
|
},
|
|
"5": {
|
|
history: []int{3, 3, 3, 3, 3},
|
|
want: 52,
|
|
},
|
|
}
|
|
|
|
for name, d := range cases {
|
|
c := d
|
|
t.Run(name, func(t *testing.T) {
|
|
got := SM2Next(ts, c.history, time.Hour*24)
|
|
t.Logf("Next(\n\t%s, \n\t%+v) = \n\t%s", ts, c.history, got)
|
|
if got != ts.Add(time.Duration(c.want)*time.Hour*24) {
|
|
t.Error(c.want, got)
|
|
}
|
|
})
|
|
}
|
|
}
|