1 //===========================================================================
5 // uITRON "C" test program two
7 //===========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //===========================================================================
41 //#####DESCRIPTIONBEGIN####
46 // Purpose: uITRON API testing
49 //####DESCRIPTIONEND####
51 //===========================================================================
53 #include <pkgconf/uitron.h> // uITRON setup CYGNUM_UITRON_SEMAS
54 // CYGPKG_UITRON et al
55 #include <cyg/infra/testcase.h> // testing infrastructure
57 #ifdef CYGPKG_UITRON // we DO want the uITRON package
59 #ifdef CYGSEM_KERNEL_SCHED_MLQUEUE // we DO want prioritized threads
61 #ifdef CYGFUN_KERNEL_THREADS_TIMER // we DO want timout-able calls
63 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK // we DO want the realtime clock
65 // we're OK if it's C++ or neither of those two is defined:
66 #if defined( __cplusplus ) || \
67 (!defined( CYGIMP_UITRON_INLINE_FUNCS ) && \
68 !defined( CYGIMP_UITRON_CPP_OUTLINE_FUNCS) )
70 // =================== TEST CONFIGURATION ===================
72 /* test configuration for enough tasks */ \
73 (CYGNUM_UITRON_TASKS >= 4) && \
74 (CYGNUM_UITRON_TASKS < 90) && \
75 (CYGNUM_UITRON_START_TASKS == 1) && \
76 ( !defined(CYGPKG_UITRON_TASKS_CREATE_DELETE) || \
77 CYGNUM_UITRON_TASKS_INITIALLY >= 4 ) && \
79 /* test configuration for enough semaphores */ \
80 defined( CYGPKG_UITRON_SEMAS ) && \
81 (CYGNUM_UITRON_SEMAS >= 3) && \
82 (CYGNUM_UITRON_SEMAS < 90) && \
83 ( !defined(CYGPKG_UITRON_SEMAS_CREATE_DELETE) || \
84 CYGNUM_UITRON_SEMAS_INITIALLY >= 3 ) && \
86 /* test configuration for enough flag objects */ \
87 defined( CYGPKG_UITRON_FLAGS ) && \
88 (CYGNUM_UITRON_FLAGS >= 3) && \
89 (CYGNUM_UITRON_FLAGS < 90) && \
90 ( !defined(CYGPKG_UITRON_FLAGS_CREATE_DELETE) || \
91 CYGNUM_UITRON_FLAGS_INITIALLY >= 3 ) && \
93 /* test configuration for enough message boxes */ \
94 defined( CYGPKG_UITRON_MBOXES ) && \
95 (CYGNUM_UITRON_MBOXES >= 3) && \
96 (CYGNUM_UITRON_MBOXES < 90) && \
97 ( !defined(CYGPKG_UITRON_MBOXES_CREATE_DELETE) || \
98 CYGNUM_UITRON_MBOXES_INITIALLY >= 3 ) && \
100 /* test configuration for enough fixed memory pools */ \
101 defined( CYGPKG_UITRON_MEMPOOLFIXED ) && \
102 (CYGNUM_UITRON_MEMPOOLFIXED >= 3) && \
103 (CYGNUM_UITRON_MEMPOOLFIXED < 90) && \
104 ( !defined(CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE) || \
105 CYGNUM_UITRON_MEMPOOLFIXED_INITIALLY >= 3 ) && \
107 /* test configuration for enough variable mempools */ \
108 defined( CYGPKG_UITRON_MEMPOOLVAR ) && \
109 (CYGNUM_UITRON_MEMPOOLVAR >= 3) && \
110 (CYGNUM_UITRON_MEMPOOLVAR < 90) && \
111 ( !defined(CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE) || \
112 CYGNUM_UITRON_MEMPOOLVAR_INITIALLY >= 3 ) && \
114 /* the end of the large #if statement */ \
117 // ============================ END ============================
121 #include <cyg/compat/uitron/uit_func.h> // uITRON
124 cyg_package_start( void )
127 CYG_TEST_INFO( "Calling cyg_uitron_start()" );
135 void task1( unsigned int arg )
145 static char foo[] = "Test message";
146 T_MSG *msgptr = (T_MSG *)foo;
152 if (cyg_test_is_simulator)
155 CYG_TEST_INFO( "Task 1 running" );
156 ercd = get_tid( &scratch );
157 CYG_TEST_CHECK( E_OK == ercd, "get_tid bad ercd" );
158 CYG_TEST_CHECK( 1 == scratch, "tid not 1" );
160 // start a lower prio task to interact with
162 ercd = sta_tsk( 2, 222 );
163 CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" );
164 ercd = dly_tsk( delay );
165 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
167 // Semaphores; all the illegal argument combinations first
168 CYG_TEST_INFO( "Testing semaphore ops" );
169 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
170 ercd = sig_sem( -6 );
171 CYG_TEST_CHECK( E_ID == ercd, "sig_sem bad ercd !E_ID" );
172 ercd = sig_sem( 99 );
173 CYG_TEST_CHECK( E_ID == ercd, "sig_sem bad ercd !E_ID" );
174 ercd = wai_sem( -6 );
175 CYG_TEST_CHECK( E_ID == ercd, "wai_sem bad ercd !E_ID" );
176 ercd = wai_sem( 99 );
177 CYG_TEST_CHECK( E_ID == ercd, "wai_sem bad ercd !E_ID" );
178 ercd = preq_sem( -6 );
179 CYG_TEST_CHECK( E_ID == ercd, "preq_sem bad ercd !E_ID" );
180 ercd = preq_sem( 99 );
181 CYG_TEST_CHECK( E_ID == ercd, "preq_sem bad ercd !E_ID" );
182 ercd = twai_sem( -6, delay );
183 CYG_TEST_CHECK( E_ID == ercd, "twai_sem bad ercd !E_ID" );
184 ercd = twai_sem( 99, delay );
185 CYG_TEST_CHECK( E_ID == ercd, "twai_sem bad ercd !E_ID" );
186 ercd = twai_sem( 2, -999 );
187 CYG_TEST_CHECK( E_PAR == ercd, "twai_sem bad ercd !E_PAR" );
188 ercd = ref_sem( &sem_info, -6 );
189 CYG_TEST_CHECK( E_ID == ercd, "ref_sem bad ercd !E_ID" );
190 ercd = ref_sem( &sem_info, 99 );
191 CYG_TEST_CHECK( E_ID == ercd, "ref_sem bad ercd !E_ID" );
192 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
193 ercd = ref_sem( NULL, 2 );
194 CYG_TEST_CHECK( E_PAR == ercd, "ref_sem bad ercd !E_PAR" );
196 ercd = ref_sem( NADR, 2 );
197 CYG_TEST_CHECK( E_PAR == ercd, "ref_sem bad ercd !E_PAR" );
198 CYG_TEST_PASS( "bad calls: sig_sem, [t]wai_sem, preq_sem, ref_sem" );
199 #endif // we can test bad param error returns
201 // check the waitable functions versus dispatch disable
202 ercd = preq_sem( 2 );
203 CYG_TEST_CHECK( E_TMOUT == ercd, "preq_sem bad ercd !E_TMOUT" );
204 ercd = twai_sem( 2, delay );
205 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_sem bad ercd !E_TMOUT" );
206 ercd = twai_sem( 2, TMO_POL );
207 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_sem(POL) bad ercd !E_TMOUT" );
209 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
210 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
212 CYG_TEST_CHECK( E_CTX == ercd, "wai_sem bad ercd !E_CTX" );
213 ercd = twai_sem( 2, delay );
214 CYG_TEST_CHECK( E_CTX == ercd, "twai_sem bad ercd !E_CTX" );
215 ercd = twai_sem( 2, TMO_FEVR );
216 CYG_TEST_CHECK( E_CTX == ercd, "twai_sem(FEVR) bad ercd !E_CTX" );
217 #endif // we can test bad param error returns
218 ercd = twai_sem( 2, TMO_POL );
219 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_sem(POL) bad ercd !E_TMOUT" );
220 ercd = preq_sem( 2 );
221 CYG_TEST_CHECK( E_TMOUT == ercd, "preq_sem bad ercd !E_TMOUT" );
223 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
224 ercd = preq_sem( 2 );
225 CYG_TEST_CHECK( E_TMOUT == ercd, "preq_sem bad ercd !E_TMOUT" );
226 ercd = twai_sem( 2, delay );
227 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_sem bad ercd !E_TMOUT" );
228 ercd = twai_sem( 2, TMO_POL );
229 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_sem(POL) bad ercd !E_TMOUT" );
230 CYG_TEST_PASS( "bad calls: wai_sem, twai_sem with dis_dsp" );
232 // check ref_sem with various states
233 ercd = ref_sem( &sem_info, 2 );
234 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
235 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
236 CYG_TEST_CHECK( 0 == sem_info.semcnt, "semcnt should be 0" );
238 CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" );
239 ercd = ref_sem( &sem_info, 2 );
240 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
241 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
242 CYG_TEST_CHECK( 1 == sem_info.semcnt, "semcnt should be 1" );
243 ercd = preq_sem( 2 );
244 CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" );
245 ercd = ref_sem( &sem_info, 2 );
246 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
247 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
248 CYG_TEST_CHECK( 0 == sem_info.semcnt, "semcnt should be 0" );
249 ercd = ref_sem( &sem_info, 2 );
250 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
251 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
252 CYG_TEST_CHECK( 0 == sem_info.semcnt, "semcnt should be 0" );
254 CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" );
256 CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" );
257 ercd = ref_sem( &sem_info, 2 );
258 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
259 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
260 CYG_TEST_CHECK( 2 == sem_info.semcnt, "semcnt should be 2" );
262 CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" );
263 ercd = ref_sem( &sem_info, 2 );
264 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
265 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
266 CYG_TEST_CHECK( 1 == sem_info.semcnt, "semcnt should be 1" );
267 ercd = twai_sem( 2, delay );
268 CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" );
269 ercd = ref_sem( &sem_info, 2 );
270 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
271 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
272 CYG_TEST_CHECK( 0 == sem_info.semcnt, "semcnt should be 0" );
274 ercd = dly_tsk( delay );
275 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
277 ercd = ref_sem( &sem_info, 2 );
278 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
279 CYG_TEST_CHECK( 0 != sem_info.wtsk, "sem.wtsk should be non0" );
280 CYG_TEST_CHECK( 0 == sem_info.semcnt, "semcnt should be 0" );
282 CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" );
283 ercd = ref_sem( &sem_info, 2 );
284 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
285 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be non0" );
287 CYG_TEST_CHECK( 0 == sem_info.semcnt, "semcnt should be 0" );
288 #else // old, non-uITRON semantics
289 CYG_TEST_CHECK( 1 == sem_info.semcnt, "semcnt should be 1" );
291 ercd = dly_tsk( delay ); // let task 2 pick up the signal
292 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
293 ercd = ref_sem( &sem_info, 2 );
294 CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );
295 CYG_TEST_CHECK( 0 == sem_info.wtsk, "sem.wtsk should be 0" );
296 CYG_TEST_CHECK( 0 == sem_info.semcnt, "semcnt should be 0" );
297 CYG_TEST_PASS( "good calls: sig_sem, [t]wai,preq_sem with ref_sem" );
299 // Flags; all the illegal argument combinations first
300 CYG_TEST_INFO( "Testing flag ops" );
301 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
302 ercd = set_flg( -6, 1 );
303 CYG_TEST_CHECK( E_ID == ercd, "set_flg bad ercd !E_ID" );
304 ercd = set_flg( 99, 1 );
305 CYG_TEST_CHECK( E_ID == ercd, "set_flg bad ercd !E_ID" );
306 ercd = clr_flg( -6, 1 );
307 CYG_TEST_CHECK( E_ID == ercd, "clr_flg bad ercd !E_ID" );
308 ercd = clr_flg( 99, 1 );
309 CYG_TEST_CHECK( E_ID == ercd, "sig_flg bad ercd !E_ID" );
310 ercd = wai_flg( &flagptn, -6, 7, TWF_ANDW );
311 CYG_TEST_CHECK( E_ID == ercd, "wai_flg bad ercd !E_ID" );
312 ercd = wai_flg( &flagptn, 99, 7, TWF_ANDW );
313 CYG_TEST_CHECK( E_ID == ercd, "wai_flg bad ercd !E_ID" );
314 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
315 ercd = wai_flg( NULL, 2, 7, TWF_ANDW );
316 CYG_TEST_CHECK( E_PAR == ercd, "wai_flg bad ercd !E_PAR" );
318 ercd = wai_flg( NADR, 2, 7, TWF_ANDW );
319 CYG_TEST_CHECK( E_PAR == ercd, "wai_flg bad ercd !E_PAR" );
320 ercd = wai_flg( &flagptn, 2, 7, 34657 );
321 CYG_TEST_CHECK( E_PAR == ercd, "wai_flg bad ercd !E_PAR" );
322 ercd = wai_flg( &flagptn, 2, 0, TWF_ANDW );
323 CYG_TEST_CHECK( E_PAR == ercd, "wai_flg bad ercd !E_PAR" );
324 ercd = pol_flg( &flagptn, -6, 7, TWF_ANDW );
325 CYG_TEST_CHECK( E_ID == ercd, "pol_flg bad ercd !E_ID" );
326 ercd = pol_flg( &flagptn, 99, 7, TWF_ANDW );
327 CYG_TEST_CHECK( E_ID == ercd, "pol_flg bad ercd !E_ID" );
328 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
329 ercd = pol_flg( NULL, 2, 7, TWF_ANDW );
330 CYG_TEST_CHECK( E_PAR == ercd, "pol_flg bad ercd !E_PAR" );
332 ercd = pol_flg( NADR, 2, 7, TWF_ANDW );
333 CYG_TEST_CHECK( E_PAR == ercd, "pol_flg bad ercd !E_PAR" );
334 ercd = pol_flg( &flagptn, 2, 7, 34657 );
335 CYG_TEST_CHECK( E_PAR == ercd, "pol_flg bad ercd !E_PAR" );
336 ercd = pol_flg( &flagptn, 2, 0, TWF_ANDW );
337 CYG_TEST_CHECK( E_PAR == ercd, "pol_flg bad ercd !E_PAR" );
338 ercd = twai_flg( &flagptn, -6, 7, TWF_ANDW, delay );
339 CYG_TEST_CHECK( E_ID == ercd, "twai_flg bad ercd !E_ID" );
340 ercd = twai_flg( &flagptn, 99, 7, TWF_ANDW, delay );
341 CYG_TEST_CHECK( E_ID == ercd, "twai_flg bad ercd !E_ID" );
342 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
343 ercd = twai_flg( NULL, 2, 7, TWF_ANDW, delay );
344 CYG_TEST_CHECK( E_PAR == ercd, "twai_flg bad ercd !E_PAR" );
346 ercd = twai_flg( NADR, 2, 7, TWF_ANDW, delay );
347 CYG_TEST_CHECK( E_PAR == ercd, "twai_flg bad ercd !E_PAR" );
348 ercd = twai_flg( &flagptn, 2, 7, 34657, delay );
349 CYG_TEST_CHECK( E_PAR == ercd, "twai_flg bad ercd !E_PAR" );
350 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, -999 );
351 CYG_TEST_CHECK( E_PAR == ercd, "twai_flg bad ercd !E_PAR" );
352 ercd = twai_flg( &flagptn, 2, 0, TWF_ANDW, delay );
353 CYG_TEST_CHECK( E_PAR == ercd, "twai_flg bad ercd !E_PAR" );
354 ercd = ref_flg( &flg_info, -6 );
355 CYG_TEST_CHECK( E_ID == ercd, "ref_flg bad ercd !E_ID" );
356 ercd = ref_flg( &flg_info, 99 );
357 CYG_TEST_CHECK( E_ID == ercd, "ref_flg bad ercd !E_ID" );
358 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
359 ercd = ref_flg( NULL, 2 );
360 CYG_TEST_CHECK( E_PAR == ercd, "ref_flg bad ercd !E_PAR" );
362 ercd = ref_flg( NADR, 2 );
363 CYG_TEST_CHECK( E_PAR == ercd, "ref_flg bad ercd !E_PAR" );
364 CYG_TEST_PASS( "bad calls: set_flg, clr_flg, [t]wai,pol_flg, ref_flg" );
365 #endif // we can test bad param error returns
367 // check the waitable functions versus dispatch disable
368 ercd = pol_flg( &flagptn, 2, 7, TWF_ANDW );
369 CYG_TEST_CHECK( E_TMOUT == ercd, "pol_flg bad ercd !E_TMOUT" );
370 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, delay );
371 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_flg bad ercd !E_TMOUT" );
372 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, TMO_POL );
373 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_flg(POL) bad ercd !E_TMOUT" );
375 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
376 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
377 ercd = wai_flg( &flagptn, 2, 7, TWF_ANDW );
378 CYG_TEST_CHECK( E_CTX == ercd, "wai_flg bad ercd !E_CTX" );
379 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, delay );
380 CYG_TEST_CHECK( E_CTX == ercd, "twai_flg bad ercd !E_CTX" );
381 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, TMO_FEVR );
382 CYG_TEST_CHECK( E_CTX == ercd, "twai_flg(FEVR) bad ercd !E_CTX" );
383 #endif // we can test bad param error returns
384 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, TMO_POL );
385 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_flg(POL) bad ercd !E_TMOUT" );
386 ercd = pol_flg( &flagptn, 2, 7, TWF_ANDW );
387 CYG_TEST_CHECK( E_TMOUT == ercd, "pol_flg bad ercd !E_TMOUT" );
389 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
390 ercd = pol_flg( &flagptn, 2, 7, TWF_ANDW );
391 CYG_TEST_CHECK( E_TMOUT == ercd, "pol_flg bad ercd !E_TMOUT" );
392 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, delay );
393 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_flg bad ercd !E_TMOUT" );
394 ercd = twai_flg( &flagptn, 2, 7, TWF_ANDW, TMO_POL );
395 CYG_TEST_CHECK( E_TMOUT == ercd, "twai_flg(POL) bad ercd !E_TMOUT" );
396 CYG_TEST_PASS( "bad calls: wai_flg, twai_flg with dis_dsp" );
398 // check ref_flg with various states
399 ercd = ref_flg( &flg_info, 2 );
400 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
401 CYG_TEST_CHECK( 0 == flg_info.wtsk, "flg.wtsk should be non0" );
402 CYG_TEST_CHECK( 0 == flg_info.flgptn, "flgptn should be 0" );
404 ercd = dly_tsk( delay ); // let task 2 start waiting
405 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
407 ercd = ref_flg( &flg_info, 2 );
408 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
409 CYG_TEST_CHECK( 0 != flg_info.wtsk, "flg.wtsk should be non0" );
410 CYG_TEST_CHECK( 0 == flg_info.flgptn, "flgptn should be 0" );
411 ercd = set_flg( 2, 0x5555 );
412 CYG_TEST_CHECK( E_OK == ercd, "sig_flg bad ercd" );
413 ercd = dly_tsk( delay );
414 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
415 ercd = ref_flg( &flg_info, 2 );
416 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
417 CYG_TEST_CHECK( 0 != flg_info.wtsk, "flg.wtsk should be non0" );
418 CYG_TEST_CHECK( 0x5555 == flg_info.flgptn, "flgptn should be 0x5555" );
419 ercd = clr_flg( 2, 0xF0F0 );
420 CYG_TEST_CHECK( E_OK == ercd, "clr_flg bad ercd" );
421 ercd = dly_tsk( delay );
422 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
423 ercd = ref_flg( &flg_info, 2 );
424 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
425 CYG_TEST_CHECK( 0 != flg_info.wtsk, "flg.wtsk should be non0" );
426 CYG_TEST_CHECK( 0x5050 == flg_info.flgptn, "flgptn should be 0x5050" );
427 ercd = set_flg( 2, 0xFFFF );
428 CYG_TEST_CHECK( E_OK == ercd, "sig_flg bad ercd" );
429 ercd = dly_tsk( delay );
430 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
431 ercd = ref_flg( &flg_info, 2 );
432 CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
433 CYG_TEST_CHECK( 0 == flg_info.wtsk, "flg.wtsk should be 0" );
434 CYG_TEST_CHECK( 0xFFFF == flg_info.flgptn, "flgptn should be 0xFFFF" );
435 CYG_TEST_PASS( "good calls: clr_flg, set_flg, wai_flg with ref_flg" );
437 // Mailboxes; all the illegal argument combinations first
438 CYG_TEST_INFO( "Testing mailbox ops" );
439 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
440 ercd = snd_msg( -6, msgptr );
441 CYG_TEST_CHECK( E_ID == ercd, "snd_msg bad ercd !E_ID" );
442 ercd = snd_msg( 99, msgptr );
443 CYG_TEST_CHECK( E_ID == ercd, "snd_msg bad ercd !E_ID" );
444 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
445 ercd = snd_msg( 2, NULL );
446 CYG_TEST_CHECK( E_PAR == ercd, "snd_msg bad ercd !E_PAR" );
448 ercd = snd_msg( 2, NADR );
449 CYG_TEST_CHECK( E_PAR == ercd, "snd_msg bad ercd !E_PAR" );
450 ercd = rcv_msg( &rxptr, -6 );
451 CYG_TEST_CHECK( E_ID == ercd, "rcv_msg bad ercd !E_ID" );
452 ercd = rcv_msg( &rxptr, 99 );
453 CYG_TEST_CHECK( E_ID == ercd, "rcv_msg bad ercd !E_ID" );
454 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
455 ercd = rcv_msg( NULL, 2 );
456 CYG_TEST_CHECK( E_PAR == ercd, "rcv_msg bad ercd !E_PAR" );
458 ercd = rcv_msg( NADR, 2 );
459 CYG_TEST_CHECK( E_PAR == ercd, "rcv_msg bad ercd !E_PAR" );
460 ercd = prcv_msg( &rxptr, -6 );
461 CYG_TEST_CHECK( E_ID == ercd, "prcv_msg bad ercd !E_ID" );
462 ercd = prcv_msg( &rxptr, 99 );
463 CYG_TEST_CHECK( E_ID == ercd, "prcv_msg bad ercd !E_ID" );
464 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
465 ercd = prcv_msg( NULL, 2 );
466 CYG_TEST_CHECK( E_PAR == ercd, "prcv_msg bad ercd !E_PAR" );
468 ercd = prcv_msg( NADR, 2 );
469 CYG_TEST_CHECK( E_PAR == ercd, "prcv_msg bad ercd !E_PAR" );
470 ercd = trcv_msg( &rxptr, -6, delay );
471 CYG_TEST_CHECK( E_ID == ercd, "trcv_msg bad ercd !E_ID" );
472 ercd = trcv_msg( &rxptr, 99, delay );
473 CYG_TEST_CHECK( E_ID == ercd, "trcv_msg bad ercd !E_ID" );
474 ercd = trcv_msg( &rxptr, 2, -999 );
475 CYG_TEST_CHECK( E_PAR == ercd, "trcv_msg bad ercd !E_PAR" );
476 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
477 ercd = trcv_msg( NULL, 2, delay );
478 CYG_TEST_CHECK( E_PAR == ercd, "trcv_msg bad ercd !E_PAR" );
480 ercd = trcv_msg( NADR, 2, delay );
481 CYG_TEST_CHECK( E_PAR == ercd, "trcv_msg bad ercd !E_PAR" );
482 ercd = ref_mbx( &mbx_info, -6 );
483 CYG_TEST_CHECK( E_ID == ercd, "ref_mbx bad ercd !E_ID" );
484 ercd = ref_mbx( &mbx_info, 99 );
485 CYG_TEST_CHECK( E_ID == ercd, "ref_mbx bad ercd !E_ID" );
486 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
487 ercd = ref_mbx( NULL, 2 );
488 CYG_TEST_CHECK( E_PAR == ercd, "ref_mbx bad ercd !E_PAR" );
490 ercd = ref_mbx( NADR, 2 );
491 CYG_TEST_CHECK( E_PAR == ercd, "ref_mbx bad ercd !E_PAR" );
492 CYG_TEST_PASS( "bad calls: snd_msg, [pt]rcv_msg, ref_mbx" );
493 #endif // we can test bad param error returns
495 // check the waitable functions versus dispatch disable
496 ercd = prcv_msg( &rxptr, 2 );
497 CYG_TEST_CHECK( E_TMOUT == ercd, "prcv_msg bad ercd !E_TMOUT" );
498 ercd = trcv_msg( &rxptr, 2, delay );
499 CYG_TEST_CHECK( E_TMOUT == ercd, "trcv_msg bad ercd !E_TMOUT" );
500 ercd = trcv_msg( &rxptr, 2, TMO_POL );
501 CYG_TEST_CHECK( E_TMOUT == ercd, "trcv_msg(POL) bad ercd !E_TMOUT" );
503 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
504 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
505 ercd = rcv_msg( &rxptr, 2 );
506 CYG_TEST_CHECK( E_CTX == ercd, "rcv_msg bad ercd !E_CTX" );
507 ercd = trcv_msg( &rxptr, 2, delay );
508 CYG_TEST_CHECK( E_CTX == ercd, "trcv_msg bad ercd !E_CTX" );
509 ercd = trcv_msg( &rxptr, 2, TMO_FEVR );
510 CYG_TEST_CHECK( E_CTX == ercd, "trcv_msg(FEVR) bad ercd !E_CTX" );
511 #endif // we can test bad param error returns
512 ercd = trcv_msg( &rxptr, 2, TMO_POL );
513 CYG_TEST_CHECK( E_TMOUT == ercd, "trcv_msg(POL) bad ercd !E_TMOUT" );
514 ercd = prcv_msg( &rxptr, 2 );
515 CYG_TEST_CHECK( E_TMOUT == ercd, "prcv_msg bad ercd !E_TMOUT" );
517 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
518 ercd = prcv_msg( &rxptr, 2 );
519 CYG_TEST_CHECK( E_TMOUT == ercd, "prcv_msg bad ercd !E_TMOUT" );
520 ercd = trcv_msg( &rxptr, 2, delay );
521 CYG_TEST_CHECK( E_TMOUT == ercd, "trcv_msg bad ercd !E_TMOUT" );
522 ercd = trcv_msg( &rxptr, 2, TMO_POL );
523 CYG_TEST_CHECK( E_TMOUT == ercd, "trcv_msg(POL) bad ercd !E_TMOUT" );
524 CYG_TEST_PASS( "bad calls: rcv_msg, trcv_msg with dis_dsp" );
526 // check ref_mbx with various states
527 ercd = ref_mbx( &mbx_info, 2 );
528 CYG_TEST_CHECK( E_OK == ercd, "ref_mbx bad ercd" );
529 CYG_TEST_CHECK( 0 == mbx_info.wtsk, "mbx.wtsk should be 0" );
530 CYG_TEST_CHECK( NADR == mbx_info.pk_msg, "mbx peek should be NADR" );
532 ercd = dly_tsk( delay ); // let task 2 start waiting
533 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
535 ercd = ref_mbx( &mbx_info, 2 );
536 CYG_TEST_CHECK( E_OK == ercd, "ref_mbx bad ercd" );
537 CYG_TEST_CHECK( 0 != mbx_info.wtsk, "mbx.wtsk should be non0" );
538 CYG_TEST_CHECK( NADR == mbx_info.pk_msg, "mbx peek should be NADR" );
539 ercd = snd_msg( 2, msgptr );
540 CYG_TEST_CHECK( E_OK == ercd, "snd_msg bad ercd" );
541 ercd = ref_mbx( &mbx_info, 2 );
542 CYG_TEST_CHECK( E_OK == ercd, "ref_mbx bad ercd" );
543 CYG_TEST_CHECK( 0 == mbx_info.wtsk, "mbx.wtsk should be 0" );
545 CYG_TEST_CHECK( NADR == mbx_info.pk_msg, "mbx peek should be NADR" );
546 #else // old, non-uITRON semantics
547 CYG_TEST_CHECK( msgptr == mbx_info.pk_msg, "mbx peek should be msgptr" );
549 ercd = dly_tsk( delay );
550 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
551 ercd = ref_mbx( &mbx_info, 2 );
552 CYG_TEST_CHECK( E_OK == ercd, "ref_mbx bad ercd" );
553 CYG_TEST_CHECK( 0 == mbx_info.wtsk, "mbx.wtsk should be 0" );
554 CYG_TEST_CHECK( NADR == mbx_info.pk_msg, "mbx peek should be NADR" );
555 // fill the message box, expect E_QOVR
556 for ( scratch = 0 ; scratch < 100 ; scratch++ ) {
557 if ( E_OK != ( ercd = snd_msg( 2, msgptr ) ) )
560 CYG_TEST_CHECK( (100 == scratch) || (E_QOVR == ercd),
561 "snd_msg bad ercd !E_QOVR/E_OK" );
562 // empty the message box, expect the right number and E_TMOUT
563 for ( ; 1 ; scratch-- ) {
564 if ( E_OK != ( ercd = prcv_msg( &rxptr, 2 ) ) )
567 CYG_TEST_CHECK( 0 == scratch, "rcv_msg count bad scratch!=0" );
568 CYG_TEST_CHECK( E_TMOUT == ercd, "rcv_msg bad ercd !E_TMOUT" );
570 CYG_TEST_PASS( "good calls: rcv_msg, snd_msg with ref_msg" );
572 // Fixed block memory pools: all the illegal argument combinations first
573 CYG_TEST_INFO( "Testing fixed block memory ops" );
574 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
575 ercd = rel_blf( -6, blfptr );
576 CYG_TEST_CHECK( E_ID == ercd, "rel_blf bad ercd !E_ID" );
577 ercd = rel_blf( 99, blfptr );
578 CYG_TEST_CHECK( E_ID == ercd, "rel_blf bad ercd !E_ID" );
579 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
580 ercd = rel_blf( 2, NULL );
581 CYG_TEST_CHECK( E_PAR == ercd, "rel_blf bad ercd !E_PAR" );
583 ercd = rel_blf( 2, NADR );
584 CYG_TEST_CHECK( E_PAR == ercd, "rel_blf bad ercd !E_PAR" );
585 #endif // we can test bad param error returns
586 ercd = rel_blf( 2, blfptr ); // it did not come from a mpf
587 CYG_TEST_CHECK( E_PAR == ercd, "rel_blf bad ercd !E_PAR" );
588 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
589 ercd = get_blf( &blfptr, -6 );
590 CYG_TEST_CHECK( E_ID == ercd, "get_blf bad ercd !E_ID" );
591 ercd = get_blf( &blfptr, 99 );
592 CYG_TEST_CHECK( E_ID == ercd, "get_blf bad ercd !E_ID" );
593 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
594 ercd = get_blf( NULL, 2 );
595 CYG_TEST_CHECK( E_PAR == ercd, "get_blf bad ercd !E_PAR" );
597 ercd = get_blf( NADR, 2 );
598 CYG_TEST_CHECK( E_PAR == ercd, "get_blf bad ercd !E_PAR" );
599 ercd = pget_blf( &blfptr, -6 );
600 CYG_TEST_CHECK( E_ID == ercd, "pget_blf bad ercd !E_ID" );
601 ercd = pget_blf( &blfptr, 99 );
602 CYG_TEST_CHECK( E_ID == ercd, "pget_blf bad ercd !E_ID" );
603 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
604 ercd = pget_blf( NULL, 2 );
605 CYG_TEST_CHECK( E_PAR == ercd, "pget_blf bad ercd !E_PAR" );
607 ercd = pget_blf( NADR, 2 );
608 CYG_TEST_CHECK( E_PAR == ercd, "pget_blf bad ercd !E_PAR" );
609 ercd = tget_blf( &blfptr, -6, delay );
610 CYG_TEST_CHECK( E_ID == ercd, "tget_blf bad ercd !E_ID" );
611 ercd = tget_blf( &blfptr, 99, delay );
612 CYG_TEST_CHECK( E_ID == ercd, "tget_blf bad ercd !E_ID" );
613 ercd = tget_blf( &blfptr, 2, -999 );
614 CYG_TEST_CHECK( E_PAR == ercd, "tget_blf bad ercd !E_PAR" );
615 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
616 ercd = tget_blf( NULL, 2, delay );
617 CYG_TEST_CHECK( E_PAR == ercd, "tget_blf bad ercd !E_PAR" );
619 ercd = tget_blf( NADR, 2, delay );
620 CYG_TEST_CHECK( E_PAR == ercd, "tget_blf bad ercd !E_PAR" );
621 ercd = ref_mpf( &mpf_info, -6 );
622 CYG_TEST_CHECK( E_ID == ercd, "ref_mpf bad ercd !E_ID" );
623 ercd = ref_mpf( &mpf_info, 99 );
624 CYG_TEST_CHECK( E_ID == ercd, "ref_mpf bad ercd !E_ID" );
625 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
626 ercd = ref_mpf( NULL, 2 );
627 CYG_TEST_CHECK( E_PAR == ercd, "ref_mpf bad ercd !E_PAR" );
629 ercd = ref_mpf( NADR, 2 );
630 CYG_TEST_CHECK( E_PAR == ercd, "ref_mpf bad ercd !E_PAR" );
631 CYG_TEST_PASS( "bad calls: rel_blf, [pt]get_blf, ref_mpf " );
632 #endif // we can test bad param error returns
634 // check the waitable functions versus dispatch disable
635 ercd = pget_blf( &blfptr, 2 );
636 CYG_TEST_CHECK( E_OK == ercd, "pget_blf bad ercd" );
637 ercd = rel_blf( 2, blfptr );
638 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
639 ercd = tget_blf( &blfptr, 2, delay );
640 CYG_TEST_CHECK( E_OK == ercd, "tget_blf bad ercd" );
642 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
643 ercd = rel_blf( 2, blfptr );
644 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
645 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
646 ercd = get_blf( &blfptr, 2 );
647 CYG_TEST_CHECK( E_CTX == ercd, "get_blf bad ercd !E_CTX" );
648 ercd = tget_blf( &blfptr, 2, delay );
649 CYG_TEST_CHECK( E_CTX == ercd, "tget_blf bad ercd !E_CTX" );
650 #endif // we can test bad param error returns
652 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
653 ercd = pget_blf( &blfptr, 2 );
654 CYG_TEST_CHECK( E_OK == ercd, "pget_blf bad ercd" );
655 ercd = rel_blf( 2, blfptr );
656 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
657 ercd = tget_blf( &blfptr, 2, delay );
658 CYG_TEST_CHECK( E_OK == ercd, "tget_blf bad ercd" );
659 ercd = rel_blf( 2, blfptr );
660 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
661 // consume the whole thing then do it again, expecting E_TMOUT
662 while ( E_OK == (ercd = pget_blf( &blfptr, 2 ) ) )
664 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
665 ercd = pget_blf( &blfptr, 2 );
666 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
667 ercd = tget_blf( &blfptr, 2, delay );
668 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf bad ercd !E_TMOUT" );
669 ercd = tget_blf( &blfptr, 2, TMO_POL );
670 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf(POL) bad ercd !E_TMOUT" );
672 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
673 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
674 ercd = get_blf( &blfptr, 2 );
675 CYG_TEST_CHECK( E_CTX == ercd, "get_blf bad ercd !E_CTX" );
676 ercd = tget_blf( &blfptr, 2, delay );
677 CYG_TEST_CHECK( E_CTX == ercd, "tget_blf bad ercd !E_CTX" );
678 ercd = tget_blf( &blfptr, 2, TMO_FEVR );
679 CYG_TEST_CHECK( E_CTX == ercd, "tget_blf(FEVR) bad ercd !E_CTX" );
680 #endif // we can test bad param error returns
681 ercd = tget_blf( &blfptr, 2, TMO_POL );
682 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf(POL) bad ercd !E_TMOUT" );
684 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
685 ercd = pget_blf( &blfptr, 2 );
686 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
687 ercd = tget_blf( &blfptr, 2, delay );
688 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
689 ercd = tget_blf( &blfptr, 2, TMO_POL );
690 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf(POL) bad ercd !E_TMOUT" );
691 CYG_TEST_PASS( "bad calls: rel_blf, [pt]get_blf with ena_dsp" );
693 // check ref_mpf with various states
694 ercd = ref_mpf( &mpf_info, 2 );
695 CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
696 CYG_TEST_CHECK( 0 == mpf_info.wtsk, "mpf.wtsk should be 0" );
697 CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
699 ercd = dly_tsk( delay ); // let task 2 start waiting
700 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
702 ercd = ref_mpf( &mpf_info, 2 );
703 CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
704 CYG_TEST_CHECK( 0 != mpf_info.wtsk, "mpf.wtsk should be non0" );
705 CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
706 ercd = rel_blf( 2, blfptr );
707 CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
708 ercd = ref_mpf( &mpf_info, 2 );
709 CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
710 CYG_TEST_CHECK( 0 == mpf_info.wtsk, "mpf.wtsk should be 0" );
712 CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
713 #else // old, non-uITRON semantics
714 CYG_TEST_CHECK( 0 != mpf_info.frbcnt, "mpf.frbcnt should be non0" );
716 ercd = dly_tsk( delay ); // let task 2 start waiting
717 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
718 ercd = ref_mpf( &mpf_info, 2 );
719 CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
720 CYG_TEST_CHECK( 0 == mpf_info.wtsk, "mpf.wtsk should be 0" );
721 CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
722 CYG_TEST_PASS( "good calls: rel_blf, get_blf with ref_mpf" );
724 // Variable block memory pools; illegal arguments
725 CYG_TEST_INFO( "Testing variable block memory ops" );
726 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
727 ercd = rel_blk( -6, blkptr );
728 CYG_TEST_CHECK( E_ID == ercd, "rel_blk bad ercd !E_ID" );
729 ercd = rel_blk( 99, blkptr );
730 CYG_TEST_CHECK( E_ID == ercd, "rel_blk bad ercd !E_ID" );
731 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
732 ercd = rel_blk( 2, NULL );
733 CYG_TEST_CHECK( E_PAR == ercd, "rel_blk bad ercd !E_PAR" );
735 ercd = rel_blk( 2, NADR );
736 CYG_TEST_CHECK( E_PAR == ercd, "rel_blk bad ercd !E_PAR" );
737 #endif // we can test bad param error returns
738 ercd = rel_blk( 2, blkptr ); // it did not come from a mpl
739 CYG_TEST_CHECK( E_PAR == ercd, "rel_blk bad ercd !E_PAR" );
740 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
741 ercd = get_blk( &blkptr, -6, 100 );
742 CYG_TEST_CHECK( E_ID == ercd, "get_blk bad ercd !E_ID" );
743 ercd = get_blk( &blkptr, 99, 100 );
744 CYG_TEST_CHECK( E_ID == ercd, "get_blk bad ercd !E_ID" );
745 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
746 ercd = get_blk( NULL, 2, 100 );
747 CYG_TEST_CHECK( E_PAR == ercd, "get_blk bad ercd !E_PAR" );
749 ercd = get_blk( NADR, 2, 100 );
750 CYG_TEST_CHECK( E_PAR == ercd, "get_blk bad ercd !E_PAR" );
751 ercd = pget_blk( &blkptr, -6, 100 );
752 CYG_TEST_CHECK( E_ID == ercd, "pget_blk bad ercd !E_ID" );
753 ercd = pget_blk( &blkptr, 99, 100 );
754 CYG_TEST_CHECK( E_ID == ercd, "pget_blk bad ercd !E_ID" );
755 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
756 ercd = pget_blk( NULL, 2, 100 );
757 CYG_TEST_CHECK( E_PAR == ercd, "pget_blk bad ercd !E_PAR" );
759 ercd = pget_blk( NADR, 2, 100 );
760 CYG_TEST_CHECK( E_PAR == ercd, "pget_blk bad ercd !E_PAR" );
761 ercd = tget_blk( &blkptr, -6, 100, delay );
762 CYG_TEST_CHECK( E_ID == ercd, "tget_blk bad ercd !E_ID" );
763 ercd = tget_blk( &blkptr, 99, 100, delay );
764 CYG_TEST_CHECK( E_ID == ercd, "tget_blk bad ercd !E_ID" );
765 ercd = tget_blk( &blkptr, 2, 100, -999 );
766 CYG_TEST_CHECK( E_PAR == ercd, "tget_blk bad ercd !E_PAR" );
767 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
768 ercd = tget_blk( NULL, 2, 100, delay );
769 CYG_TEST_CHECK( E_PAR == ercd, "tget_blk bad ercd !E_PAR" );
771 ercd = tget_blk( NADR, 2, 100, delay );
772 CYG_TEST_CHECK( E_PAR == ercd, "tget_blk bad ercd !E_PAR" );
773 ercd = ref_mpl( &mpl_info, -6 );
774 CYG_TEST_CHECK( E_ID == ercd, "ref_mpl bad ercd !E_ID" );
775 ercd = ref_mpl( &mpl_info, 99 );
776 CYG_TEST_CHECK( E_ID == ercd, "ref_mpl bad ercd !E_ID" );
777 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
778 ercd = ref_mpl( NULL, 2 );
779 CYG_TEST_CHECK( E_PAR == ercd, "ref_mpl bad ercd !E_PAR" );
781 ercd = ref_mpl( NADR, 2 );
782 CYG_TEST_CHECK( E_PAR == ercd, "ref_mpl bad ercd !E_PAR" );
783 CYG_TEST_PASS( "bad calls: rel_blk, [pt]get_blk, ref_mpl " );
784 #endif // we can test bad param error returns
786 // check the waitable functions versus dispatch disable
787 ercd = pget_blk( &blkptr, 2, 100 );
788 CYG_TEST_CHECK( E_OK == ercd, "pget_blk bad ercd" );
789 ercd = rel_blk( 2, blkptr );
790 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
791 ercd = tget_blk( &blkptr, 2, 100, delay );
792 CYG_TEST_CHECK( E_OK == ercd, "tget_blk bad ercd" );
794 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
795 ercd = rel_blk( 2, blkptr );
796 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
797 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
798 ercd = get_blk( &blkptr, 2, 100 );
799 CYG_TEST_CHECK( E_CTX == ercd, "get_blk bad ercd !E_CTX" );
800 ercd = tget_blk( &blkptr, 2, 100, delay );
801 CYG_TEST_CHECK( E_CTX == ercd, "tget_blk bad ercd !E_CTX" );
802 #endif // we can test bad param error returns
804 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
805 ercd = pget_blk( &blkptr, 2, 100 );
806 CYG_TEST_CHECK( E_OK == ercd, "pget_blk bad ercd" );
807 ercd = rel_blk( 2, blkptr );
808 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
809 ercd = tget_blk( &blkptr, 2, 100, delay );
810 CYG_TEST_CHECK( E_OK == ercd, "tget_blk bad ercd" );
811 ercd = rel_blk( 2, blkptr );
812 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
813 // consume the whole thing then do it again, expecting E_TMOUT
814 while ( E_OK == (ercd = pget_blk( &blkptr, 2, 100 ) ) )
816 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
817 ercd = pget_blk( &blkptr, 2, 100 );
818 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
819 ercd = tget_blk( &blkptr, 2, 100, delay );
820 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk bad ercd !E_TMOUT" );
821 ercd = tget_blk( &blkptr, 2, 100, TMO_POL );
822 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk(POL) bad ercd !E_TMOUT" );
824 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
825 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
826 ercd = get_blk( &blkptr, 2, 100 );
827 CYG_TEST_CHECK( E_CTX == ercd, "get_blk bad ercd !E_CTX" );
828 ercd = tget_blk( &blkptr, 2, 100, delay );
829 CYG_TEST_CHECK( E_CTX == ercd, "tget_blk bad ercd !E_CTX" );
830 ercd = tget_blk( &blkptr, 2, 100, TMO_FEVR );
831 CYG_TEST_CHECK( E_CTX == ercd, "tget_blk(FEVR) bad ercd !E_CTX" );
832 #endif // we can test bad param error returns
833 ercd = tget_blk( &blkptr, 2, 100, TMO_POL );
834 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk(POL) bad ercd !E_TMOUT" );
836 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
837 ercd = pget_blk( &blkptr, 2, 100 );
838 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
839 ercd = tget_blk( &blkptr, 2, 100, delay );
840 CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
841 ercd = tget_blk( &blkptr, 2, 100, TMO_POL );
842 CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk(POL) bad ercd !E_TMOUT" );
843 CYG_TEST_PASS( "bad calls: rel_blk, [pt]get_blk with ena_dsp" );
845 // check ref_mpl with various states
846 ercd = ref_mpl( &mpl_info, 2 );
847 CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
848 CYG_TEST_CHECK( 0 == mpl_info.wtsk, "mpl.wtsk should be 0" );
849 CYG_TEST_CHECK( mpl_info.maxsz <= mpl_info.frsz,
850 "mpl.maxsz not < mpl.frsz" );
852 ercd = dly_tsk( delay ); // let task 2 start waiting
853 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
855 ercd = ref_mpl( &mpl_info, 2 );
856 CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
857 CYG_TEST_CHECK( 0 != mpl_info.wtsk, "mpl.wtsk should be non0" );
858 ercd = rel_blk( 2, blkptr );
859 CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
860 ercd = ref_mpl( &mpl_info, 2 );
861 CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
862 CYG_TEST_CHECK( 0 == mpl_info.wtsk, "mpl.wtsk should be 0" );
863 ercd = dly_tsk( delay ); // let task 2 start waiting
864 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
865 ercd = ref_mpl( &mpl_info, 2 );
866 CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
867 CYG_TEST_CHECK( 0 == mpl_info.wtsk, "mpl.wtsk should be 0" );
868 CYG_TEST_PASS( "good calls: rel_blk, get_blk with ref_mpl" );
871 CYG_TEST_EXIT( "All done" );
877 void task2( unsigned int arg )
885 CYG_TEST_INFO( "Task 2 running" );
886 ercd = get_tid( &scratch );
887 CYG_TEST_CHECK( E_OK == ercd, "get_tid bad ercd" );
888 CYG_TEST_CHECK( 2 == scratch, "tid not 2" );
890 CYG_TEST_FAIL( "Task 2 arg not 222" );
894 CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
897 CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" );
900 CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
902 ercd = wai_flg( &flgval, 2, 99, TWF_ANDW );
903 CYG_TEST_CHECK( E_OK == ercd, "wai_flg bad ercd" );
904 CYG_TEST_CHECK( 99 == (99 & flgval), "flg value no good" );
907 CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
909 ercd = rcv_msg( &msgp, 2 );
910 CYG_TEST_CHECK( E_OK == ercd, "rcv_msg bad ercd" );
911 CYG_TEST_CHECK( NULL != msgp, "no msg received" );
912 CYG_TEST_CHECK( NADR != msgp, "no msg received" );
915 CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
917 ercd = get_blf( &blfp, 2 );
918 CYG_TEST_CHECK( E_OK == ercd, "get_blf bad ercd" );
919 CYG_TEST_CHECK( NULL != blfp, "no blf allocated" );
920 CYG_TEST_CHECK( NADR != blfp, "no blf allocated" );
923 CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
925 ercd = get_blk( &blkp, 2, 100 );
926 CYG_TEST_CHECK( E_OK == ercd, "get_blk bad ercd" );
927 CYG_TEST_CHECK( NULL != blkp, "no blk allocated" );
928 CYG_TEST_CHECK( NADR != blkp, "no blk allocated" );
931 CYG_TEST_FAIL( "Task 2 failed to exit" );
934 void task3( unsigned int arg )
938 void task4( unsigned int arg )
942 #else // not enough (or too many) uITRON objects configured in
943 #define N_A_MSG "not enough uITRON objects to run test"
944 #endif // not enough (or too many) uITRON objects configured in
945 #else // not C++ and some C++ specific options enabled
946 #define N_A_MSG "C++ specific options selected but this is C"
947 #endif // not C++ and some C++ specific options enabled
948 #else // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
949 #define N_A_MSG "no CYGVAR_KERNEL_COUNTERS_CLOCK"
950 #endif // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
951 #else // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
952 #define N_A_MSG "no CYGFUN_KERNEL_THREADS_TIMER"
953 #endif // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
954 #else // ! CYGIMP_THREAD_PRIORITY - can't test without it
955 #define N_A_MSG "no CYGSEM_KERNEL_SCHED_MLQUEUE"
956 #endif // ! CYGSEM_KERNEL_SCHED_MLQUEUE - can't test without it
957 #else // ! CYGPKG_UITRON
958 #define N_A_MSG "uITRON Compatibility layer disabled"
959 #endif // CYGPKG_UITRON
966 CYG_TEST_NA( N_A_MSG );
968 #endif // N_A_MSG defined ie. we are N/A.