コード例 #1
0
 def test_topological_order(self):
     for n in range(100):
         p = random.random()
         dag = self.get_random_dag(n,p)
         arr = dag.get_topological_order()
         seen = set()
         for x in arr:
             seen.add(x)
             for y in dag.get_reachable_above(x):
                 self.assertTrue(y in seen)
コード例 #2
0
 def test_topological_order(self):
     for n in range(100):
         p = random.random()
         dag = self.get_random_dag(n, p)
         arr = dag.get_topological_order()
         seen = set()
         for x in arr:
             seen.add(x)
             for y in dag.get_reachable_above(x):
                 self.assertTrue(y in seen)
コード例 #3
0
    def test_transitive_reduction(self):
        def es(d):
            return sum( len(v) for (k,v) in d.above.items() )

        a = 0
        b = 0
        for n in range(100):
            p = random.random()
            dag = self.get_random_dag(n,p)
            dag2 = dag.get_transitive_reduction()
            for x in dag.elements:
                self.assertEqual(sorted(dag.get_reachable_above(x)),
                                 sorted(dag2.get_reachable_above(x)))

            a += es(dag)
            b += es(dag2)

        self.assertTrue(a*20/100 > b) # just a sanity check, but can fail with low probability
コード例 #4
0
    def test_transitive_reduction(self):
        def es(d):
            return sum(len(v) for (k, v) in d.above.items())

        a = 0
        b = 0
        for n in range(100):
            p = random.random()
            dag = self.get_random_dag(n, p)
            dag2 = dag.get_transitive_reduction()
            for x in dag.elements:
                self.assertEqual(sorted(dag.get_reachable_above(x)),
                                 sorted(dag2.get_reachable_above(x)))

            a += es(dag)
            b += es(dag2)

        self.assertTrue(
            a * 20 / 100 >
            b)  # just a sanity check, but can fail with low probability
コード例 #5
0
    def test_reachable_above(self):
        dag = DAG()
        for i in range(5):
            dag.add_element(i)
            self.assertEqual([i], sorted(dag.get_reachable_above(i)))
        for i in range(5):
            self.assertEqual([i], sorted(dag.get_reachable_above(i)))

        dag.put_below(3, 4)
        self.assertEqual([3], sorted(dag.get_reachable_above(3)))
        self.assertEqual([3,4], sorted(dag.get_reachable_above(4)))
        self.assertEqual([1], sorted(dag.get_reachable_above(1)))

        dag.put_below(1, 0)
        dag.put_below(2, 1)
        self.assertEqual([2], sorted(dag.get_reachable_above(2)))
        self.assertEqual([1,2], sorted(dag.get_reachable_above(1)))
        self.assertEqual([0,1,2], sorted(dag.get_reachable_above(0)))

        dag.put_below(2, 0)
        self.assertEqual([2], sorted(dag.get_reachable_above(2)))
        self.assertEqual([1,2], sorted(dag.get_reachable_above(1)))
        self.assertEqual([0,1,2], sorted(dag.get_reachable_above(0)))

        dag.put_below(4, 1)
        self.assertEqual([2], sorted(dag.get_reachable_above(2)))
        self.assertEqual([1,2,3,4], sorted(dag.get_reachable_above(1)))
        self.assertEqual([0,1,2,3,4], sorted(dag.get_reachable_above(0)))

        dag.put_below(4, 2)
        self.assertEqual([0,1,2,3,4], sorted(dag.get_reachable_above(0)))
        self.assertEqual([1,2,3,4], sorted(dag.get_reachable_above(1)))
        self.assertEqual([2,3,4], sorted(dag.get_reachable_above(2)))
        self.assertEqual([3], sorted(dag.get_reachable_above(3)))
        self.assertEqual([3,4], sorted(dag.get_reachable_above(4)))
コード例 #6
0
    def test_reachable_above(self):
        dag = DAG()
        for i in range(5):
            dag.add_element(i)
            self.assertEqual([i], sorted(dag.get_reachable_above(i)))
        for i in range(5):
            self.assertEqual([i], sorted(dag.get_reachable_above(i)))

        dag.put_below(3, 4)
        self.assertEqual([3], sorted(dag.get_reachable_above(3)))
        self.assertEqual([3, 4], sorted(dag.get_reachable_above(4)))
        self.assertEqual([1], sorted(dag.get_reachable_above(1)))

        dag.put_below(1, 0)
        dag.put_below(2, 1)
        self.assertEqual([2], sorted(dag.get_reachable_above(2)))
        self.assertEqual([1, 2], sorted(dag.get_reachable_above(1)))
        self.assertEqual([0, 1, 2], sorted(dag.get_reachable_above(0)))

        dag.put_below(2, 0)
        self.assertEqual([2], sorted(dag.get_reachable_above(2)))
        self.assertEqual([1, 2], sorted(dag.get_reachable_above(1)))
        self.assertEqual([0, 1, 2], sorted(dag.get_reachable_above(0)))

        dag.put_below(4, 1)
        self.assertEqual([2], sorted(dag.get_reachable_above(2)))
        self.assertEqual([1, 2, 3, 4], sorted(dag.get_reachable_above(1)))
        self.assertEqual([0, 1, 2, 3, 4], sorted(dag.get_reachable_above(0)))

        dag.put_below(4, 2)
        self.assertEqual([0, 1, 2, 3, 4], sorted(dag.get_reachable_above(0)))
        self.assertEqual([1, 2, 3, 4], sorted(dag.get_reachable_above(1)))
        self.assertEqual([2, 3, 4], sorted(dag.get_reachable_above(2)))
        self.assertEqual([3], sorted(dag.get_reachable_above(3)))
        self.assertEqual([3, 4], sorted(dag.get_reachable_above(4)))