changeset 1606:6cf39d43fd40

realign tests, turn off slow ones for now
author drewp@bigasterisk.com
date Mon, 06 Sep 2021 01:15:14 -0700
parents 449746d1598f
children b21885181e35
files service/mqtt_to_rdf/inference_test.py
diffstat 1 files changed, 92 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/service/mqtt_to_rdf/inference_test.py	Mon Sep 06 01:13:55 2021 -0700
+++ b/service/mqtt_to_rdf/inference_test.py	Mon Sep 06 01:15:14 2021 -0700
@@ -1,6 +1,8 @@
 """
 also see https://github.com/w3c/N3/tree/master/tests/N3Tests
 """
+from decimal import Decimal
+from typing import cast
 import unittest
 
 from rdflib import RDF, BNode, ConjunctiveGraph, Graph, Literal, Namespace
@@ -182,32 +184,102 @@
 
     def testSimpleTopic(self):
         inf = makeInferenceWithRules('''
-{ ?msg :body "online" . } => { ?msg :onlineTerm :Online . } .
- { ?msg :body "offline" . } => { ?msg :onlineTerm :Offline . } .
+            { ?msg :body "online" . } => { ?msg :onlineTerm :Online . } .
+            { ?msg :body "offline" . } => { ?msg :onlineTerm :Offline . } .
 
-{
-  ?msg a :MqttMessage ;
-     :topic :foo;
-     :onlineTerm ?onlineness . } => {
-  :frontDoorLockStatus :connectedStatus ?onlineness .
-} .
+            {
+            ?msg a :MqttMessage ;
+                :topic :foo;
+                :onlineTerm ?onlineness . } => {
+            :frontDoorLockStatus :connectedStatus ?onlineness .
+            } .
         ''')
 
         out = inf.infer(N3('[] a :MqttMessage ; :body "online" ; :topic :foo .'))
         self.assertIn((EX['frontDoorLockStatus'], EX['connectedStatus'], EX['Online']), out)
 
-    def testTopicIsListhg(self):
+#     def testTopicIsList(self):
+#         inf = makeInferenceWithRules('''
+#             { ?msg :body "online" . } => { ?msg :onlineTerm :Online . } .
+#             { ?msg :body "offline" . } => { ?msg :onlineTerm :Offline . } .
+
+#             {
+#             ?msg a :MqttMessage ;
+#                 :topic ( "frontdoorlock" "status" );
+#                 :onlineTerm ?onlineness . } => {
+#             :frontDoorLockStatus :connectedStatus ?onlineness .
+#             } .
+#         ''')
+
+#         out = inf.infer(N3('[] a :MqttMessage ; :body "online" ; :topic ( "frontdoorlock" "status" ) .'))
+#         self.assertIn((EX['frontDoorLockStatus'], EX['connectedStatus'], EX['Online']), out)
+
+    def testPerformance0(self):
         inf = makeInferenceWithRules('''
-{ ?msg :body "online" . } => { ?msg :onlineTerm :Online . } .
-{ ?msg :body "offline" . } => { ?msg :onlineTerm :Offline . } .
+            {
+              ?msg a :MqttMessage;
+                :topic :topic1;
+                :bodyFloat ?valueC .
+              ?valueC math:greaterThan -999 .
+              ?valueC room:asFarenheit ?valueF .
+            } => {
+              :airQualityIndoorTemperature :temperatureF ?valueF .
+            } .
+        ''')
+        out = inf.infer(
+            N3('''
+            <urn:uuid:c6e1d92c-0ee1-11ec-bdbd-2a42c4691e9a> a :MqttMessage ;
+                :body "23.9" ;
+                :bodyFloat 2.39e+01 ;
+                :topic :topic1 .
+            '''))
+
+        vlit = cast(Literal, out.value(EX['airQualityIndoorTemperature'], EX['temperatureF']))
+        valueF = cast(Decimal, vlit.toPython())
+        self.assertAlmostEqual(float(valueF), 75.02)
 
-{
-  ?msg a :MqttMessage ;
-     :topic ( "frontdoorlock" "status" );
-     :onlineTerm ?onlineness . } => {
-  :frontDoorLockStatus :connectedStatus ?onlineness .
-} .
-        ''')
+#     def testPerformance1(self):
+#         inf = makeInferenceWithRules('''
+#             {
+#               ?msg a :MqttMessage;
+#                 :topic ( "air_quality_indoor" "sensor" "bme280_temperature" "state" );
+#                 :bodyFloat ?valueC .
+#               ?valueC math:greaterThan -999 .
+#               ?valueC :asFarenheit ?valueF .
+#             } => {
+#               :airQualityIndoorTemperature :temperatureF ?valueF .
+#             } .
+#         ''')
+#         out = inf.infer(
+#             N3('''
+#             <urn:uuid:c6e1d92c-0ee1-11ec-bdbd-2a42c4691e9a> a :MqttMessage ;
+#                 :body "23.9" ;
+#                 :bodyFloat 2.39e+01 ;
+#                 :topic ( "air_quality_indoor" "sensor" "bme280_temperature" "state" ) .
+#         '''))
+#         vlit = cast(Literal, out.value(EX['airQualityIndoorTemperature'], EX['temperatureF']))
+#         valueF = cast(Decimal, vlit.toPython())
+#         self.assertAlmostEqual(float(valueF), 75.02)
 
-        out = inf.infer(N3('[] a :MqttMessage ; :body "online" ; :topic ( "frontdoorlock" "status" ) .'))
-        self.assertIn((EX['frontDoorLockStatus'], EX['connectedStatus'], EX['Online']), out)
+
+class TestListPerformance(WithGraphEqual):
+
+    def testList1(self):
+        inf = makeInferenceWithRules("{ :a :b (:e0) . } => { :new :stmt :here } .")
+        implied = inf.infer(N3(":a :b (:e0) ."))
+        self.assertGraphEqual(implied, N3(":new :stmt :here ."))
+
+    def testList2(self):
+        inf = makeInferenceWithRules("{ :a :b (:e0 :e1) . } => { :new :stmt :here } .")
+        implied = inf.infer(N3(":a :b (:e0 :e1) ."))
+        self.assertGraphEqual(implied, N3(":new :stmt :here ."))
+
+    def testList3(self):
+        inf = makeInferenceWithRules("{ :a :b (:e0 :e1 :e2) . } => { :new :stmt :here } .")
+        implied = inf.infer(N3(":a :b (:e0 :e1 :e2) ."))
+        self.assertGraphEqual(implied, N3(":new :stmt :here ."))
+
+    # def testList4(self):
+    #     inf = makeInferenceWithRules("{ :a :b (:e0 :e1 :e2 :e3) . } => { :new :stmt :here } .")
+    #     implied = inf.infer(N3(":a :b (:e0 :e1 :e2 :e3) ."))
+    #     self.assertGraphEqual(implied, N3(":new :stmt :here ."))