mirror of
https://github.com/ammaraskar/pyCraft.git
synced 2024-11-22 18:26:10 +01:00
Implemented tests for the Float datatype.
This required the implementation of a new method on BaseDatatypeTester. dynamic_assert_equal is overridden by floating point datatypes, and instead uses TestCase.assertAlmostEqual.
This commit is contained in:
parent
cc184f3e4d
commit
20e7c70acf
@ -276,8 +276,11 @@ class Float(NumberDatatype):
|
|||||||
FORMAT = "f"
|
FORMAT = "f"
|
||||||
SIZE = 4
|
SIZE = 4
|
||||||
|
|
||||||
|
ALLOWED_SERIALIZATION_TYPES = (int, long, float)
|
||||||
|
DISALLOWED_SERIALIZATION_TYPES = (bool,)
|
||||||
|
|
||||||
class Double(NumberDatatype):
|
|
||||||
|
class Double(Float):
|
||||||
FORMAT = "d"
|
FORMAT = "d"
|
||||||
SIZE = 8
|
SIZE = 8
|
||||||
|
|
||||||
|
@ -43,6 +43,13 @@ class BaseDatatypeTester(unittest.TestCase):
|
|||||||
# containing the value and the expected exception.
|
# containing the value and the expected exception.
|
||||||
INVALID_DESERIALIZATION_VALUES = []
|
INVALID_DESERIALIZATION_VALUES = []
|
||||||
|
|
||||||
|
def dynamic_assert_equal(self, first, second):
|
||||||
|
"""
|
||||||
|
Overriden by floating point datatypes in order to handle
|
||||||
|
the floating point issue.
|
||||||
|
"""
|
||||||
|
return self.assertEqual(first, second)
|
||||||
|
|
||||||
def test_init(self):
|
def test_init(self):
|
||||||
d = self.DATATYPE_CLS() # noqa
|
d = self.DATATYPE_CLS() # noqa
|
||||||
|
|
||||||
@ -53,12 +60,14 @@ class BaseDatatypeTester(unittest.TestCase):
|
|||||||
|
|
||||||
def test_valid_data_serialization_values(self):
|
def test_valid_data_serialization_values(self):
|
||||||
for deserialized_val, serialized_val in self.VALID_VALUES:
|
for deserialized_val, serialized_val in self.VALID_VALUES:
|
||||||
self.assertEqual(self.DATATYPE_CLS.serialize(deserialized_val),
|
self.dynamic_assert_equal(
|
||||||
|
self.DATATYPE_CLS.serialize(deserialized_val),
|
||||||
serialized_val)
|
serialized_val)
|
||||||
|
|
||||||
def test_valid_data_deserialization_values(self):
|
def test_valid_data_deserialization_values(self):
|
||||||
for deserialized_val, serialized_val in self.VALID_VALUES:
|
for deserialized_val, serialized_val in self.VALID_VALUES:
|
||||||
self.assertEqual(self.DATATYPE_CLS.deserialize(serialized_val),
|
self.dynamic_assert_equal(
|
||||||
|
self.DATATYPE_CLS.deserialize(serialized_val),
|
||||||
deserialized_val)
|
deserialized_val)
|
||||||
|
|
||||||
def test_invalid_data_serialization_values(self):
|
def test_invalid_data_serialization_values(self):
|
||||||
@ -84,6 +93,10 @@ class BaseNumberDatatypeTester(BaseDatatypeTester):
|
|||||||
|
|
||||||
def base_number_invalid_data_serialization_values(self):
|
def base_number_invalid_data_serialization_values(self):
|
||||||
values_to_test = BASE_INVALID_SERIALIZATION_VALUES
|
values_to_test = BASE_INVALID_SERIALIZATION_VALUES
|
||||||
|
|
||||||
|
if (cls.MIN_NUMBER_VALUE is not None
|
||||||
|
and cls.MAX_NUMBER_VALUE is not None):
|
||||||
|
|
||||||
values_to_test.extend([
|
values_to_test.extend([
|
||||||
(self.DATATYPE_CLS.MIN_NUMBER_VALUE - 1, ValueError),
|
(self.DATATYPE_CLS.MIN_NUMBER_VALUE - 1, ValueError),
|
||||||
(self.DATATYPE_CLS.MAX_NUMBER_VALUE + 1, ValueError)
|
(self.DATATYPE_CLS.MAX_NUMBER_VALUE + 1, ValueError)
|
||||||
@ -282,6 +295,28 @@ class UnsignedLongLongTest(BaseNumberDatatypeTester):
|
|||||||
LongLongTest.INVALID_DESERIALIZATION_VALUES
|
LongLongTest.INVALID_DESERIALIZATION_VALUES
|
||||||
|
|
||||||
|
|
||||||
|
class FloatTest(BaseNumberDatatypeTester):
|
||||||
|
DATATYPE_CLS = Float
|
||||||
|
|
||||||
|
VALID_VALUES = [
|
||||||
|
(-100.5467, b"\xc2\xc9\x17\xe9"),
|
||||||
|
(0.00000, b"\x00\x00\x00\x00"),
|
||||||
|
(5000.72, b"E\x9cE\xc3"),
|
||||||
|
(65.123565787856342347, b"B\x82?D"),
|
||||||
|
]
|
||||||
|
|
||||||
|
INVALID_DESERIALIZATION_VALUES = list(BASE_INVALID_DESERIALIZATION_VALUES)
|
||||||
|
INVALID_DESERIALIZATION_VALUES.extend([
|
||||||
|
(b"\xff", ValueError),
|
||||||
|
(b"\x00\x01", ValueError),
|
||||||
|
(b"\x76\x80\x80\x10\xff", ValueError),
|
||||||
|
(b"\x55\x44\x33\x22\x11\x66\x77\x88\x99", ValueError)
|
||||||
|
])
|
||||||
|
|
||||||
|
def dynamic_assert_equal(self, first, second):
|
||||||
|
return self.assertAlmostEqual(first, second, places=3)
|
||||||
|
|
||||||
|
|
||||||
# def _bin(binstr):
|
# def _bin(binstr):
|
||||||
# """
|
# """
|
||||||
# Accepts a pretty looking string of binary numbers and
|
# Accepts a pretty looking string of binary numbers and
|
||||||
|
Loading…
Reference in New Issue
Block a user