class SMGValueTest(unittest.TestCase): def setUp(self): self.ofactory = SMGObjectFactory() self.vfactory = SMGValueFactory() self.value = self.vfactory.getNewValue() def test_getSetPTEdge(self): self.assertIsNone(self.value.getPTEdge()) edge = SMGPTEdge(0, self.value, self.ofactory.getNewObject(8)) self.value.setPTEdge(edge) self.assertIs(edge, self.value.getPTEdge()) def test_getAddHVEdge(self): self.assertEqual(0, len(self.value.getHVEdges())) edge = SMGHVEdge(0, 0, self.ofactory.getNewObject(8), self.value) self.value.addHVEdge(edge) edges = self.value.getHVEdges() self.assertIn(edge, edges) self.assertEqual(1, len(edges)) def test_getHVEdgesFiltered(self): obj = self.ofactory.getNewObject(16) edgeAt0 = SMGHVEdge(0, 0, obj, self.value) edgeAt8 = SMGHVEdge(8, 0, obj, self.value) self.value.addHVEdge(edgeAt0) self.value.addHVEdge(edgeAt8) edges = self.value.getHVEdges(offset=0) self.assertEqual(1, len(edges)) self.assertIn(edgeAt0, edges)
class SMGObjectGenericTest(unittest.TestCase): def setUp(self): self.vfactory = SMGValueFactory() self.ofactory = SMGObjectFactory() self.object = self.ofactory.getNewObject(8) def test_getAddPTEdges(self): edges = self.object.getPTEdges() self.assertEqual(0, len(edges)) edge = SMGPTEdge(0, self.vfactory.getNewValue(), self.object) self.object.addPTEdge(edge) edges = self.object.getPTEdges() self.assertEqual(1, len(edges)) self.assertIs(edges[0], edge) def test_getAddHVEdges(self): edges = self.object.getHVEdges() self.assertEqual(0, len(edges)) edge = SMGHVEdge(0, 0, self.object, self.vfactory.getNewValue()) self.object.addHVEdge(edge) edges = self.object.getHVEdges() self.assertEqual(1, len(edges)) self.assertIs(edges[0], edge) def test_getHVEdgesFiltered(self): obj = self.ofactory.getNewObject(16) val = self.vfactory.getNewValue() edgeAt0 = SMGHVEdge(0, 0, obj, val) edgeAt8 = SMGHVEdge(8, 4, obj, val) self.object.addHVEdge(edgeAt0) self.object.addHVEdge(edgeAt8) edges = self.object.getHVEdges(offset=0) self.assertEqual(1, len(edges)) self.assertIn(edgeAt0, edges) edges = self.object.getHVEdges(datatype=4) self.assertEqual(1, len(edges)) self.assertIn(edgeAt8, edges)
class HVEdgeTest(unittest.TestCase): def setUp(self): self.ofactory = SMGObjectFactory() self.vfactory = SMGValueFactory() def test_constructor(self): obj = self.ofactory.getNewObject(8, True) val = self.vfactory.getNewValue() edge = SMGHVEdge(0, 0, obj, val) self.assertIs(obj, edge.getObject()) self.assertIs(val, edge.getValue()) self.assertEqual(0, edge.getOffset()) self.assertEqual(0, edge.getDataType()) hvedges_from_object = obj.getHVEdges() hvedges_to_value = val.getHVEdges() self.assertEqual(len(hvedges_from_object), 0) self.assertEqual(len(hvedges_to_value), 0) def test_wireToVertices(self): obj = self.ofactory.getNewObject(8, True) val = self.vfactory.getNewValue() edge = SMGHVEdge(0, 0, obj, val) edge.wireToVertices() hvedges_from_object = obj.getHVEdges() hvedges_to_value = val.getHVEdges() self.assertEqual(len(hvedges_from_object), 1) self.assertIn(edge, hvedges_from_object) self.assertEqual(len(hvedges_to_value), 1) self.assertIn(edge, hvedges_to_value)
class PTEdgeTest(unittest.TestCase): def setUp(self): self.ofactory = SMGObjectFactory() self.vfactory = SMGValueFactory() def test_constructor(self): obj = self.ofactory.getNewObject(4, True) val = self.vfactory.getNewValue() edge = SMGPTEdge(0, val, obj) self.assertIs(obj, edge.getObject()) self.assertIs(val, edge.getValue()) self.assertEqual(0, edge.getOffset()) ptedges_to_object = obj.getPTEdges() ptedge_from_value = val.getPTEdge() self.assertEqual(len(ptedges_to_object), 0) self.assertIs(ptedge_from_value, None) def test_wireToVertices(self): obj = self.ofactory.getNewObject(4, True) val = self.vfactory.getNewValue() edge = SMGPTEdge(0, val, obj) edge.wireToVertices() ptedges_to_object = obj.getPTEdges() ptedge_from_value = val.getPTEdge() self.assertEqual(len(ptedges_to_object), 1) self.assertIs(ptedges_to_object[0], edge) self.assertIs(ptedge_from_value, edge)
class SMG(object): def __init__(self): self.objects = {} self.values = {} self.factory_objects = SMGObjectFactory() self.factory_values = SMGValueFactory() null_object = self.factory_objects.getNullObject() null_value = self.factory_values.getNullValue() self._addObject(null_object) self._addValue(null_value) self.addPTEdge(0, null_value, null_object) def _addObject(self, smgObject): self.objects[smgObject.getId()] = smgObject def addObject(self, size, validity=True): new_object = self.factory_objects.getNewObject(size, validity) self._addObject(new_object) return new_object def getObject(self, objectId): return self.objects[objectId] def _addValue(self, smgValue): self.values[smgValue.getId()] = smgValue def addValue(self): new_value = self.factory_values.getNewValue() self._addValue(new_value) return new_value def getValue(self, valueId): return self.values[valueId] def addPTEdge(self, offset, value, smgObject): edge = SMGPTEdge(offset, value, smgObject) edge.wireToVertices() return edge def addHVEdge(self, offset, datatype, smg_object, value): edge = SMGHVEdge(offset, datatype, smg_object, value) edge.wireToVertices() return edge def getObjects(self): return self.objects.values() def getValues(self): return self.values.values() def __str__(self): return """\ == OBJECTS == %s == VALUES == %s == HAS VALUE EDGES == %s == POINTS TO EDGES == %s """ % ( [str(x) for x in self.objects.values() ], [ str(x) for x in self.values.values() ],[ [ str(z) for z in y ] for y in [ x.getHVEdges() for x in self.objects.values() ]], [ str(x.getPTEdge()) for x in self.values.values() if x.getPTEdge() is not None])