def testSearchTwoSolutions(self): # A1_g0->B_g1->C_g2, A2_g3->B_g1 g = Graph() g.addEdge(Vertex('g0', 'A'), Vertex('g1', 'B')) g.addEdge('g1', Vertex('g2', 'C')) g.addEdge(Vertex('g3', 'A'), 'g1') #g.addEdge('g3', 'g2') # A_g0->B_g1->C_g2 q = Graph() q.addEdge(Vertex('g0', 'A'), Vertex('g1', 'B')) q.addEdge('g1', Vertex('g2', 'C')) solutions = g.search(q) self.assertEquals(len(solutions), 2) # First A->B,C is found. self.assertEquals(solutions[0]['g0'], 'g3') self.assertEquals(solutions[0]['g1'], 'g1') self.assertEquals(solutions[0]['g2'], 'g2') # Second A->B,C is found. self.assertEquals(solutions[1]['g0'], 'g0') self.assertEquals(solutions[1]['g1'], 'g1') self.assertEquals(solutions[1]['g2'], 'g2')
def testSearchNoCandidates(self): # If there are no suitable candidate data vertices for every # query vertex, then the returned solutions list should be empty. g = Graph() g.addEdge(Vertex('v1', 'A'), Vertex('v2', 'B')) q = Graph() q.addEdge(Vertex('u1', 'Z'), Vertex('u2', 'Y')) solutions = g.search(q) self.assertEquals(len(solutions), 0)
def testSearchOneSimpleSolution(self): g = Graph() g.addEdge(Vertex('v1', 'A'), Vertex('v2', 'B')) g.addEdge('v1', Vertex('v3', 'C')) # Query graph is exact replica. q = Graph() q.addEdge(Vertex('u1', 'A'), Vertex('u2', 'B')) q.addEdge('u1', Vertex('u3', 'C')) solutions = g.search(q) self.assertEquals(len(solutions), 1) self.assertEquals(solutions[0]['u1'], 'v1') self.assertEquals(solutions[0]['u2'], 'v2') self.assertEquals(solutions[0]['u3'], 'v3')