gobot.io/x/gobot/v2@v2.1.0/drivers/aio/analog_actuator_driver_test.go (about) 1 package aio 2 3 import ( 4 "strings" 5 "testing" 6 7 "gobot.io/x/gobot/v2/gobottest" 8 ) 9 10 func TestAnalogActuatorDriver(t *testing.T) { 11 a := newAioTestAdaptor() 12 d := NewAnalogActuatorDriver(a, "47") 13 14 gobottest.Refute(t, d.Connection(), nil) 15 gobottest.Assert(t, d.Pin(), "47") 16 17 err := d.RawWrite(100) 18 gobottest.Assert(t, err, nil) 19 gobottest.Assert(t, len(a.written), 1) 20 gobottest.Assert(t, a.written[0], 100) 21 22 err = d.Write(247.0) 23 gobottest.Assert(t, err, nil) 24 gobottest.Assert(t, len(a.written), 2) 25 gobottest.Assert(t, a.written[1], 247) 26 gobottest.Assert(t, d.RawValue(), 247) 27 gobottest.Assert(t, d.Value(), 247.0) 28 } 29 30 func TestAnalogActuatorDriverWithScaler(t *testing.T) { 31 // commands 32 a := newAioTestAdaptor() 33 d := NewAnalogActuatorDriver(a, "7") 34 d.SetScaler(func(input float64) int { return int((input + 3) / 2.5) }) 35 36 err := d.Command("RawWrite")(map[string]interface{}{"val": "100"}) 37 gobottest.Assert(t, err, nil) 38 gobottest.Assert(t, len(a.written), 1) 39 gobottest.Assert(t, a.written[0], 100) 40 41 err = d.Command("Write")(map[string]interface{}{"val": "247.0"}) 42 gobottest.Assert(t, err, nil) 43 gobottest.Assert(t, len(a.written), 2) 44 gobottest.Assert(t, a.written[1], 100) 45 } 46 47 func TestAnalogActuatorDriverLinearScaler(t *testing.T) { 48 var tests = map[string]struct { 49 fromMin float64 50 fromMax float64 51 input float64 52 want int 53 }{ 54 "byte_range_min": {fromMin: 0, fromMax: 255, input: 0, want: 0}, 55 "byte_range_max": {fromMin: 0, fromMax: 255, input: 255, want: 255}, 56 "signed_percent_range_min": {fromMin: -100, fromMax: 100, input: -100, want: 0}, 57 "signed_percent_range_mid": {fromMin: -100, fromMax: 100, input: 0, want: 127}, 58 "signed_percent_range_max": {fromMin: -100, fromMax: 100, input: 100, want: 255}, 59 "voltage_range_min": {fromMin: 0, fromMax: 5.1, input: 0, want: 0}, 60 "voltage_range_nearmin": {fromMin: 0, fromMax: 5.1, input: 0.02, want: 1}, 61 "voltage_range_mid": {fromMin: 0, fromMax: 5.1, input: 2.55, want: 127}, 62 "voltage_range_nearmax": {fromMin: 0, fromMax: 5.1, input: 5.08, want: 254}, 63 "voltage_range_max": {fromMin: 0, fromMax: 5.1, input: 5.1, want: 255}, 64 "upscale": {fromMin: 0, fromMax: 24, input: 12, want: 127}, 65 "below_min": {fromMin: -10, fromMax: 10, input: -11, want: 0}, 66 "exceed_max": {fromMin: 0, fromMax: 20, input: 21, want: 255}, 67 } 68 a := newAioTestAdaptor() 69 d := NewAnalogActuatorDriver(a, "7") 70 71 for name, tt := range tests { 72 t.Run(name, func(t *testing.T) { 73 // arrange 74 d.SetScaler(AnalogActuatorLinearScaler(tt.fromMin, tt.fromMax, 0, 255)) 75 a.written = []int{} // reset previous write 76 // act 77 err := d.Write(tt.input) 78 // assert 79 gobottest.Assert(t, err, nil) 80 gobottest.Assert(t, len(a.written), 1) 81 gobottest.Assert(t, a.written[0], tt.want) 82 }) 83 } 84 } 85 86 func TestAnalogActuatorDriverStart(t *testing.T) { 87 d := NewAnalogActuatorDriver(newAioTestAdaptor(), "1") 88 gobottest.Assert(t, d.Start(), nil) 89 } 90 91 func TestAnalogActuatorDriverHalt(t *testing.T) { 92 d := NewAnalogActuatorDriver(newAioTestAdaptor(), "1") 93 gobottest.Assert(t, d.Halt(), nil) 94 } 95 96 func TestAnalogActuatorDriverDefaultName(t *testing.T) { 97 d := NewAnalogActuatorDriver(newAioTestAdaptor(), "1") 98 gobottest.Assert(t, strings.HasPrefix(d.Name(), "AnalogActuator"), true) 99 } 100 101 func TestAnalogActuatorDriverSetName(t *testing.T) { 102 d := NewAnalogActuatorDriver(newAioTestAdaptor(), "1") 103 d.SetName("mybot") 104 gobottest.Assert(t, d.Name(), "mybot") 105 }