Updating all python QA programs in gnuradio-core to output XML files.
[debian/gnuradio] / gnuradio-core / src / python / gnuradio / gr / qa_hier_block2.py
index 9fa002501ab96157a68fc0bcfce0336c7e0ae41b..924a0fb52efb240300828f4c17852bfd0912b48f 100755 (executable)
@@ -27,16 +27,6 @@ class test_hier_block2(gr_unittest.TestCase):
        nop1 = gr.nop(gr.sizeof_int)
        hblock.connect(hblock, nop1)
 
-    def test_003_connect_input_in_use(self):
-       hblock = gr.hier_block2("test_block", 
-                               gr.io_signature(1,1,gr.sizeof_int), 
-                               gr.io_signature(1,1,gr.sizeof_int))
-       nop1 = gr.nop(gr.sizeof_int)
-       nop2 = gr.nop(gr.sizeof_int)
-       hblock.connect(hblock, nop1)
-       self.assertRaises(ValueError,
-           lambda: hblock.connect(hblock, nop2))
-
     def test_004_connect_output(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
@@ -100,8 +90,7 @@ class test_hier_block2(gr_unittest.TestCase):
         sink2 = gr.vector_sink_f()
         hblock.connect(src, sink1)
         hblock.connect(src, sink2)
-        runtime = gr.runtime(hblock)
-        runtime.run()
+        hblock.run()
         actual1 = sink1.data()
         actual2 = sink2.data()
         self.assertEquals(expected, actual1)
@@ -185,9 +174,196 @@ class test_hier_block2(gr_unittest.TestCase):
        src = gr.vector_source_f(data, False)
        dst = gr.vector_sink_f()
        hblock.connect(src, dst)
-       r = gr.runtime(hblock)
-       r.run()
+       hblock.run()
        self.assertEquals(data, dst.data())
 
+    def test_021_connect_single(self):
+        hblock = gr.top_block("test_block")
+        blk = gr.hier_block2("block",
+                             gr.io_signature(0, 0, 0),
+                             gr.io_signature(0, 0, 0))
+        hblock.connect(blk)
+
+    def test_022_connect_single_with_ports(self):
+        hblock = gr.top_block("test_block")
+        blk = gr.hier_block2("block",
+                             gr.io_signature(1, 1, 1),
+                             gr.io_signature(1, 1, 1))
+        self.assertRaises(ValueError,
+                          lambda: hblock.connect(blk))
+
+    def test_023_connect_single_twice(self):
+        hblock = gr.top_block("test_block")
+        blk = gr.hier_block2("block",
+                             gr.io_signature(0, 0, 0),
+                             gr.io_signature(0, 0, 0))
+        hblock.connect(blk)
+        self.assertRaises(ValueError,
+                          lambda: hblock.connect(blk))
+
+    def test_024_disconnect_single(self):
+        hblock = gr.top_block("test_block")
+        blk = gr.hier_block2("block",
+                             gr.io_signature(0, 0, 0),
+                             gr.io_signature(0, 0, 0))
+        hblock.connect(blk)
+        hblock.disconnect(blk)
+
+    def test_025_disconnect_single_not_connected(self):
+        hblock = gr.top_block("test_block")
+        blk = gr.hier_block2("block",
+                             gr.io_signature(0, 0, 0),
+                             gr.io_signature(0, 0, 0))
+        self.assertRaises(ValueError,
+                          lambda: hblock.disconnect(blk))
+
+    def test_026_run_single(self):
+        expected_data = (1.0,)
+        tb = gr.top_block("top_block")
+        hb = gr.hier_block2("block",
+                            gr.io_signature(0, 0, 0),
+                            gr.io_signature(0, 0, 0))
+        src = gr.vector_source_f(expected_data)
+        dst = gr.vector_sink_f()
+        hb.connect(src, dst)
+        tb.connect(hb)
+        tb.run()
+        self.assertEquals(expected_data, dst.data())
+
+    def test_027a_internally_unconnected_input(self):
+        tb = gr.top_block()
+        hb = gr.hier_block2("block",
+                            gr.io_signature(1, 1, 1),
+                            gr.io_signature(1, 1, 1))
+        hsrc = gr.vector_source_b([1,])
+        hb.connect(hsrc, hb) # wire output internally
+        src = gr.vector_source_b([1, ])
+        dst = gr.vector_sink_b()
+        tb.connect(src, hb, dst) # hb's input is not connected internally
+        self.assertRaises(RuntimeError, 
+                          lambda: tb.run())
+
+    def test_027b_internally_unconnected_output(self):
+        tb = gr.top_block()
+
+        hb = gr.hier_block2("block",
+                            gr.io_signature(1, 1, 1),
+                            gr.io_signature(1, 1, 1))
+        hdst = gr.vector_sink_b()
+        hb.connect(hb, hdst) # wire input internally
+        src = gr.vector_source_b([1, ])
+        dst = gr.vector_sink_b()
+        tb.connect(src, hb, dst) # hb's output is not connected internally
+        self.assertRaises(RuntimeError, 
+                          lambda: tb.run())
+
+    def test_027c_fully_unconnected_output(self):
+        tb = gr.top_block()
+        hb = gr.hier_block2("block",
+                            gr.io_signature(1, 1, 1),
+                            gr.io_signature(1, 1, 1))
+        hsrc = gr.vector_sink_b()
+        hb.connect(hb, hsrc) # wire input internally
+        src = gr.vector_source_b([1, ])
+        dst = gr.vector_sink_b()
+        tb.connect(src, hb) # hb's output is not connected internally or externally
+        self.assertRaises(RuntimeError, 
+                          lambda: tb.run())
+
+    def test_027d_fully_unconnected_input(self):
+        tb = gr.top_block()
+        hb = gr.hier_block2("block",
+                            gr.io_signature(1, 1, 1),
+                            gr.io_signature(1, 1, 1))
+        hdst = gr.vector_source_b([1,])
+        hb.connect(hdst, hb) # wire output internally
+        dst = gr.vector_sink_b()
+        tb.connect(hb, dst) # hb's input is not connected internally or externally
+        self.assertRaises(RuntimeError, 
+                          lambda: tb.run())
+
+    def test_028_singleton_reconfigure(self):
+        tb = gr.top_block()
+        hb = gr.hier_block2("block", 
+                            gr.io_signature(0, 0, 0), gr.io_signature(0, 0, 0))
+        src = gr.vector_source_b([1, ])
+        dst = gr.vector_sink_b()
+        hb.connect(src, dst)
+        tb.connect(hb) # Singleton connect
+        tb.lock()
+        tb.disconnect_all()
+        tb.connect(src, dst)
+        tb.unlock()
+
+    def test_029_singleton_disconnect(self):
+        tb = gr.top_block()
+        src = gr.vector_source_b([1, ])
+        dst = gr.vector_sink_b()
+        tb.connect(src, dst)
+        tb.disconnect(src)   # Singleton disconnect
+        tb.connect(src, dst)
+        tb.run()
+        self.assertEquals(dst.data(), (1,))
+
+    def test_030_nested_input(self):
+        tb = gr.top_block()
+        src = gr.vector_source_b([1,])
+        hb1 = gr.hier_block2("hb1",
+                             gr.io_signature(1, 1, gr.sizeof_char),
+                             gr.io_signature(0, 0, 0))
+        hb2 = gr.hier_block2("hb2",
+                             gr.io_signature(1, 1, gr.sizeof_char),
+                             gr.io_signature(0, 0, 0))
+        dst = gr.vector_sink_b()
+        tb.connect(src, hb1)
+        hb1.connect(hb1, hb2)
+        hb2.connect(hb2, gr.kludge_copy(gr.sizeof_char), dst)
+        tb.run()
+        self.assertEquals(dst.data(), (1,))
+
+    def test_031_multiple_internal_inputs(self):
+        tb = gr.top_block()
+        src = gr.vector_source_f([1.0,])
+        hb = gr.hier_block2("hb",
+                            gr.io_signature(1, 1, gr.sizeof_float),
+                            gr.io_signature(1, 1, gr.sizeof_float))
+        m1 = gr.multiply_const_ff(1.0)
+        m2 = gr.multiply_const_ff(2.0)
+        add = gr.add_ff()
+        hb.connect(hb, m1)       # m1 is connected to hb external input #0
+        hb.connect(hb, m2)       # m2 is also connected to hb external input #0
+        hb.connect(m1, (add, 0)) 
+        hb.connect(m2, (add, 1))
+        hb.connect(add, hb)      # add is connected to hb external output #0
+        dst = gr.vector_sink_f()
+        tb.connect(src, hb, dst)
+        tb.run()
+        self.assertEquals(dst.data(), (3.0,))
+
+    def test_032_nested_multiple_internal_inputs(self):
+        tb = gr.top_block()
+        src = gr.vector_source_f([1.0,])
+        hb = gr.hier_block2("hb",
+                            gr.io_signature(1, 1, gr.sizeof_float),
+                            gr.io_signature(1, 1, gr.sizeof_float))
+        hb2 = gr.hier_block2("hb",
+                            gr.io_signature(1, 1, gr.sizeof_float),
+                            gr.io_signature(1, 1, gr.sizeof_float))
+
+        m1 = gr.multiply_const_ff(1.0)
+        m2 = gr.multiply_const_ff(2.0)
+        add = gr.add_ff()
+        hb2.connect(hb2, m1)       # m1 is connected to hb2 external input #0
+        hb2.connect(hb2, m2)       # m2 is also connected to hb2 external input #0
+        hb2.connect(m1, (add, 0)) 
+        hb2.connect(m2, (add, 1))
+        hb2.connect(add, hb2)      # add is connected to hb2 external output #0
+        hb.connect(hb, hb2, hb)   # hb as hb2 as nested internal block
+        dst = gr.vector_sink_f()
+        tb.connect(src, hb, dst)
+        tb.run()
+        self.assertEquals(dst.data(), (3.0,))
+        
+    
 if __name__ == "__main__":
-    gr_unittest.main()
+    gr_unittest.run(test_hier_block2, "test_hier_block2.xml")