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  }