summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Car <nicholas.car@csiro.au>2020-03-20 21:41:05 +1000
committerNicholas Car <nicholas.car@csiro.au>2020-03-20 21:41:05 +1000
commite196816c8670171d06a971ee645c11a20711961b (patch)
tree540e0498161005c4ffb128efe82c1c5b55d58568
parent53b0dd8f90a176a915375c48ae5fae352370d2ca (diff)
downloadrdflib-e196816c8670171d06a971ee645c11a20711961b.tar.gz
passing all tests using round()
-rw-r--r--rdflib/term.py20
-rw-r--r--test/test_term.py32
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):