49 lines
1 KiB
Go
49 lines
1 KiB
Go
package planner
|
|
|
|
import (
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/benbjohnson/clock"
|
|
"github.com/evcc-io/evcc/api"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSlotHasSuccessor(t *testing.T) {
|
|
plan := rates([]float64{20, 60, 10, 80, 40, 90}, time.Now(), time.Hour)
|
|
|
|
last := plan[len(plan)-1]
|
|
rand.Shuffle(len(plan)-1, func(i, j int) {
|
|
plan[i], plan[j] = plan[j], plan[i]
|
|
})
|
|
|
|
for i := range plan {
|
|
if plan[i] != last {
|
|
require.True(t, SlotHasSuccessor(plan[i], plan))
|
|
}
|
|
}
|
|
|
|
require.False(t, SlotHasSuccessor(last, plan))
|
|
}
|
|
|
|
func TestIsFirst(t *testing.T) {
|
|
clock := clock.NewMock()
|
|
plan := rates([]float64{20, 60, 10, 80, 40, 90}, clock.Now(), time.Hour)
|
|
|
|
first := plan[0]
|
|
rand.Shuffle(len(plan), func(i, j int) {
|
|
plan[i], plan[j] = plan[j], plan[i]
|
|
})
|
|
|
|
for i := 1; i < len(plan); i++ {
|
|
if plan[i] != first {
|
|
require.False(t, IsFirst(plan[i], plan))
|
|
}
|
|
}
|
|
|
|
require.True(t, IsFirst(first, plan))
|
|
|
|
// ensure single slot is always first
|
|
require.True(t, IsFirst(first, []api.Rate{first}))
|
|
}
|