// // FILE: unit_test_001.cpp // AUTHOR: Rob Tillaart // DATE: 2022-05-28 // PURPOSE: unit tests for the AS5600 library // https://github.com/RobTillaart/AS5600 // https://github.com/Arduino-CI/arduino_ci/blob/master/REFERENCE.md // // supported assertions // ---------------------------- // assertEqual(expected, actual); // a == b // assertNotEqual(unwanted, actual); // a != b // assertComparativeEquivalent(expected, actual); // abs(a - b) == 0 or (!(a > b) && !(a < b)) // assertComparativeNotEquivalent(unwanted, actual); // abs(a - b) > 0 or ((a > b) || (a < b)) // assertLess(upperBound, actual); // a < b // assertMore(lowerBound, actual); // a > b // assertLessOrEqual(upperBound, actual); // a <= b // assertMoreOrEqual(lowerBound, actual); // a >= b // assertTrue(actual); // assertFalse(actual); // assertNull(actual); // // special cases for floats // assertEqualFloat(expected, actual, epsilon); // fabs(a - b) <= epsilon // assertNotEqualFloat(unwanted, actual, epsilon); // fabs(a - b) >= epsilon // assertInfinity(actual); // isinf(a) // assertNotInfinity(actual); // !isinf(a) // assertNAN(arg); // isnan(a) // assertNotNAN(arg); // !isnan(a) #include #include "AS5600.h" #include "Wire.h" unittest_setup() { fprintf(stderr, "AS5600_LIB_VERSION: %s\n", (char *) AS5600_LIB_VERSION); } unittest_teardown() { } unittest(test_constants) { assertEqual(0, AS5600_CLOCK_WISE); assertEqual(1, AS5600_COUNTERCLOCK_WISE); assertEqual(0, AS5600_MODE_DEGREES); assertEqual(1, AS5600_MODE_RADIANS); assertEqualFloat(360.0/4096, AS5600_RAW_TO_DEGREES, 0.0001); assertEqualFloat((PI*2.0)/4096, AS5600_RAW_TO_RADIANS, 0.0001); assertEqual(0, AS5600_OUTMODE_ANALOG_100); assertEqual(1, AS5600_OUTMODE_ANALOG_90); assertEqual(2, AS5600_OUTMODE_PWM); assertEqual(0, AS5600_POWERMODE_NOMINAL); assertEqual(1, AS5600_POWERMODE_LOW1); assertEqual(2, AS5600_POWERMODE_LOW2); assertEqual(3, AS5600_POWERMODE_LOW3); assertEqual(0, AS5600_PWM_115); assertEqual(1, AS5600_PWM_230); assertEqual(2, AS5600_PWM_460); assertEqual(3, AS5600_PWM_920); assertEqual(0, AS5600_HYST_OFF); assertEqual(1, AS5600_HYST_LSB1); assertEqual(2, AS5600_HYST_LSB2); assertEqual(3, AS5600_HYST_LSB3); assertEqual(0, AS5600_SLOW_FILT_16X); assertEqual(1, AS5600_SLOW_FILT_8X); assertEqual(2, AS5600_SLOW_FILT_4X); assertEqual(3, AS5600_SLOW_FILT_2X); assertEqual(0, AS5600_FAST_FILT_NONE); assertEqual(1, AS5600_FAST_FILT_LSB6); assertEqual(2, AS5600_FAST_FILT_LSB7); assertEqual(3, AS5600_FAST_FILT_LSB9); assertEqual(4, AS5600_FAST_FILT_LSB18); assertEqual(5, AS5600_FAST_FILT_LSB21); assertEqual(6, AS5600_FAST_FILT_LSB24); assertEqual(7, AS5600_FAST_FILT_LSB10); assertEqual(0, AS5600_WATCHDOG_OFF); assertEqual(1, AS5600_WATCHDOG_ON); } unittest(test_constructor) { AS5600 as5600; as5600.begin(4); assertTrue(as5600.isConnected()); // keep CI happy AS5600L asl(0x40); asl.begin(5); assertTrue(asl.isConnected()); // keep CI happy } unittest(test_address) { AS5600 as5600; as5600.begin(4); assertEqual(0x36, as5600.getAddress()); AS5600L asl; as5600.begin(5); assertEqual(0x40, asl.getAddress()); AS5600L asl2(0x41); asl2.begin(6); assertEqual(0x41, asl2.getAddress()); } unittest(test_hardware_direction) { AS5600 as5600; as5600.begin(4); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); as5600.setDirection(); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); as5600.setDirection(AS5600_COUNTERCLOCK_WISE); assertEqual(AS5600_COUNTERCLOCK_WISE, as5600.getDirection()); as5600.setDirection(AS5600_CLOCK_WISE); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); } unittest(test_software_direction) { AS5600 as5600; as5600.begin(255); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); as5600.setDirection(); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); as5600.setDirection(AS5600_COUNTERCLOCK_WISE); assertEqual(AS5600_COUNTERCLOCK_WISE, as5600.getDirection()); as5600.setDirection(AS5600_CLOCK_WISE); assertEqual(AS5600_CLOCK_WISE, as5600.getDirection()); } unittest(test_offset) { AS5600 as5600; as5600.begin(); for (int of = 0; of < 360; of += 40) { as5600.setOffset(of); assertEqualFloat(of, as5600.getOffset(), 0.05); } assertTrue(as5600.setOffset(-40.25)); assertEqualFloat(319.75, as5600.getOffset(), 0.05); assertTrue(as5600.setOffset(-400.25)); assertEqualFloat(319.75, as5600.getOffset(), 0.05); assertTrue(as5600.setOffset(753.15)); assertEqualFloat(33.15, as5600.getOffset(), 0.05); assertFalse(as5600.setOffset(36000.1)); assertFalse(as5600.setOffset(-36000.1)); } unittest(test_failing_set_commands) { AS5600 as5600; as5600.begin(); assertFalse(as5600.setZPosition(4096)); assertFalse(as5600.setMPosition(4096)); assertFalse(as5600.setMaxAngle(4096)); assertFalse(as5600.setConfigure(0x4000)); assertFalse(as5600.setPowerMode(4)); assertFalse(as5600.setHysteresis(4)); assertFalse(as5600.setOutputMode(3)); assertFalse(as5600.setPWMFrequency(4)); assertFalse(as5600.setSlowFilter(4)); assertFalse(as5600.setFastFilter(8)); assertFalse(as5600.setWatchDog(2)); } // FOR REMAINING ONE NEED A STUB unittest_main() // --------