Skip to content
This repository has been archived by the owner on Dec 23, 2021. It is now read-only.

Commit

Permalink
Updated accelerometer to throw exceptions when invalid acceleration
Browse files Browse the repository at this point in the history
  • Loading branch information
Vandy Liu committed Feb 11, 2020
1 parent 5430209 commit 7411703
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 45 deletions.
25 changes: 5 additions & 20 deletions src/microbit/__model/accelerometer.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,23 +82,6 @@ def get_gestures(self):

# Helpers and Hidden Functions

def __set_x(self, x):
self.__x = self.__get_valid_acceleration(x)

def __set_y(self, y):
self.__y = self.__get_valid_acceleration(y)

def __set_z(self, z):
self.__z = self.__get_valid_acceleration(z)

def __get_valid_acceleration(self, acceleration):
if acceleration < CONSTANTS.MIN_ACCELERATION:
return CONSTANTS.MIN_ACCELERATION
elif acceleration > CONSTANTS.MAX_ACCELERATION:
return CONSTANTS.MAX_ACCELERATION
else:
return acceleration

def __get_accel(self, axis):
if axis == "x":
return self.get_x()
Expand All @@ -108,12 +91,14 @@ def __get_accel(self, axis):
return self.get_z()

def __set_accel(self, axis, accel):
if accel < CONSTANTS.MIN_ACCELERATION or accel > CONSTANTS.MAX_ACCELERATION:
raise ValueError("")
if axis == "x":
self.__x = self.__get_valid_acceleration(accel)
self.__x = accel
elif axis == "y":
self.__y = self.__get_valid_acceleration(accel)
self.__y = accel
elif axis == "z":
self.__z = self.__get_valid_acceleration(accel)
self.__z = accel

def __set_gesture(self, gesture):
if gesture in CONSTANTS.GESTURES:
Expand Down
3 changes: 3 additions & 0 deletions src/microbit/__model/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,5 +145,8 @@
UNSUPPORTED_ADD_TYPE = "unsupported types for __add__:"
SAME_SIZE_ERR = "images must be the same size"
INVALID_GESTURE_ERR = "invalid gesture"
INVALID_ACCEL_ERR = "invalid acceleration"
INVALID_LIGHT_LEVEL_ERR = "invalid light level"
INVALID_TEMPERATURE_ERR = "invalid temperature"

TIME_DELAY = 0.03
58 changes: 33 additions & 25 deletions src/microbit/test/test_accelerometer.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,39 +10,47 @@ def setup_method(self):
self.accelerometer = Accelerometer()

@pytest.mark.parametrize(
"accel, expected",
"accel",
[
(CONSTANTS.MIN_ACCELERATION - 10, CONSTANTS.MIN_ACCELERATION),
(CONSTANTS.MIN_ACCELERATION, CONSTANTS.MIN_ACCELERATION),
(100, 100),
(CONSTANTS.MAX_ACCELERATION, CONSTANTS.MAX_ACCELERATION),
(CONSTANTS.MAX_ACCELERATION + 1, CONSTANTS.MAX_ACCELERATION),
CONSTANTS.MIN_ACCELERATION,
CONSTANTS.MIN_ACCELERATION + 1,
100,
CONSTANTS.MAX_ACCELERATION - 1,
CONSTANTS.MAX_ACCELERATION,
],
)
def test_x_y_z(self, accel, expected):
self.accelerometer._Accelerometer__set_x(accel)
assert expected == self.accelerometer.get_x()
self.accelerometer._Accelerometer__set_y(accel)
assert expected == self.accelerometer.get_y()
self.accelerometer._Accelerometer__set_z(accel)
assert expected == self.accelerometer.get_z()
def test_x_y_z(self, accel):
self.accelerometer._Accelerometer__set_accel("x", accel)
assert accel == self.accelerometer.get_x()
self.accelerometer._Accelerometer__set_accel("y", accel)
assert accel == self.accelerometer.get_y()
self.accelerometer._Accelerometer__set_accel("z", accel)
assert accel == self.accelerometer.get_z()

@pytest.mark.parametrize("axis", ["x", "y", "z"])
def test_x_y_z_invalid_accel(self, axis):
with pytest.raises(ValueError):
self.accelerometer._Accelerometer__set_accel(
axis, CONSTANTS.MAX_ACCELERATION + 1
)
with pytest.raises(ValueError):
self.accelerometer._Accelerometer__set_accel(
axis, CONSTANTS.MIN_ACCELERATION - 1
)

@pytest.mark.parametrize(
"accels, expected",
"accels",
[
((23, 25, 26), (23, 25, 26)),
((204, 234, -534), (204, 234, -534)),
(
(CONSTANTS.MIN_ACCELERATION - 10, 234, CONSTANTS.MAX_ACCELERATION),
(CONSTANTS.MIN_ACCELERATION, 234, CONSTANTS.MAX_ACCELERATION),
),
(23, 25, 26),
(204, 234, -534),
(CONSTANTS.MIN_ACCELERATION + 10, 234, CONSTANTS.MAX_ACCELERATION),
],
)
def test_get_values(self, accels, expected):
self.accelerometer._Accelerometer__set_x(accels[0])
self.accelerometer._Accelerometer__set_y(accels[1])
self.accelerometer._Accelerometer__set_z(accels[2])
assert expected == self.accelerometer.get_values()
def test_get_values(self, accels):
self.accelerometer._Accelerometer__set_accel("x", accels[0])
self.accelerometer._Accelerometer__set_accel("y", accels[1])
self.accelerometer._Accelerometer__set_accel("z", accels[2])
assert accels == self.accelerometer.get_values()

@pytest.mark.parametrize("gesture", ["up", "face down", "freefall", "8g"])
def test_current_gesture(self, gesture):
Expand Down

0 comments on commit 7411703

Please sign in to comment.