commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r3992 - in gnuradio/branches/developers/jcorgan/hier/g


From: jcorgan
Subject: [Commit-gnuradio] r3992 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr
Date: Thu, 16 Nov 2006 12:15:27 -0700 (MST)

Author: jcorgan
Date: 2006-11-16 12:15:27 -0700 (Thu, 16 Nov 2006)
New Revision: 3992

Modified:
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
Log:
Work in progress. Cleanup and new QA test code, bug fixes.

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-11-16 08:04:14 UTC (rev 3991)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-11-16 19:15:27 UTC (rev 3992)
@@ -194,8 +194,11 @@
     if (name == "")
        throw std::invalid_argument("unknown child passed to parent");
 
-    ninputs = calc_connections(name, true).size();
-    noutputs = calc_connections(name, false).size();
+    std::vector<int> used_ports;
+    calc_used_ports(calc_connections(name, true), used_ports, true);
+    ninputs = used_ports.size();
+    calc_used_ports(calc_connections(name, false), used_ports, false);
+    noutputs = used_ports.size();    
 
     if (GR_HIER_BLOCK2_IMPL_DEBUG)
        std::cout << name << " has " << ninputs << " inputs and " 
@@ -261,7 +264,7 @@
                              << (dir ? "input ":"output ") 
                              << i << std::endl;
                
-               throw std::invalid_argument("block is missing input 
assignment");
+               throw std::runtime_error("block is missing input assignment");
            }
        }
     }
@@ -273,12 +276,20 @@
 gr_hier_block2_impl::calc_used_ports(gr_connection_vector_t connections, 
                                      std::vector<int> &used_ports, bool dir)
 {
+    std::vector<int> tmp;
+    std::insert_iterator<std::vector<int> > inserter(used_ports, 
used_ports.begin());
+
+    used_ports.clear();
     for (gr_connection_viter_t p = connections.begin();
         p != connections.end(); p++) {
 
        if (dir == true)  // check inputs
-           used_ports.push_back(p->dst().port());
+           tmp.push_back(p->dst().port());
        else              // check outputs
-           used_ports.push_back(p->src().port());
+           tmp.push_back(p->src().port());
     }    
+
+    // Remove duplicates
+    std::sort(tmp.begin(), tmp.end());
+    std::unique_copy(tmp.begin(), tmp.end(), inserter);
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.cc
       2006-11-16 08:04:14 UTC (rev 3991)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.cc
       2006-11-16 19:15:27 UTC (rev 3992)
@@ -44,6 +44,12 @@
     delete d_impl;
 }
 
+bool
+gr_runtime::validate()
+{
+    d_impl->validate();
+}
+
 void 
 gr_runtime::start()
 {

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.h
        2006-11-16 08:04:14 UTC (rev 3991)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.h
        2006-11-16 19:15:27 UTC (rev 3992)
@@ -40,6 +40,7 @@
 public:
     ~gr_runtime();
 
+    bool validate();
     void start();
     void stop();
     void wait();

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
        2006-11-16 08:04:14 UTC (rev 3991)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
        2006-11-16 19:15:27 UTC (rev 3992)
@@ -33,6 +33,8 @@
     gr_runtime(gr_hier_block2_sptr top_block);
 
 public:
+    bool validate()
+       throw (std::runtime_error);
     void start();
     void stop();
     void wait();

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-16 08:04:14 UTC (rev 3991)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-16 19:15:27 UTC (rev 3992)
@@ -52,6 +52,14 @@
     }
 };
 
+bool
+gr_runtime_impl::validate()
+{
+    // Visit every node in the tree and call validate() on it
+    validation_visitor visitor;
+    return d_top_block->visit(visitor);
+}
+
 void 
 gr_runtime_impl::start()
 {
@@ -63,10 +71,10 @@
     else
        d_running = true;
 
-    // Visit every node in the tree and call validate() on it
-    validation_visitor visitor;
-    if (!d_top_block->visit(visitor))
-       throw std::runtime_error("tree validation failed");
+    if (!validate())
+       throw std::runtime_error("tree failed validation");
+       
+    // Do stuff here
 }
 
 void 

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
   2006-11-16 08:04:14 UTC (rev 3991)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
   2006-11-16 19:15:27 UTC (rev 3992)
@@ -34,6 +34,7 @@
     bool d_running;
     gr_hier_block2_sptr d_top_block;
 
+    bool validate();
     void start();
     void stop();
     void wait();

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-11-16 08:04:14 UTC (rev 3991)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-11-16 19:15:27 UTC (rev 3992)
@@ -24,144 +24,132 @@
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
+       hblock.define_component("src", gr.null_source(gr.sizeof_int))
+       hblock.define_component("dst", gr.null_sink(gr.sizeof_int))
 
