comparison packages/compat/uitron/current/tests/testcx6.cxx @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
comparison
equal deleted inserted replaced
-1:000000000000 0:3111d98ba7b3
1 //===========================================================================
2 //
3 // testcx6.cxx
4 //
5 // uITRON "C++" test program six
6 //
7 //===========================================================================
8 //####COPYRIGHTBEGIN####
9 //
10 // -------------------------------------------
11 // The contents of this file are subject to the Cygnus eCos Public License
12 // Version 1.0 (the "License"); you may not use this file except in
13 // compliance with the License. You may obtain a copy of the License at
14 // http://sourceware.cygnus.com/ecos
15 //
16 // Software distributed under the License is distributed on an "AS IS"
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
18 // License for the specific language governing rights and limitations under
19 // the License.
20 //
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
22 // September 30, 1998.
23 //
24 // The Initial Developer of the Original Code is Cygnus. Portions created
25 // by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved.
26 // -------------------------------------------
27 //
28 //####COPYRIGHTEND####
29 //===========================================================================
30 //#####DESCRIPTIONBEGIN####
31 //
32 // Author(s): hmt
33 // Contributors: hmt
34 // Date: 1998-10-14
35 // Purpose: uITRON API testing
36 // Description:
37 //
38 //####DESCRIPTIONEND####
39 //
40 //===========================================================================
41
42 #include <pkgconf/uitron.h> // uITRON setup CYGNUM_UITRON_SEMAS
43 // CYGPKG_UITRON et al
44 #include <cyg/infra/testcase.h> // testing infrastructure
45
46 #ifdef CYGPKG_UITRON // we DO want the uITRON package
47
48 #ifdef CYGSEM_KERNEL_SCHED_MLQUEUE // we DO want prioritized threads
49
50 #ifdef CYGFUN_KERNEL_THREADS_TIMER // we DO want timout-able calls
51
52 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK // we DO want the realtime clock
53
54 // we're OK if it's C++ or neither of those two is defined:
55 #if defined( __cplusplus ) || \
56 (!defined( CYGIMP_UITRON_INLINE_FUNCS ) && \
57 !defined( CYGIMP_UITRON_CPP_OUTLINE_FUNCS) )
58
59 // =================== TEST CONFIGURATION ===================
60 #if \
61 /* test configuration for enough tasks */ \
62 (CYGNUM_UITRON_TASKS >= 4) && \
63 (CYGNUM_UITRON_TASKS < 90) && \
64 (CYGNUM_UITRON_START_TASKS == 1) && \
65 ( !defined(CYGPKG_UITRON_TASKS_CREATE_DELETE) || \
66 CYGNUM_UITRON_TASKS_INITIALLY >= 4 ) && \
67 \
68 /* test configuration for enough semaphores */ \
69 defined( CYGPKG_UITRON_SEMAS ) && \
70 (CYGNUM_UITRON_SEMAS >= 3) && \
71 (CYGNUM_UITRON_SEMAS < 90) && \
72 ( !defined(CYGPKG_UITRON_SEMAS_CREATE_DELETE) || \
73 CYGNUM_UITRON_SEMAS_INITIALLY >= 3 ) && \
74 \
75 /* test configuration for enough flag objects */ \
76 defined( CYGPKG_UITRON_FLAGS ) && \
77 (CYGNUM_UITRON_FLAGS >= 3) && \
78 (CYGNUM_UITRON_FLAGS < 90) && \
79 ( !defined(CYGPKG_UITRON_FLAGS_CREATE_DELETE) || \
80 CYGNUM_UITRON_FLAGS_INITIALLY >= 3 ) && \
81 \
82 /* test configuration for enough message boxes */ \
83 defined( CYGPKG_UITRON_MBOXES ) && \
84 (CYGNUM_UITRON_MBOXES >= 3) && \
85 (CYGNUM_UITRON_MBOXES < 90) && \
86 ( !defined(CYGPKG_UITRON_MBOXES_CREATE_DELETE) || \
87 CYGNUM_UITRON_MBOXES_INITIALLY >= 3 ) && \
88 \
89 /* the end of the large #if statement */ \
90 1
91
92 // ============================ END ============================
93
94
95
96 #include <cyg/compat/uitron/uit_func.h> // uITRON
97
98 externC void
99 cyg_package_start( void )
100 {
101 CYG_TEST_INIT();
102 CYG_TEST_INFO( "Calling cyg_uitron_start()" );
103 cyg_uitron_start();
104 }
105
106 volatile int intercount = 0;
107 UINT scratch;
108 T_MSG *t_msg = (T_MSG *)&scratch;
109 T_MSG *msg;
110 VP vp;
111
112 T_CSEM t_csem = { NULL, 0, 0 };
113 T_CMBX t_cmbx = { NULL, 0 };
114 T_CFLG t_cflg = { NULL, 0, 0 };
115 T_RSEM t_rsem;
116 T_RMBX t_rmbx;
117 T_RFLG t_rflg;
118
119
120 extern "C" {
121 void task1( unsigned int arg );
122 void task2( unsigned int arg );
123 void task3( unsigned int arg );
124 void task4( unsigned int arg );
125 }
126
127 void task1( unsigned int arg )
128 {
129 ER ercd;
130 int tests = 0;
131
132 CYG_TEST_INFO( "Task 1 running" );
133
134 ercd = dis_dsp();
135 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
136 ercd = sta_tsk( 2, 22222 );
137 CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" );
138 ercd = chg_pri( 2, 5 );
139 CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" );
140 ercd = ena_dsp();
141 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
142 ercd = dly_tsk( 10 );
143 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
144
145 #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
146 tests++;
147 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
148 ercd = del_sem( -6 );
149 CYG_TEST_CHECK( E_ID == ercd, "del_sem bad ercd !E_ID" );
150 ercd = del_sem( 99 );
151 CYG_TEST_CHECK( E_ID == ercd, "del_sem bad ercd !E_ID" );
152 ercd = cre_sem( -6, &t_csem );
153 CYG_TEST_CHECK( E_ID == ercd, "cre_sem bad ercd !E_ID" );
154 ercd = cre_sem( 99, &t_csem );
155 CYG_TEST_CHECK( E_ID == ercd, "cre_sem bad ercd !E_ID" );
156 #endif // we can test bad param error returns
157 // try a pre-existing object
158 ercd = cre_sem( 3, &t_csem );
159 CYG_TEST_CHECK( E_OBJ == ercd, "cre_sem bad ercd !E_OBJ" );
160 // delete it so we can play
161 ercd = del_sem( 3 );
162 CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );
163 // check it is deleted
164 ercd = sig_sem( 3 );
165 CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
166 ercd = preq_sem( 3 );
167 CYG_TEST_CHECK( E_NOEXS == ercd, "preq_sem bad ercd !E_NOEXS" );
168 ercd = twai_sem( 3, 10 );
169 CYG_TEST_CHECK( E_NOEXS == ercd, "twai_sem bad ercd !E_NOEXS" );
170 ercd = wai_sem( 3 );
171 CYG_TEST_CHECK( E_NOEXS == ercd, "wai_sem bad ercd !E_NOEXS" );
172 ercd = ref_sem( &t_rsem, 3 );
173 CYG_TEST_CHECK( E_NOEXS == ercd, "ref_sem bad ercd !E_NOEXS" );
174 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
175 // now try creating it (badly)
176 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
177 ercd = cre_sem( 3, NULL );
178 CYG_TEST_CHECK( E_PAR == ercd, "cre_sem bad ercd !E_PAR" );
179 #endif
180 t_csem.sematr = 0xfff;
181 ercd = cre_sem( 3, &t_csem );
182 CYG_TEST_CHECK( E_RSATR == ercd, "cre_sem bad ercd !E_RSATR" );
183 t_csem.sematr = 0;
184 #endif // we can test bad param error returns
185 ercd = cre_sem( 3, &t_csem );
186 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
187 // and check we can use it
188 ercd = sig_sem( 3 );
189 CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" );
190 ercd = wai_sem( 3 );
191 CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" );
192 ercd = preq_sem( 3 );
193 CYG_TEST_CHECK( E_TMOUT == ercd, "preq_sem bad ercd !E_TMOUT" );
194 ercd = twai_sem( 3, 2 );
195 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_sem bad ercd !E_TMOUT" );
196 ercd = ref_sem( &t_rsem, 3 );
197 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
198
199 // now wait while task 2 deletes the wait objects
200 ercd = wup_tsk( 2 );
201 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
202 ercd = wai_sem( 1 );
203 CYG_TEST_CHECK( E_DLT == ercd, "wai_sem bad ercd !E_DLT" );
204 ercd = wup_tsk( 2 );
205 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
206 ercd = twai_sem( 2, 20 );
207 CYG_TEST_CHECK( E_DLT == ercd, "twai_sem bad ercd !E_DLT" );
208
209 // check they are deleted
210 ercd = sig_sem( 1 );
211 CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
212 ercd = sig_sem( 2 );
213 CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
214 // re-create and do it again
215 ercd = cre_sem( 1, &t_csem );
216 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
217 ercd = cre_sem( 2, &t_csem );
218 CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
219
220 // now wait while task 2 deletes the wait objects again
221 ercd = wup_tsk( 2 );
222 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
223 ercd = wai_sem( 1 );
224 CYG_TEST_CHECK( E_DLT == ercd, "wai_sem bad ercd !E_DLT" );
225 ercd = wup_tsk( 2 );
226 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
227 ercd = twai_sem( 2, 20 );
228 CYG_TEST_CHECK( E_DLT == ercd, "twai_sem bad ercd !E_DLT" );
229
230 // check they are deleted
231 ercd = sig_sem( 1 );
232 CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
233 ercd = sig_sem( 2 );
234 CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
235
236 CYG_TEST_PASS("create/delete semaphores");
237 #endif // CYGPKG_UITRON_SEMAS_CREATE_DELETE
238
239
240 #ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
241 tests++;
242 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
243 ercd = del_flg( -6 );
244 CYG_TEST_CHECK( E_ID == ercd, "del_flg bad ercd !E_ID" );
245 ercd = del_flg( 99 );
246 CYG_TEST_CHECK( E_ID == ercd, "del_flg bad ercd !E_ID" );
247 ercd = cre_flg( -6, &t_cflg );
248 CYG_TEST_CHECK( E_ID == ercd, "cre_flg bad ercd !E_ID" );
249 ercd = cre_flg( 99, &t_cflg );
250 CYG_TEST_CHECK( E_ID == ercd, "cre_flg bad ercd !E_ID" );
251 #endif // we can test bad param error returns
252 // try a pre-existing object
253 ercd = cre_flg( 3, &t_cflg );
254 CYG_TEST_CHECK( E_OBJ == ercd, "cre_flg bad ercd !E_OBJ" );
255 // delete it so we can play
256 ercd = del_flg( 3 );
257 CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
258 // check it is deleted
259 ercd = set_flg( 3, 0x6789 );
260 CYG_TEST_CHECK( E_NOEXS == ercd, "set_flg bad ercd !E_NOEXS" );
261 ercd = clr_flg( 3, 0x9876 );
262 CYG_TEST_CHECK( E_NOEXS == ercd, "clr_flg bad ercd !E_NOEXS" );
263 ercd = pol_flg( &scratch, 3, 0xdddd, TWF_ANDW );
264 CYG_TEST_CHECK( E_NOEXS == ercd, "pol_flg bad ercd !E_NOEXS" );
265 ercd = twai_flg( &scratch, 3, 0x4444, TWF_ORW, 10 );
266 CYG_TEST_CHECK( E_NOEXS == ercd, "twai_flg bad ercd !E_NOEXS" );
267 ercd = wai_flg( &scratch, 3, 0xbbbb, TWF_ANDW | TWF_CLR );
268 CYG_TEST_CHECK( E_NOEXS == ercd, "wai_flg bad ercd !E_NOEXS" );
269 ercd = ref_flg( &t_rflg, 3 );
270 CYG_TEST_CHECK( E_NOEXS == ercd, "ref_flg bad ercd !E_NOEXS" );
271 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
272 // now try creating it (badly)
273 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
274 ercd = cre_flg( 3, NULL );
275 CYG_TEST_CHECK( E_PAR == ercd, "cre_flg bad ercd !E_PAR" );
276 #endif
277 t_cflg.flgatr = 0xfff;
278 ercd = cre_flg( 3, &t_cflg );
279 CYG_TEST_CHECK( E_RSATR == ercd, "cre_flg bad ercd !E_RSATR" );
280 #endif // we can test bad param error returns
281 // now create it well
282 t_cflg.flgatr = 0;
283 t_cflg.iflgptn = 0;
284 ercd = cre_flg( 3, &t_cflg );
285 CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );
286 // and check we can use it
287 ercd = clr_flg( 3, 0x7256 );
288 CYG_TEST_CHECK( E_OK == ercd, "clr_flg bad ercd" );
289 ercd = set_flg( 3, 0xff );
290 CYG_TEST_CHECK( E_OK == ercd, "set_flg bad ercd" );
291 ercd = wai_flg( &scratch, 3, 0xaa, TWF_ANDW | TWF_CLR );
292 CYG_TEST_CHECK( E_OK == ercd, "wai_flg bad ercd" );
293 ercd = pol_flg( &scratch, 3, 0xaa, TWF_ANDW | TWF_CLR );
294 CYG_TEST_CHECK( E_TMOUT == ercd, "pol_flg bad ercd !E_TMOUT" );
295 ercd = twai_flg( &scratch, 3, 0xaa, TWF_ANDW | TWF_CLR, 2 );
296 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_flg bad ercd !E_TMOUT" );
297 ercd = ref_flg( &t_rflg, 3 );
298 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
299 CYG_TEST_CHECK( 0 == t_rflg.flgptn, "ref_flg bad ercd" );
300 // now create it again with a preset pattern and check that we can
301 // detect that pattern:
302 ercd = del_flg( 3 );
303 CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
304 t_cflg.flgatr = 0;
305 t_cflg.iflgptn = 0x1234;
306 ercd = cre_flg( 3, &t_cflg );
307 CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );
308 // and check we can use it
309 ercd = wai_flg( &scratch, 3, 0x1200, TWF_ANDW );
310 CYG_TEST_CHECK( E_OK == ercd, "wai_flg bad ercd" );
311 ercd = pol_flg( &scratch, 3, 0x0034, TWF_ANDW );
312 CYG_TEST_CHECK( E_OK == ercd, "pol_flg bad ercd" );
313 ercd = twai_flg( &scratch, 3, 0x1004, TWF_ANDW, 10 );
314 CYG_TEST_CHECK( E_OK == ercd, "twai_flg bad ercd" );
315 ercd = pol_flg( &scratch, 3, 0xffedcb, TWF_ORW );
316 CYG_TEST_CHECK( E_TMOUT == ercd, "pol_flg bad ercd !E_TMOUT" );
317 ercd = ref_flg( &t_rflg, 3 );
318 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
319 CYG_TEST_CHECK( 0x1234 == t_rflg.flgptn, "ref_flg bad ercd" );
320 ercd = clr_flg( 3, 0 );
321 ercd = ref_flg( &t_rflg, 3 );
322 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
323 CYG_TEST_CHECK( 0 == t_rflg.flgptn, "ref_flg bad ercd" );
324
325 // now wait while task 2 deletes the wait objects
326 ercd = wup_tsk( 2 );
327 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
328 ercd = wai_flg( &scratch, 1, 0xaa, TWF_ANDW );
329 CYG_TEST_CHECK( E_DLT == ercd, "wai_flg bad ercd !E_DLT" );
330 ercd = wup_tsk( 2 );
331 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
332 ercd = twai_flg( &scratch, 2, 0x55, TWF_ANDW, 20 );
333 CYG_TEST_CHECK( E_DLT == ercd, "twai_flg bad ercd !E_DLT" );
334
335 // check they are deleted
336 ercd = set_flg( 1, 0x22 );
337 CYG_TEST_CHECK( E_NOEXS == ercd, "set_flg bad ercd !E_NOEXS" );
338 ercd = clr_flg( 2, 0xdd );
339 CYG_TEST_CHECK( E_NOEXS == ercd, "clr_flg bad ercd !E_NOEXS" );
340 // re-create and do it again
341 t_cflg.iflgptn = 0x5555;
342 ercd = cre_flg( 1, &t_cflg );
343 CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );
344 t_cflg.iflgptn = 0;
345 ercd = cre_flg( 2, &t_cflg );
346 CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );
347
348 // now wait while task 2 deletes the wait objects again
349 ercd = wup_tsk( 2 );
350 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
351 ercd = wai_flg( &scratch, 1, 0xaaaa, TWF_ORW | TWF_CLR );
352 CYG_TEST_CHECK( E_DLT == ercd, "wai_flg bad ercd !E_DLT" );
353 ercd = wup_tsk( 2 );
354 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
355 ercd = twai_flg( &scratch, 2, 0xffff, TWF_ORW, 20 );
356 CYG_TEST_CHECK( E_DLT == ercd, "twai_flg bad ercd !E_DLT" );
357
358 // check they are deleted
359 ercd = clr_flg( 1, 0xd00d );
360 CYG_TEST_CHECK( E_NOEXS == ercd, "clr_flg bad ercd !E_NOEXS" );
361 ercd = set_flg( 2, 0xfff00 );
362 CYG_TEST_CHECK( E_NOEXS == ercd, "set_flg bad ercd !E_NOEXS" );
363
364 CYG_TEST_PASS("create/delete flags");
365 #endif // CYGPKG_UITRON_FLAGS_CREATE_DELETE
366
367 #ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
368 tests++;
369 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
370 ercd = del_mbx( -6 );
371 CYG_TEST_CHECK( E_ID == ercd, "del_mbx bad ercd !E_ID" );
372 ercd = del_mbx( 99 );
373 CYG_TEST_CHECK( E_ID == ercd, "del_mbx bad ercd !E_ID" );
374 ercd = cre_mbx( -6, &t_cmbx );
375 CYG_TEST_CHECK( E_ID == ercd, "cre_mbx bad ercd !E_ID" );
376 ercd = cre_mbx( 99, &t_cmbx );
377 CYG_TEST_CHECK( E_ID == ercd, "cre_mbx bad ercd !E_ID" );
378 #endif // we can test bad param error returns
379 // try a pre-existing object
380 ercd = cre_mbx( 3, &t_cmbx );
381 CYG_TEST_CHECK( E_OBJ == ercd, "cre_mbx bad ercd !E_OBJ" );
382 // delete it so we can play
383 ercd = del_mbx( 3 );
384 CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );
385 // check it is deleted
386 ercd = snd_msg( 3, t_msg );
387 CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
388 ercd = rcv_msg( &msg, 3 );
389 CYG_TEST_CHECK( E_NOEXS == ercd, "rcv_msg bad ercd !E_NOEXS" );
390 ercd = trcv_msg( &msg, 3, 10 );
391 CYG_TEST_CHECK( E_NOEXS == ercd, "trcv_msg bad ercd !E_NOEXS" );
392 ercd = prcv_msg( &msg, 3 );
393 CYG_TEST_CHECK( E_NOEXS == ercd, "prcv_msg bad ercd !E_NOEXS" );
394 ercd = ref_mbx( &t_rmbx, 3 );
395 CYG_TEST_CHECK( E_NOEXS == ercd, "ref_mbx bad ercd !E_NOEXS" );
396 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
397 // now try creating it (badly)
398 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
399 ercd = cre_mbx( 3, NULL );
400 CYG_TEST_CHECK( E_PAR == ercd, "cre_mbx bad ercd !E_PAR" );
401 #endif
402 t_cmbx.mbxatr = 0xfff;
403 ercd = cre_mbx( 3, &t_cmbx );
404 CYG_TEST_CHECK( E_RSATR == ercd, "cre_mbx bad ercd !E_RSATR" );
405 t_cmbx.mbxatr = 0;
406 #endif // we can test bad param error returns
407 ercd = cre_mbx( 3, &t_cmbx );
408 CYG_TEST_CHECK( E_OK == ercd, "cre_mbx bad ercd" );
409 // and check we can use it
410 ercd = snd_msg( 3, t_msg );
411 CYG_TEST_CHECK( E_OK == ercd, "snd_msg bad ercd" );
412 ercd = rcv_msg( &msg, 3 );
413 CYG_TEST_CHECK( E_OK == ercd, "rcv_msg bad ercd" );
414 ercd = trcv_msg( &msg, 3, 2 );
415 CYG_TEST_CHECK( E_TMOUT == ercd, "trcv_msg bad ercd !E_TMOUT" );
416 ercd = prcv_msg( &msg, 3 );
417 CYG_TEST_CHECK( E_TMOUT == ercd, "prcv_msg bad ercd !E_TMOUT" );
418 ercd = ref_mbx( &t_rmbx, 3 );
419 CYG_TEST_CHECK( E_OK == ercd, "ref_mbx bad ercd" );
420
421 // now wait while task 2 deletes the wait objects
422 ercd = wup_tsk( 2 );
423 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
424 ercd = rcv_msg( &msg, 1 );
425 CYG_TEST_CHECK( E_DLT == ercd, "wai_mbx bad ercd !E_DLT" );
426 ercd = wup_tsk( 2 );
427 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
428 ercd = trcv_msg( &msg, 2, 20 );
429 CYG_TEST_CHECK( E_DLT == ercd, "twai_mbx bad ercd !E_DLT" );
430
431 // check they are deleted
432 ercd = snd_msg( 1, t_msg );
433 CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
434 ercd = snd_msg( 2, t_msg );
435 CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
436 // re-create and do it again
437 ercd = cre_mbx( 1, &t_cmbx );
438 CYG_TEST_CHECK( E_OK == ercd, "cre_mbx bad ercd" );
439 ercd = cre_mbx( 2, &t_cmbx );
440 CYG_TEST_CHECK( E_OK == ercd, "cre_mbx bad ercd" );
441
442 // now wait while task 2 deletes the wait objects again
443 ercd = wup_tsk( 2 );
444 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
445 ercd = rcv_msg( &msg, 1 );
446 CYG_TEST_CHECK( E_DLT == ercd, "wai_mbx bad ercd !E_DLT" );
447 ercd = wup_tsk( 2 );
448 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
449 ercd = trcv_msg( &msg, 2, 20 );
450 CYG_TEST_CHECK( E_DLT == ercd, "twai_mbx bad ercd !E_DLT" );
451
452 // check they are deleted
453 ercd = snd_msg( 1, t_msg );
454 CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
455 ercd = snd_msg( 2, t_msg );
456 CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
457
458 CYG_TEST_PASS("create/delete mboxes");
459 #endif // CYGPKG_UITRON_MBOXES_CREATE_DELETE
460
461 ercd = ter_tsk( 2 );
462 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
463 ercd = dly_tsk( 5 );
464 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
465
466 // all done
467 if ( 0 == tests ) {
468 CYG_TEST_PASS( "N/A: no objects have create/delete enabled" );
469 CYG_TEST_EXIT( "N/A" );
470 }
471 else {
472 CYG_TEST_EXIT( "All done" );
473 }
474 ext_tsk();
475 }
476
477
478
479 void task2( unsigned int arg )
480 {
481 ER ercd;
482 int i;
483 CYG_TEST_INFO( "Task 2 running" );
484 ercd = get_tid( &i );
485 CYG_TEST_CHECK( E_OK == ercd, "get_tid bad ercd" );
486 CYG_TEST_CHECK( 2 == i, "tid not 2" );
487 if ( 22222 != arg )
488 CYG_TEST_FAIL( "Task 2 arg not 22222" );
489
490 ercd = slp_tsk();
491 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
492
493 #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
494 ercd = del_sem( 1 );
495 CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );
496 ercd = slp_tsk();
497 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
498 ercd = del_sem( 2 );
499 CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );
500 ercd = slp_tsk();
501 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
502 ercd = del_sem( 1 );
503 CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );
504 ercd = slp_tsk();
505 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
506 ercd = del_sem( 2 );
507 CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );
508 ercd = slp_tsk();
509 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
510 #endif // CYGPKG_UITRON_SEMAS_CREATE_DELETE
511
512 #ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
513 ercd = del_flg( 1 );
514 CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
515 ercd = slp_tsk();
516 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
517 ercd = del_flg( 2 );
518 CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
519 ercd = slp_tsk();
520 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
521 ercd = del_flg( 1 );
522 CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
523 ercd = slp_tsk();
524 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
525 ercd = del_flg( 2 );
526 CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
527 ercd = slp_tsk();
528 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
529 #endif // CYGPKG_UITRON_FLAGS_CREATE_DELETE
530
531 #ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
532 ercd = del_mbx( 1 );
533 CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );
534 ercd = slp_tsk();
535 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
536 ercd = del_mbx( 2 );
537 CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );
538 ercd = slp_tsk();
539 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
540 ercd = del_mbx( 1 );
541 CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );
542 ercd = slp_tsk();
543 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
544 ercd = del_mbx( 2 );
545 CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );
546 ercd = slp_tsk();
547 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" );
548 #endif // CYGPKG_UITRON_MBOXES_CREATE_DELETE
549
550 // we expect task2 to be killed here
551 CYG_TEST_FAIL( "Task 2 ran to completion!" );
552 }
553
554 void task3( unsigned int arg )
555 {
556 }
557
558 void task4( unsigned int arg )
559 {
560 }
561
562 #else // not enough (or too many) uITRON objects configured in
563 #define N_A_MSG "not enough uITRON objects to run test"
564 #endif // not enough (or too many) uITRON objects configured in
565 #else // not C++ and some C++ specific options enabled
566 #define N_A_MSG "C++ specific options selected but this is C"
567 #endif // not C++ and some C++ specific options enabled
568 #else // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
569 #define N_A_MSG "no CYGVAR_KERNEL_COUNTERS_CLOCK"
570 #endif // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
571 #else // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
572 #define N_A_MSG "no CYGFUN_KERNEL_THREADS_TIMER"
573 #endif // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
574 #else // ! CYGIMP_THREAD_PRIORITY - can't test without it
575 #define N_A_MSG "no CYGSEM_KERNEL_SCHED_MLQUEUE"
576 #endif // ! CYGSEM_KERNEL_SCHED_MLQUEUE - can't test without it
577 #else // ! CYGPKG_UITRON
578 #define N_A_MSG "uITRON Compatibility layer disabled"
579 #endif // CYGPKG_UITRON
580
581 #ifdef N_A_MSG
582 externC void
583 cyg_start( void )
584 {
585 CYG_TEST_INIT();
586 CYG_TEST_PASS( "N/A: " N_A_MSG );
587 CYG_TEST_EXIT( "N/A" );
588 }
589 #endif // N_A_MSG defined ie. we are N/A.
590
591 // EOF testcx6.cxx