diff options
Diffstat (limited to 'gr-blocks/python')
-rw-r--r-- | gr-blocks/python/blocks/qa_exponentiate_const_cci.py | 66 | ||||
-rwxr-xr-x | gr-blocks/python/blocks/qa_tag_share.py | 73 |
2 files changed, 139 insertions, 0 deletions
diff --git a/gr-blocks/python/blocks/qa_exponentiate_const_cci.py b/gr-blocks/python/blocks/qa_exponentiate_const_cci.py new file mode 100644 index 0000000000..0c4b65eb68 --- /dev/null +++ b/gr-blocks/python/blocks/qa_exponentiate_const_cci.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2017 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, gr_unittest +from gnuradio import blocks +import pmt + +class qa_exponentiate_const_cci(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + + def test_001_t(self): + for exponent in range(1,10): + in_data = (1+1j, -1, 4-1j, -3-7j) + out_data = (in_data[0]**exponent, in_data[1]**exponent, in_data[2]**exponent, in_data[3]**exponent) + + # Test streaming input + source = blocks.vector_source_c(in_data, False, 1) + exponentiate_const_cci = blocks.exponentiate_const_cci(exponent) + sink = blocks.vector_sink_c(1) + + self.tb.connect(source, exponentiate_const_cci, sink) + self.tb.run() + + self.assertAlmostEqual(sink.data(), out_data) + + # Test vector input + for vlen in [2, 4]: + source = blocks.vector_source_c(in_data, False, 1) + s2v = blocks.stream_to_vector(gr.sizeof_gr_complex, vlen) + exponentiate_const_cci = blocks.exponentiate_const_cci(exponent, vlen) + v2s = blocks.vector_to_stream(gr.sizeof_gr_complex, vlen) + sink = blocks.vector_sink_c(1) + + self.tb.connect(source, s2v, exponentiate_const_cci, v2s, sink) + self.tb.run() + + self.assertAlmostEqual(sink.data(), out_data) + + +if __name__ == '__main__': + gr_unittest.run(qa_exponentiate_const_cci, 'qa_exponentiate_const_cci.xml') diff --git a/gr-blocks/python/blocks/qa_tag_share.py b/gr-blocks/python/blocks/qa_tag_share.py new file mode 100755 index 0000000000..3fff02ff66 --- /dev/null +++ b/gr-blocks/python/blocks/qa_tag_share.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2017 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, gr_unittest +from gnuradio import blocks +import pmt + +class qa_tag_share(gr_unittest.TestCase): + + def setUp(self): + self.tb = gr.top_block() + + def tearDown(self): + self.tb = None + + def test_001_t(self): + # Constants + tag_key = 'in1_tag' + tag_value = 0 + tag_offset = 0 + in0_value = 1.0+1.0j + in1_value = 2.717 + in0_data = (in0_value,)*10 + in1_data = (in1_value,)*10 + sink_data = in0_data + + tag = gr.tag_t() + tag.key = pmt.to_pmt(tag_key) + tag.value = pmt.to_pmt(tag_value) + tag.offset = tag_offset + + # Only tag Input 1 of the share block and see if it transfers + # to Output 0. Also verify that Input 0 stream is propagated to + # Output 0. + in0 = blocks.vector_source_c(in0_data, False, 1) + in1 = blocks.vector_source_f(in1_data, False, 1, (tag,)) + tag_share = blocks.tag_share(gr.sizeof_gr_complex, gr.sizeof_float) + sink = blocks.vector_sink_c(1) + + self.tb.connect(in0, (tag_share,0)) + self.tb.connect(in1, (tag_share,1)) + self.tb.connect(tag_share, sink) + self.tb.run() + + self.assertEqual(len(sink.tags()), 1) + self.assertEqual(pmt.to_python(sink.tags()[0].key), tag_key) + self.assertEqual(pmt.to_python(sink.tags()[0].value), tag_value) + self.assertEqual(sink.tags()[0].offset, tag_offset) + self.assertEqual(sink.data(), sink_data) + + +if __name__ == '__main__': + gr_unittest.run(qa_tag_share, 'qa_tag_share.xml') |