diff service/mqtt_to_rdf/inference_test.py @ 1594:e58bcfa66093

cleanups and a few fixed cases
author drewp@bigasterisk.com
date Sun, 05 Sep 2021 01:15:55 -0700
parents b0df43d5494c
children 413a280828bf
line wrap: on
line diff
--- a/service/mqtt_to_rdf/inference_test.py	Sat Sep 04 23:23:55 2021 -0700
+++ b/service/mqtt_to_rdf/inference_test.py	Sun Sep 05 01:15:55 2021 -0700
@@ -1,12 +1,13 @@
 """
 also see https://github.com/w3c/N3/tree/master/tests/N3Tests
 """
+import itertools
 import unittest
-import itertools
-from rdflib import ConjunctiveGraph, Namespace, Graph, BNode
+
+from rdflib import RDF, BNode, ConjunctiveGraph, Graph, Literal, Namespace
 from rdflib.parser import StringInputSource
 
-from inference import Inference
+from inference import Inference, parseList
 
 
 def patchSlimReprs():
@@ -60,6 +61,7 @@
 
 patchBnodeCounter()
 
+EX = Namespace('http://example.com/')
 ROOM = Namespace('http://projects.bigasterisk.com/room/')
 
 
@@ -213,9 +215,34 @@
         inf = makeInferenceWithRules("{ :a :b ?x . (2 ?x 2) math:sum ?y } => { :new :stmt ?y } .")
         self.assertGraphEqual(inf.infer(N3(":a :b 2 .")), N3(":new :stmt 6 ."))
 
+    def test0Operands(self):
+        inf = makeInferenceWithRules("{ :a :b ?x . () math:sum ?y } => { :new :stmt ?y } .")
+        self.assertGraphEqual(inf.infer(N3(":a :b 2 .")), N3(":new :stmt 0 ."))
+
 
 class TestInferenceWithCustomFunctions(WithGraphEqual):
 
     def testAsFarenheit(self):
         inf = makeInferenceWithRules("{ :a :b ?x . ?x room:asFarenheit ?f } => { :new :stmt ?f } .")
         self.assertGraphEqual(inf.infer(N3(":a :b 12 .")), N3(":new :stmt 53.6 ."))
+
+
+class TestParseList(unittest.TestCase):
+
+    def test0Elements(self):
+        g = N3(":a :b () .")
+        bn = g.value(EX['a'], EX['b'])
+        elems, used = parseList(g, bn)
+        self.assertEqual(elems, [])
+        self.assertFalse(used)
+
+    def test1Element(self):
+        g = N3(":a :b (0) .")
+        bn = g.value(EX['a'], EX['b'])
+        elems, used = parseList(g, bn)
+        self.assertEqual(elems, [Literal(0)])
+        used = sorted(used)
+        self.assertEqual(used, [
+            (bn, RDF.first, Literal(0)),
+            (bn, RDF.rest, RDF.nil),
+        ])