diff options
author | Nicholas Car <nicholas.car@csiro.au> | 2020-03-22 11:48:02 +1000 |
---|---|---|
committer | Nicholas Car <nicholas.car@csiro.au> | 2020-03-22 11:48:02 +1000 |
commit | 2236eb1ee8298dcdfe4ae8696d508853f8125ff7 (patch) | |
tree | 81b308204dcc97772f3ee55383d3d002c02680b0 | |
parent | a74a7fe91e4ca2d952609cc1e354133083481da1 (diff) | |
download | rdflib-2236eb1ee8298dcdfe4ae8696d508853f8125ff7.tar.gz |
passing all add() specific tests
-rw-r--r-- | test/test_term.py | 119 |
1 files changed, 71 insertions, 48 deletions
diff --git a/test/test_term.py b/test/test_term.py index 774108cd..6b60a09f 100644 --- a/test/test_term.py +++ b/test/test_term.py @@ -126,54 +126,77 @@ class TestLiteral(unittest.TestCase): def test_literal_add(self): from decimal import Decimal - a = Literal(1) - b01 = Literal(1) - b02 = Literal(-1) - b03 = Literal(1.1) - b04 = Literal(-1.1) - b05 = Literal("1", datatype=XSD.integer) - b06 = Literal("-1", datatype=XSD.integer) - b07 = Literal("+1", datatype=XSD.integer) - b08 = Literal("1.1", datatype=XSD.float) - b09 = Literal("-1.1", datatype=XSD.float) - b10 = Literal("1.1", datatype=XSD.decimal) - b11 = Literal("-1.1", datatype=XSD.decimal) - b12 = Literal("1.1", datatype=XSD.double) - b13 = Literal("-1.1", datatype=XSD.double) - b14 = Literal(u'1', datatype=XSD.integer) - b15 = Literal(u'-1', datatype=XSD.integer) - b16 = 1 - b17 = 1.1 - b18 = "1" - b19 = "1.1" - b20 = Literal("1", datatype=XSD.string) - b21 = Literal("1.1", datatype=XSD.string) - b22 = Literal(u'1', datatype=XSD.string) - b23 = None - - self.assertEqual(a + b01, Literal(2)) - self.assertEqual(a + b02, Literal(0)) - self.assertEqual(a + b03, Literal(round(Decimal(2.1), 15))) - self.assertEqual(a + b04, Literal(round(Decimal(-0.1), 15))) - self.assertEqual(a + b05, Literal(2)) - self.assertEqual(a + b06, Literal(0)) - self.assertEqual(a + b07, Literal(2)) - self.assertEqual(a + b08, Literal(round(Decimal(2.1), 15))) - self.assertEqual(a + b09, Literal(round(Decimal(-0.1), 15))) - self.assertEqual(a + b10, Literal(round(Decimal(2.1), 15))) - self.assertEqual(a + b11, Literal(round(Decimal(-0.1), 15))) - self.assertEqual(a + b12, Literal(round(Decimal(2.1), 15))) - self.assertEqual(a + b13, Literal(round(Decimal(-0.1), 15))) - self.assertEqual(a + b14, Literal(2)) - self.assertEqual(a + b15, Literal(0)) - self.assertEqual(a + b16, Literal(2)) - self.assertEqual(a + b17, Literal(round(Decimal(2.1), 15))) - self.assertEqual(a + b18, Literal(11, datatype=XSD.string)) - self.assertEqual(a + b19, Literal(11.1, datatype=XSD.string)) - self.assertEqual(a + b20, Literal(11, datatype=XSD.string)) - self.assertEqual(a + b21, Literal(11.1, datatype=XSD.string)) - self.assertEqual(a + b22, Literal(11, datatype=XSD.string)) - self.assertEqual(a + b23, Literal(1)) + # compares Python decimals + def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): + a = float(a) + b = float(b) + return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + + cases = [ + (1, Literal(1), Literal(1), Literal(2)), + (2, Literal(Decimal(1)), Literal(Decimal(1)), Literal(Decimal(2))), + (3, Literal(float(1)), Literal(float(1)), Literal(float(2))), + (4, Literal(1), Literal(1.1), Literal(2.1, datatype=XSD.decimal)), + (5, Literal(1.1), Literal(1.1), Literal(2.2)), + (6, Literal(Decimal(1)), Literal(Decimal(1.1)), Literal(Decimal(2.1), datatype=XSD.decimal)), + (7, Literal(Decimal(1.1)), Literal(Decimal(1.1)), Literal(Decimal(2.2))), + (8, Literal(float(1)), Literal(float(1.1)), Literal(float(2.1))), + (9, Literal(float(1.1)), Literal(float(1.1)), Literal(float(2.2))), + (10, Literal(-1), Literal(-1), Literal(-2)), + (12, Literal(Decimal(-1)), Literal(Decimal(-1)), Literal(Decimal(-2))), + (13, Literal(float(-1)), Literal(float(-1)), Literal(float(-2))), + (14, Literal(-1), Literal(-1.1), Literal(-2.1)), + (15, Literal(-1.1), Literal(-1.1), Literal(-2.2)), + (16, Literal(Decimal(-1)), Literal(Decimal(-1.1)), Literal(Decimal(-2.1))), + (17, Literal(Decimal(-1.1)), Literal(Decimal(-1.1)), Literal(Decimal(-2.2))), + (18, Literal(float(-1)), Literal(float(-1.1)), Literal(float(-2.1))), + (19, Literal(float(-1.1)), Literal(float(-1.1)), Literal(float(-2.2))), + + (20, Literal(1), Literal(1.0), Literal(2.0)), + (21, Literal(1.0), Literal(1.0), Literal(2.0)), + (22, Literal(Decimal(1)), Literal(Decimal(1.0)), Literal(Decimal(2.0))), + (23, Literal(Decimal(1.0)), Literal(Decimal(1.0)), Literal(Decimal(2.0))), + (24, Literal(float(1)), Literal(float(1.0)), Literal(float(2.0))), + (25, Literal(float(1.0)), Literal(float(1.0)), Literal(float(2.0))), + + (26, Literal(1, datatype=XSD.integer), Literal(1, datatype=XSD.integer), Literal(2, datatype=XSD.integer)), + (27, Literal(1, datatype=XSD.integer), Literal("1", datatype=XSD.integer), Literal("2", datatype=XSD.integer)), + (28, Literal("1", datatype=XSD.integer), Literal("1", datatype=XSD.integer), Literal("2", datatype=XSD.integer)), + (29, Literal("1"), Literal("1", datatype=XSD.integer), Literal("11", datatype=XSD.string)), + (30, Literal(1), Literal("1", datatype=XSD.integer), Literal("2", datatype=XSD.integer)), + (31, Literal(Decimal(1), datatype=XSD.decimal), Literal(Decimal(1), datatype=XSD.decimal), Literal(Decimal(2), datatype=XSD.decimal)), + (32, Literal(Decimal(1)), Literal(Decimal(1), datatype=XSD.decimal), Literal(Decimal(2), datatype=XSD.decimal)), + (33, Literal(float(1)), Literal(float(1), datatype=XSD.float), Literal(float(2), datatype=XSD.float)), + (34, Literal(float(1), datatype=XSD.float), Literal(float(1), datatype=XSD.float), Literal(float(2), datatype=XSD.float)), + + (35, Literal(1), 1, Literal(2)), + (36, Literal(1), 1.0, Literal(2, datatype=XSD.decimal)), + (37, Literal(1.0), 1, Literal(2, datatype=XSD.decimal)), + (38, Literal(1.0), 1.0, Literal(2.0)), + (39, Literal(Decimal(1.0)), Decimal(1), Literal(Decimal(2.0))), + (40, Literal(Decimal(1.0)), Decimal(1.0), Literal(Decimal(2.0))), + (41, Literal(float(1.0)), float(1), Literal(float(2.0))), + (42, Literal(float(1.0)), float(1.0), Literal(float(2.0))), + + (43, Literal(1, datatype=XSD.integer), Literal("+1.1", datatype=XSD.string), Literal("1+1.1", datatype=XSD.string)), + (44, Literal(1, datatype=XSD.integer), Literal(u"1", datatype=XSD.string), Literal("11", datatype=XSD.string)), + (45, Literal(1.1, datatype=XSD.integer), Literal("1", datatype=XSD.string), Literal("1.11", datatype=XSD.string)), + + (46, Literal(1, datatype=XSD.integer), None, Literal(1, datatype=XSD.integer)), + (47, Literal("1", datatype=XSD.string), None, Literal("1", datatype=XSD.string)), + ] + + for case in cases: + # see if the addition exactly matches the expected output + case_passed = (case[1] + case[2]) == (case[3]) + # see if the addition almost matches the expected output, for decimal precision errors + if not case_passed: + try: + case_passed = isclose((case[1] + case[2].value), case[3].value) + except: + pass + + self.assertTrue(case_passed, "Case " + str(case[0]) + " failed") class TestValidityFunctions(unittest.TestCase): |