示例#1
0
    def test_add_argument(self):
        # A few nodes.
        node1 = Node('f')
        node2 = Node('g')
        node3 = Node('h')

        # The functions have the following forms: g(f, f), h(f)
        node2.add_argument(node1)
        node2.add_argument(node1)
        node3.add_argument(node1)

        # Now node 2 should have an argument list with two elements, both being
        # node 1 and node 3 should have node 1 as its only argument. Node 1
        # should have nodes 2 and 3 as its parents, but both only once.
        self.assertEqual(node1.arguments, [])
        self.assertEqual(node1.parents, {node2, node3})
        self.assertEqual(node2.arguments, [node1, node1])
        self.assertEqual(node2.parents, set())
        self.assertEqual(node3.arguments, [node1])
        self.assertEqual(node3.parents, set())

        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('x')
        node3 = Node('f')
        node4 = Node('f')
        node5 = Node('a')
        node1.add_argument(node2)
        node3.add_argument(node1)
        node4.add_argument(node5)

        self.assertEqual(node1.arguments, [node2])
        self.assertEqual(node2.arguments, [])
        self.assertEqual(node3.arguments, [node1])
        self.assertEqual(node4.arguments, [node5])
        self.assertEqual(node5.arguments, [])
        self.assertEqual(node1.parents, {node3})
        self.assertEqual(node2.parents, {node1})
        self.assertEqual(node3.parents, set())
        self.assertEqual(node4.parents, set())
        self.assertEqual(node5.parents, {node4})
示例#2
0
    def test_add_argument(self):
        # A few nodes.
        node1 = Node('f')
        node2 = Node('g')
        node3 = Node('h')

        # The functions have the following forms: g(f, f), h(f)
        node2.add_argument(node1)
        node2.add_argument(node1)
        node3.add_argument(node1)

        # Now node 2 should have an argument list with two elements, both being
        # node 1 and node 3 should have node 1 as its only argument. Node 1
        # should have nodes 2 and 3 as its parents, but both only once.
        self.assertEqual(node1.arguments, [])
        self.assertEqual(node1.parents, {node2, node3})
        self.assertEqual(node2.arguments, [node1, node1])
        self.assertEqual(node2.parents, set())
        self.assertEqual(node3.arguments, [node1])
        self.assertEqual(node3.parents, set())

        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('x')
        node3 = Node('f')
        node4 = Node('f')
        node5 = Node('a')
        node1.add_argument(node2)
        node3.add_argument(node1)
        node4.add_argument(node5)

        self.assertEqual(node1.arguments, [node2])
        self.assertEqual(node2.arguments, [])
        self.assertEqual(node3.arguments, [node1])
        self.assertEqual(node4.arguments, [node5])
        self.assertEqual(node5.arguments, [])
        self.assertEqual(node1.parents, {node3})
        self.assertEqual(node2.parents, {node1})
        self.assertEqual(node3.parents, set())
        self.assertEqual(node4.parents, set())
        self.assertEqual(node5.parents, {node4})
示例#3
0
    def test_union(self):
        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('x')
        node3 = Node('f')
        node4 = Node('f')
        node5 = Node('a')
        node1.add_argument(node2)
        node3.add_argument(node1)
        node4.add_argument(node5)

        # Create the union of nodes 1 and 2, 3 and 1, 5 and 3, and 4 and 1.
        node1.union(node2)
        node3.union(node1)
        node5.union(node3)
        node4.union(node1)
        self.assertEqual(node1.parents, set())
        self.assertEqual(node2.parents, {node1, node3, node4})
        self.assertEqual(node3.parents, set())
        self.assertEqual(node4.parents, set())
        self.assertEqual(node5.parents, set())
        self.assertEqual(node1.find, node2)
        self.assertEqual(node2.find, node2)
        self.assertEqual(node3.find, node2)
        self.assertEqual(node4.find, node2)
        self.assertEqual(node5.find, node2)
示例#4
0
    def test_merge(self):
        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('x')
        node3 = Node('f')
        node4 = Node('f')
        node5 = Node('a')
        node1.add_argument(node2)
        node3.add_argument(node1)
        node4.add_argument(node5)

        # Merge nodes 1 and 2 and nodes 5 and 3.
        self.assertTrue(node1.merge(node2))
        self.assertTrue(node5.merge(node3))

        # Now node 2 should be the representative.
        self.assertEqual(node1.parents, set())
        self.assertEqual(node1.find, node2)
        self.assertEqual(node2.parents, {node1, node3, node4})
        self.assertEqual(node2.find, node2)
        self.assertEqual(node3.parents, set())
        self.assertEqual(node3.find, node2)
        self.assertEqual(node4.parents, set())
        self.assertEqual(node4.find, node2)
        self.assertEqual(node5.parents, set())
        self.assertEqual(node5.find, node2)

        # Trying to merge nodes 1 and 2 should return false as they are already
        # congruent to each other.
        self.assertFalse(node1.merge(node2))