-       src1 = gr.null_source(gr.sizeof_int)
-       sink1 = gr.null_sink(gr.sizeof_int)
-           
-       hblock.define_component("source", src1)
-       hblock.define_component("sink", sink1)
-
-
     def test_003_define_component_reserved_input(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
-       src1 = gr.nop(gr.sizeof_int)
-       self.assertRaises(ValueError, lambda: hblock.define_component("self", 
src1))
+       self.assertRaises(ValueError, 
+           lambda: hblock.define_component("self", gr.nop(gr.sizeof_int)))
 
-    def test_005_define_component_name_in_use(self):
+    def test_004_define_component_name_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))
-
-       src1 = gr.null_source(gr.sizeof_int)
-       sink1 = gr.null_sink(gr.sizeof_int)
-           
-       hblock.define_component("source", src1)
-       self.assertRaises(ValueError, lambda: hblock.define_component("source", 
sink1))
+       hblock.define_component("src", gr.null_source(gr.sizeof_int))
+       self.assertRaises(ValueError, 
+           lambda: hblock.define_component("src", gr.null_sink(gr.sizeof_int)))
     
-    def test_006_define_component_block_in_use(self):
+    def test_005_define_component_block_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))
+       nop = gr.nop(gr.sizeof_int)
+       hblock.define_component("nop1", nop)
+       self.assertRaises(ValueError, 
+           lambda: hblock.define_component("nop2", nop))
 
-       nop1 = gr.nop(gr.sizeof_int)
-       nop2 = gr.nop(gr.sizeof_int)
-       hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.define_component("nop2", 
nop1))
-
-    def test_007_connect_internal(self):
+    def test_006_connect_internal(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.define_component("nop1", nop1)
-       hblock.define_component("nop2", nop2)
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       hblock.define_component("nop2", gr.nop(gr.sizeof_int))
        hblock.connect("nop1", 0, "nop2", 0)
 
-    def test_008_connect_input(self):
+    def test_007_connect_input(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)
-       hblock.define_component("nop1", nop1)
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
        hblock.connect("self", 0, "nop1", 0)
 
-    def test_009_connect_output(self):
+    def test_008_connect_output(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)
-       hblock.define_component("nop1", nop1)
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
        hblock.connect("nop1", 0, "self", 0)
 
-    def test_010_connect_unknown_src(self):
+    def test_009_connect_unknown_src(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)
        hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("nop2", 0, "self", 
0))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("nop2", 0, "self", 0))
     
-    def test_011_connect_unknown_dst(self):
+    def test_010_connect_unknown_dst(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("self", 0, "nop2", 0))
 
-       nop1 = gr.nop(gr.sizeof_int)
-       hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("self", 0, "nop2", 
0))
-
-    def test_012_connect_invalid_src_port_neg(self):
+    def test_011_connect_invalid_src_port_neg(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("self", -1, "nop1", 0))
 
-       nop1 = gr.nop(gr.sizeof_int)
-       hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("self", -1, 
"nop1", 0))
-
-    def test_013_connect_invalid_src_port_exceeds(self):
+    def test_012_connect_invalid_src_port_exceeds(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)
-       hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("self", 1, "nop1", 
0))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("self", 1, "nop1", 0))
     
-    def test_014_connect_invalid_dst_port_neg(self):
+    def test_013_connect_invalid_dst_port_neg(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("self", -1, "nop1", 0))
 
-       nop1 = gr.nop(gr.sizeof_int)
-       hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("self", -1, 
"nop1", 0))
-
-    def test_015_connect_invalid_dst_port_exceeds(self):
+    def test_014_connect_invalid_dst_port_exceeds(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("self", 1, "nop1", 0))
 
-       nop1 = gr.nop(gr.sizeof_int)
-       hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("self", 1, "nop1", 
0))
-
-    def test_016_connect_dst_port_in_use(self):
+    def test_015_connect_dst_port_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)
        hblock.define_component("nop1", nop1)
        hblock.connect("nop1", 0, "self", 0);
-       self.assertRaises(ValueError, lambda: hblock.connect("nop1", 0, "self", 
0))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("nop1", 0, "self", 0))
     
+    def test_016_connect_one_src_two_dst(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+       hblock.define_component("src", gr.null_source(gr.sizeof_int))
+       hblock.define_component("dst1", gr.null_sink(gr.sizeof_int))
+       hblock.define_component("dst2", gr.null_sink(gr.sizeof_int))
+       hblock.connect("src", 0, "dst1", 0)
+       hblock.connect("src", 0, "dst2", 0)
+
     def test_017_connect_type_mismatch(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_char))
