def test_sample(self):
        """Test method for sensor sampling"""

        print("Testing sensor sampling.")

        r = driver.instantiateRover(
            [
                "system=rover",
                "rotationSpeed=0",
                "forwardSpeed=1",
                "rotationSpeedError=2",
                "forwardSpeedError=3",
                "x=25",
                "y=25",
                "orientation=45",
                "port=/dev/tty.usbserial-A702ZKVY",
            ]
        )
        s = driver.instantiateSensor(
            [
                "sampleRate=500",
                "sampleRateError=0",
                "rotationRate=500",
                "rotationRateError=0",
                "rangeOfMotion=90",
                "buff=3",
                "port=/dev/tty.usbserial-A702ZIQS",
            ]
        )

        foundRover = False

        while foundRover != True:
            foundRover = s.sample(r.getPosition())

            # Check that the sensor is aimed within a 2 cm margin of the center of the rover.
        self.assertLessEqual(abs(s.getOrientation() - 45), 1)  # 45 degrees is the correct orientation.

        r.setPosition(25, 50)
        foundRover = False
        while foundRover != True:
            foundRover = s.sample(r.getPosition())

            # Check that the sensor is aimed within a 2 cm margin of the center of the rover.
        self.assertLessEqual(abs(s.getOrientation() - 63.5), 1)  # 63.5 degrees is the correct orientation.
    def test_instantiateSystems(self):
        """Test method for systems instantiation"""

        print("Testing instantiation of the systems.")

        r1 = driver.instantiateRover(
            [
                "system=rover",
                "rotationSpeed=0",
                "forwardSpeed=1",
                "rotationSpeedError=2",
                "forwardSpeedError=3",
                "x=4",
                "y=5",
                "orientation=45",
                "port=/dev/tty.usbserial-A702ZKVY",
            ]
        )
        s1 = driver.instantiateSensor(
            [
                "sampleRate=0",
                "sampleRateError=1",
                "rotationRate=2",
                "rotationRateError=3",
                "rangeOfMotion=4",
                "buff=5",
                "port=/dev/tty.usbserial-A702ZIQS",
            ]
        )
        r2, s2, c2 = driver.instantiateSystems("config1.txt")

        self.assertEqual(r1.getRotationSpeed(), r2.getRotationSpeed())
        self.assertEqual(r1.getForwardSpeed(), r2.getForwardSpeed())
        self.assertEqual(r1.getRotationSpeedError(), r2.getRotationSpeedError())
        self.assertEqual(r1.getForwardSpeedError(), r2.getForwardSpeedError())
        self.assertEqual(r1.getPosition()[0], r2.getPosition()[0])
        self.assertEqual(r1.getPosition()[1], r2.getPosition()[1])

        self.assertEqual(s1.getSampleRate(), s2.getSampleRate())
        self.assertEqual(s1.getSampleRateError(), s2.getSampleRateError())
        self.assertEqual(s1.getRotationRate(), s2.getRotationRate())
        self.assertEqual(s1.getRotationRateError(), s2.getRotationRateError())
        self.assertEqual(s1.getRangeOfMotion(), s2.getRangeOfMotion())
        self.assertEqual(s1.getBuff(), s2.getBuff())
    def test_instantiateRover(self):
        """Test method for rover instantiation"""

        print("Testing instantiation of the rover.")

        r = driver.instantiateRover(
            [
                "system=rover",
                "rotationSpeed=0",
                "forwardSpeed=1",
                "rotationSpeedError=2",
                "forwardSpeedError=3",
                "x=4",
                "y=5",
                "orientation=45",
                "port=/dev/tty.usbserial-A702ZKVY",
            ]
        )
        self.assertEqual(r.getRotationSpeed(), 0)
        self.assertEqual(r.getForwardSpeed(), 1)
        self.assertEqual(r.getRotationSpeedError(), 2)
        self.assertEqual(r.getForwardSpeedError(), 3)
        self.assertEqual(r.getPosition()[0], 4)
        self.assertEqual(r.getPosition()[1], 5)
    def test_move(self):
        print("Testing rover movement.")

        r = driver.instantiateRover(
            [
                "system=rover",
                "rotationSpeed=1",
                "forwardSpeed=1",
                "rotationSpeedError=2",
                "forwardSpeedError=3",
                "x=24",
                "y=25",
                "orientation=0",
                "port=/dev/tty.usbserial-A702ZKVY",
            ]
        )

        self.assertEqual(r.move(0.5, 1), False)  # Radius is too small.

        stop = False

        r.move(1000, 1)  # Move straight.

        # Rover is now at (25,25).

        self.assertLessEqual(abs(r.getPosition()[0] - 25), 0.1)

        # r.move(10, 5*pi) #circum: 20*pi cm -> one revolution in 20*pi seconds

        # # Check position of the rover.
        # self.assertLessEqual(abs(r.getPosition()[0] - 35), 1)
        # self.assertLessEqual(abs(r.getPosition()[1] - 15), 1)

        # # Check orientation of the rover.
        # self.assertLessEqual(abs(r.getOrientation() - 90), 1)

        # r.move(-10, 5*pi)

        # # Check position of the rover.
        # self.assertLessEqual(abs(r.getPosition()[0] - 45), 1)
        # self.assertLessEqual(abs(r.getPosition()[1] - 45), 1)

        # # Check orientation of the rover.
        # self.assertLessEqual(abs(r.getOrientation() - 0), 1)

        # plt.plot(r.getYHist(), r.getXHist())
        # plt.ylabel('Rover Position')
        # plt.show()

        # print("Rover movement times", r.getMovementTimes())
        # print("Init time", r.getInitTime())

        r.setPosition(4, 5)
        r.setOrientation(0)
        # Execute same commands from different starting location.

        r.move(1000, 1)  # Move straight.

        # Rover is now at (5,5).

        self.assertLessEqual(abs(r.getPosition()[0] - 5), 0.1)

        # r.move(10, 7*pi) #circum: 20*pi cm -> one revolution in 20*pi seconds

        # # Check position of the rover.
        # self.assertLessEqual(abs(r.getPosition()[0] - 15), 1)
        # self.assertLessEqual(abs(r.getPosition()[1] - 15), 1)

        # # Check orientation of the rover.
        # self.assertLessEqual(abs(r.getOrientation() - 90), 1)

        r.move(-10, 21 * pi)

        # Check position of the rover.
        self.assertLessEqual(abs(r.getPosition()[0] - 25), 1)
        self.assertLessEqual(abs(r.getPosition()[1] - 25), 1)

        # Check orientation of the rover.
        self.assertLessEqual(abs(r.getOrientation() - 0), 1)