From 9956693c5e8a1e8d1f4a4eb563c0e9a2fa89da1b Mon Sep 17 00:00:00 2001 From: David Vo Date: Wed, 1 Jan 2025 04:44:34 +1100 Subject: [PATCH] wpilib: Restore Joystick getDirection methods --- subprojects/robotpy-wpilib/gen/Joystick.yml | 8 +- .../robotpy-wpilib/tests/test_joystick.py | 144 ++++++++++++++++++ 2 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 subprojects/robotpy-wpilib/tests/test_joystick.py diff --git a/subprojects/robotpy-wpilib/gen/Joystick.yml b/subprojects/robotpy-wpilib/gen/Joystick.yml index e13560a7f..24c947748 100644 --- a/subprojects/robotpy-wpilib/gen/Joystick.yml +++ b/subprojects/robotpy-wpilib/gen/Joystick.yml @@ -40,7 +40,9 @@ classes: GetTopReleased: Top: GetMagnitude: - GetDirectionRadians: - GetDirectionDegrees: GetDirection: - ignore: true + rename: getDirectionRadians + inline_code: | + .def("getDirectionDegrees", [](const Joystick &self) -> units::degree_t { + return self.GetDirection(); + }) diff --git a/subprojects/robotpy-wpilib/tests/test_joystick.py b/subprojects/robotpy-wpilib/tests/test_joystick.py new file mode 100644 index 000000000..f58dcbaa6 --- /dev/null +++ b/subprojects/robotpy-wpilib/tests/test_joystick.py @@ -0,0 +1,144 @@ +import math + +from wpilib import Joystick +from wpilib.simulation import JoystickSim + + +def test_getX() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + joysim.setX(0.25) + joysim.notifyNewData() + assert math.isclose(joy.getX(), 0.25) + + joysim.setX(0) + joysim.notifyNewData() + assert math.isclose(joy.getX(), 0.0) + + +def test_getY() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + joysim.setY(0.25) + joysim.notifyNewData() + assert math.isclose(joy.getY(), 0.25) + + joysim.setY(0) + joysim.notifyNewData() + assert math.isclose(joy.getY(), 0.0) + + +def test_getZ() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + joysim.setZ(0.25) + joysim.notifyNewData() + assert math.isclose(joy.getZ(), 0.25) + + joysim.setZ(0) + joysim.notifyNewData() + assert math.isclose(joy.getZ(), 0.0) + + +def test_getTwist() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + joysim.setTwist(0.25) + joysim.notifyNewData() + assert math.isclose(joy.getTwist(), 0.25) + + joysim.setTwist(0) + joysim.notifyNewData() + assert math.isclose(joy.getTwist(), 0.0) + + +def test_getThrottle() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + joysim.setThrottle(0.25) + joysim.notifyNewData() + assert math.isclose(joy.getThrottle(), 0.25) + + joysim.setThrottle(0) + joysim.notifyNewData() + assert math.isclose(joy.getThrottle(), 0.0) + + +def test_getTrigger() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + joysim.setTrigger(True) + joysim.notifyNewData() + assert joy.getTrigger() + + joysim.setTrigger(False) + joysim.notifyNewData() + assert not joy.getTrigger() + + +def test_getTop() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + joysim.setTop(True) + joysim.notifyNewData() + assert joy.getTop() + + joysim.setTop(False) + joysim.notifyNewData() + assert not joy.getTop() + + +def test_getMagnitude() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + # X Only + joysim.setX(0.5) + joysim.setY(0.0) + joysim.notifyNewData() + assert math.isclose(joy.getMagnitude(), 0.5) + + # Y Only + joysim.setX(0.0) + joysim.setY(-0.5) + joysim.notifyNewData() + assert math.isclose(joy.getMagnitude(), 0.5) + + # Both + joysim.setX(0.5) + joysim.setY(-0.5) + joysim.notifyNewData() + assert math.isclose(joy.getMagnitude(), 0.70710678118) + + +def test_getDirection() -> None: + joy = Joystick(1) + joysim = JoystickSim(joy) + + # X Only + joysim.setX(0.5) + joysim.setY(0.0) + joysim.notifyNewData() + assert math.isclose(joy.getDirectionDegrees(), 90) + assert math.isclose(joy.getDirectionRadians(), math.radians(90)) + + # Y Only + joysim.setX(0.0) + joysim.setY(-0.5) + joysim.notifyNewData() + assert math.isclose(joy.getDirectionDegrees(), 0) + assert math.isclose(joy.getDirectionRadians(), math.radians(0)) + + # Both + joysim.setX(0.5) + joysim.setY(-0.5) + joysim.notifyNewData() + assert math.isclose(joy.getDirectionDegrees(), 45) + assert math.isclose(joy.getDirectionRadians(), math.radians(45))