summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Car <nicholas.car@csiro.au>2020-03-22 11:48:02 +1000
committerNicholas Car <nicholas.car@csiro.au>2020-03-22 11:48:02 +1000
commit2236eb1ee8298dcdfe4ae8696d508853f8125ff7 (patch)
tree81b308204dcc97772f3ee55383d3d002c02680b0
parenta74a7fe91e4ca2d952609cc1e354133083481da1 (diff)
downloadrdflib-2236eb1ee8298dcdfe4ae8696d508853f8125ff7.tar.gz
passing all add() specific tests
-rw-r--r--test/test_term.py119
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):