diff options
author | Nicholas Car <nicholas.car@csiro.au> | 2020-03-20 21:41:05 +1000 |
---|---|---|
committer | Nicholas Car <nicholas.car@csiro.au> | 2020-03-20 21:41:05 +1000 |
commit | e196816c8670171d06a971ee645c11a20711961b (patch) | |
tree | 540e0498161005c4ffb128efe82c1c5b55d58568 | |
parent | 53b0dd8f90a176a915375c48ae5fae352370d2ca (diff) | |
download | rdflib-e196816c8670171d06a971ee645c11a20711961b.tar.gz |
passing all tests using round()
-rw-r--r-- | rdflib/term.py | 20 | ||||
-rw-r--r-- | test/test_term.py | 32 |
2 files changed, 28 insertions, 24 deletions
diff --git a/rdflib/term.py b/rdflib/term.py index 869f0933..e68d27b9 100644 --- a/rdflib/term.py +++ b/rdflib/term.py @@ -645,19 +645,21 @@ class Literal(Identifier): rdflib.term.Literal(u'11') """ + if val is None: + return self + # convert the val to a Literal, if it isn't already one if not isinstance(val, Literal): val = Literal(val) - if self.datatype == val.datatype \ - or \ - ( - self.datatype in _NUMERIC_LITERAL_TYPES - and - val.datatype in _NUMERIC_LITERAL_TYPES - ): - # return Literal(round(self.toPython() + val.toPython(), 10)) - return Literal(self.toPython() + val.toPython()) + if self.datatype == val.datatype: + return Literal(self.toPython() + val.toPython(), datatype=self.datatype) + elif ( + self.datatype in _NUMERIC_LITERAL_TYPES + and + val.datatype in _NUMERIC_LITERAL_TYPES + ): + return Literal(round(Decimal(self.toPython()) + Decimal(val.toPython()), 15)) else: try: return Literal(self.value + val.value) diff --git a/test/test_term.py b/test/test_term.py index fcf9f460..774108cd 100644 --- a/test/test_term.py +++ b/test/test_term.py @@ -124,6 +124,8 @@ class TestLiteral(unittest.TestCase): self.assertListEqual(l1, sorted(l2)) def test_literal_add(self): + from decimal import Decimal + a = Literal(1) b01 = Literal(1) b02 = Literal(-1) @@ -151,27 +153,27 @@ class TestLiteral(unittest.TestCase): self.assertEqual(a + b01, Literal(2)) self.assertEqual(a + b02, Literal(0)) - self.assertEqual(a + b03, Literal(2.1)) - # self.assertEqual(a + b04, Literal(-0.1)) # -0.10000000000000009 + 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(2.1)) - # self.assertEqual(a + b09, Literal(-0.1)) - # self.assertEqual(a + b10, Literal(2.1)) # 2.1000000000 - # self.assertEqual(a + b11, Literal(-0.1)) - self.assertEqual(a + b12, Literal(2.1)) - # self.assertEqual(a + b13, Literal(-0.1)) + 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(2.1)) - # self.assertEqual(a + b18, Literal(11)) - # self.assertEqual(a + b19, Literal(11.1)) - # self.assertEqual(a + b20, Literal(11)) - # self.assertEqual(a + b21, Literal(11.1)) - # self.assertEqual(a + b22, Literal(11)) - # self.assertEqual(a + b23, Literal(1)) + 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)) class TestValidityFunctions(unittest.TestCase): |