diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2014-12-11 17:42:03 +0100 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2014-12-12 14:53:05 +0100 |
commit | 0356a8df991f04922c4e112a5ce16155221127c1 (patch) | |
tree | 9c14cdb26ae63fc1800583dd3add17991dff926b /gnuradio-runtime | |
parent | 94a93636ea33685a22e673934006f96cff0c29aa (diff) |
runtime: add tests for new decorators in hier_block2
Diffstat (limited to 'gnuradio-runtime')
-rw-r--r-- | gnuradio-runtime/python/gnuradio/gr/hier_block2.py | 74 | ||||
-rw-r--r-- | gnuradio-runtime/python/gnuradio/gr/qa_hier_block2.py | 91 | ||||
-rw-r--r-- | gnuradio-runtime/python/gnuradio/gr/top_block.py | 38 |
3 files changed, 151 insertions, 52 deletions
diff --git a/gnuradio-runtime/python/gnuradio/gr/hier_block2.py b/gnuradio-runtime/python/gnuradio/gr/hier_block2.py index 602e5f7bf4..3bc1e2e111 100644 --- a/gnuradio-runtime/python/gnuradio/gr/hier_block2.py +++ b/gnuradio-runtime/python/gnuradio/gr/hier_block2.py @@ -1,46 +1,51 @@ -""" -Copyright 2006, 2007, 2014 Free Software Foundation, Inc. -This file is part of GNU Radio - -GNU Radio Companion is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -GNU Radio Companion is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -""" +# +# Copyright 2006,2007,2014 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# from functools import wraps +from itertools import imap from runtime_swig import hier_block2_swig, dot_graph import pmt def _multiple_endpoints(func): - def coerce_endpoint(endp, default_port=0): - if hasattr(endp, 'to_basic_block'): - return endp.to_basic_block(), default_port - try: - block, port = endp - return block.to_basic_block(), port - except ValueError: - raise ValueError("unable to coerce endpoint") @wraps(func) def wrapped(self, *points): if not points: - raise ValueError("At least one endpoint required for " + func.__name__) + raise ValueError("At least one block required for " + func.__name__) elif len(points) == 1: - func(points[0].to_basic_block()) + try: + block = points[0].to_basic_block() + except AttributeError: + raise ValueError("At least two endpoints required for " + func.__name__) + func(self, block) else: - for src, dst in map(lambda i: points[i:i + 2], range(len(points) - 1)): - func(self, *(coerce_endpoint(src) + coerce_endpoint(dst))) + try: + endp = [(p, 0) if hasattr(p, 'to_basic_block') else p for p in points] + endp_pairs = imap(lambda i: endp[i:i+2], range(len(endp)-1)) + for (src, src_port), (dst, dst_port) in endp_pairs: + func(self, src.to_basic_block(), src_port, + dst.to_basic_block(), dst_port) + except (ValueError, TypeError): + raise ValueError("Unable to coerce endpoint") return wrapped @@ -48,10 +53,11 @@ def _optional_endpoints(func): @wraps(func) def wrapped(self, src, srcport, dst=None, dstport=None): if dst is None and dstport is None: - (src, srcport), (dst, dstport) = src, srcport - return func(self, - src.to_basic_block(), srcport, - dst.to_basic_block(), dstport) + try: + (src, srcport), (dst, dstport) = src, srcport + except (ValueError, TypeError): + raise ValueError("Unable to coerce endpoint") + func(self, src.to_basic_block(), srcport, dst.to_basic_block(), dstport) return wrapped diff --git a/gnuradio-runtime/python/gnuradio/gr/qa_hier_block2.py b/gnuradio-runtime/python/gnuradio/gr/qa_hier_block2.py new file mode 100644 index 0000000000..50b1562f3a --- /dev/null +++ b/gnuradio-runtime/python/gnuradio/gr/qa_hier_block2.py @@ -0,0 +1,91 @@ +# +# Copyright 2014 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from gnuradio import gr_unittest +from gnuradio.gr.hier_block2 import _multiple_endpoints, _optional_endpoints + + +class test_hier_block2(gr_unittest.TestCase): + + def setUp(self): + self.call_log = [] + self.Block = type("Block", (), {"to_basic_block": lambda bl: bl}) + + def test_f(self, *args): + """test doc""" + self.call_log.append(args) + + multi = _multiple_endpoints(test_f) + opt = _optional_endpoints(test_f) + + def test_000(self): + self.assertEqual(self.multi.__doc__, "test doc") + self.assertEqual(self.multi.__name__, "test_f") + + def test_001(self): + b = self.Block() + self.multi(b) + self.assertEqual((b,), self.call_log[0]) + + def test_002(self): + b1, b2 = self.Block(), self.Block() + self.multi(b1, b2) + self.assertEqual([(b1, 0, b2, 0)], self.call_log) + + def test_003(self): + b1, b2 = self.Block(), self.Block() + self.multi((b1, 1), (b2, 2)) + self.assertEqual([(b1, 1, b2, 2)], self.call_log) + + def test_004(self): + b1, b2, b3, b4 = [self.Block()] * 4 + self.multi(b1, (b2, 5), b3, (b4, 0)) + expected = [ + (b1, 0, b2, 5), + (b2, 5, b3, 0), + (b3, 0, b4, 0), + ] + self.assertEqual(expected, self.call_log) + + def test_005(self): + with self.assertRaises(ValueError) as c: + self.multi((self.Block(), 5)) + self.assertIsInstance(c.exception, ValueError) + + def test_006(self): + with self.assertRaises(ValueError) as c: + self.multi(self.Block(), (self.Block(), 5, 5)) + self.assertIsInstance(c.exception, ValueError) + + def test_007(self): + b1, b2 = self.Block(), self.Block() + self.opt(b1, "in", b2, "out") + self.assertEqual([(b1, "in", b2, "out")], self.call_log) + + def test_008(self): + f, b1, b2 = self.multi, self.Block(), self.Block() + self.opt((b1, "in"), (b2, "out")) + self.assertEqual([(b1, "in", b2, "out")], self.call_log) + + +if __name__ == '__main__': + gr_unittest.run(test_hier_block2, "test_hier_block2.xml") + diff --git a/gnuradio-runtime/python/gnuradio/gr/top_block.py b/gnuradio-runtime/python/gnuradio/gr/top_block.py index 8d810652aa..f9872fc114 100644 --- a/gnuradio-runtime/python/gnuradio/gr/top_block.py +++ b/gnuradio-runtime/python/gnuradio/gr/top_block.py @@ -1,21 +1,23 @@ -""" -Copyright 2007, 2014 Free Software Foundation, Inc. -This file is part of GNU Radio - -GNU Radio Companion is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -GNU Radio Companion is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -""" +# +# Copyright 2007,2014 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# from runtime_swig import top_block_swig, \ top_block_wait_unlocked, top_block_run_unlocked, \ |