diff options
author | Johannes Demel <ufcsy@student.kit.edu> | 2015-07-20 14:20:23 +0200 |
---|---|---|
committer | Johannes Demel <ufcsy@student.kit.edu> | 2015-07-20 14:23:36 +0200 |
commit | 17194e6ada5eb0313b930e829fbdb40dc2e9ec7e (patch) | |
tree | efa84c610f8e3e6d6b0314c5f0c3764bb1f6f0a2 | |
parent | 2dde900700ca2c71de7a16e26c2a435ea5edf75a (diff) |
fec: added tests for extended_encoder input/output conversion.
-rw-r--r-- | gr-fec/include/gnuradio/fec/dummy_encoder.h | 2 | ||||
-rw-r--r-- | gr-fec/lib/dummy_encoder_impl.cc | 22 | ||||
-rw-r--r-- | gr-fec/lib/dummy_encoder_impl.h | 6 | ||||
-rw-r--r-- | gr-fec/python/fec/qa_fecapi_dummy.py | 49 |
4 files changed, 72 insertions, 7 deletions
diff --git a/gr-fec/include/gnuradio/fec/dummy_encoder.h b/gr-fec/include/gnuradio/fec/dummy_encoder.h index 2270d1f684..863234e8f8 100644 --- a/gr-fec/include/gnuradio/fec/dummy_encoder.h +++ b/gr-fec/include/gnuradio/fec/dummy_encoder.h @@ -52,7 +52,7 @@ namespace gr { * tagged stream style, this is the maximum allowable * number of bits per frame. */ - static generic_encoder::sptr make(int frame_size); + static generic_encoder::sptr make(int frame_size, bool pack = false, bool packed_bits = false); /*! * Sets the uncoded frame size to \p frame_size. If \p diff --git a/gr-fec/lib/dummy_encoder_impl.cc b/gr-fec/lib/dummy_encoder_impl.cc index 188b07cef6..d04ff223c9 100644 --- a/gr-fec/lib/dummy_encoder_impl.cc +++ b/gr-fec/lib/dummy_encoder_impl.cc @@ -34,14 +34,16 @@ namespace gr { namespace code { generic_encoder::sptr - dummy_encoder::make(int frame_size) + dummy_encoder::make(int frame_size, bool pack, bool packed_bits) { return generic_encoder::sptr - (new dummy_encoder_impl(frame_size)); + (new dummy_encoder_impl(frame_size, pack, packed_bits)); } - dummy_encoder_impl::dummy_encoder_impl(int frame_size) - : generic_encoder("dummy_encoder") + dummy_encoder_impl::dummy_encoder_impl(int frame_size, bool pack, bool packed_bits) + : generic_encoder("dummy_encoder"), + d_pack_input(pack), + d_packed_bits_output(packed_bits) { d_max_frame_size = frame_size; set_frame_size(frame_size); @@ -63,6 +65,18 @@ namespace gr { return d_frame_size; } + const char* + dummy_encoder_impl::get_input_conversion() + { + return d_pack_input ? "pack" : "none"; + } + + const char* + dummy_encoder_impl::get_output_conversion() + { + return d_packed_bits_output ? "packed_bits" : "none"; + } + bool dummy_encoder_impl::set_frame_size(unsigned int frame_size) { diff --git a/gr-fec/lib/dummy_encoder_impl.h b/gr-fec/lib/dummy_encoder_impl.h index 7bfb1cd666..029cecbd19 100644 --- a/gr-fec/lib/dummy_encoder_impl.h +++ b/gr-fec/lib/dummy_encoder_impl.h @@ -38,12 +38,16 @@ namespace gr { void generic_work(void *inbuffer, void *outbuffer); int get_output_size(); int get_input_size(); + const char* get_input_conversion(); + const char* get_output_conversion(); + bool d_pack_input; + bool d_packed_bits_output; unsigned int d_max_frame_size; unsigned int d_frame_size; public: - dummy_encoder_impl(int frame_size); + dummy_encoder_impl(int frame_size, bool pack = false, bool packed_bits = false); ~dummy_encoder_impl(); bool set_frame_size(unsigned int frame_size); diff --git a/gr-fec/python/fec/qa_fecapi_dummy.py b/gr-fec/python/fec/qa_fecapi_dummy.py index a07890fb84..9471c71d74 100644 --- a/gr-fec/python/fec/qa_fecapi_dummy.py +++ b/gr-fec/python/fec/qa_fecapi_dummy.py @@ -20,9 +20,10 @@ # Boston, MA 02110-1301, USA. # -from gnuradio import gr, gr_unittest +from gnuradio import gr, gr_unittest, blocks import fec_swig as fec from _qa_helper import _qa_helper +import numpy as np from extended_encoder import extended_encoder from extended_decoder import extended_decoder @@ -186,5 +187,51 @@ class test_fecapi_dummy(gr_unittest.TestCase): self.assertRaises(AttributeError, lambda: extended_decoder(dec, threading=threading, puncpat="11")) + def test_extended_pack_data(self): + # test if extended encoder gets correct values for input and output conversion. + n_frames = 10 + frame_size = 32 + + data = np.random.randint(0, 2, n_frames * frame_size) + packed_data = np.packbits(data) + + tb = gr.top_block() + + src = blocks.vector_source_b(data) + snk0 = blocks.vector_sink_b(1) + snk1 = blocks.vector_sink_b(1) + snk2 = blocks.vector_sink_b(1) + snk3 = blocks.vector_sink_b(1) + + packer = blocks.pack_k_bits_bb(8) + tb.connect(src, packer, snk0) + + enc_unpacked = fec.dummy_encoder_make(frame_size, False, False) + ext_enc_unp = extended_encoder(enc_unpacked, threading='none', puncpat='11') + tb.connect(src, ext_enc_unp, snk1) + + enc_pack = fec.dummy_encoder_make(frame_size // 8, True, False) + ext_enc_pack = extended_encoder(enc_pack, threading='none', puncpat='11') + tb.connect(src, ext_enc_pack, snk2) + + enc_packed_bits = fec.dummy_encoder_make(frame_size // 8, False, True) + ext_enc_packed_bits = extended_encoder(enc_packed_bits, threading='none', puncpat='11') + tb.connect(packer, ext_enc_packed_bits, snk3) + + tb.run() + + r0 = snk0.data() + r1 = snk1.data() + r2 = snk2.data() + r3 = snk3.data() + + data = tuple(data) + packed_data = tuple(packed_data) + self.assertTupleEqual(packed_data, r0) + self.assertTupleEqual(data, r1) + self.assertTupleEqual(packed_data, r2) + self.assertTupleEqual(data, r3) + + if __name__ == '__main__': gr_unittest.run(test_fecapi_dummy, "test_fecapi_dummy.xml") |