📄 testcx2.cxx
字号:
#endif // we can test bad param error returns
ercd = ena_dsp();
CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
ercd = pget_blf( &blfptr, 2 );
CYG_TEST_CHECK( E_OK == ercd, "pget_blf bad ercd" );
ercd = rel_blf( 2, blfptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
ercd = tget_blf( &blfptr, 2, delay );
CYG_TEST_CHECK( E_OK == ercd, "tget_blf bad ercd" );
ercd = rel_blf( 2, blfptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
// consume the whole thing then do it again, expecting E_TMOUT
while ( E_OK == (ercd = pget_blf( &blfptr, 2 ) ) )
continue;
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
ercd = pget_blf( &blfptr, 2 );
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
ercd = tget_blf( &blfptr, 2, delay );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf bad ercd !E_TMOUT" );
ercd = tget_blf( &blfptr, 2, TMO_POL );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf(POL) bad ercd !E_TMOUT" );
ercd = dis_dsp();
CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
ercd = get_blf( &blfptr, 2 );
CYG_TEST_CHECK( E_CTX == ercd, "get_blf bad ercd !E_CTX" );
ercd = tget_blf( &blfptr, 2, delay );
CYG_TEST_CHECK( E_CTX == ercd, "tget_blf bad ercd !E_CTX" );
ercd = tget_blf( &blfptr, 2, TMO_FEVR );
CYG_TEST_CHECK( E_CTX == ercd, "tget_blf(FEVR) bad ercd !E_CTX" );
#endif // we can test bad param error returns
ercd = tget_blf( &blfptr, 2, TMO_POL );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf(POL) bad ercd !E_TMOUT" );
ercd = ena_dsp();
CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
ercd = pget_blf( &blfptr, 2 );
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
ercd = tget_blf( &blfptr, 2, delay );
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blf bad ercd !E_TMOUT" );
ercd = tget_blf( &blfptr, 2, TMO_POL );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blf(POL) bad ercd !E_TMOUT" );
CYG_TEST_PASS( "bad calls: rel_blf, [pt]get_blf with ena_dsp" );
// check ref_mpf with various states
ercd = ref_mpf( &mpf_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
CYG_TEST_CHECK( 0 == mpf_info.wtsk, "mpf.wtsk should be 0" );
CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
intercom = 0;
ercd = dly_tsk( delay ); // let task 2 start waiting
CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
intercom = 1;
ercd = ref_mpf( &mpf_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
CYG_TEST_CHECK( 0 != mpf_info.wtsk, "mpf.wtsk should be non0" );
CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
ercd = rel_blf( 2, blfptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blf bad ercd" );
ercd = ref_mpf( &mpf_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
CYG_TEST_CHECK( 0 == mpf_info.wtsk, "mpf.wtsk should be 0" );
#if 1
CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
#else // old, non-uITRON semantics
CYG_TEST_CHECK( 0 != mpf_info.frbcnt, "mpf.frbcnt should be non0" );
#endif
ercd = dly_tsk( delay ); // let task 2 start waiting
CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
ercd = ref_mpf( &mpf_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpf bad ercd" );
CYG_TEST_CHECK( 0 == mpf_info.wtsk, "mpf.wtsk should be 0" );
CYG_TEST_CHECK( 0 == mpf_info.frbcnt, "mpf.frbcnt should be 0" );
CYG_TEST_PASS( "good calls: rel_blf, get_blf with ref_mpf" );
// Variable block memory pools; illegal arguments
CYG_TEST_INFO( "Testing variable block memory ops" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
ercd = rel_blk( -6, blkptr );
CYG_TEST_CHECK( E_ID == ercd, "rel_blk bad ercd !E_ID" );
ercd = rel_blk( 99, blkptr );
CYG_TEST_CHECK( E_ID == ercd, "rel_blk bad ercd !E_ID" );
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
ercd = rel_blk( 2, NULL );
CYG_TEST_CHECK( E_PAR == ercd, "rel_blk bad ercd !E_PAR" );
#endif
#endif // we can test bad param error returns
ercd = rel_blk( 2, blkptr ); // it did not come from a mpl
CYG_TEST_CHECK( E_PAR == ercd, "rel_blk bad ercd !E_PAR" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
ercd = get_blk( &blkptr, -6, 100 );
CYG_TEST_CHECK( E_ID == ercd, "get_blk bad ercd !E_ID" );
ercd = get_blk( &blkptr, 99, 100 );
CYG_TEST_CHECK( E_ID == ercd, "get_blk bad ercd !E_ID" );
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
ercd = get_blk( NULL, 2, 100 );
CYG_TEST_CHECK( E_PAR == ercd, "get_blk bad ercd !E_PAR" );
#endif
ercd = pget_blk( &blkptr, -6, 100 );
CYG_TEST_CHECK( E_ID == ercd, "pget_blk bad ercd !E_ID" );
ercd = pget_blk( &blkptr, 99, 100 );
CYG_TEST_CHECK( E_ID == ercd, "pget_blk bad ercd !E_ID" );
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
ercd = pget_blk( NULL, 2, 100 );
CYG_TEST_CHECK( E_PAR == ercd, "pget_blk bad ercd !E_PAR" );
#endif
ercd = tget_blk( &blkptr, -6, 100, delay );
CYG_TEST_CHECK( E_ID == ercd, "tget_blk bad ercd !E_ID" );
ercd = tget_blk( &blkptr, 99, 100, delay );
CYG_TEST_CHECK( E_ID == ercd, "tget_blk bad ercd !E_ID" );
ercd = tget_blk( &blkptr, 2, 100, -999 );
CYG_TEST_CHECK( E_PAR == ercd, "tget_blk bad ercd !E_PAR" );
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
ercd = tget_blk( NULL, 2, 100, delay );
CYG_TEST_CHECK( E_PAR == ercd, "tget_blk bad ercd !E_PAR" );
#endif
ercd = ref_mpl( &mpl_info, -6 );
CYG_TEST_CHECK( E_ID == ercd, "ref_mpl bad ercd !E_ID" );
ercd = ref_mpl( &mpl_info, 99 );
CYG_TEST_CHECK( E_ID == ercd, "ref_mpl bad ercd !E_ID" );
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
ercd = ref_mpl( NULL, 2 );
CYG_TEST_CHECK( E_PAR == ercd, "ref_mpl bad ercd !E_PAR" );
#endif
CYG_TEST_PASS( "bad calls: rel_blk, [pt]get_blk, ref_mpl " );
#endif // we can test bad param error returns
// check the waitable functions versus dispatch disable
ercd = pget_blk( &blkptr, 2, 100 );
CYG_TEST_CHECK( E_OK == ercd, "pget_blk bad ercd" );
ercd = rel_blk( 2, blkptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
ercd = tget_blk( &blkptr, 2, 100, delay );
CYG_TEST_CHECK( E_OK == ercd, "tget_blk bad ercd" );
ercd = dis_dsp();
CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
ercd = rel_blk( 2, blkptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
ercd = get_blk( &blkptr, 2, 100 );
CYG_TEST_CHECK( E_CTX == ercd, "get_blk bad ercd !E_CTX" );
ercd = tget_blk( &blkptr, 2, 100, delay );
CYG_TEST_CHECK( E_CTX == ercd, "tget_blk bad ercd !E_CTX" );
#endif // we can test bad param error returns
ercd = ena_dsp();
CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
ercd = pget_blk( &blkptr, 2, 100 );
CYG_TEST_CHECK( E_OK == ercd, "pget_blk bad ercd" );
ercd = rel_blk( 2, blkptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
ercd = tget_blk( &blkptr, 2, 100, delay );
CYG_TEST_CHECK( E_OK == ercd, "tget_blk bad ercd" );
ercd = rel_blk( 2, blkptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
// consume the whole thing then do it again, expecting E_TMOUT
while ( E_OK == (ercd = pget_blk( &blkptr, 2, 100 ) ) )
continue;
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
ercd = pget_blk( &blkptr, 2, 100 );
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
ercd = tget_blk( &blkptr, 2, 100, delay );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk bad ercd !E_TMOUT" );
ercd = tget_blk( &blkptr, 2, 100, TMO_POL );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk(POL) bad ercd !E_TMOUT" );
ercd = dis_dsp();
CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
ercd = get_blk( &blkptr, 2, 100 );
CYG_TEST_CHECK( E_CTX == ercd, "get_blk bad ercd !E_CTX" );
ercd = tget_blk( &blkptr, 2, 100, delay );
CYG_TEST_CHECK( E_CTX == ercd, "tget_blk bad ercd !E_CTX" );
ercd = tget_blk( &blkptr, 2, 100, TMO_FEVR );
CYG_TEST_CHECK( E_CTX == ercd, "tget_blk(FEVR) bad ercd !E_CTX" );
#endif // we can test bad param error returns
ercd = tget_blk( &blkptr, 2, 100, TMO_POL );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk(POL) bad ercd !E_TMOUT" );
ercd = ena_dsp();
CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
ercd = pget_blk( &blkptr, 2, 100 );
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
ercd = tget_blk( &blkptr, 2, 100, delay );
CYG_TEST_CHECK( E_TMOUT == ercd, "pget_blk bad ercd !E_TMOUT" );
ercd = tget_blk( &blkptr, 2, 100, TMO_POL );
CYG_TEST_CHECK( E_TMOUT == ercd, "tget_blk(POL) bad ercd !E_TMOUT" );
CYG_TEST_PASS( "bad calls: rel_blk, [pt]get_blk with ena_dsp" );
// check ref_mpl with various states
ercd = ref_mpl( &mpl_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
CYG_TEST_CHECK( 0 == mpl_info.wtsk, "mpl.wtsk should be 0" );
CYG_TEST_CHECK( mpl_info.maxsz <= mpl_info.frsz,
"mpl.maxsz not < mpl.frsz" );
intercom = 0;
ercd = dly_tsk( delay ); // let task 2 start waiting
CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
intercom = 1;
ercd = ref_mpl( &mpl_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
CYG_TEST_CHECK( 0 != mpl_info.wtsk, "mpl.wtsk should be non0" );
ercd = rel_blk( 2, blkptr );
CYG_TEST_CHECK( E_OK == ercd, "rel_blk bad ercd" );
ercd = ref_mpl( &mpl_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
CYG_TEST_CHECK( 0 == mpl_info.wtsk, "mpl.wtsk should be 0" );
ercd = dly_tsk( delay ); // let task 2 start waiting
CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );
ercd = ref_mpl( &mpl_info, 2 );
CYG_TEST_CHECK( E_OK == ercd, "ref_mpl bad ercd" );
CYG_TEST_CHECK( 0 == mpl_info.wtsk, "mpl.wtsk should be 0" );
CYG_TEST_PASS( "good calls: rel_blk, get_blk with ref_mpl" );
// all done
CYG_TEST_EXIT( "All done" );
ext_tsk();
}
void task2( unsigned int arg )
{
ER ercd;
T_MSG *msgp = NULL;
UINT flgval = 0;
VP blfp = NULL;
VP blkp = NULL;
CYG_TEST_INFO( "Task 2 running" );
ercd = get_tid( &scratch );
CYG_TEST_CHECK( E_OK == ercd, "get_tid bad ercd" );
CYG_TEST_CHECK( 2 == scratch, "tid not 2" );
if ( 222 != arg )
CYG_TEST_FAIL( "Task 2 arg not 222" );
while ( intercom ) {
ercd = rot_rdq( 0 );
CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
}
ercd = wai_sem( 2 );
CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" );
while ( intercom ) {
ercd = rot_rdq( 0 );
CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
}
ercd = wai_flg( &flgval, 2, 99, TWF_ANDW );
CYG_TEST_CHECK( E_OK == ercd, "wai_flg bad ercd" );
CYG_TEST_CHECK( 99 == (99 & flgval), "flg value no good" );
while ( intercom ) {
ercd = rot_rdq( 0 );
CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
}
ercd = rcv_msg( &msgp, 2 );
CYG_TEST_CHECK( E_OK == ercd, "rcv_msg bad ercd" );
CYG_TEST_CHECK( NULL != msgp, "no msg received" );
CYG_TEST_CHECK( NADR != msgp, "no msg received" );
while ( intercom ) {
ercd = rot_rdq( 0 );
CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
}
ercd = get_blf( &blfp, 2 );
CYG_TEST_CHECK( E_OK == ercd, "get_blf bad ercd" );
CYG_TEST_CHECK( NULL != blfp, "no blf allocated" );
CYG_TEST_CHECK( NADR != blfp, "no blf allocated" );
while ( intercom ) {
ercd = rot_rdq( 0 );
CYG_TEST_CHECK( E_OK == ercd, "rot_rdq bad ercd" );
}
ercd = get_blk( &blkp, 2, 100 );
CYG_TEST_CHECK( E_OK == ercd, "get_blk bad ercd" );
CYG_TEST_CHECK( NULL != blkp, "no blk allocated" );
CYG_TEST_CHECK( NADR != blkp, "no blk allocated" );
ext_tsk();
CYG_TEST_FAIL( "Task 2 failed to exit" );
}
void task3( unsigned int arg )
{
}
void task4( unsigned int arg )
{
}
#else // not enough (or too many) uITRON objects configured in
#define N_A_MSG "not enough uITRON objects to run test"
#endif // not enough (or too many) uITRON objects configured in
#else // not C++ and some C++ specific options enabled
#define N_A_MSG "C++ specific options selected but this is C"
#endif // not C++ and some C++ specific options enabled
#else // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
#define N_A_MSG "no CYGVAR_KERNEL_COUNTERS_CLOCK "
#endif // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it
#else // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
#define N_A_MSG "no CYGFUN_KERNEL_THREADS_TIMER"
#endif // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it
#else // ! CYGIMP_THREAD_PRIORITY - can't test without it
#define N_A_MSG "no CYGSEM_KERNEL_SCHED_MLQUEUE"
#endif // ! CYGSEM_KERNEL_SCHED_MLQUEUE - can't test without it
#else // ! CYGPKG_UITRON
#define N_A_MSG "uITRON Compatibility layer disabled"
#endif // CYGPKG_UITRON
#ifdef N_A_MSG
externC void
cyg_start( void )
{
CYG_TEST_INIT();
CYG_TEST_NA( N_A_MSG );
}
#endif // N_A_MSG defined ie. we are N/A.
// EOF testcx2.cxx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -