3 # Copyright 2004,2007,2010 Free Software Foundation, Inc.
5 # This file is part of GNU Radio
7 # GNU Radio is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3, or (at your option)
12 # GNU Radio is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with GNU Radio; see the file COPYING. If not, write to
19 # the Free Software Foundation, Inc., 51 Franklin Street,
20 # Boston, MA 02110-1301, USA.
23 from gnuradio import gr, gr_unittest
25 class test_add_v_and_friends(gr_unittest.TestCase):
28 self.tb = gr.top_block()
33 def help_ss(self, size, src_data, exp_data, op):
34 for s in zip(range (len (src_data)), src_data):
35 src = gr.vector_source_s(s[1])
36 srcv = gr.stream_to_vector(gr.sizeof_short, size)
37 self.tb.connect(src, srcv)
38 self.tb.connect(srcv, (op, s[0]))
39 rhs = gr.vector_to_stream(gr.sizeof_short, size)
40 dst = gr.vector_sink_s()
41 self.tb.connect(op, rhs, dst)
43 result_data = dst.data()
44 self.assertEqual(exp_data, result_data)
46 def help_ii(self, size, src_data, exp_data, op):
47 for s in zip(range (len (src_data)), src_data):
48 src = gr.vector_source_i(s[1])
49 srcv = gr.stream_to_vector(gr.sizeof_int, size)
50 self.tb.connect(src, srcv)
51 self.tb.connect(srcv, (op, s[0]))
52 rhs = gr.vector_to_stream(gr.sizeof_int, size)
53 dst = gr.vector_sink_i()
54 self.tb.connect(op, rhs, dst)
56 result_data = dst.data()
57 self.assertEqual(exp_data, result_data)
59 def help_ff(self, size, src_data, exp_data, op):
60 for s in zip(range (len (src_data)), src_data):
61 src = gr.vector_source_f(s[1])
62 srcv = gr.stream_to_vector(gr.sizeof_float, size)
63 self.tb.connect(src, srcv)
64 self.tb.connect(srcv, (op, s[0]))
65 rhs = gr.vector_to_stream(gr.sizeof_float, size)
66 dst = gr.vector_sink_f()
67 self.tb.connect(op, rhs, dst)
69 result_data = dst.data()
70 self.assertEqual(exp_data, result_data)
72 def help_cc(self, size, src_data, exp_data, op):
73 for s in zip(range (len (src_data)), src_data):
74 src = gr.vector_source_c(s[1])
75 srcv = gr.stream_to_vector(gr.sizeof_gr_complex, size)
76 self.tb.connect(src, srcv)
77 self.tb.connect(srcv, (op, s[0]))
78 rhs = gr.vector_to_stream(gr.sizeof_gr_complex, size)
79 dst = gr.vector_sink_c()
80 self.tb.connect(op, rhs, dst)
82 result_data = dst.data()
83 self.assertEqual(exp_data, result_data)
85 def help_const_ss(self, src_data, exp_data, op):
86 src = gr.vector_source_s(src_data)
87 srcv = gr.stream_to_vector(gr.sizeof_short, len(src_data))
88 rhs = gr.vector_to_stream(gr.sizeof_short, len(src_data))
89 dst = gr.vector_sink_s()
90 self.tb.connect(src, srcv, op, rhs, dst)
92 result_data = dst.data()
93 self.assertEqual(exp_data, result_data)
95 def help_const_ii(self, src_data, exp_data, op):
96 src = gr.vector_source_i(src_data)
97 srcv = gr.stream_to_vector(gr.sizeof_int, len(src_data))
98 rhs = gr.vector_to_stream(gr.sizeof_int, len(src_data))
99 dst = gr.vector_sink_i()
100 self.tb.connect(src, srcv, op, rhs, dst)
102 result_data = dst.data()
103 self.assertEqual(exp_data, result_data)
105 def help_const_ff(self, src_data, exp_data, op):
106 src = gr.vector_source_f(src_data)
107 srcv = gr.stream_to_vector(gr.sizeof_float, len(src_data))
108 rhs = gr.vector_to_stream(gr.sizeof_float, len(src_data))
109 dst = gr.vector_sink_f()
110 self.tb.connect(src, srcv, op, rhs, dst)
112 result_data = dst.data()
113 self.assertEqual(exp_data, result_data)
115 def help_const_cc(self, src_data, exp_data, op):
116 src = gr.vector_source_c(src_data)
117 srcv = gr.stream_to_vector(gr.sizeof_gr_complex, len(src_data))
118 rhs = gr.vector_to_stream(gr.sizeof_gr_complex, len(src_data))
119 dst = gr.vector_sink_c()
120 self.tb.connect(src, srcv, op, rhs, dst)
122 result_data = dst.data()
123 self.assertEqual(exp_data, result_data)
126 def test_add_vss_one(self):
130 expected_result = (6,)
132 self.help_ss(1, (src1_data, src2_data, src3_data), expected_result, op)
134 def test_add_vss_five(self):
135 src1_data = (1, 2, 3, 4, 5)
136 src2_data = (6, 7, 8, 9, 10)
137 src3_data = (11, 12, 13, 14, 15)
138 expected_result = (18, 21, 24, 27, 30)
140 self.help_ss(5, (src1_data, src2_data, src3_data), expected_result, op)
142 def test_add_vii_one(self):
146 expected_result = (6,)
148 self.help_ii(1, (src1_data, src2_data, src3_data), expected_result, op)
150 def test_add_vii_five(self):
151 src1_data = (1, 2, 3, 4, 5)
152 src2_data = (6, 7, 8, 9, 10)
153 src3_data = (11, 12, 13, 14, 15)
154 expected_result = (18, 21, 24, 27, 30)
156 self.help_ii(5, (src1_data, src2_data, src3_data), expected_result, op)
158 def test_add_vff_one(self):
162 expected_result = (6.0,)
164 self.help_ff(1, (src1_data, src2_data, src3_data), expected_result, op)
166 def test_add_vff_five(self):
167 src1_data = (1.0, 2.0, 3.0, 4.0, 5.0)
168 src2_data = (6.0, 7.0, 8.0, 9.0, 10.0)
169 src3_data = (11.0, 12.0, 13.0, 14.0, 15.0)
170 expected_result = (18.0, 21.0, 24.0, 27.0, 30.0)
172 self.help_ff(5, (src1_data, src2_data, src3_data), expected_result, op)
174 def test_add_vcc_one(self):
175 src1_data = (1.0+2.0j,)
176 src2_data = (3.0+4.0j,)
177 src3_data = (5.0+6.0j,)
178 expected_result = (9.0+12j,)
180 self.help_cc(1, (src1_data, src2_data, src3_data), expected_result, op)
182 def test_add_vcc_five(self):
183 src1_data = (1.0+2.0j, 3.0+4.0j, 5.0+6.0j, 7.0+8.0j, 9.0+10.0j)
184 src2_data = (11.0+12.0j, 13.0+14.0j, 15.0+16.0j, 17.0+18.0j, 19.0+20.0j)
185 src3_data = (21.0+22.0j, 23.0+24.0j, 25.0+26.0j, 27.0+28.0j, 29.0+30.0j)
186 expected_result = (33.0+36.0j, 39.0+42.0j, 45.0+48.0j, 51.0+54.0j, 57.0+60.0j)
188 self.help_cc(5, (src1_data, src2_data, src3_data), expected_result, op)
190 def test_add_const_vss_one(self):
192 op = gr.add_const_vss((2,))
194 self.help_const_ss(src_data, exp_data, op)
196 def test_add_const_vss_five(self):
197 src_data = (1, 2, 3, 4, 5)
198 op = gr.add_const_vss((6, 7, 8, 9, 10))
199 exp_data = (7, 9, 11, 13, 15)
200 self.help_const_ss(src_data, exp_data, op)
202 def test_add_const_vii_one(self):
204 op = gr.add_const_vii((2,))
206 self.help_const_ii(src_data, exp_data, op)
208 def test_add_const_vii_five(self):
209 src_data = (1, 2, 3, 4, 5)
210 op = gr.add_const_vii((6, 7, 8, 9, 10))
211 exp_data = (7, 9, 11, 13, 15)
212 self.help_const_ii(src_data, exp_data, op)
214 def test_add_const_vff_one(self):
216 op = gr.add_const_vff((2.0,))
218 self.help_const_ff(src_data, exp_data, op)
220 def test_add_const_vff_five(self):
221 src_data = (1.0, 2.0, 3.0, 4.0, 5.0)
222 op = gr.add_const_vff((6.0, 7.0, 8.0, 9.0, 10.0))
223 exp_data = (7.0, 9.0, 11.0, 13.0, 15.0)
224 self.help_const_ff(src_data, exp_data, op)
226 def test_add_const_vcc_one(self):
227 src_data = (1.0+2.0j,)
228 op = gr.add_const_vcc((2.0+3.0j,))
229 exp_data = (3.0+5.0j,)
230 self.help_const_cc(src_data, exp_data, op)
232 def test_add_const_vcc_five(self):
233 src_data = (1.0+2.0j, 3.0+4.0j, 5.0+6.0j, 7.0+8.0j, 9.0+10.0j)
234 op = gr.add_const_vcc((11.0+12.0j, 13.0+14.0j, 15.0+16.0j, 17.0+18.0j, 19.0+20.0j))
235 exp_data = (12.0+14.0j, 16.0+18.0j, 20.0+22.0j, 24.0+26.0j, 28.0+30.0j)
236 self.help_const_cc(src_data, exp_data, op)
239 def test_multiply_vss_one(self):
243 expected_result = (6,)
244 op = gr.multiply_vss(1)
245 self.help_ss(1, (src1_data, src2_data, src3_data), expected_result, op)
247 def test_multiply_vss_five(self):
248 src1_data = (1, 2, 3, 4, 5)
249 src2_data = (6, 7, 8, 9, 10)
250 src3_data = (11, 12, 13, 14, 15)
251 expected_result = (66, 168, 312, 504, 750)
252 op = gr.multiply_vss(5)
253 self.help_ss(5, (src1_data, src2_data, src3_data), expected_result, op)
255 def test_multiply_vii_one(self):
259 expected_result = (6,)
260 op = gr.multiply_vii(1)
261 self.help_ii(1, (src1_data, src2_data, src3_data), expected_result, op)
263 def test_multiply_vii_five(self):
264 src1_data = (1, 2, 3, 4, 5)
265 src2_data = (6, 7, 8, 9, 10)
266 src3_data = (11, 12, 13, 14, 15)
267 expected_result = (66, 168, 312, 504, 750)
268 op = gr.multiply_vii(5)
269 self.help_ii(5, (src1_data, src2_data, src3_data), expected_result, op)
271 def test_multiply_vff_one(self):
275 expected_result = (6.0,)
276 op = gr.multiply_vff(1)
277 self.help_ff(1, (src1_data, src2_data, src3_data), expected_result, op)
279 def test_multiply_vff_five(self):
280 src1_data = (1.0, 2.0, 3.0, 4.0, 5.0)
281 src2_data = (6.0, 7.0, 8.0, 9.0, 10.0)
282 src3_data = (11.0, 12.0, 13.0, 14.0, 15.0)
283 expected_result = (66.0, 168.0, 312.0, 504.0, 750.0)
284 op = gr.multiply_vff(5)
285 self.help_ff(5, (src1_data, src2_data, src3_data), expected_result, op)
287 def test_multiply_vcc_one(self):
288 src1_data = (1.0+2.0j,)
289 src2_data = (3.0+4.0j,)
290 src3_data = (5.0+6.0j,)
291 expected_result = (-85+20j,)
292 op = gr.multiply_vcc(1)
293 self.help_cc(1, (src1_data, src2_data, src3_data), expected_result, op)
295 def test_multiply_vcc_five(self):
296 src1_data = (1.0+2.0j, 3.0+4.0j, 5.0+6.0j, 7.0+8.0j, 9.0+10.0j)
297 src2_data = (11.0+12.0j, 13.0+14.0j, 15.0+16.0j, 17.0+18.0j, 19.0+20.0j)
298 src3_data = (21.0+22.0j, 23.0+24.0j, 25.0+26.0j, 27.0+28.0j, 29.0+30.0j)
299 expected_result = (-1021.0+428.0j, -2647.0+1754.0j, -4945.0+3704.0j, -8011.0+6374.0j, -11941.0+9860.0j)
300 op = gr.multiply_vcc(5)
301 self.help_cc(5, (src1_data, src2_data, src3_data), expected_result, op)
303 def test_multiply_const_vss_one(self):
305 op = gr.multiply_const_vss((3,))
307 self.help_const_ss(src_data, exp_data, op)
309 def test_multiply_const_vss_five(self):
310 src_data = (1, 2, 3, 4, 5)
311 op = gr.multiply_const_vss((6, 7, 8, 9, 10))
312 exp_data = (6, 14, 24, 36, 50)
313 self.help_const_ss(src_data, exp_data, op)
315 def test_multiply_const_vii_one(self):
317 op = gr.multiply_const_vii((3,))
319 self.help_const_ii(src_data, exp_data, op)
321 def test_multiply_const_vii_five(self):
322 src_data = (1, 2, 3, 4, 5)
323 op = gr.multiply_const_vii((6, 7, 8, 9, 10))
324 exp_data = (6, 14, 24, 36, 50)
325 self.help_const_ii(src_data, exp_data, op)
327 def test_multiply_const_vff_one(self):
329 op = gr.multiply_const_vff((3.0,))
331 self.help_const_ff(src_data, exp_data, op)
333 def test_multiply_const_vff_five(self):
334 src_data = (1.0, 2.0, 3.0, 4.0, 5.0)
335 op = gr.multiply_const_vff((6.0, 7.0, 8.0, 9.0, 10.0))
336 exp_data = (6.0, 14.0, 24.0, 36.0, 50.0)
337 self.help_const_ff(src_data, exp_data, op)
339 def test_multiply_const_vcc_one(self):
340 src_data = (1.0+2.0j,)
341 op = gr.multiply_const_vcc((2.0+3.0j,))
342 exp_data = (-4.0+7.0j,)
343 self.help_const_cc(src_data, exp_data, op)
345 def test_multiply_const_vcc_five(self):
346 src_data = (1.0+2.0j, 3.0+4.0j, 5.0+6.0j, 7.0+8.0j, 9.0+10.0j)
347 op = gr.multiply_const_vcc((11.0+12.0j, 13.0+14.0j, 15.0+16.0j, 17.0+18.0j, 19.0+20.0j))
348 exp_data = (-13.0+34.0j, -17.0+94.0j, -21.0+170.0j, -25.0+262.0j, -29.0+370.0j)
349 self.help_const_cc(src_data, exp_data, op)
352 if __name__ == '__main__':
353 gr_unittest.run(test_add_v_and_friends, "test_add_v_and_friends.xml")