133 lines
2.7 KiB
Go
133 lines
2.7 KiB
Go
|
package brake
|
||
|
|
||
|
import (
|
||
|
"github.com/cyrilix/robocar-throttle/pkg/types"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestNewConfigFromJson(t *testing.T) {
|
||
|
type args struct {
|
||
|
fileName string
|
||
|
}
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
args args
|
||
|
want *Config
|
||
|
wantErr bool
|
||
|
}{
|
||
|
{
|
||
|
name: "default config",
|
||
|
args: args{
|
||
|
fileName: "test_data/config.json",
|
||
|
},
|
||
|
want: &defaultBrakeConfig,
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
got, err := NewConfigFromJson(tt.args.fileName)
|
||
|
if (err != nil) != tt.wantErr {
|
||
|
t.Errorf("NewConfigFromJson() error = %v, wantErr %v", err, tt.wantErr)
|
||
|
return
|
||
|
}
|
||
|
if !reflect.DeepEqual(*got, *tt.want) {
|
||
|
t.Errorf("NewConfigFromJson() got = %v, want %v", got, tt.want)
|
||
|
}
|
||
|
if !reflect.DeepEqual(got.DeltaSteps, tt.want.DeltaSteps) {
|
||
|
t.Errorf("NewConfigFromJson(), bad DeltaSteps: got = %v, want %v", got.DeltaSteps, tt.want.DeltaSteps)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestConfig_ValueOf(t *testing.T) {
|
||
|
type fields struct {
|
||
|
DeltaSteps []float32
|
||
|
MinValue int
|
||
|
Data []types.Throttle
|
||
|
}
|
||
|
type args struct {
|
||
|
currentThrottle, targetThrottle types.Throttle
|
||
|
}
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
fields fields
|
||
|
args args
|
||
|
want types.Throttle
|
||
|
}{
|
||
|
{
|
||
|
name: "delta > 0",
|
||
|
fields: fields{
|
||
|
DeltaSteps: defaultBrakeConfig.DeltaSteps,
|
||
|
Data: defaultBrakeConfig.Data,
|
||
|
},
|
||
|
args: args{
|
||
|
currentThrottle: 0.5,
|
||
|
targetThrottle: 0.8,
|
||
|
},
|
||
|
want: 0.8,
|
||
|
},
|
||
|
{
|
||
|
name: "no delta",
|
||
|
fields: fields{
|
||
|
DeltaSteps: defaultBrakeConfig.DeltaSteps,
|
||
|
Data: defaultBrakeConfig.Data,
|
||
|
},
|
||
|
args: args{
|
||
|
currentThrottle: 0.5,
|
||
|
targetThrottle: 0.5,
|
||
|
},
|
||
|
want: 0.5,
|
||
|
},
|
||
|
{
|
||
|
name: "delta very low (< 1st step)",
|
||
|
fields: fields{
|
||
|
DeltaSteps: defaultBrakeConfig.DeltaSteps,
|
||
|
Data: defaultBrakeConfig.Data,
|
||
|
},
|
||
|
args: args{
|
||
|
currentThrottle: 0.5,
|
||
|
targetThrottle: 0.495,
|
||
|
},
|
||
|
want: 0.495,
|
||
|
},
|
||
|
{
|
||
|
name: "low delta ( 1st step < delta < 2nd step )",
|
||
|
fields: fields{
|
||
|
DeltaSteps: defaultBrakeConfig.DeltaSteps,
|
||
|
Data: defaultBrakeConfig.Data,
|
||
|
},
|
||
|
args: args{
|
||
|
currentThrottle: 0.5,
|
||
|
targetThrottle: 0.38,
|
||
|
},
|
||
|
want: -0.1,
|
||
|
},
|
||
|
{
|
||
|
name: "high delta",
|
||
|
fields: fields{
|
||
|
DeltaSteps: defaultBrakeConfig.DeltaSteps,
|
||
|
Data: defaultBrakeConfig.Data,
|
||
|
},
|
||
|
args: args{
|
||
|
currentThrottle: 0.8,
|
||
|
targetThrottle: 0.3,
|
||
|
},
|
||
|
want: -1.,
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
f := &Config{
|
||
|
DeltaSteps: tt.fields.DeltaSteps,
|
||
|
Data: tt.fields.Data,
|
||
|
}
|
||
|
got := f.ValueOf(tt.args.currentThrottle, tt.args.targetThrottle)
|
||
|
if !reflect.DeepEqual(got, tt.want) {
|
||
|
t.Errorf("ValueOf() = %v, want %v", got, tt.want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|