[Top][All Lists]
[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()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3992 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr,
jcorgan <=