示例#5
0
    def test_merge(self):
        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('x')
        node3 = Node('f')
        node4 = Node('f')
        node5 = Node('a')
        node1.add_argument(node2)
        node3.add_argument(node1)
        node4.add_argument(node5)

        # Merge nodes 1 and 2 and nodes 5 and 3.
        self.assertTrue(node1.merge(node2))
        self.assertTrue(node5.merge(node3))

        # Now node 2 should be the representative.
        self.assertEqual(node1.parents, set())
        self.assertEqual(node1.find, node2)
        self.assertEqual(node2.parents, {node1, node3, node4})
        self.assertEqual(node2.find, node2)
        self.assertEqual(node3.parents, set())
        self.assertEqual(node3.find, node2)
        self.assertEqual(node4.parents, set())
        self.assertEqual(node4.find, node2)
        self.assertEqual(node5.parents, set())
        self.assertEqual(node5.find, node2)

        # Trying to merge nodes 1 and 2 should return false as they are already
        # congruent to each other.
        self.assertFalse(node1.merge(node2))
示例#6
0
    def test_union(self):
        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('x')
        node3 = Node('f')
        node4 = Node('f')
        node5 = Node('a')
        node1.add_argument(node2)
        node3.add_argument(node1)
        node4.add_argument(node5)

        # Create the union of nodes 1 and 2, 3 and 1, 5 and 3, and 4 and 1.
        node1.union(node2)
        node3.union(node1)
        node5.union(node3)
        node4.union(node1)
        self.assertEqual(node1.parents, set())
        self.assertEqual(node2.parents, {node1, node3, node4})
        self.assertEqual(node3.parents, set())
        self.assertEqual(node4.parents, set())
        self.assertEqual(node5.parents, set())
        self.assertEqual(node1.find, node2)
        self.assertEqual(node2.find, node2)
        self.assertEqual(node3.find, node2)
        self.assertEqual(node4.find, node2)
        self.assertEqual(node5.find, node2)
示例#7
0
    def test_equality(self):
        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('f')
        node3 = Node('g')
        node4 = Node('f')
        node4.add_argument(node1)
        node4.add_argument(node3)
        node5 = Node('f')
        node5.add_argument(node1)
        node5.add_argument(node2)

        # Nodes 1 and 2 should be equal to each other.
        self.assertEqual(node1, node2)

        # Nodes 1 and 3 are not equal because their function names differ.
        self.assertNotEqual(node1, node3)

        # Nodes 1 and 4 are not equal because they do not have the same number
        # of arguments.
        self.assertNotEqual(node1, node4)

        # Nodes 4 and 5 are not equal because their arguments are not congruent.
        self.assertNotEqual(node4, node5)
示例#8
0
    def test_equality(self):
        # Create a few nodes.
        node1 = Node('f')
        node2 = Node('f')
        node3 = Node('g')
        node4 = Node('f')
        node4.add_argument(node1)
        node4.add_argument(node3)
        node5 = Node('f')
        node5.add_argument(node1)
        node5.add_argument(node2)

        # Nodes 1 and 2 should be equal to each other.
        self.assertEqual(node1, node2)

        # Nodes 1 and 3 are not equal because their function names differ.
        self.assertNotEqual(node1, node3)

        # Nodes 1 and 4 are not equal because they do not have the same number
        # of arguments.
        self.assertNotEqual(node1, node4)

        # Nodes 4 and 5 are not equal because their arguments are not congruent.
        self.assertNotEqual(node4, node5)
示例#9
0
文件: run.py 项目: BMeu/ConCloAlg
    node6 = Node('cons')
    node7 = Node('cdr')
    node8 = Node('car')
    node9 = Node('z')
    node10 = Node('cons')
    node11 = Node('cdr')
    node12 = Node('car')
    node13 = Node('car')
    node14 = Node('cdr')
    node15 = Node('car')
    node16 = Node('cdr')
    node17 = Node('car')
    node18 = Node('cdr')

    # Set the nodes' arguments.
    node2.add_argument(node3)
    node2.add_argument(node4)
    node3.add_argument(node4)
    node6.add_argument(node7)
    node6.add_argument(node8)
    node7.add_argument(node1)
    node8.add_argument(node1)
    node10.add_argument(node11)
    node10.add_argument(node12)
    node11.add_argument(node5)
    node12.add_argument(node5)
    node13.add_argument(node6)
    node14.add_argument(node6)
    node15.add_argument(node2)
    node16.add_argument(node2)
    node17.add_argument(node10)
示例#10
0
    node6 = Node('cons')
    node7 = Node('cdr')
    node8 = Node('car')
    node9 = Node('z')
    node10 = Node('cons')
    node11 = Node('cdr')
    node12 = Node('car')
    node13 = Node('car')
    node14 = Node('cdr')
    node15 = Node('car')
    node16 = Node('cdr')
    node17 = Node('car')
    node18 = Node('cdr')

    # Set the nodes' arguments.
    node2.add_argument(node3)
    node2.add_argument(node4)
    node3.add_argument(node4)
    node6.add_argument(node7)
    node6.add_argument(node8)
    node7.add_argument(node1)
    node8.add_argument(node1)
    node10.add_argument(node11)
    node10.add_argument(node12)
    node11.add_argument(node5)
    node12.add_argument(node5)
    node13.add_argument(node6)
    node14.add_argument(node6)
    node15.add_argument(node2)
    node16.add_argument(node2)
    node17.add_argument(node10)