From 6529fb50840529f9f3a664d27ff5a8cf45f76ef4 Mon Sep 17 00:00:00 2001
From: Jason Uher <jason.uher@jhuapl.edu>
Date: Sun, 11 Jul 2021 21:56:15 +0000
Subject: digital: pack_k_bits propagate tags correctly

fixes #1111

Signed-off-by: Jason Uher <jason.uher@jhuapl.edu>
---
 gr-blocks/python/blocks/qa_pack_k_bits.py | 42 +++++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)

(limited to 'gr-blocks/python/blocks/qa_pack_k_bits.py')

diff --git a/gr-blocks/python/blocks/qa_pack_k_bits.py b/gr-blocks/python/blocks/qa_pack_k_bits.py
index b38f9c519d..c4cfd6545e 100644
--- a/gr-blocks/python/blocks/qa_pack_k_bits.py
+++ b/gr-blocks/python/blocks/qa_pack_k_bits.py
@@ -12,7 +12,7 @@
 import random
 
 from gnuradio import gr, gr_unittest, blocks
-
+import pmt
 
 class test_pack(gr_unittest.TestCase):
 
@@ -41,7 +41,6 @@ class test_pack(gr_unittest.TestCase):
         dst = blocks.vector_sink_b()
         self.tb.connect(src, op, dst)
         self.tb.run()
-        #self.assertEqual(expected_results, dst.data())
         self.assertEqual(expected_results, dst.data())
 
     def test_003(self):
@@ -54,6 +53,45 @@ class test_pack(gr_unittest.TestCase):
         self.tb.run()
         self.assertEqual(list(expected_results), list(snk.data()))
 
+    def test_004(self):
+        # Test tags propagation
+
+        #Tags on the incoming bits
+        src_data = [1, 0, 1, 1, 0, 0, 0, 1]
+        #src_tag_offsets = [1, 2, 3, 5, 6]
+        src_tag_offsets = [1, 2, 3, 5, 6, 7]
+
+        #Ground Truth
+        expected_data= [2, 3, 0, 1]
+        expected_tag_offsets = [0, 1, 1, 2, 3, 3]
+
+        test_tags = list()
+        tag_indexs = range(len(src_tag_offsets))
+        for src_tag in tag_indexs:
+            test_tags.append(
+                      gr.tag_utils.python_to_tag(( src_tag_offsets[src_tag],
+                                                   pmt.intern('tag_byte'),
+                                                   pmt.from_long(src_tag),
+                                                   None
+                                                ))
+                        )
+
+        src = blocks.vector_source_b(src_data, False,1, test_tags )
+        op = blocks.pack_k_bits_bb(2)
+        dst = blocks.vector_sink_b()
+        self.tb.connect(src, op, dst)
+        self.tb.run()
+
+        # Check the data
+        self.assertEqual(expected_data, dst.data())
+
+        # Check the tag values
+        self.assertEqual( list(tag_indexs), [ pmt.to_python(x.value) for x in dst.tags()])
+
+        # Check the tag offsets
+        self.assertEqual( expected_tag_offsets, [ x.offset for x in dst.tags()])
+
+
 
 if __name__ == '__main__':
     gr_unittest.run(test_pack)
-- 
cgit v1.2.3