Mercurial > code > home > repos > homeauto
comparison service/mqtt_to_rdf/stmt_chunk_test.py @ 1655:15e195fb24bb
new stmt_chunk_test
author | drewp@bigasterisk.com |
---|---|
date | Sun, 19 Sep 2021 13:21:33 -0700 |
parents | |
children | 15e84c71beee |
comparison
equal
deleted
inserted
replaced
1654:d47832373b34 | 1655:15e195fb24bb |
---|---|
1 import unittest | |
2 | |
3 from rdflib.term import Variable | |
4 | |
5 from inference_test import N3 | |
6 from rdflib import ConjunctiveGraph, Graph, Literal, Namespace, Variable | |
7 | |
8 from stmt_chunk import ChunkedGraph, Chunk, applyChunky | |
9 | |
10 ROOM = Namespace('http://projects.bigasterisk.com/room/') | |
11 | |
12 from lhs_evaluation import functionsFor | |
13 from candidate_binding import CandidateBinding | |
14 | |
15 | |
16 class TestChunkedGraph(unittest.TestCase): | |
17 | |
18 def testMakesSimpleChunks(self): | |
19 cg = ChunkedGraph(N3(':a :b :c .'), functionsFor) | |
20 | |
21 self.assertSetEqual(cg.chunksUsedByFuncs, set()) | |
22 self.assertSetEqual(cg.patternChunks, set()) | |
23 self.assertSetEqual(cg.staticChunks, set([Chunk((ROOM.a, ROOM.b, ROOM.c), subjList=None, objList=None)])) | |
24 | |
25 def testSeparatesPatternChunks(self): | |
26 cg = ChunkedGraph(N3('?x :b :c . :a ?y :c . :a :b ?z .'), functionsFor) | |
27 self.assertEqual(len(cg.patternChunks), 3) | |
28 | |
29 def testBoolMeansEmpty(self): | |
30 self.assertTrue(ChunkedGraph(N3(":a :b :c ."), functionsFor)) | |
31 self.assertFalse(ChunkedGraph(N3(""), functionsFor)) | |
32 | |
33 def testContains(self): | |
34 # If I write with assertIn, there's a seemingly bogus pytype error. | |
35 self.assert_(Chunk((ROOM.a, ROOM.b, ROOM.c)) in ChunkedGraph(N3(":a :b :c ."), functionsFor)) | |
36 self.assert_(Chunk((ROOM.a, ROOM.b, ROOM.zzz)) not in ChunkedGraph(N3(":a :b :c ."), functionsFor)) | |
37 | |
38 def testNoPredicatesAppear(self): | |
39 cg = ChunkedGraph(N3(":a :b :c ."), functionsFor) | |
40 self.assertTrue(cg.noPredicatesAppear([ROOM.d, ROOM.e])) | |
41 self.assertFalse(cg.noPredicatesAppear([ROOM.b, ROOM.d])) | |
42 | |
43 | |
44 class TestApplyChunky(unittest.TestCase): | |
45 binding = CandidateBinding({Variable('x'): ROOM.xval}) | |
46 | |
47 def testBoundStatementsOnly(self): | |
48 ret = list( | |
49 applyChunky(self.binding, | |
50 g=[Chunk((ROOM.a, ROOM.b, Variable('x'))), | |
51 Chunk((ROOM.ay, ROOM.by, Variable('y')))], | |
52 returnBoundStatementsOnly=True)) | |
53 self.assertEqual(ret, [Chunk((ROOM.a, ROOM.b, ROOM.xval))]) | |
54 | |
55 def testAllStatements(self): | |
56 ret = list( | |
57 applyChunky(self.binding, | |
58 g=[Chunk((ROOM.a, ROOM.b, Variable('x'))), | |
59 Chunk((ROOM.ay, ROOM.by, Variable('y')))], | |
60 returnBoundStatementsOnly=False)) | |
61 self.assertCountEqual( | |
62 ret, | |
63 [ | |
64 Chunk((ROOM.a, ROOM.b, ROOM.xval)), # | |
65 Chunk((ROOM.ay, ROOM.by, Variable('y'))) | |
66 ]) |