~ubuntu-branches/ubuntu/trusty/gnuradio/trusty

« back to all changes in this revision

Viewing changes to gnuradio-core/src/lib/runtime/qa_gr_flowgraph.cc

  • Committer: Bazaar Package Importer
  • Author(s): Kamal Mostafa
  • Date: 2010-03-13 07:46:01 UTC
  • mfrom: (2.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20100313074601-zjsa893a87bozyh7
Tags: 3.2.2.dfsg-1ubuntu1
* Fix build for Ubuntu lucid (LP: #260406)
  - add binary package dep for libusrp0, libusrp2-0: adduser
  - debian/rules clean: remove pre-built Qt moc files

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- c++ -*- */
 
2
/*
 
3
 * Copyright 2007 Free Software Foundation, Inc.
 
4
 * 
 
5
 * This file is part of GNU Radio
 
6
 * 
 
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)
 
10
 * any later version.
 
11
 * 
 
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.
 
16
 * 
 
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.
 
21
 */
 
22
 
 
23
#ifdef HAVE_CONFIG_H
 
24
#include <config.h>
 
25
#endif
 
26
 
 
27
#include <qa_gr_flowgraph.h>
 
28
#include <gr_flowgraph.h>
 
29
#include <gr_nop.h>
 
30
#include <gr_null_source.h>
 
31
#include <gr_null_sink.h>
 
32
 
 
33
void qa_gr_flowgraph::t0()
 
34
{
 
35
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
36
 
 
37
  CPPUNIT_ASSERT(fg);
 
38
}
 
39
 
 
40
void qa_gr_flowgraph::t1_connect()
 
41
{
 
42
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
43
 
 
44
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
45
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
46
 
 
47
  fg->connect(nop1, 0, nop2, 0);
 
48
}
 
49
 
 
50
void qa_gr_flowgraph::t2_connect_invalid_src_port_neg()
 
51
{
 
52
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
53
 
 
54
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
55
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
56
 
 
57
  CPPUNIT_ASSERT_THROW(fg->connect(nop1, -1, nop2, 0), std::invalid_argument);
 
58
}
 
59
 
 
60
void qa_gr_flowgraph::t3_connect_src_port_exceeds()
 
61
{
 
62
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
63
 
 
64
  gr_block_sptr src = gr_make_null_source(sizeof(int));
 
65
  gr_block_sptr dst = gr_make_null_sink(sizeof(int));
 
66
 
 
67
  CPPUNIT_ASSERT_THROW(fg->connect(src, 1, dst, 0), std::invalid_argument);
 
68
}
 
69
 
 
70
void qa_gr_flowgraph::t4_connect_invalid_dst_port_neg()
 
71
{
 
72
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
73
 
 
74
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
75
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
76
 
 
77
  CPPUNIT_ASSERT_THROW(fg->connect(nop1, 0, nop2, -1), std::invalid_argument);
 
78
}
 
79
 
 
80
void qa_gr_flowgraph::t5_connect_dst_port_exceeds()
 
81
{
 
82
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
83
 
 
84
  gr_block_sptr src = gr_make_null_source(sizeof(int));
 
85
  gr_block_sptr dst = gr_make_null_sink(sizeof(int));
 
86
 
 
87
  CPPUNIT_ASSERT_THROW(fg->connect(src, 0, dst, 1), std::invalid_argument);
 
88
}
 
89
 
 
90
void qa_gr_flowgraph::t6_connect_dst_in_use()
 
91
{
 
92
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
93
 
 
94
  gr_block_sptr src1 = gr_make_null_source(sizeof(int));
 
95
  gr_block_sptr src2 = gr_make_null_source(sizeof(int));
 
96
  gr_block_sptr dst = gr_make_null_sink(sizeof(int));
 
97
 
 
98
  fg->connect(src1, 0, dst, 0);
 
99
  CPPUNIT_ASSERT_THROW(fg->connect(src2, 0, dst, 0), std::invalid_argument);
 
100
}
 
101
 
 
102
void qa_gr_flowgraph::t7_connect_one_src_two_dst()
 
103
{
 
104
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
105
 
 
106
  gr_block_sptr src = gr_make_null_source(sizeof(int));
 
107
  gr_block_sptr dst1 = gr_make_null_sink(sizeof(int));
 
108
  gr_block_sptr dst2 = gr_make_null_sink(sizeof(int));
 
109
 
 
110
  fg->connect(src, 0, dst1, 0);
 
111
  fg->connect(src, 0, dst2, 0);
 
112
}
 
113
 
 
114
void qa_gr_flowgraph::t8_connect_type_mismatch()
 
115
{
 
116
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
117
 
 
118
  gr_block_sptr nop1 = gr_make_nop(sizeof(char));
 
119
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
120
 
 
121
  CPPUNIT_ASSERT_THROW(fg->connect(nop1, 0, nop2, 0), std::invalid_argument);
 
122
}
 
123
 
 
124
void qa_gr_flowgraph::t9_disconnect()
 
125
{
 
126
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
127
 
 
128
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
129
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
130
 
 
131
  fg->connect(nop1, 0, nop2, 0);
 
132
  fg->disconnect(nop1, 0, nop2, 0);
 
133
}
 
134
 
 
135
void qa_gr_flowgraph::t10_disconnect_unconnected_block()
 
136
{
 
137
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
138
 
 
139
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
140
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
141
  gr_block_sptr nop3 = gr_make_nop(sizeof(int));
 
142
 
 
143
  fg->connect(nop1, 0, nop2, 0);
 
144
  CPPUNIT_ASSERT_THROW(fg->disconnect(nop1, 0, nop3, 0), std::invalid_argument);
 
145
}
 
146
 
 
147
void qa_gr_flowgraph::t11_disconnect_unconnected_port()
 
148
{
 
149
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
150
 
 
151
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
152
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
153
 
 
154
  fg->connect(nop1, 0, nop2, 0);
 
155
  CPPUNIT_ASSERT_THROW(fg->disconnect(nop1, 0, nop2, 1), std::invalid_argument);
 
156
}
 
157
 
 
158
void qa_gr_flowgraph::t12_validate()
 
159
{
 
160
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
161
 
 
162
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
163
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
164
 
 
165
  fg->connect(nop1, 0, nop2, 0);
 
166
  fg->validate();
 
167
}
 
168
 
 
169
void qa_gr_flowgraph::t13_validate_missing_input_assignment()
 
170
{
 
171
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
172
 
 
173
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
174
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
175
 
 
176
  fg->connect(nop1, 0, nop2, 0);
 
177
  fg->connect(nop1, 0, nop2, 2);
 
178
  CPPUNIT_ASSERT_THROW(fg->validate(), std::runtime_error);
 
179
}
 
180
 
 
181
void qa_gr_flowgraph::t14_validate_missing_output_assignment()
 
182
{
 
183
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
184
 
 
185
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
186
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
187
 
 
188
  fg->connect(nop1, 0, nop2, 0);
 
189
  fg->connect(nop1, 2, nop2, 1);
 
190
  CPPUNIT_ASSERT_THROW(fg->validate(), std::runtime_error);
 
191
}
 
192
 
 
193
void qa_gr_flowgraph::t15_clear()
 
194
{
 
195
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
196
 
 
197
  gr_block_sptr nop1 = gr_make_nop(sizeof(int));
 
198
  gr_block_sptr nop2 = gr_make_nop(sizeof(int));
 
199
 
 
200
  fg->connect(nop1, 0, nop2, 0);
 
201
 
 
202
  CPPUNIT_ASSERT(fg->edges().size() == 1);
 
203
  CPPUNIT_ASSERT(fg->calc_used_blocks().size() == 2);
 
204
 
 
205
  fg->clear();
 
206
 
 
207
  CPPUNIT_ASSERT(fg->edges().size() == 0);
 
208
  CPPUNIT_ASSERT(fg->calc_used_blocks().size() == 0);
 
209
}
 
210
 
 
211
void qa_gr_flowgraph::t16_partition()
 
212
{
 
213
  gr_flowgraph_sptr fg = gr_make_flowgraph();
 
214
 
 
215
  gr_block_sptr nop11 = gr_make_nop(sizeof(int));
 
216
  gr_block_sptr nop12 = gr_make_nop(sizeof(int));
 
217
  gr_block_sptr nop13 = gr_make_nop(sizeof(int));
 
218
  gr_block_sptr nop14 = gr_make_nop(sizeof(int));
 
219
 
 
220
  gr_block_sptr nop21 = gr_make_nop(sizeof(int));
 
221
  gr_block_sptr nop22 = gr_make_nop(sizeof(int));
 
222
  gr_block_sptr nop23 = gr_make_nop(sizeof(int));
 
223
 
 
224
  gr_block_sptr nop31 = gr_make_nop(sizeof(int));
 
225
  gr_block_sptr nop32 = gr_make_nop(sizeof(int));
 
226
  
 
227
  // Build disjoint graph #1
 
228
  fg->connect(nop11, 0, nop12, 0);
 
229
  fg->connect(nop12, 0, nop13, 0);
 
230
  fg->connect(nop13, 0, nop14, 0);
 
231
 
 
232
  // Build disjoint graph #2
 
233
  fg->connect(nop21, 0, nop22, 0);
 
234
  fg->connect(nop22, 0, nop23, 0);
 
235
 
 
236
  // Build disjoint graph #3
 
237
  fg->connect(nop31, 0, nop32, 0);
 
238
 
 
239
  std::vector<gr_basic_block_vector_t> graphs = fg->partition();
 
240
 
 
241
  CPPUNIT_ASSERT(graphs.size() == 3);
 
242
  CPPUNIT_ASSERT(graphs[0].size() == 4);
 
243
  CPPUNIT_ASSERT(graphs[1].size() == 3);
 
244
  CPPUNIT_ASSERT(graphs[2].size() == 2);
 
245
}