+       self.assertRaises(ValueError, 
+           lambda: hblock.connect("nop1", 0, "self", 0))
 
-       nop1 = gr.nop(gr.sizeof_char)
-       hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("nop1", 0, "self", 
0))
-
     def test_018_check_topology(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(0,0,gr.sizeof_int), 
@@ -173,8 +161,86 @@
                                gr.io_signature(0,0,gr.sizeof_int), 
                                gr.io_signature(0,0,gr.sizeof_int))
        runtime = gr.runtime(hblock)
-       runtime.run()
-               
+       runtime.validate()
+    
+    def test_020_validate_1(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(0,0,gr.sizeof_int), 
+                               gr.io_signature(0,0,gr.sizeof_int))
+       hblock.define_component("src", gr.null_source(gr.sizeof_int))
+       hblock.define_component("dst1", gr.null_sink(gr.sizeof_int))
+       hblock.define_component("dst2", gr.null_sink(gr.sizeof_int))
+       hblock.connect("src", 0, "dst1", 0)
+       hblock.connect("src", 0, "dst2", 0)                     
+       runtime = gr.runtime(hblock)
+       runtime.validate()
 
+    def test_021_validate_2(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(0,0,gr.sizeof_int), 
+                               gr.io_signature(0,0,gr.sizeof_int))
+       hblock.define_component("src1", gr.null_source(gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       hblock.define_component("dst1", gr.null_sink(gr.sizeof_int))
+       hblock.define_component("dst2", gr.null_sink(gr.sizeof_int))
+       hblock.connect("src1", 0, "nop1", 0)
+       hblock.connect("src1", 0, "nop1", 1)
+       hblock.connect("nop1", 0, "dst1", 0)
+       hblock.connect("nop1", 1, "dst2", 0)
+       runtime = gr.runtime(hblock)
+       runtime.validate()
+        
+    def test_022_validate_3(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(0,0,gr.sizeof_int), 
+                               gr.io_signature(0,0,gr.sizeof_int))
+       hblock.define_component("src1", gr.null_source(gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       hblock.define_component("dst1", gr.null_sink(gr.sizeof_int))
+       hblock.define_component("dst2", gr.null_sink(gr.sizeof_int))
+       hblock.connect("src1", 0, "nop1", 0)
+       hblock.connect("src1", 0, "nop1", 2)
+       hblock.connect("nop1", 0, "dst1", 0)
+       hblock.connect("nop1", 1, "dst2", 0)
+       runtime = gr.runtime(hblock)
+       self.assertRaises(RuntimeError,
+           lambda: runtime.validate())
+        
+    def test_023_validate_4(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(0,0,gr.sizeof_int), 
+                               gr.io_signature(0,0,gr.sizeof_int))
+       hblock.define_component("src1", gr.null_source(gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       hblock.define_component("dst1", gr.null_sink(gr.sizeof_int))
+       hblock.define_component("dst2", gr.null_sink(gr.sizeof_int))
+       hblock.connect("src1", 0, "nop1", 0)
+       hblock.connect("src1", 0, "nop1", 1)
+       hblock.connect("nop1", 0, "dst1", 0)
+       hblock.connect("nop1", 2, "dst2", 0)
+       runtime = gr.runtime(hblock)
+       self.assertRaises(RuntimeError,
+           lambda: runtime.validate())
+        
+    def test_024_validate_5(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(0,0,gr.sizeof_int), 
+                               gr.io_signature(0,0,gr.sizeof_int))
+       hblock.define_component("src1", gr.null_source(gr.sizeof_int))
+       hblock.define_component("nop1", gr.nop(gr.sizeof_int))
+       hblock.define_component("dst1", gr.null_sink(gr.sizeof_int))
+       hblock.define_component("dst2", gr.null_sink(gr.sizeof_int))
+       hblock.connect("src1", 0, "nop1", 0)
+       hblock.connect("src1", 0, "nop1", 1)
+       hblock.connect("nop1", 0, "dst1", 0)
+       hblock.connect("nop1", 1, "dst2", 0)
+       runtime = gr.runtime(hblock)
+       runtime.validate()
+       # Pending implementation of disconnect
+       # hblock.disconnect("src1", 0, "nop1", 1)
+       # runtime.validate()    
+       # self.assertRaises(ValueError,
+       #     lambda: hblock.disconnect("src1", 0, "nop1", 1))
+        
 if __name__ == "__main__":
     gr_unittest.main()





reply via email to

[Prev in Thread] Current Thread [Next in Thread]