107 lines
3.1 KiB
Go
107 lines
3.1 KiB
Go
//nolint:forcetypeassert // ok here
|
|
package i2c
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"gobot.io/x/gobot/v2"
|
|
"gobot.io/x/gobot/v2/drivers/aio"
|
|
)
|
|
|
|
// this ensures that the implementation is based on i2c.Driver, which implements the gobot.Driver
|
|
// and tests all implementations, so no further tests needed here for gobot.Driver interface
|
|
var _ gobot.Driver = (*ADS1x15Driver)(nil)
|
|
|
|
// that supports the AnalogReader interface
|
|
var _ aio.AnalogReader = (*ADS1x15Driver)(nil)
|
|
|
|
func initTestADS1x15DriverWithStubbedAdaptor() (*ADS1x15Driver, *i2cTestAdaptor) { //nolint:unparam // keep for tests
|
|
a := newI2cTestAdaptor()
|
|
const defaultDataRate = 3
|
|
dataRates := map[int]uint16{defaultDataRate: 0x0003}
|
|
d := newADS1x15Driver(a, "ADS1x15", dataRates, defaultDataRate)
|
|
noConversion := []uint8{0x80, 0x00} // no conversion in progress
|
|
a.i2cReadImpl = func(b []byte) (int, error) {
|
|
copy(b, noConversion)
|
|
return 2, nil
|
|
}
|
|
if err := d.Start(); err != nil {
|
|
panic(err)
|
|
}
|
|
return d, a
|
|
}
|
|
|
|
var ads1x15TestChannel = map[string]interface{}{
|
|
"channel": int(2),
|
|
}
|
|
|
|
var ads1x15TestChannelGainDataRate = map[string]interface{}{
|
|
"channel": int(1),
|
|
"gain": int(2),
|
|
"dataRate": int(3),
|
|
}
|
|
|
|
func TestADS1x15CommandsReadDifferenceWithDefaults(t *testing.T) {
|
|
// arrange
|
|
d, _ := initTestADS1x15DriverWithStubbedAdaptor()
|
|
// act
|
|
result := d.Command("ReadDifferenceWithDefaults")(ads1x15TestChannel)
|
|
// assert
|
|
assert.Nil(t, result.(map[string]interface{})["err"])
|
|
assert.InDelta(t, -4.096, result.(map[string]interface{})["val"], 0.0)
|
|
}
|
|
|
|
func TestADS1x15CommandsReadDifference(t *testing.T) {
|
|
// arrange
|
|
d, _ := initTestADS1x15DriverWithStubbedAdaptor()
|
|
// act
|
|
result := d.Command("ReadDifference")(ads1x15TestChannelGainDataRate)
|
|
// assert
|
|
assert.Nil(t, result.(map[string]interface{})["err"])
|
|
assert.InDelta(t, -2.048, result.(map[string]interface{})["val"], 0.0)
|
|
}
|
|
|
|
func TestADS1x15CommandsReadWithDefaults(t *testing.T) {
|
|
// arrange
|
|
d, _ := initTestADS1x15DriverWithStubbedAdaptor()
|
|
// act
|
|
result := d.Command("ReadWithDefaults")(ads1x15TestChannel)
|
|
// assert
|
|
assert.Nil(t, result.(map[string]interface{})["err"])
|
|
assert.InDelta(t, -4.096, result.(map[string]interface{})["val"], 0.0)
|
|
}
|
|
|
|
func TestADS1x15CommandsRead(t *testing.T) {
|
|
// arrange
|
|
d, _ := initTestADS1x15DriverWithStubbedAdaptor()
|
|
// act
|
|
result := d.Command("Read")(ads1x15TestChannelGainDataRate)
|
|
// assert
|
|
assert.Nil(t, result.(map[string]interface{})["err"])
|
|
assert.InDelta(t, -2.048, result.(map[string]interface{})["val"], 0.0)
|
|
}
|
|
|
|
func TestADS1x15CommandsAnalogRead(t *testing.T) {
|
|
// arrange
|
|
d, _ := initTestADS1x15DriverWithStubbedAdaptor()
|
|
ads1x15TestPin := map[string]interface{}{
|
|
"pin": string("2"),
|
|
}
|
|
// act
|
|
result := d.Command("AnalogRead")(ads1x15TestPin)
|
|
// assert
|
|
assert.Nil(t, result.(map[string]interface{})["err"])
|
|
assert.Equal(t, -32768, result.(map[string]interface{})["val"])
|
|
}
|
|
|
|
func TestADS1x15_ads1x15BestGainForVoltage(t *testing.T) {
|
|
g, _ := ads1x15BestGainForVoltage(1.5)
|
|
assert.Equal(t, 2, g)
|
|
|
|
_, err := ads1x15BestGainForVoltage(20.0)
|
|
require.ErrorContains(t, err, "The maximum voltage which can be read is 6.144000")
|
|
}
|