@@ -104,6 +104,40 @@ def test_1(self):
104
104
]
105
105
self .assertEqual (tags , tags_expected )
106
106
107
+ def test_preserve_tag_head_pos (self ):
108
+ """ Test the 'preserve head position' function.
109
+ This will add a 'special' tag to item 0 on stream 1.
110
+ It should be on item 0 of the output stream. """
111
+ special_tag = gr .tag_t ()
112
+ special_tag .key = pmt .string_to_symbol ('spam' )
113
+ special_tag .offset = 0
114
+ special_tag .value = pmt .to_pmt ('eggs' )
115
+ len_tag_key = "length"
116
+ packet_len_1 = 5
117
+ packet_len_2 = 3
118
+ mux = blocks .tagged_stream_mux (gr .sizeof_float , len_tag_key , 1 )
119
+ sink = blocks .vector_sink_f ()
120
+ self .tb .connect (
121
+ blocks .vector_source_f (range (packet_len_1 )),
122
+ blocks .stream_to_tagged_stream (gr .sizeof_float , 1 , packet_len_1 , len_tag_key ),
123
+ (mux , 0 )
124
+ )
125
+ self .tb .connect (
126
+ blocks .vector_source_f (range (packet_len_2 ), False , 1 , (special_tag ,)),
127
+ blocks .stream_to_tagged_stream (gr .sizeof_float , 1 , packet_len_2 , len_tag_key ),
128
+ (mux , 1 )
129
+ )
130
+ self .tb .connect (mux , sink )
131
+ self .tb .run ()
132
+ self .assertEqual (sink .data (), tuple (range (packet_len_1 ) + range (packet_len_2 )))
133
+ tags = [gr .tag_to_python (x ) for x in sink .tags ()]
134
+ tags = sorted ([(x .offset , x .key , x .value ) for x in tags ])
135
+ tags_expected = [
136
+ (0 , 'length' , packet_len_1 + packet_len_2 ),
137
+ (0 , 'spam' , 'eggs' ),
138
+ ]
139
+ self .assertEqual (tags , tags_expected )
140
+
107
141
108
142
if __name__ == '__main__' :
109
143
gr_unittest .run (qa_tagged_stream_mux , "qa_tagged_stream_mux.xml" )
0 commit comments