validation: Improve generated test code

Move the transition map members of the test context to a dedicated
structure.  Move the transition variant pre-condition prepare, action,
and post-condition checks to a separate function to reduce the
indentation level and allow skipping of transition variants.
This commit is contained in:
Sebastian Huber
2021-08-16 12:41:04 +02:00
parent 34099baa9c
commit a93d0ce2f5
20 changed files with 1664 additions and 1316 deletions

View File

@@ -125,6 +125,19 @@ typedef enum {
RtemsBarrierReqCreate_Post_IdVar_NA RtemsBarrierReqCreate_Post_IdVar_NA
} RtemsBarrierReqCreate_Post_IdVar; } RtemsBarrierReqCreate_Post_IdVar;
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Name_NA : 1;
uint16_t Pre_Id_NA : 1;
uint16_t Pre_Class_NA : 1;
uint16_t Pre_MaxWait_NA : 1;
uint16_t Pre_Free_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Name : 2;
uint16_t Post_Class : 2;
uint16_t Post_IdVar : 2;
} RtemsBarrierReqCreate_Entry;
/** /**
* @brief Test context for spec:/rtems/barrier/req/create test case. * @brief Test context for spec:/rtems/barrier/req/create test case.
*/ */
@@ -149,16 +162,33 @@ typedef struct {
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 5 ]; */
size_t pcs[ 5 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsBarrierReqCreate_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsBarrierReqCreate_Context; } RtemsBarrierReqCreate_Context;
static RtemsBarrierReqCreate_Context static RtemsBarrierReqCreate_Context
@@ -554,7 +584,7 @@ static void RtemsBarrierReqCreate_Setup_Wrap( void *arg )
RtemsBarrierReqCreate_Context *ctx; RtemsBarrierReqCreate_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqCreate_Setup( ctx ); RtemsBarrierReqCreate_Setup( ctx );
} }
@@ -570,7 +600,7 @@ static void RtemsBarrierReqCreate_Teardown_Wrap( void *arg )
RtemsBarrierReqCreate_Context *ctx; RtemsBarrierReqCreate_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqCreate_Teardown( ctx ); RtemsBarrierReqCreate_Teardown( ctx );
} }
@@ -598,19 +628,6 @@ static void RtemsBarrierReqCreate_Cleanup( RtemsBarrierReqCreate_Context *ctx )
T_surrender_objects( &ctx->seized_objects, rtems_barrier_delete ); T_surrender_objects( &ctx->seized_objects, rtems_barrier_delete );
} }
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Name_NA : 1;
uint16_t Pre_Id_NA : 1;
uint16_t Pre_Class_NA : 1;
uint16_t Pre_MaxWait_NA : 1;
uint16_t Pre_Free_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Name : 2;
uint16_t Post_Class : 2;
uint16_t Post_IdVar : 2;
} RtemsBarrierReqCreate_Entry;
static const RtemsBarrierReqCreate_Entry static const RtemsBarrierReqCreate_Entry
RtemsBarrierReqCreate_Entries[] = { RtemsBarrierReqCreate_Entries[] = {
{ 0, 0, 0, 0, 0, 0, RtemsBarrierReqCreate_Post_Status_InvName, { 0, 0, 0, 0, 0, 0, RtemsBarrierReqCreate_Post_Status_InvName,
@@ -646,8 +663,8 @@ static size_t RtemsBarrierReqCreate_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsBarrierReqCreate_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsBarrierReqCreate_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -661,67 +678,73 @@ static T_fixture RtemsBarrierReqCreate_Fixture = {
.initial_context = &RtemsBarrierReqCreate_Instance .initial_context = &RtemsBarrierReqCreate_Instance
}; };
static inline RtemsBarrierReqCreate_Entry RtemsBarrierReqCreate_GetEntry( static inline RtemsBarrierReqCreate_Entry RtemsBarrierReqCreate_PopEntry(
size_t index RtemsBarrierReqCreate_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsBarrierReqCreate_Entries[ return RtemsBarrierReqCreate_Entries[
RtemsBarrierReqCreate_Map[ index ] RtemsBarrierReqCreate_Map[ index ]
]; ];
} }
static void RtemsBarrierReqCreate_TestVariant(
RtemsBarrierReqCreate_Context *ctx
)
{
RtemsBarrierReqCreate_Pre_Name_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsBarrierReqCreate_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsBarrierReqCreate_Pre_Class_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsBarrierReqCreate_Pre_MaxWait_Prepare( ctx, ctx->Map.pcs[ 3 ] );
RtemsBarrierReqCreate_Pre_Free_Prepare( ctx, ctx->Map.pcs[ 4 ] );
RtemsBarrierReqCreate_Action( ctx );
RtemsBarrierReqCreate_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsBarrierReqCreate_Post_Name_Check( ctx, ctx->Map.entry.Post_Name );
RtemsBarrierReqCreate_Post_Class_Check( ctx, ctx->Map.entry.Post_Class );
RtemsBarrierReqCreate_Post_IdVar_Check( ctx, ctx->Map.entry.Post_IdVar );
}
/** /**
* @fn void T_case_body_RtemsBarrierReqCreate( void ) * @fn void T_case_body_RtemsBarrierReqCreate( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsBarrierReqCreate, &RtemsBarrierReqCreate_Fixture ) T_TEST_CASE_FIXTURE( RtemsBarrierReqCreate, &RtemsBarrierReqCreate_Fixture )
{ {
RtemsBarrierReqCreate_Context *ctx; RtemsBarrierReqCreate_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsBarrierReqCreate_Pre_Name_Valid; ctx->Map.pcs[ 0 ] = RtemsBarrierReqCreate_Pre_Name_Valid;
ctx->pcs[ 0 ] < RtemsBarrierReqCreate_Pre_Name_NA; ctx->Map.pcs[ 0 ] < RtemsBarrierReqCreate_Pre_Name_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsBarrierReqCreate_Pre_Id_Valid; ctx->Map.pcs[ 1 ] = RtemsBarrierReqCreate_Pre_Id_Valid;
ctx->pcs[ 1 ] < RtemsBarrierReqCreate_Pre_Id_NA; ctx->Map.pcs[ 1 ] < RtemsBarrierReqCreate_Pre_Id_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsBarrierReqCreate_Pre_Class_Default; ctx->Map.pcs[ 2 ] = RtemsBarrierReqCreate_Pre_Class_Default;
ctx->pcs[ 2 ] < RtemsBarrierReqCreate_Pre_Class_NA; ctx->Map.pcs[ 2 ] < RtemsBarrierReqCreate_Pre_Class_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsBarrierReqCreate_Pre_MaxWait_Zero; ctx->Map.pcs[ 3 ] = RtemsBarrierReqCreate_Pre_MaxWait_Zero;
ctx->pcs[ 3 ] < RtemsBarrierReqCreate_Pre_MaxWait_NA; ctx->Map.pcs[ 3 ] < RtemsBarrierReqCreate_Pre_MaxWait_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
for ( for (
ctx->pcs[ 4 ] = RtemsBarrierReqCreate_Pre_Free_Yes; ctx->Map.pcs[ 4 ] = RtemsBarrierReqCreate_Pre_Free_Yes;
ctx->pcs[ 4 ] < RtemsBarrierReqCreate_Pre_Free_NA; ctx->Map.pcs[ 4 ] < RtemsBarrierReqCreate_Pre_Free_NA;
++ctx->pcs[ 4 ] ++ctx->Map.pcs[ 4 ]
) { ) {
RtemsBarrierReqCreate_Entry entry; ctx->Map.entry = RtemsBarrierReqCreate_PopEntry( ctx );
RtemsBarrierReqCreate_TestVariant( ctx );
entry = RtemsBarrierReqCreate_GetEntry( index );
++index;
RtemsBarrierReqCreate_Pre_Name_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsBarrierReqCreate_Pre_Id_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsBarrierReqCreate_Pre_Class_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsBarrierReqCreate_Pre_MaxWait_Prepare( ctx, ctx->pcs[ 3 ] );
RtemsBarrierReqCreate_Pre_Free_Prepare( ctx, ctx->pcs[ 4 ] );
RtemsBarrierReqCreate_Action( ctx );
RtemsBarrierReqCreate_Post_Status_Check( ctx, entry.Post_Status );
RtemsBarrierReqCreate_Post_Name_Check( ctx, entry.Post_Name );
RtemsBarrierReqCreate_Post_Class_Check( ctx, entry.Post_Class );
RtemsBarrierReqCreate_Post_IdVar_Check( ctx, entry.Post_IdVar );
RtemsBarrierReqCreate_Cleanup( ctx ); RtemsBarrierReqCreate_Cleanup( ctx );
} }
} }

View File

@@ -91,6 +91,14 @@ typedef enum {
RtemsBarrierReqDelete_Post_Flush_NA RtemsBarrierReqDelete_Post_Flush_NA
} RtemsBarrierReqDelete_Post_Flush; } RtemsBarrierReqDelete_Post_Flush;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Id_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Name : 2;
uint8_t Post_Flush : 2;
} RtemsBarrierReqDelete_Entry;
/** /**
* @brief Test context for spec:/rtems/barrier/req/delete test case. * @brief Test context for spec:/rtems/barrier/req/delete test case.
*/ */
@@ -107,16 +115,33 @@ typedef struct {
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 1 ]; */
size_t pcs[ 1 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsBarrierReqDelete_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsBarrierReqDelete_Context; } RtemsBarrierReqDelete_Context;
static RtemsBarrierReqDelete_Context static RtemsBarrierReqDelete_Context
@@ -300,7 +325,7 @@ static void RtemsBarrierReqDelete_Setup_Wrap( void *arg )
RtemsBarrierReqDelete_Context *ctx; RtemsBarrierReqDelete_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqDelete_Setup( ctx ); RtemsBarrierReqDelete_Setup( ctx );
} }
@@ -317,7 +342,7 @@ static void RtemsBarrierReqDelete_Teardown_Wrap( void *arg )
RtemsBarrierReqDelete_Context *ctx; RtemsBarrierReqDelete_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqDelete_Teardown( ctx ); RtemsBarrierReqDelete_Teardown( ctx );
} }
@@ -349,14 +374,6 @@ static void RtemsBarrierReqDelete_Cleanup( RtemsBarrierReqDelete_Context *ctx )
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Id_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Name : 2;
uint8_t Post_Flush : 2;
} RtemsBarrierReqDelete_Entry;
static const RtemsBarrierReqDelete_Entry static const RtemsBarrierReqDelete_Entry
RtemsBarrierReqDelete_Entries[] = { RtemsBarrierReqDelete_Entries[] = {
{ 0, 0, RtemsBarrierReqDelete_Post_Status_InvId, { 0, 0, RtemsBarrierReqDelete_Post_Status_InvId,
@@ -377,8 +394,8 @@ static size_t RtemsBarrierReqDelete_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsBarrierReqDelete_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsBarrierReqDelete_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -392,43 +409,49 @@ static T_fixture RtemsBarrierReqDelete_Fixture = {
.initial_context = &RtemsBarrierReqDelete_Instance .initial_context = &RtemsBarrierReqDelete_Instance
}; };
static inline RtemsBarrierReqDelete_Entry RtemsBarrierReqDelete_GetEntry( static inline RtemsBarrierReqDelete_Entry RtemsBarrierReqDelete_PopEntry(
size_t index RtemsBarrierReqDelete_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsBarrierReqDelete_Entries[ return RtemsBarrierReqDelete_Entries[
RtemsBarrierReqDelete_Map[ index ] RtemsBarrierReqDelete_Map[ index ]
]; ];
} }
static void RtemsBarrierReqDelete_TestVariant(
RtemsBarrierReqDelete_Context *ctx
)
{
RtemsBarrierReqDelete_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsBarrierReqDelete_Action( ctx );
RtemsBarrierReqDelete_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsBarrierReqDelete_Post_Name_Check( ctx, ctx->Map.entry.Post_Name );
RtemsBarrierReqDelete_Post_Flush_Check( ctx, ctx->Map.entry.Post_Flush );
}
/** /**
* @fn void T_case_body_RtemsBarrierReqDelete( void ) * @fn void T_case_body_RtemsBarrierReqDelete( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsBarrierReqDelete, &RtemsBarrierReqDelete_Fixture ) T_TEST_CASE_FIXTURE( RtemsBarrierReqDelete, &RtemsBarrierReqDelete_Fixture )
{ {
RtemsBarrierReqDelete_Context *ctx; RtemsBarrierReqDelete_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsBarrierReqDelete_Pre_Id_NoObj; ctx->Map.pcs[ 0 ] = RtemsBarrierReqDelete_Pre_Id_NoObj;
ctx->pcs[ 0 ] < RtemsBarrierReqDelete_Pre_Id_NA; ctx->Map.pcs[ 0 ] < RtemsBarrierReqDelete_Pre_Id_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
RtemsBarrierReqDelete_Entry entry; ctx->Map.entry = RtemsBarrierReqDelete_PopEntry( ctx );
entry = RtemsBarrierReqDelete_GetEntry( index );
++index;
RtemsBarrierReqDelete_Prepare( ctx ); RtemsBarrierReqDelete_Prepare( ctx );
RtemsBarrierReqDelete_Pre_Id_Prepare( ctx, ctx->pcs[ 0 ] ); RtemsBarrierReqDelete_TestVariant( ctx );
RtemsBarrierReqDelete_Action( ctx );
RtemsBarrierReqDelete_Post_Status_Check( ctx, entry.Post_Status );
RtemsBarrierReqDelete_Post_Name_Check( ctx, entry.Post_Name );
RtemsBarrierReqDelete_Post_Flush_Check( ctx, entry.Post_Flush );
RtemsBarrierReqDelete_Cleanup( ctx ); RtemsBarrierReqDelete_Cleanup( ctx );
} }
} }

View File

@@ -100,6 +100,15 @@ typedef enum {
RtemsBarrierReqRelease_Post_ReleasedVar_NA RtemsBarrierReqRelease_Post_ReleasedVar_NA
} RtemsBarrierReqRelease_Post_ReleasedVar; } RtemsBarrierReqRelease_Post_ReleasedVar;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Id_NA : 1;
uint8_t Pre_Released_NA : 1;
uint8_t Pre_Waiting_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_ReleasedVar : 2;
} RtemsBarrierReqRelease_Entry;
/** /**
* @brief Test context for spec:/rtems/barrier/req/release test case. * @brief Test context for spec:/rtems/barrier/req/release test case.
*/ */
@@ -120,16 +129,33 @@ typedef struct {
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 3 ]; */
size_t pcs[ 3 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsBarrierReqRelease_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsBarrierReqRelease_Context; } RtemsBarrierReqRelease_Context;
static RtemsBarrierReqRelease_Context static RtemsBarrierReqRelease_Context
@@ -384,7 +410,7 @@ static void RtemsBarrierReqRelease_Setup_Wrap( void *arg )
RtemsBarrierReqRelease_Context *ctx; RtemsBarrierReqRelease_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqRelease_Setup( ctx ); RtemsBarrierReqRelease_Setup( ctx );
} }
@@ -414,7 +440,7 @@ static void RtemsBarrierReqRelease_Teardown_Wrap( void *arg )
RtemsBarrierReqRelease_Context *ctx; RtemsBarrierReqRelease_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqRelease_Teardown( ctx ); RtemsBarrierReqRelease_Teardown( ctx );
} }
@@ -425,15 +451,6 @@ static void RtemsBarrierReqRelease_Action(
ctx->status = rtems_barrier_release( ctx->id, ctx->released ); ctx->status = rtems_barrier_release( ctx->id, ctx->released );
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Id_NA : 1;
uint8_t Pre_Released_NA : 1;
uint8_t Pre_Waiting_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_ReleasedVar : 2;
} RtemsBarrierReqRelease_Entry;
static const RtemsBarrierReqRelease_Entry static const RtemsBarrierReqRelease_Entry
RtemsBarrierReqRelease_Entries[] = { RtemsBarrierReqRelease_Entries[] = {
{ 0, 0, 0, 1, RtemsBarrierReqRelease_Post_Status_InvAddr, { 0, 0, 0, 1, RtemsBarrierReqRelease_Post_Status_InvAddr,
@@ -455,8 +472,8 @@ static size_t RtemsBarrierReqRelease_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsBarrierReqRelease_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsBarrierReqRelease_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -470,64 +487,65 @@ static T_fixture RtemsBarrierReqRelease_Fixture = {
.initial_context = &RtemsBarrierReqRelease_Instance .initial_context = &RtemsBarrierReqRelease_Instance
}; };
static inline RtemsBarrierReqRelease_Entry RtemsBarrierReqRelease_GetEntry( static inline RtemsBarrierReqRelease_Entry RtemsBarrierReqRelease_PopEntry(
size_t index RtemsBarrierReqRelease_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsBarrierReqRelease_Entries[ return RtemsBarrierReqRelease_Entries[
RtemsBarrierReqRelease_Map[ index ] RtemsBarrierReqRelease_Map[ index ]
]; ];
} }
static void RtemsBarrierReqRelease_TestVariant(
RtemsBarrierReqRelease_Context *ctx
)
{
RtemsBarrierReqRelease_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsBarrierReqRelease_Pre_Released_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsBarrierReqRelease_Pre_Waiting_Prepare(
ctx,
ctx->Map.entry.Pre_Waiting_NA ? RtemsBarrierReqRelease_Pre_Waiting_NA : ctx->Map.pcs[ 2 ]
);
RtemsBarrierReqRelease_Action( ctx );
RtemsBarrierReqRelease_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsBarrierReqRelease_Post_ReleasedVar_Check(
ctx,
ctx->Map.entry.Post_ReleasedVar
);
}
/** /**
* @fn void T_case_body_RtemsBarrierReqRelease( void ) * @fn void T_case_body_RtemsBarrierReqRelease( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsBarrierReqRelease, &RtemsBarrierReqRelease_Fixture ) T_TEST_CASE_FIXTURE( RtemsBarrierReqRelease, &RtemsBarrierReqRelease_Fixture )
{ {
RtemsBarrierReqRelease_Context *ctx; RtemsBarrierReqRelease_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsBarrierReqRelease_Pre_Id_NoObj; ctx->Map.pcs[ 0 ] = RtemsBarrierReqRelease_Pre_Id_NoObj;
ctx->pcs[ 0 ] < RtemsBarrierReqRelease_Pre_Id_NA; ctx->Map.pcs[ 0 ] < RtemsBarrierReqRelease_Pre_Id_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsBarrierReqRelease_Pre_Released_Valid; ctx->Map.pcs[ 1 ] = RtemsBarrierReqRelease_Pre_Released_Valid;
ctx->pcs[ 1 ] < RtemsBarrierReqRelease_Pre_Released_NA; ctx->Map.pcs[ 1 ] < RtemsBarrierReqRelease_Pre_Released_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsBarrierReqRelease_Pre_Waiting_Zero; ctx->Map.pcs[ 2 ] = RtemsBarrierReqRelease_Pre_Waiting_Zero;
ctx->pcs[ 2 ] < RtemsBarrierReqRelease_Pre_Waiting_NA; ctx->Map.pcs[ 2 ] < RtemsBarrierReqRelease_Pre_Waiting_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
RtemsBarrierReqRelease_Entry entry; ctx->Map.entry = RtemsBarrierReqRelease_PopEntry( ctx );
size_t pcs[ 3 ]; RtemsBarrierReqRelease_TestVariant( ctx );
entry = RtemsBarrierReqRelease_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_Waiting_NA ) {
ctx->pcs[ 2 ] = RtemsBarrierReqRelease_Pre_Waiting_NA;
}
RtemsBarrierReqRelease_Pre_Id_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsBarrierReqRelease_Pre_Released_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsBarrierReqRelease_Pre_Waiting_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsBarrierReqRelease_Action( ctx );
RtemsBarrierReqRelease_Post_Status_Check( ctx, entry.Post_Status );
RtemsBarrierReqRelease_Post_ReleasedVar_Check(
ctx,
entry.Post_ReleasedVar
);
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -97,6 +97,14 @@ typedef enum {
RtemsBarrierReqWait_Post_Status_NA RtemsBarrierReqWait_Post_Status_NA
} RtemsBarrierReqWait_Post_Status; } RtemsBarrierReqWait_Post_Status;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Id_NA : 1;
uint8_t Pre_Timeout_NA : 1;
uint8_t Pre_Satisfy_NA : 1;
uint8_t Post_Status : 3;
} RtemsBarrierReqWait_Entry;
/** /**
* @brief Test context for spec:/rtems/barrier/req/wait test case. * @brief Test context for spec:/rtems/barrier/req/wait test case.
*/ */
@@ -117,16 +125,33 @@ typedef struct {
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 3 ]; */
size_t pcs[ 3 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsBarrierReqWait_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsBarrierReqWait_Context; } RtemsBarrierReqWait_Context;
static RtemsBarrierReqWait_Context static RtemsBarrierReqWait_Context
@@ -432,7 +457,7 @@ static void RtemsBarrierReqWait_Setup_Wrap( void *arg )
RtemsBarrierReqWait_Context *ctx; RtemsBarrierReqWait_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqWait_Setup( ctx ); RtemsBarrierReqWait_Setup( ctx );
} }
@@ -461,7 +486,7 @@ static void RtemsBarrierReqWait_Teardown_Wrap( void *arg )
RtemsBarrierReqWait_Context *ctx; RtemsBarrierReqWait_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsBarrierReqWait_Teardown( ctx ); RtemsBarrierReqWait_Teardown( ctx );
} }
@@ -470,14 +495,6 @@ static void RtemsBarrierReqWait_Action( RtemsBarrierReqWait_Context *ctx )
ctx->status = rtems_barrier_wait( ctx->id, ctx->timeout ); ctx->status = rtems_barrier_wait( ctx->id, ctx->timeout );
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Id_NA : 1;
uint8_t Pre_Timeout_NA : 1;
uint8_t Pre_Satisfy_NA : 1;
uint8_t Post_Status : 3;
} RtemsBarrierReqWait_Entry;
static const RtemsBarrierReqWait_Entry static const RtemsBarrierReqWait_Entry
RtemsBarrierReqWait_Entries[] = { RtemsBarrierReqWait_Entries[] = {
{ 0, 0, 1, 1, RtemsBarrierReqWait_Post_Status_InvId }, { 0, 0, 1, 1, RtemsBarrierReqWait_Post_Status_InvId },
@@ -499,8 +516,8 @@ static size_t RtemsBarrierReqWait_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsBarrierReqWait_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsBarrierReqWait_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -514,68 +531,67 @@ static T_fixture RtemsBarrierReqWait_Fixture = {
.initial_context = &RtemsBarrierReqWait_Instance .initial_context = &RtemsBarrierReqWait_Instance
}; };
static inline RtemsBarrierReqWait_Entry RtemsBarrierReqWait_GetEntry( static inline RtemsBarrierReqWait_Entry RtemsBarrierReqWait_PopEntry(
size_t index RtemsBarrierReqWait_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsBarrierReqWait_Entries[ return RtemsBarrierReqWait_Entries[
RtemsBarrierReqWait_Map[ index ] RtemsBarrierReqWait_Map[ index ]
]; ];
} }
static void RtemsBarrierReqWait_TestVariant( RtemsBarrierReqWait_Context *ctx )
{
RtemsBarrierReqWait_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsBarrierReqWait_Pre_Timeout_Prepare(
ctx,
ctx->Map.entry.Pre_Timeout_NA ? RtemsBarrierReqWait_Pre_Timeout_NA : ctx->Map.pcs[ 1 ]
);
RtemsBarrierReqWait_Pre_Satisfy_Prepare(
ctx,
ctx->Map.entry.Pre_Satisfy_NA ? RtemsBarrierReqWait_Pre_Satisfy_NA : ctx->Map.pcs[ 2 ]
);
RtemsBarrierReqWait_Action( ctx );
RtemsBarrierReqWait_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
}
/** /**
* @fn void T_case_body_RtemsBarrierReqWait( void ) * @fn void T_case_body_RtemsBarrierReqWait( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsBarrierReqWait, &RtemsBarrierReqWait_Fixture ) T_TEST_CASE_FIXTURE( RtemsBarrierReqWait, &RtemsBarrierReqWait_Fixture )
{ {
RtemsBarrierReqWait_Context *ctx; RtemsBarrierReqWait_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsBarrierReqWait_Pre_Id_NoObj; ctx->Map.pcs[ 0 ] = RtemsBarrierReqWait_Pre_Id_NoObj;
ctx->pcs[ 0 ] < RtemsBarrierReqWait_Pre_Id_NA; ctx->Map.pcs[ 0 ] < RtemsBarrierReqWait_Pre_Id_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsBarrierReqWait_Pre_Timeout_Ticks; ctx->Map.pcs[ 1 ] = RtemsBarrierReqWait_Pre_Timeout_Ticks;
ctx->pcs[ 1 ] < RtemsBarrierReqWait_Pre_Timeout_NA; ctx->Map.pcs[ 1 ] < RtemsBarrierReqWait_Pre_Timeout_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsBarrierReqWait_Pre_Satisfy_Never; ctx->Map.pcs[ 2 ] = RtemsBarrierReqWait_Pre_Satisfy_Never;
ctx->pcs[ 2 ] < RtemsBarrierReqWait_Pre_Satisfy_NA; ctx->Map.pcs[ 2 ] < RtemsBarrierReqWait_Pre_Satisfy_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
RtemsBarrierReqWait_Entry entry; ctx->Map.entry = RtemsBarrierReqWait_PopEntry( ctx );
size_t pcs[ 3 ];
entry = RtemsBarrierReqWait_GetEntry( index ); if ( ctx->Map.entry.Skip ) {
++index;
if ( entry.Skip ) {
continue; continue;
} }
memcpy( pcs, ctx->pcs, sizeof( pcs ) ); RtemsBarrierReqWait_TestVariant( ctx );
if ( entry.Pre_Timeout_NA ) {
ctx->pcs[ 1 ] = RtemsBarrierReqWait_Pre_Timeout_NA;
}
if ( entry.Pre_Satisfy_NA ) {
ctx->pcs[ 2 ] = RtemsBarrierReqWait_Pre_Satisfy_NA;
}
RtemsBarrierReqWait_Pre_Id_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsBarrierReqWait_Pre_Timeout_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsBarrierReqWait_Pre_Satisfy_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsBarrierReqWait_Action( ctx );
RtemsBarrierReqWait_Post_Status_Check( ctx, entry.Post_Status );
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -93,6 +93,14 @@ typedef enum {
RtemsIntrReqClear_Post_Cleared_NA RtemsIntrReqClear_Post_Cleared_NA
} RtemsIntrReqClear_Post_Cleared; } RtemsIntrReqClear_Post_Cleared;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_CanClear_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Cleared : 2;
} RtemsIntrReqClear_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/clear test case. * @brief Test context for spec:/rtems/intr/req/clear test case.
*/ */
@@ -124,16 +132,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 2 ]; */
size_t pcs[ 2 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqClear_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqClear_Context; } RtemsIntrReqClear_Context;
static RtemsIntrReqClear_Context static RtemsIntrReqClear_Context
@@ -486,14 +511,6 @@ static void RtemsIntrReqClear_Action( RtemsIntrReqClear_Context *ctx )
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_CanClear_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Cleared : 2;
} RtemsIntrReqClear_Entry;
static const RtemsIntrReqClear_Entry static const RtemsIntrReqClear_Entry
RtemsIntrReqClear_Entries[] = { RtemsIntrReqClear_Entries[] = {
{ 0, 0, 1, RtemsIntrReqClear_Post_Status_InvId, { 0, 0, 1, RtemsIntrReqClear_Post_Status_InvId,
@@ -515,8 +532,8 @@ static size_t RtemsIntrReqClear_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqClear_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsIntrReqClear_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -530,55 +547,54 @@ static T_fixture RtemsIntrReqClear_Fixture = {
.initial_context = &RtemsIntrReqClear_Instance .initial_context = &RtemsIntrReqClear_Instance
}; };
static inline RtemsIntrReqClear_Entry RtemsIntrReqClear_GetEntry( static inline RtemsIntrReqClear_Entry RtemsIntrReqClear_PopEntry(
size_t index RtemsIntrReqClear_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqClear_Entries[ return RtemsIntrReqClear_Entries[
RtemsIntrReqClear_Map[ index ] RtemsIntrReqClear_Map[ index ]
]; ];
} }
static void RtemsIntrReqClear_TestVariant( RtemsIntrReqClear_Context *ctx )
{
RtemsIntrReqClear_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqClear_Pre_CanClear_Prepare(
ctx,
ctx->Map.entry.Pre_CanClear_NA ? RtemsIntrReqClear_Pre_CanClear_NA : ctx->Map.pcs[ 1 ]
);
RtemsIntrReqClear_Action( ctx );
RtemsIntrReqClear_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsIntrReqClear_Post_Cleared_Check( ctx, ctx->Map.entry.Post_Cleared );
}
/** /**
* @fn void T_case_body_RtemsIntrReqClear( void ) * @fn void T_case_body_RtemsIntrReqClear( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsIntrReqClear, &RtemsIntrReqClear_Fixture ) T_TEST_CASE_FIXTURE( RtemsIntrReqClear, &RtemsIntrReqClear_Fixture )
{ {
RtemsIntrReqClear_Context *ctx; RtemsIntrReqClear_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqClear_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqClear_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqClear_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqClear_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqClear_Pre_CanClear_Yes; ctx->Map.pcs[ 1 ] = RtemsIntrReqClear_Pre_CanClear_Yes;
ctx->pcs[ 1 ] < RtemsIntrReqClear_Pre_CanClear_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqClear_Pre_CanClear_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
RtemsIntrReqClear_Entry entry; ctx->Map.entry = RtemsIntrReqClear_PopEntry( ctx );
size_t pcs[ 2 ]; RtemsIntrReqClear_TestVariant( ctx );
entry = RtemsIntrReqClear_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_CanClear_NA ) {
ctx->pcs[ 1 ] = RtemsIntrReqClear_Pre_CanClear_NA;
}
RtemsIntrReqClear_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqClear_Pre_CanClear_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqClear_Action( ctx );
RtemsIntrReqClear_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqClear_Post_Cleared_Check( ctx, entry.Post_Cleared );
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -148,6 +148,21 @@ typedef enum {
RtemsIntrReqEntryInstall_Post_Installed_NA RtemsIntrReqEntryInstall_Post_Installed_NA
} RtemsIntrReqEntryInstall_Post_Installed; } RtemsIntrReqEntryInstall_Post_Installed;
typedef struct {
uint32_t Skip : 1;
uint32_t Pre_Vector_NA : 1;
uint32_t Pre_Options_NA : 1;
uint32_t Pre_Entry_NA : 1;
uint32_t Pre_Routine_NA : 1;
uint32_t Pre_Init_NA : 1;
uint32_t Pre_ISR_NA : 1;
uint32_t Pre_CanEnable_NA : 1;
uint32_t Pre_Installed_NA : 1;
uint32_t Post_Status : 4;
uint32_t Post_Enable : 3;
uint32_t Post_Installed : 2;
} RtemsIntrReqEntryInstall_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/entry-install test case. * @brief Test context for spec:/rtems/intr/req/entry-install test case.
*/ */
@@ -255,16 +270,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 8 ]; */
size_t pcs[ 8 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqEntryInstall_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqEntryInstall_Context; } RtemsIntrReqEntryInstall_Context;
static RtemsIntrReqEntryInstall_Context static RtemsIntrReqEntryInstall_Context
@@ -1019,7 +1051,7 @@ static void RtemsIntrReqEntryInstall_Setup_Wrap( void *arg )
RtemsIntrReqEntryInstall_Context *ctx; RtemsIntrReqEntryInstall_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsIntrReqEntryInstall_Setup( ctx ); RtemsIntrReqEntryInstall_Setup( ctx );
} }
@@ -1065,21 +1097,6 @@ static void RtemsIntrReqEntryInstall_Cleanup(
} }
} }
typedef struct {
uint32_t Skip : 1;
uint32_t Pre_Vector_NA : 1;
uint32_t Pre_Options_NA : 1;
uint32_t Pre_Entry_NA : 1;
uint32_t Pre_Routine_NA : 1;
uint32_t Pre_Init_NA : 1;
uint32_t Pre_ISR_NA : 1;
uint32_t Pre_CanEnable_NA : 1;
uint32_t Pre_Installed_NA : 1;
uint32_t Post_Status : 4;
uint32_t Post_Enable : 3;
uint32_t Post_Installed : 2;
} RtemsIntrReqEntryInstall_Entry;
static const RtemsIntrReqEntryInstall_Entry static const RtemsIntrReqEntryInstall_Entry
RtemsIntrReqEntryInstall_Entries[] = { RtemsIntrReqEntryInstall_Entries[] = {
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, RtemsIntrReqEntryInstall_Post_Status_InvAddr, { 0, 0, 0, 0, 1, 0, 0, 0, 0, RtemsIntrReqEntryInstall_Post_Status_InvAddr,
@@ -1204,8 +1221,13 @@ static size_t RtemsIntrReqEntryInstall_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqEntryInstall_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqEntryInstall_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -1219,15 +1241,55 @@ static T_fixture RtemsIntrReqEntryInstall_Fixture = {
.initial_context = &RtemsIntrReqEntryInstall_Instance .initial_context = &RtemsIntrReqEntryInstall_Instance
}; };
static inline RtemsIntrReqEntryInstall_Entry RtemsIntrReqEntryInstall_GetEntry( static inline RtemsIntrReqEntryInstall_Entry RtemsIntrReqEntryInstall_PopEntry(
size_t index RtemsIntrReqEntryInstall_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqEntryInstall_Entries[ return RtemsIntrReqEntryInstall_Entries[
RtemsIntrReqEntryInstall_Map[ index ] RtemsIntrReqEntryInstall_Map[ index ]
]; ];
} }
static void RtemsIntrReqEntryInstall_TestVariant(
RtemsIntrReqEntryInstall_Context *ctx
)
{
RtemsIntrReqEntryInstall_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqEntryInstall_Pre_Options_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqEntryInstall_Pre_Entry_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsIntrReqEntryInstall_Pre_Routine_Prepare(
ctx,
ctx->Map.entry.Pre_Routine_NA ? RtemsIntrReqEntryInstall_Pre_Routine_NA : ctx->Map.pcs[ 3 ]
);
RtemsIntrReqEntryInstall_Pre_Init_Prepare( ctx, ctx->Map.pcs[ 4 ] );
RtemsIntrReqEntryInstall_Pre_ISR_Prepare( ctx, ctx->Map.pcs[ 5 ] );
RtemsIntrReqEntryInstall_Pre_CanEnable_Prepare(
ctx,
ctx->Map.entry.Pre_CanEnable_NA ? RtemsIntrReqEntryInstall_Pre_CanEnable_NA : ctx->Map.pcs[ 6 ]
);
RtemsIntrReqEntryInstall_Pre_Installed_Prepare(
ctx,
ctx->Map.entry.Pre_Installed_NA ? RtemsIntrReqEntryInstall_Pre_Installed_NA : ctx->Map.pcs[ 7 ]
);
RtemsIntrReqEntryInstall_Action( ctx );
RtemsIntrReqEntryInstall_Post_Status_Check(
ctx,
ctx->Map.entry.Post_Status
);
RtemsIntrReqEntryInstall_Post_Enable_Check(
ctx,
ctx->Map.entry.Post_Enable
);
RtemsIntrReqEntryInstall_Post_Installed_Check(
ctx,
ctx->Map.entry.Post_Installed
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqEntryInstall( void ) * @fn void T_case_body_RtemsIntrReqEntryInstall( void )
*/ */
@@ -1237,120 +1299,55 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqEntryInstall_Context *ctx; RtemsIntrReqEntryInstall_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqEntryInstall_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqEntryInstall_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqEntryInstall_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqEntryInstall_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqEntryInstall_Pre_Options_Unique; ctx->Map.pcs[ 1 ] = RtemsIntrReqEntryInstall_Pre_Options_Unique;
ctx->pcs[ 1 ] < RtemsIntrReqEntryInstall_Pre_Options_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqEntryInstall_Pre_Options_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqEntryInstall_Pre_Entry_Obj; ctx->Map.pcs[ 2 ] = RtemsIntrReqEntryInstall_Pre_Entry_Obj;
ctx->pcs[ 2 ] < RtemsIntrReqEntryInstall_Pre_Entry_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqEntryInstall_Pre_Entry_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsIntrReqEntryInstall_Pre_Routine_Valid; ctx->Map.pcs[ 3 ] = RtemsIntrReqEntryInstall_Pre_Routine_Valid;
ctx->pcs[ 3 ] < RtemsIntrReqEntryInstall_Pre_Routine_NA; ctx->Map.pcs[ 3 ] < RtemsIntrReqEntryInstall_Pre_Routine_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
for ( for (
ctx->pcs[ 4 ] = RtemsIntrReqEntryInstall_Pre_Init_Yes; ctx->Map.pcs[ 4 ] = RtemsIntrReqEntryInstall_Pre_Init_Yes;
ctx->pcs[ 4 ] < RtemsIntrReqEntryInstall_Pre_Init_NA; ctx->Map.pcs[ 4 ] < RtemsIntrReqEntryInstall_Pre_Init_NA;
++ctx->pcs[ 4 ] ++ctx->Map.pcs[ 4 ]
) { ) {
for ( for (
ctx->pcs[ 5 ] = RtemsIntrReqEntryInstall_Pre_ISR_Yes; ctx->Map.pcs[ 5 ] = RtemsIntrReqEntryInstall_Pre_ISR_Yes;
ctx->pcs[ 5 ] < RtemsIntrReqEntryInstall_Pre_ISR_NA; ctx->Map.pcs[ 5 ] < RtemsIntrReqEntryInstall_Pre_ISR_NA;
++ctx->pcs[ 5 ] ++ctx->Map.pcs[ 5 ]
) { ) {
for ( for (
ctx->pcs[ 6 ] = RtemsIntrReqEntryInstall_Pre_CanEnable_Yes; ctx->Map.pcs[ 6 ] = RtemsIntrReqEntryInstall_Pre_CanEnable_Yes;
ctx->pcs[ 6 ] < RtemsIntrReqEntryInstall_Pre_CanEnable_NA; ctx->Map.pcs[ 6 ] < RtemsIntrReqEntryInstall_Pre_CanEnable_NA;
++ctx->pcs[ 6 ] ++ctx->Map.pcs[ 6 ]
) { ) {
for ( for (
ctx->pcs[ 7 ] = RtemsIntrReqEntryInstall_Pre_Installed_None; ctx->Map.pcs[ 7 ] = RtemsIntrReqEntryInstall_Pre_Installed_None;
ctx->pcs[ 7 ] < RtemsIntrReqEntryInstall_Pre_Installed_NA; ctx->Map.pcs[ 7 ] < RtemsIntrReqEntryInstall_Pre_Installed_NA;
++ctx->pcs[ 7 ] ++ctx->Map.pcs[ 7 ]
) { ) {
RtemsIntrReqEntryInstall_Entry entry; ctx->Map.entry = RtemsIntrReqEntryInstall_PopEntry( ctx );
size_t pcs[ 8 ];
entry = RtemsIntrReqEntryInstall_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_Routine_NA ) {
ctx->pcs[ 3 ] = RtemsIntrReqEntryInstall_Pre_Routine_NA;
}
if ( entry.Pre_CanEnable_NA ) {
ctx->pcs[ 6 ] = RtemsIntrReqEntryInstall_Pre_CanEnable_NA;
}
if ( entry.Pre_Installed_NA ) {
ctx->pcs[ 7 ] = RtemsIntrReqEntryInstall_Pre_Installed_NA;
}
RtemsIntrReqEntryInstall_Prepare( ctx ); RtemsIntrReqEntryInstall_Prepare( ctx );
RtemsIntrReqEntryInstall_Pre_Vector_Prepare( RtemsIntrReqEntryInstall_TestVariant( ctx );
ctx,
ctx->pcs[ 0 ]
);
RtemsIntrReqEntryInstall_Pre_Options_Prepare(
ctx,
ctx->pcs[ 1 ]
);
RtemsIntrReqEntryInstall_Pre_Entry_Prepare(
ctx,
ctx->pcs[ 2 ]
);
RtemsIntrReqEntryInstall_Pre_Routine_Prepare(
ctx,
ctx->pcs[ 3 ]
);
RtemsIntrReqEntryInstall_Pre_Init_Prepare(
ctx,
ctx->pcs[ 4 ]
);
RtemsIntrReqEntryInstall_Pre_ISR_Prepare(
ctx,
ctx->pcs[ 5 ]
);
RtemsIntrReqEntryInstall_Pre_CanEnable_Prepare(
ctx,
ctx->pcs[ 6 ]
);
RtemsIntrReqEntryInstall_Pre_Installed_Prepare(
ctx,
ctx->pcs[ 7 ]
);
RtemsIntrReqEntryInstall_Action( ctx );
RtemsIntrReqEntryInstall_Post_Status_Check(
ctx,
entry.Post_Status
);
RtemsIntrReqEntryInstall_Post_Enable_Check(
ctx,
entry.Post_Enable
);
RtemsIntrReqEntryInstall_Post_Installed_Check(
ctx,
entry.Post_Installed
);
RtemsIntrReqEntryInstall_Cleanup( ctx ); RtemsIntrReqEntryInstall_Cleanup( ctx );
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -148,6 +148,22 @@ typedef enum {
RtemsIntrReqEntryRemove_Post_Installed_NA RtemsIntrReqEntryRemove_Post_Installed_NA
} RtemsIntrReqEntryRemove_Post_Installed; } RtemsIntrReqEntryRemove_Post_Installed;
typedef struct {
uint32_t Skip : 1;
uint32_t Pre_Vector_NA : 1;
uint32_t Pre_Entry_NA : 1;
uint32_t Pre_Routine_NA : 1;
uint32_t Pre_EntryObj_NA : 1;
uint32_t Pre_Init_NA : 1;
uint32_t Pre_ISR_NA : 1;
uint32_t Pre_CanDisable_NA : 1;
uint32_t Pre_First_NA : 1;
uint32_t Pre_Last_NA : 1;
uint32_t Post_Status : 3;
uint32_t Post_Disabled : 3;
uint32_t Post_Installed : 2;
} RtemsIntrReqEntryRemove_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/entry-remove test case. * @brief Test context for spec:/rtems/intr/req/entry-remove test case.
*/ */
@@ -272,16 +288,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 9 ]; */
size_t pcs[ 9 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqEntryRemove_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqEntryRemove_Context; } RtemsIntrReqEntryRemove_Context;
static RtemsIntrReqEntryRemove_Context static RtemsIntrReqEntryRemove_Context
@@ -1058,7 +1091,7 @@ static void RtemsIntrReqEntryRemove_Setup_Wrap( void *arg )
RtemsIntrReqEntryRemove_Context *ctx; RtemsIntrReqEntryRemove_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsIntrReqEntryRemove_Setup( ctx ); RtemsIntrReqEntryRemove_Setup( ctx );
} }
@@ -1135,22 +1168,6 @@ static void RtemsIntrReqEntryRemove_Cleanup(
} }
} }
typedef struct {
uint32_t Skip : 1;
uint32_t Pre_Vector_NA : 1;
uint32_t Pre_Entry_NA : 1;
uint32_t Pre_Routine_NA : 1;
uint32_t Pre_EntryObj_NA : 1;
uint32_t Pre_Init_NA : 1;
uint32_t Pre_ISR_NA : 1;
uint32_t Pre_CanDisable_NA : 1;
uint32_t Pre_First_NA : 1;
uint32_t Pre_Last_NA : 1;
uint32_t Post_Status : 3;
uint32_t Post_Disabled : 3;
uint32_t Post_Installed : 2;
} RtemsIntrReqEntryRemove_Entry;
static const RtemsIntrReqEntryRemove_Entry static const RtemsIntrReqEntryRemove_Entry
RtemsIntrReqEntryRemove_Entries[] = { RtemsIntrReqEntryRemove_Entries[] = {
{ 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, RtemsIntrReqEntryRemove_Post_Status_InvAddr, { 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, RtemsIntrReqEntryRemove_Post_Status_InvAddr,
@@ -1254,8 +1271,13 @@ static size_t RtemsIntrReqEntryRemove_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqEntryRemove_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqEntryRemove_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -1269,15 +1291,59 @@ static T_fixture RtemsIntrReqEntryRemove_Fixture = {
.initial_context = &RtemsIntrReqEntryRemove_Instance .initial_context = &RtemsIntrReqEntryRemove_Instance
}; };
static inline RtemsIntrReqEntryRemove_Entry RtemsIntrReqEntryRemove_GetEntry( static inline RtemsIntrReqEntryRemove_Entry RtemsIntrReqEntryRemove_PopEntry(
size_t index RtemsIntrReqEntryRemove_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqEntryRemove_Entries[ return RtemsIntrReqEntryRemove_Entries[
RtemsIntrReqEntryRemove_Map[ index ] RtemsIntrReqEntryRemove_Map[ index ]
]; ];
} }
static void RtemsIntrReqEntryRemove_TestVariant(
RtemsIntrReqEntryRemove_Context *ctx
)
{
RtemsIntrReqEntryRemove_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqEntryRemove_Pre_Entry_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqEntryRemove_Pre_Routine_Prepare(
ctx,
ctx->Map.entry.Pre_Routine_NA ? RtemsIntrReqEntryRemove_Pre_Routine_NA : ctx->Map.pcs[ 2 ]
);
RtemsIntrReqEntryRemove_Pre_EntryObj_Prepare(
ctx,
ctx->Map.entry.Pre_EntryObj_NA ? RtemsIntrReqEntryRemove_Pre_EntryObj_NA : ctx->Map.pcs[ 3 ]
);
RtemsIntrReqEntryRemove_Pre_Init_Prepare( ctx, ctx->Map.pcs[ 4 ] );
RtemsIntrReqEntryRemove_Pre_ISR_Prepare( ctx, ctx->Map.pcs[ 5 ] );
RtemsIntrReqEntryRemove_Pre_CanDisable_Prepare(
ctx,
ctx->Map.entry.Pre_CanDisable_NA ? RtemsIntrReqEntryRemove_Pre_CanDisable_NA : ctx->Map.pcs[ 6 ]
);
RtemsIntrReqEntryRemove_Pre_First_Prepare(
ctx,
ctx->Map.entry.Pre_First_NA ? RtemsIntrReqEntryRemove_Pre_First_NA : ctx->Map.pcs[ 7 ]
);
RtemsIntrReqEntryRemove_Pre_Last_Prepare(
ctx,
ctx->Map.entry.Pre_Last_NA ? RtemsIntrReqEntryRemove_Pre_Last_NA : ctx->Map.pcs[ 8 ]
);
RtemsIntrReqEntryRemove_Action( ctx );
RtemsIntrReqEntryRemove_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsIntrReqEntryRemove_Post_Disabled_Check(
ctx,
ctx->Map.entry.Post_Disabled
);
RtemsIntrReqEntryRemove_Post_Installed_Check(
ctx,
ctx->Map.entry.Post_Installed
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqEntryRemove( void ) * @fn void T_case_body_RtemsIntrReqEntryRemove( void )
*/ */
@@ -1287,137 +1353,60 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqEntryRemove_Context *ctx; RtemsIntrReqEntryRemove_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqEntryRemove_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqEntryRemove_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqEntryRemove_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqEntryRemove_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqEntryRemove_Pre_Entry_Obj; ctx->Map.pcs[ 1 ] = RtemsIntrReqEntryRemove_Pre_Entry_Obj;
ctx->pcs[ 1 ] < RtemsIntrReqEntryRemove_Pre_Entry_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqEntryRemove_Pre_Entry_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqEntryRemove_Pre_Routine_Valid; ctx->Map.pcs[ 2 ] = RtemsIntrReqEntryRemove_Pre_Routine_Valid;
ctx->pcs[ 2 ] < RtemsIntrReqEntryRemove_Pre_Routine_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqEntryRemove_Pre_Routine_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsIntrReqEntryRemove_Pre_EntryObj_Installed; ctx->Map.pcs[ 3 ] = RtemsIntrReqEntryRemove_Pre_EntryObj_Installed;
ctx->pcs[ 3 ] < RtemsIntrReqEntryRemove_Pre_EntryObj_NA; ctx->Map.pcs[ 3 ] < RtemsIntrReqEntryRemove_Pre_EntryObj_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
for ( for (
ctx->pcs[ 4 ] = RtemsIntrReqEntryRemove_Pre_Init_Yes; ctx->Map.pcs[ 4 ] = RtemsIntrReqEntryRemove_Pre_Init_Yes;
ctx->pcs[ 4 ] < RtemsIntrReqEntryRemove_Pre_Init_NA; ctx->Map.pcs[ 4 ] < RtemsIntrReqEntryRemove_Pre_Init_NA;
++ctx->pcs[ 4 ] ++ctx->Map.pcs[ 4 ]
) { ) {
for ( for (
ctx->pcs[ 5 ] = RtemsIntrReqEntryRemove_Pre_ISR_Yes; ctx->Map.pcs[ 5 ] = RtemsIntrReqEntryRemove_Pre_ISR_Yes;
ctx->pcs[ 5 ] < RtemsIntrReqEntryRemove_Pre_ISR_NA; ctx->Map.pcs[ 5 ] < RtemsIntrReqEntryRemove_Pre_ISR_NA;
++ctx->pcs[ 5 ] ++ctx->Map.pcs[ 5 ]
) { ) {
for ( for (
ctx->pcs[ 6 ] = RtemsIntrReqEntryRemove_Pre_CanDisable_Yes; ctx->Map.pcs[ 6 ] = RtemsIntrReqEntryRemove_Pre_CanDisable_Yes;
ctx->pcs[ 6 ] < RtemsIntrReqEntryRemove_Pre_CanDisable_NA; ctx->Map.pcs[ 6 ] < RtemsIntrReqEntryRemove_Pre_CanDisable_NA;
++ctx->pcs[ 6 ] ++ctx->Map.pcs[ 6 ]
) { ) {
for ( for (
ctx->pcs[ 7 ] = RtemsIntrReqEntryRemove_Pre_First_Yes; ctx->Map.pcs[ 7 ] = RtemsIntrReqEntryRemove_Pre_First_Yes;
ctx->pcs[ 7 ] < RtemsIntrReqEntryRemove_Pre_First_NA; ctx->Map.pcs[ 7 ] < RtemsIntrReqEntryRemove_Pre_First_NA;
++ctx->pcs[ 7 ] ++ctx->Map.pcs[ 7 ]
) { ) {
for ( for (
ctx->pcs[ 8 ] = RtemsIntrReqEntryRemove_Pre_Last_Yes; ctx->Map.pcs[ 8 ] = RtemsIntrReqEntryRemove_Pre_Last_Yes;
ctx->pcs[ 8 ] < RtemsIntrReqEntryRemove_Pre_Last_NA; ctx->Map.pcs[ 8 ] < RtemsIntrReqEntryRemove_Pre_Last_NA;
++ctx->pcs[ 8 ] ++ctx->Map.pcs[ 8 ]
) { ) {
RtemsIntrReqEntryRemove_Entry entry; ctx->Map.entry = RtemsIntrReqEntryRemove_PopEntry( ctx );
size_t pcs[ 9 ];
entry = RtemsIntrReqEntryRemove_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_Routine_NA ) {
ctx->pcs[ 2 ] = RtemsIntrReqEntryRemove_Pre_Routine_NA;
}
if ( entry.Pre_EntryObj_NA ) {
ctx->pcs[ 3 ] = RtemsIntrReqEntryRemove_Pre_EntryObj_NA;
}
if ( entry.Pre_CanDisable_NA ) {
ctx->pcs[ 6 ] = RtemsIntrReqEntryRemove_Pre_CanDisable_NA;
}
if ( entry.Pre_First_NA ) {
ctx->pcs[ 7 ] = RtemsIntrReqEntryRemove_Pre_First_NA;
}
if ( entry.Pre_Last_NA ) {
ctx->pcs[ 8 ] = RtemsIntrReqEntryRemove_Pre_Last_NA;
}
RtemsIntrReqEntryRemove_Prepare( ctx ); RtemsIntrReqEntryRemove_Prepare( ctx );
RtemsIntrReqEntryRemove_Pre_Vector_Prepare( RtemsIntrReqEntryRemove_TestVariant( ctx );
ctx,
ctx->pcs[ 0 ]
);
RtemsIntrReqEntryRemove_Pre_Entry_Prepare(
ctx,
ctx->pcs[ 1 ]
);
RtemsIntrReqEntryRemove_Pre_Routine_Prepare(
ctx,
ctx->pcs[ 2 ]
);
RtemsIntrReqEntryRemove_Pre_EntryObj_Prepare(
ctx,
ctx->pcs[ 3 ]
);
RtemsIntrReqEntryRemove_Pre_Init_Prepare(
ctx,
ctx->pcs[ 4 ]
);
RtemsIntrReqEntryRemove_Pre_ISR_Prepare(
ctx,
ctx->pcs[ 5 ]
);
RtemsIntrReqEntryRemove_Pre_CanDisable_Prepare(
ctx,
ctx->pcs[ 6 ]
);
RtemsIntrReqEntryRemove_Pre_First_Prepare(
ctx,
ctx->pcs[ 7 ]
);
RtemsIntrReqEntryRemove_Pre_Last_Prepare(
ctx,
ctx->pcs[ 8 ]
);
RtemsIntrReqEntryRemove_Action( ctx );
RtemsIntrReqEntryRemove_Post_Status_Check(
ctx,
entry.Post_Status
);
RtemsIntrReqEntryRemove_Post_Disabled_Check(
ctx,
entry.Post_Disabled
);
RtemsIntrReqEntryRemove_Post_Installed_Check(
ctx,
entry.Post_Installed
);
RtemsIntrReqEntryRemove_Cleanup( ctx ); RtemsIntrReqEntryRemove_Cleanup( ctx );
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -111,6 +111,16 @@ typedef enum {
RtemsIntrReqGetAffinity_Post_CPUSetObj_NA RtemsIntrReqGetAffinity_Post_CPUSetObj_NA
} RtemsIntrReqGetAffinity_Post_CPUSetObj; } RtemsIntrReqGetAffinity_Post_CPUSetObj;
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_CPUSetSize_NA : 1;
uint16_t Pre_CPUSet_NA : 1;
uint16_t Pre_CanGetAffinity_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_CPUSetObj : 3;
} RtemsIntrReqGetAffinity_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/get-affinity test case. * @brief Test context for spec:/rtems/intr/req/get-affinity test case.
*/ */
@@ -153,16 +163,33 @@ typedef struct {
*/ */
cpu_set_t *cpuset; cpu_set_t *cpuset;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 4 ]; */
size_t pcs[ 4 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqGetAffinity_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqGetAffinity_Context; } RtemsIntrReqGetAffinity_Context;
static RtemsIntrReqGetAffinity_Context static RtemsIntrReqGetAffinity_Context
@@ -492,7 +519,7 @@ static void RtemsIntrReqGetAffinity_Setup_Wrap( void *arg )
RtemsIntrReqGetAffinity_Context *ctx; RtemsIntrReqGetAffinity_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsIntrReqGetAffinity_Setup( ctx ); RtemsIntrReqGetAffinity_Setup( ctx );
} }
@@ -550,16 +577,6 @@ static void RtemsIntrReqGetAffinity_Action(
} }
} }
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_CPUSetSize_NA : 1;
uint16_t Pre_CPUSet_NA : 1;
uint16_t Pre_CanGetAffinity_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_CPUSetObj : 3;
} RtemsIntrReqGetAffinity_Entry;
static const RtemsIntrReqGetAffinity_Entry static const RtemsIntrReqGetAffinity_Entry
RtemsIntrReqGetAffinity_Entries[] = { RtemsIntrReqGetAffinity_Entries[] = {
{ 0, 0, 0, 0, 0, RtemsIntrReqGetAffinity_Post_Status_InvAddr, { 0, 0, 0, 0, 0, RtemsIntrReqGetAffinity_Post_Status_InvAddr,
@@ -589,8 +606,13 @@ static size_t RtemsIntrReqGetAffinity_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqGetAffinity_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqGetAffinity_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -604,15 +626,38 @@ static T_fixture RtemsIntrReqGetAffinity_Fixture = {
.initial_context = &RtemsIntrReqGetAffinity_Instance .initial_context = &RtemsIntrReqGetAffinity_Instance
}; };
static inline RtemsIntrReqGetAffinity_Entry RtemsIntrReqGetAffinity_GetEntry( static inline RtemsIntrReqGetAffinity_Entry RtemsIntrReqGetAffinity_PopEntry(
size_t index RtemsIntrReqGetAffinity_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqGetAffinity_Entries[ return RtemsIntrReqGetAffinity_Entries[
RtemsIntrReqGetAffinity_Map[ index ] RtemsIntrReqGetAffinity_Map[ index ]
]; ];
} }
static void RtemsIntrReqGetAffinity_TestVariant(
RtemsIntrReqGetAffinity_Context *ctx
)
{
RtemsIntrReqGetAffinity_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqGetAffinity_Pre_CPUSetSize_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqGetAffinity_Pre_CPUSet_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsIntrReqGetAffinity_Pre_CanGetAffinity_Prepare(
ctx,
ctx->Map.entry.Pre_CanGetAffinity_NA ? RtemsIntrReqGetAffinity_Pre_CanGetAffinity_NA : ctx->Map.pcs[ 3 ]
);
RtemsIntrReqGetAffinity_Action( ctx );
RtemsIntrReqGetAffinity_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsIntrReqGetAffinity_Post_CPUSetObj_Check(
ctx,
ctx->Map.entry.Post_CPUSetObj
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqGetAffinity( void ) * @fn void T_case_body_RtemsIntrReqGetAffinity( void )
*/ */
@@ -622,58 +667,33 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqGetAffinity_Context *ctx; RtemsIntrReqGetAffinity_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqGetAffinity_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqGetAffinity_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqGetAffinity_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqGetAffinity_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqGetAffinity_Pre_CPUSetSize_Valid; ctx->Map.pcs[ 1 ] = RtemsIntrReqGetAffinity_Pre_CPUSetSize_Valid;
ctx->pcs[ 1 ] < RtemsIntrReqGetAffinity_Pre_CPUSetSize_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqGetAffinity_Pre_CPUSetSize_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqGetAffinity_Pre_CPUSet_Valid; ctx->Map.pcs[ 2 ] = RtemsIntrReqGetAffinity_Pre_CPUSet_Valid;
ctx->pcs[ 2 ] < RtemsIntrReqGetAffinity_Pre_CPUSet_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqGetAffinity_Pre_CPUSet_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsIntrReqGetAffinity_Pre_CanGetAffinity_Yes; ctx->Map.pcs[ 3 ] = RtemsIntrReqGetAffinity_Pre_CanGetAffinity_Yes;
ctx->pcs[ 3 ] < RtemsIntrReqGetAffinity_Pre_CanGetAffinity_NA; ctx->Map.pcs[ 3 ] < RtemsIntrReqGetAffinity_Pre_CanGetAffinity_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
RtemsIntrReqGetAffinity_Entry entry; ctx->Map.entry = RtemsIntrReqGetAffinity_PopEntry( ctx );
size_t pcs[ 4 ]; RtemsIntrReqGetAffinity_TestVariant( ctx );
entry = RtemsIntrReqGetAffinity_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_CanGetAffinity_NA ) {
ctx->pcs[ 3 ] = RtemsIntrReqGetAffinity_Pre_CanGetAffinity_NA;
}
RtemsIntrReqGetAffinity_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqGetAffinity_Pre_CPUSetSize_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqGetAffinity_Pre_CPUSet_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsIntrReqGetAffinity_Pre_CanGetAffinity_Prepare(
ctx,
ctx->pcs[ 3 ]
);
RtemsIntrReqGetAffinity_Action( ctx );
RtemsIntrReqGetAffinity_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqGetAffinity_Post_CPUSetObj_Check(
ctx,
entry.Post_CPUSetObj
);
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -93,6 +93,14 @@ typedef enum {
RtemsIntrReqGetAttributes_Post_Attributes_NA RtemsIntrReqGetAttributes_Post_Attributes_NA
} RtemsIntrReqGetAttributes_Post_Attributes; } RtemsIntrReqGetAttributes_Post_Attributes;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_Attributes_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Attributes : 2;
} RtemsIntrReqGetAttributes_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/get-attributes test case. * @brief Test context for spec:/rtems/intr/req/get-attributes test case.
*/ */
@@ -119,16 +127,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 2 ]; */
size_t pcs[ 2 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqGetAttributes_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqGetAttributes_Context; } RtemsIntrReqGetAttributes_Context;
static RtemsIntrReqGetAttributes_Context static RtemsIntrReqGetAttributes_Context
@@ -342,14 +367,6 @@ static void RtemsIntrReqGetAttributes_Action(
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_Attributes_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Attributes : 2;
} RtemsIntrReqGetAttributes_Entry;
static const RtemsIntrReqGetAttributes_Entry static const RtemsIntrReqGetAttributes_Entry
RtemsIntrReqGetAttributes_Entries[] = { RtemsIntrReqGetAttributes_Entries[] = {
{ 0, 0, 0, RtemsIntrReqGetAttributes_Post_Status_InvAddr, { 0, 0, 0, RtemsIntrReqGetAttributes_Post_Status_InvAddr,
@@ -371,8 +388,13 @@ static size_t RtemsIntrReqGetAttributes_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqGetAttributes_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqGetAttributes_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -387,13 +409,34 @@ static T_fixture RtemsIntrReqGetAttributes_Fixture = {
}; };
static inline RtemsIntrReqGetAttributes_Entry static inline RtemsIntrReqGetAttributes_Entry
RtemsIntrReqGetAttributes_GetEntry( size_t index ) RtemsIntrReqGetAttributes_PopEntry( RtemsIntrReqGetAttributes_Context *ctx )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqGetAttributes_Entries[ return RtemsIntrReqGetAttributes_Entries[
RtemsIntrReqGetAttributes_Map[ index ] RtemsIntrReqGetAttributes_Map[ index ]
]; ];
} }
static void RtemsIntrReqGetAttributes_TestVariant(
RtemsIntrReqGetAttributes_Context *ctx
)
{
RtemsIntrReqGetAttributes_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqGetAttributes_Pre_Attributes_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqGetAttributes_Action( ctx );
RtemsIntrReqGetAttributes_Post_Status_Check(
ctx,
ctx->Map.entry.Post_Status
);
RtemsIntrReqGetAttributes_Post_Attributes_Check(
ctx,
ctx->Map.entry.Post_Attributes
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqGetAttributes( void ) * @fn void T_case_body_RtemsIntrReqGetAttributes( void )
*/ */
@@ -403,36 +446,24 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqGetAttributes_Context *ctx; RtemsIntrReqGetAttributes_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqGetAttributes_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqGetAttributes_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqGetAttributes_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqGetAttributes_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqGetAttributes_Pre_Attributes_Obj; ctx->Map.pcs[ 1 ] = RtemsIntrReqGetAttributes_Pre_Attributes_Obj;
ctx->pcs[ 1 ] < RtemsIntrReqGetAttributes_Pre_Attributes_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqGetAttributes_Pre_Attributes_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
RtemsIntrReqGetAttributes_Entry entry; ctx->Map.entry = RtemsIntrReqGetAttributes_PopEntry( ctx );
entry = RtemsIntrReqGetAttributes_GetEntry( index );
++index;
RtemsIntrReqGetAttributes_Prepare( ctx ); RtemsIntrReqGetAttributes_Prepare( ctx );
RtemsIntrReqGetAttributes_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] ); RtemsIntrReqGetAttributes_TestVariant( ctx );
RtemsIntrReqGetAttributes_Pre_Attributes_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqGetAttributes_Action( ctx );
RtemsIntrReqGetAttributes_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqGetAttributes_Post_Attributes_Check(
ctx,
entry.Post_Attributes
);
} }
} }
} }

View File

@@ -107,6 +107,16 @@ typedef enum {
RtemsIntrReqHandlerIterate_Post_Visit_NA RtemsIntrReqHandlerIterate_Post_Visit_NA
} RtemsIntrReqHandlerIterate_Post_Visit; } RtemsIntrReqHandlerIterate_Post_Visit;
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_Routine_NA : 1;
uint16_t Pre_Init_NA : 1;
uint16_t Pre_ISR_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Visit : 2;
} RtemsIntrReqHandlerIterate_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/handler-iterate test case. * @brief Test context for spec:/rtems/intr/req/handler-iterate test case.
*/ */
@@ -160,16 +170,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 4 ]; */
size_t pcs[ 4 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqHandlerIterate_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqHandlerIterate_Context; } RtemsIntrReqHandlerIterate_Context;
static RtemsIntrReqHandlerIterate_Context static RtemsIntrReqHandlerIterate_Context
@@ -498,7 +525,7 @@ static void RtemsIntrReqHandlerIterate_Setup_Wrap( void *arg )
RtemsIntrReqHandlerIterate_Context *ctx; RtemsIntrReqHandlerIterate_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsIntrReqHandlerIterate_Setup( ctx ); RtemsIntrReqHandlerIterate_Setup( ctx );
} }
@@ -513,16 +540,6 @@ static void RtemsIntrReqHandlerIterate_Action(
} }
} }
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_Routine_NA : 1;
uint16_t Pre_Init_NA : 1;
uint16_t Pre_ISR_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Visit : 2;
} RtemsIntrReqHandlerIterate_Entry;
static const RtemsIntrReqHandlerIterate_Entry static const RtemsIntrReqHandlerIterate_Entry
RtemsIntrReqHandlerIterate_Entries[] = { RtemsIntrReqHandlerIterate_Entries[] = {
{ 0, 0, 0, 0, 0, RtemsIntrReqHandlerIterate_Post_Status_IncStat, { 0, 0, 0, 0, 0, RtemsIntrReqHandlerIterate_Post_Status_IncStat,
@@ -554,8 +571,13 @@ static size_t RtemsIntrReqHandlerIterate_Scope(
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqHandlerIterate_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqHandlerIterate_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -570,13 +592,36 @@ static T_fixture RtemsIntrReqHandlerIterate_Fixture = {
}; };
static inline RtemsIntrReqHandlerIterate_Entry static inline RtemsIntrReqHandlerIterate_Entry
RtemsIntrReqHandlerIterate_GetEntry( size_t index ) RtemsIntrReqHandlerIterate_PopEntry( RtemsIntrReqHandlerIterate_Context *ctx )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqHandlerIterate_Entries[ return RtemsIntrReqHandlerIterate_Entries[
RtemsIntrReqHandlerIterate_Map[ index ] RtemsIntrReqHandlerIterate_Map[ index ]
]; ];
} }
static void RtemsIntrReqHandlerIterate_TestVariant(
RtemsIntrReqHandlerIterate_Context *ctx
)
{
RtemsIntrReqHandlerIterate_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqHandlerIterate_Pre_Routine_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqHandlerIterate_Pre_Init_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsIntrReqHandlerIterate_Pre_ISR_Prepare( ctx, ctx->Map.pcs[ 3 ] );
RtemsIntrReqHandlerIterate_Action( ctx );
RtemsIntrReqHandlerIterate_Post_Status_Check(
ctx,
ctx->Map.entry.Post_Status
);
RtemsIntrReqHandlerIterate_Post_Visit_Check(
ctx,
ctx->Map.entry.Post_Visit
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqHandlerIterate( void ) * @fn void T_case_body_RtemsIntrReqHandlerIterate( void )
*/ */
@@ -586,47 +631,33 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqHandlerIterate_Context *ctx; RtemsIntrReqHandlerIterate_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqHandlerIterate_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqHandlerIterate_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqHandlerIterate_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqHandlerIterate_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqHandlerIterate_Pre_Routine_Valid; ctx->Map.pcs[ 1 ] = RtemsIntrReqHandlerIterate_Pre_Routine_Valid;
ctx->pcs[ 1 ] < RtemsIntrReqHandlerIterate_Pre_Routine_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqHandlerIterate_Pre_Routine_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqHandlerIterate_Pre_Init_Yes; ctx->Map.pcs[ 2 ] = RtemsIntrReqHandlerIterate_Pre_Init_Yes;
ctx->pcs[ 2 ] < RtemsIntrReqHandlerIterate_Pre_Init_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqHandlerIterate_Pre_Init_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsIntrReqHandlerIterate_Pre_ISR_Yes; ctx->Map.pcs[ 3 ] = RtemsIntrReqHandlerIterate_Pre_ISR_Yes;
ctx->pcs[ 3 ] < RtemsIntrReqHandlerIterate_Pre_ISR_NA; ctx->Map.pcs[ 3 ] < RtemsIntrReqHandlerIterate_Pre_ISR_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
RtemsIntrReqHandlerIterate_Entry entry; ctx->Map.entry = RtemsIntrReqHandlerIterate_PopEntry( ctx );
RtemsIntrReqHandlerIterate_TestVariant( ctx );
entry = RtemsIntrReqHandlerIterate_GetEntry( index );
++index;
RtemsIntrReqHandlerIterate_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqHandlerIterate_Pre_Routine_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqHandlerIterate_Pre_Init_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsIntrReqHandlerIterate_Pre_ISR_Prepare( ctx, ctx->pcs[ 3 ] );
RtemsIntrReqHandlerIterate_Action( ctx );
RtemsIntrReqHandlerIterate_Post_Status_Check(
ctx,
entry.Post_Status
);
RtemsIntrReqHandlerIterate_Post_Visit_Check( ctx, entry.Post_Visit );
} }
} }
} }

View File

@@ -100,6 +100,15 @@ typedef enum {
RtemsIntrReqIsPending_Post_IsPending_NA RtemsIntrReqIsPending_Post_IsPending_NA
} RtemsIntrReqIsPending_Post_IsPending; } RtemsIntrReqIsPending_Post_IsPending;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_Pending_NA : 1;
uint8_t Pre_IsPending_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsPending : 2;
} RtemsIntrReqIsPending_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/is-pending test case. * @brief Test context for spec:/rtems/intr/req/is-pending test case.
*/ */
@@ -141,16 +150,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 3 ]; */
size_t pcs[ 3 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqIsPending_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqIsPending_Context; } RtemsIntrReqIsPending_Context;
static RtemsIntrReqIsPending_Context static RtemsIntrReqIsPending_Context
@@ -514,15 +540,6 @@ static void RtemsIntrReqIsPending_Action( RtemsIntrReqIsPending_Context *ctx )
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_Pending_NA : 1;
uint8_t Pre_IsPending_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsPending : 2;
} RtemsIntrReqIsPending_Entry;
static const RtemsIntrReqIsPending_Entry static const RtemsIntrReqIsPending_Entry
RtemsIntrReqIsPending_Entries[] = { RtemsIntrReqIsPending_Entries[] = {
{ 0, 0, 0, 0, RtemsIntrReqIsPending_Post_Status_InvAddr, { 0, 0, 0, 0, RtemsIntrReqIsPending_Post_Status_InvAddr,
@@ -548,8 +565,8 @@ static size_t RtemsIntrReqIsPending_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqIsPending_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsIntrReqIsPending_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -563,64 +580,65 @@ static T_fixture RtemsIntrReqIsPending_Fixture = {
.initial_context = &RtemsIntrReqIsPending_Instance .initial_context = &RtemsIntrReqIsPending_Instance
}; };
static inline RtemsIntrReqIsPending_Entry RtemsIntrReqIsPending_GetEntry( static inline RtemsIntrReqIsPending_Entry RtemsIntrReqIsPending_PopEntry(
size_t index RtemsIntrReqIsPending_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqIsPending_Entries[ return RtemsIntrReqIsPending_Entries[
RtemsIntrReqIsPending_Map[ index ] RtemsIntrReqIsPending_Map[ index ]
]; ];
} }
static void RtemsIntrReqIsPending_TestVariant(
RtemsIntrReqIsPending_Context *ctx
)
{
RtemsIntrReqIsPending_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqIsPending_Pre_Pending_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqIsPending_Pre_IsPending_Prepare(
ctx,
ctx->Map.entry.Pre_IsPending_NA ? RtemsIntrReqIsPending_Pre_IsPending_NA : ctx->Map.pcs[ 2 ]
);
RtemsIntrReqIsPending_Action( ctx );
RtemsIntrReqIsPending_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsIntrReqIsPending_Post_IsPending_Check(
ctx,
ctx->Map.entry.Post_IsPending
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqIsPending( void ) * @fn void T_case_body_RtemsIntrReqIsPending( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsIntrReqIsPending, &RtemsIntrReqIsPending_Fixture ) T_TEST_CASE_FIXTURE( RtemsIntrReqIsPending, &RtemsIntrReqIsPending_Fixture )
{ {
RtemsIntrReqIsPending_Context *ctx; RtemsIntrReqIsPending_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqIsPending_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqIsPending_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqIsPending_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqIsPending_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqIsPending_Pre_Pending_Obj; ctx->Map.pcs[ 1 ] = RtemsIntrReqIsPending_Pre_Pending_Obj;
ctx->pcs[ 1 ] < RtemsIntrReqIsPending_Pre_Pending_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqIsPending_Pre_Pending_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqIsPending_Pre_IsPending_Yes; ctx->Map.pcs[ 2 ] = RtemsIntrReqIsPending_Pre_IsPending_Yes;
ctx->pcs[ 2 ] < RtemsIntrReqIsPending_Pre_IsPending_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqIsPending_Pre_IsPending_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
RtemsIntrReqIsPending_Entry entry; ctx->Map.entry = RtemsIntrReqIsPending_PopEntry( ctx );
size_t pcs[ 3 ]; RtemsIntrReqIsPending_TestVariant( ctx );
entry = RtemsIntrReqIsPending_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_IsPending_NA ) {
ctx->pcs[ 2 ] = RtemsIntrReqIsPending_Pre_IsPending_NA;
}
RtemsIntrReqIsPending_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqIsPending_Pre_Pending_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqIsPending_Pre_IsPending_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsIntrReqIsPending_Action( ctx );
RtemsIntrReqIsPending_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqIsPending_Post_IsPending_Check(
ctx,
entry.Post_IsPending
);
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -102,6 +102,15 @@ typedef enum {
RtemsIntrReqRaiseOn_Post_Pending_NA RtemsIntrReqRaiseOn_Post_Pending_NA
} RtemsIntrReqRaiseOn_Post_Pending; } RtemsIntrReqRaiseOn_Post_Pending;
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_CPU_NA : 1;
uint16_t Pre_CanRaiseOn_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Pending : 2;
} RtemsIntrReqRaiseOn_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/raise-on test case. * @brief Test context for spec:/rtems/intr/req/raise-on test case.
*/ */
@@ -143,16 +152,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 3 ]; */
size_t pcs[ 3 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqRaiseOn_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqRaiseOn_Context; } RtemsIntrReqRaiseOn_Context;
static RtemsIntrReqRaiseOn_Context static RtemsIntrReqRaiseOn_Context
@@ -542,7 +568,7 @@ static void RtemsIntrReqRaiseOn_Setup_Wrap( void *arg )
RtemsIntrReqRaiseOn_Context *ctx; RtemsIntrReqRaiseOn_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsIntrReqRaiseOn_Setup( ctx ); RtemsIntrReqRaiseOn_Setup( ctx );
} }
@@ -581,15 +607,6 @@ static void RtemsIntrReqRaiseOn_Action( RtemsIntrReqRaiseOn_Context *ctx )
} }
} }
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_CPU_NA : 1;
uint16_t Pre_CanRaiseOn_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Pending : 2;
} RtemsIntrReqRaiseOn_Entry;
static const RtemsIntrReqRaiseOn_Entry static const RtemsIntrReqRaiseOn_Entry
RtemsIntrReqRaiseOn_Entries[] = { RtemsIntrReqRaiseOn_Entries[] = {
{ 0, 0, 0, 1, RtemsIntrReqRaiseOn_Post_Status_InvId, { 0, 0, 0, 1, RtemsIntrReqRaiseOn_Post_Status_InvId,
@@ -627,8 +644,8 @@ static size_t RtemsIntrReqRaiseOn_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqRaiseOn_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsIntrReqRaiseOn_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -642,65 +659,65 @@ static T_fixture RtemsIntrReqRaiseOn_Fixture = {
.initial_context = &RtemsIntrReqRaiseOn_Instance .initial_context = &RtemsIntrReqRaiseOn_Instance
}; };
static inline RtemsIntrReqRaiseOn_Entry RtemsIntrReqRaiseOn_GetEntry( static inline RtemsIntrReqRaiseOn_Entry RtemsIntrReqRaiseOn_PopEntry(
size_t index RtemsIntrReqRaiseOn_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqRaiseOn_Entries[ return RtemsIntrReqRaiseOn_Entries[
RtemsIntrReqRaiseOn_Map[ index ] RtemsIntrReqRaiseOn_Map[ index ]
]; ];
} }
static void RtemsIntrReqRaiseOn_TestVariant( RtemsIntrReqRaiseOn_Context *ctx )
{
RtemsIntrReqRaiseOn_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqRaiseOn_Pre_CPU_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqRaiseOn_Pre_CanRaiseOn_Prepare(
ctx,
ctx->Map.entry.Pre_CanRaiseOn_NA ? RtemsIntrReqRaiseOn_Pre_CanRaiseOn_NA : ctx->Map.pcs[ 2 ]
);
RtemsIntrReqRaiseOn_Action( ctx );
RtemsIntrReqRaiseOn_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsIntrReqRaiseOn_Post_Pending_Check( ctx, ctx->Map.entry.Post_Pending );
}
/** /**
* @fn void T_case_body_RtemsIntrReqRaiseOn( void ) * @fn void T_case_body_RtemsIntrReqRaiseOn( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsIntrReqRaiseOn, &RtemsIntrReqRaiseOn_Fixture ) T_TEST_CASE_FIXTURE( RtemsIntrReqRaiseOn, &RtemsIntrReqRaiseOn_Fixture )
{ {
RtemsIntrReqRaiseOn_Context *ctx; RtemsIntrReqRaiseOn_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqRaiseOn_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqRaiseOn_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqRaiseOn_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqRaiseOn_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqRaiseOn_Pre_CPU_Online; ctx->Map.pcs[ 1 ] = RtemsIntrReqRaiseOn_Pre_CPU_Online;
ctx->pcs[ 1 ] < RtemsIntrReqRaiseOn_Pre_CPU_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqRaiseOn_Pre_CPU_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqRaiseOn_Pre_CanRaiseOn_Yes; ctx->Map.pcs[ 2 ] = RtemsIntrReqRaiseOn_Pre_CanRaiseOn_Yes;
ctx->pcs[ 2 ] < RtemsIntrReqRaiseOn_Pre_CanRaiseOn_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqRaiseOn_Pre_CanRaiseOn_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
RtemsIntrReqRaiseOn_Entry entry; ctx->Map.entry = RtemsIntrReqRaiseOn_PopEntry( ctx );
size_t pcs[ 3 ];
entry = RtemsIntrReqRaiseOn_GetEntry( index ); if ( ctx->Map.entry.Skip ) {
++index;
if ( entry.Skip ) {
continue; continue;
} }
memcpy( pcs, ctx->pcs, sizeof( pcs ) ); RtemsIntrReqRaiseOn_TestVariant( ctx );
if ( entry.Pre_CanRaiseOn_NA ) {
ctx->pcs[ 2 ] = RtemsIntrReqRaiseOn_Pre_CanRaiseOn_NA;
}
RtemsIntrReqRaiseOn_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqRaiseOn_Pre_CPU_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqRaiseOn_Pre_CanRaiseOn_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsIntrReqRaiseOn_Action( ctx );
RtemsIntrReqRaiseOn_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqRaiseOn_Post_Pending_Check( ctx, entry.Post_Pending );
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -93,6 +93,14 @@ typedef enum {
RtemsIntrReqRaise_Post_Pending_NA RtemsIntrReqRaise_Post_Pending_NA
} RtemsIntrReqRaise_Post_Pending; } RtemsIntrReqRaise_Post_Pending;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_CanRaise_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Pending : 2;
} RtemsIntrReqRaise_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/raise test case. * @brief Test context for spec:/rtems/intr/req/raise test case.
*/ */
@@ -124,16 +132,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 2 ]; */
size_t pcs[ 2 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqRaise_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqRaise_Context; } RtemsIntrReqRaise_Context;
static RtemsIntrReqRaise_Context static RtemsIntrReqRaise_Context
@@ -476,14 +501,6 @@ static void RtemsIntrReqRaise_Action( RtemsIntrReqRaise_Context *ctx )
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_CanRaise_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_Pending : 2;
} RtemsIntrReqRaise_Entry;
static const RtemsIntrReqRaise_Entry static const RtemsIntrReqRaise_Entry
RtemsIntrReqRaise_Entries[] = { RtemsIntrReqRaise_Entries[] = {
{ 0, 0, 1, RtemsIntrReqRaise_Post_Status_InvId, { 0, 0, 1, RtemsIntrReqRaise_Post_Status_InvId,
@@ -505,8 +522,8 @@ static size_t RtemsIntrReqRaise_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqRaise_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsIntrReqRaise_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -520,55 +537,54 @@ static T_fixture RtemsIntrReqRaise_Fixture = {
.initial_context = &RtemsIntrReqRaise_Instance .initial_context = &RtemsIntrReqRaise_Instance
}; };
static inline RtemsIntrReqRaise_Entry RtemsIntrReqRaise_GetEntry( static inline RtemsIntrReqRaise_Entry RtemsIntrReqRaise_PopEntry(
size_t index RtemsIntrReqRaise_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqRaise_Entries[ return RtemsIntrReqRaise_Entries[
RtemsIntrReqRaise_Map[ index ] RtemsIntrReqRaise_Map[ index ]
]; ];
} }
static void RtemsIntrReqRaise_TestVariant( RtemsIntrReqRaise_Context *ctx )
{
RtemsIntrReqRaise_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqRaise_Pre_CanRaise_Prepare(
ctx,
ctx->Map.entry.Pre_CanRaise_NA ? RtemsIntrReqRaise_Pre_CanRaise_NA : ctx->Map.pcs[ 1 ]
);
RtemsIntrReqRaise_Action( ctx );
RtemsIntrReqRaise_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsIntrReqRaise_Post_Pending_Check( ctx, ctx->Map.entry.Post_Pending );
}
/** /**
* @fn void T_case_body_RtemsIntrReqRaise( void ) * @fn void T_case_body_RtemsIntrReqRaise( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsIntrReqRaise, &RtemsIntrReqRaise_Fixture ) T_TEST_CASE_FIXTURE( RtemsIntrReqRaise, &RtemsIntrReqRaise_Fixture )
{ {
RtemsIntrReqRaise_Context *ctx; RtemsIntrReqRaise_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqRaise_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqRaise_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqRaise_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqRaise_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqRaise_Pre_CanRaise_Yes; ctx->Map.pcs[ 1 ] = RtemsIntrReqRaise_Pre_CanRaise_Yes;
ctx->pcs[ 1 ] < RtemsIntrReqRaise_Pre_CanRaise_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqRaise_Pre_CanRaise_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
RtemsIntrReqRaise_Entry entry; ctx->Map.entry = RtemsIntrReqRaise_PopEntry( ctx );
size_t pcs[ 2 ]; RtemsIntrReqRaise_TestVariant( ctx );
entry = RtemsIntrReqRaise_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_CanRaise_NA ) {
ctx->pcs[ 1 ] = RtemsIntrReqRaise_Pre_CanRaise_NA;
}
RtemsIntrReqRaise_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqRaise_Pre_CanRaise_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqRaise_Action( ctx );
RtemsIntrReqRaise_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqRaise_Post_Pending_Check( ctx, entry.Post_Pending );
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -108,6 +108,16 @@ typedef enum {
RtemsIntrReqSetAffinity_Post_SetAffinity_NA RtemsIntrReqSetAffinity_Post_SetAffinity_NA
} RtemsIntrReqSetAffinity_Post_SetAffinity; } RtemsIntrReqSetAffinity_Post_SetAffinity;
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_CPUSetKind_NA : 1;
uint16_t Pre_CPUSet_NA : 1;
uint16_t Pre_CanSetAffinity_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_SetAffinity : 2;
} RtemsIntrReqSetAffinity_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/set-affinity test case. * @brief Test context for spec:/rtems/intr/req/set-affinity test case.
*/ */
@@ -150,16 +160,33 @@ typedef struct {
*/ */
cpu_set_t *cpuset; cpu_set_t *cpuset;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 4 ]; */
size_t pcs[ 4 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqSetAffinity_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqSetAffinity_Context; } RtemsIntrReqSetAffinity_Context;
static RtemsIntrReqSetAffinity_Context static RtemsIntrReqSetAffinity_Context
@@ -467,7 +494,7 @@ static void RtemsIntrReqSetAffinity_Setup_Wrap( void *arg )
RtemsIntrReqSetAffinity_Context *ctx; RtemsIntrReqSetAffinity_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsIntrReqSetAffinity_Setup( ctx ); RtemsIntrReqSetAffinity_Setup( ctx );
} }
@@ -538,16 +565,6 @@ static void RtemsIntrReqSetAffinity_Action(
} }
} }
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Vector_NA : 1;
uint16_t Pre_CPUSetKind_NA : 1;
uint16_t Pre_CPUSet_NA : 1;
uint16_t Pre_CanSetAffinity_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_SetAffinity : 2;
} RtemsIntrReqSetAffinity_Entry;
static const RtemsIntrReqSetAffinity_Entry static const RtemsIntrReqSetAffinity_Entry
RtemsIntrReqSetAffinity_Entries[] = { RtemsIntrReqSetAffinity_Entries[] = {
{ 0, 0, 0, 0, 0, RtemsIntrReqSetAffinity_Post_Status_InvAddr, { 0, 0, 0, 0, 0, RtemsIntrReqSetAffinity_Post_Status_InvAddr,
@@ -575,8 +592,13 @@ static size_t RtemsIntrReqSetAffinity_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqSetAffinity_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqSetAffinity_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -590,15 +612,38 @@ static T_fixture RtemsIntrReqSetAffinity_Fixture = {
.initial_context = &RtemsIntrReqSetAffinity_Instance .initial_context = &RtemsIntrReqSetAffinity_Instance
}; };
static inline RtemsIntrReqSetAffinity_Entry RtemsIntrReqSetAffinity_GetEntry( static inline RtemsIntrReqSetAffinity_Entry RtemsIntrReqSetAffinity_PopEntry(
size_t index RtemsIntrReqSetAffinity_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqSetAffinity_Entries[ return RtemsIntrReqSetAffinity_Entries[
RtemsIntrReqSetAffinity_Map[ index ] RtemsIntrReqSetAffinity_Map[ index ]
]; ];
} }
static void RtemsIntrReqSetAffinity_TestVariant(
RtemsIntrReqSetAffinity_Context *ctx
)
{
RtemsIntrReqSetAffinity_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqSetAffinity_Pre_CPUSetKind_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqSetAffinity_Pre_CPUSet_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsIntrReqSetAffinity_Pre_CanSetAffinity_Prepare(
ctx,
ctx->Map.entry.Pre_CanSetAffinity_NA ? RtemsIntrReqSetAffinity_Pre_CanSetAffinity_NA : ctx->Map.pcs[ 3 ]
);
RtemsIntrReqSetAffinity_Action( ctx );
RtemsIntrReqSetAffinity_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsIntrReqSetAffinity_Post_SetAffinity_Check(
ctx,
ctx->Map.entry.Post_SetAffinity
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqSetAffinity( void ) * @fn void T_case_body_RtemsIntrReqSetAffinity( void )
*/ */
@@ -608,59 +653,34 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqSetAffinity_Context *ctx; RtemsIntrReqSetAffinity_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqSetAffinity_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqSetAffinity_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqSetAffinity_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqSetAffinity_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqSetAffinity_Pre_CPUSetKind_Valid; ctx->Map.pcs[ 1 ] = RtemsIntrReqSetAffinity_Pre_CPUSetKind_Valid;
ctx->pcs[ 1 ] < RtemsIntrReqSetAffinity_Pre_CPUSetKind_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqSetAffinity_Pre_CPUSetKind_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqSetAffinity_Pre_CPUSet_Valid; ctx->Map.pcs[ 2 ] = RtemsIntrReqSetAffinity_Pre_CPUSet_Valid;
ctx->pcs[ 2 ] < RtemsIntrReqSetAffinity_Pre_CPUSet_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqSetAffinity_Pre_CPUSet_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsIntrReqSetAffinity_Pre_CanSetAffinity_Yes; ctx->Map.pcs[ 3 ] = RtemsIntrReqSetAffinity_Pre_CanSetAffinity_Yes;
ctx->pcs[ 3 ] < RtemsIntrReqSetAffinity_Pre_CanSetAffinity_NA; ctx->Map.pcs[ 3 ] < RtemsIntrReqSetAffinity_Pre_CanSetAffinity_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
RtemsIntrReqSetAffinity_Entry entry; ctx->Map.entry = RtemsIntrReqSetAffinity_PopEntry( ctx );
size_t pcs[ 4 ];
entry = RtemsIntrReqSetAffinity_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_CanSetAffinity_NA ) {
ctx->pcs[ 3 ] = RtemsIntrReqSetAffinity_Pre_CanSetAffinity_NA;
}
RtemsIntrReqSetAffinity_Prepare( ctx ); RtemsIntrReqSetAffinity_Prepare( ctx );
RtemsIntrReqSetAffinity_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] ); RtemsIntrReqSetAffinity_TestVariant( ctx );
RtemsIntrReqSetAffinity_Pre_CPUSetKind_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqSetAffinity_Pre_CPUSet_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsIntrReqSetAffinity_Pre_CanSetAffinity_Prepare(
ctx,
ctx->pcs[ 3 ]
);
RtemsIntrReqSetAffinity_Action( ctx );
RtemsIntrReqSetAffinity_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqSetAffinity_Post_SetAffinity_Check(
ctx,
entry.Post_SetAffinity
);
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -102,6 +102,15 @@ typedef enum {
RtemsIntrReqVectorDisable_Post_IsEnabled_NA RtemsIntrReqVectorDisable_Post_IsEnabled_NA
} RtemsIntrReqVectorDisable_Post_IsEnabled; } RtemsIntrReqVectorDisable_Post_IsEnabled;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_IsEnabled_NA : 1;
uint8_t Pre_CanDisable_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsEnabled : 2;
} RtemsIntrReqVectorDisable_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/vector-disable test case. * @brief Test context for spec:/rtems/intr/req/vector-disable test case.
*/ */
@@ -128,16 +137,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 3 ]; */
size_t pcs[ 3 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqVectorDisable_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqVectorDisable_Context; } RtemsIntrReqVectorDisable_Context;
static RtemsIntrReqVectorDisable_Context static RtemsIntrReqVectorDisable_Context
@@ -513,15 +539,6 @@ static void RtemsIntrReqVectorDisable_Action(
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_IsEnabled_NA : 1;
uint8_t Pre_CanDisable_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsEnabled : 2;
} RtemsIntrReqVectorDisable_Entry;
static const RtemsIntrReqVectorDisable_Entry static const RtemsIntrReqVectorDisable_Entry
RtemsIntrReqVectorDisable_Entries[] = { RtemsIntrReqVectorDisable_Entries[] = {
{ 0, 0, 1, 1, RtemsIntrReqVectorDisable_Post_Status_InvId, { 0, 0, 1, 1, RtemsIntrReqVectorDisable_Post_Status_InvId,
@@ -545,8 +562,13 @@ static size_t RtemsIntrReqVectorDisable_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqVectorDisable_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqVectorDisable_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -561,13 +583,41 @@ static T_fixture RtemsIntrReqVectorDisable_Fixture = {
}; };
static inline RtemsIntrReqVectorDisable_Entry static inline RtemsIntrReqVectorDisable_Entry
RtemsIntrReqVectorDisable_GetEntry( size_t index ) RtemsIntrReqVectorDisable_PopEntry( RtemsIntrReqVectorDisable_Context *ctx )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqVectorDisable_Entries[ return RtemsIntrReqVectorDisable_Entries[
RtemsIntrReqVectorDisable_Map[ index ] RtemsIntrReqVectorDisable_Map[ index ]
]; ];
} }
static void RtemsIntrReqVectorDisable_TestVariant(
RtemsIntrReqVectorDisable_Context *ctx
)
{
RtemsIntrReqVectorDisable_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqVectorDisable_Pre_IsEnabled_Prepare(
ctx,
ctx->Map.entry.Pre_IsEnabled_NA ? RtemsIntrReqVectorDisable_Pre_IsEnabled_NA : ctx->Map.pcs[ 1 ]
);
RtemsIntrReqVectorDisable_Pre_CanDisable_Prepare(
ctx,
ctx->Map.entry.Pre_CanDisable_NA ? RtemsIntrReqVectorDisable_Pre_CanDisable_NA : ctx->Map.pcs[ 2 ]
);
RtemsIntrReqVectorDisable_Action( ctx );
RtemsIntrReqVectorDisable_Post_Status_Check(
ctx,
ctx->Map.entry.Post_Status
);
RtemsIntrReqVectorDisable_Post_IsEnabled_Check(
ctx,
ctx->Map.entry.Post_IsEnabled
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqVectorDisable( void ) * @fn void T_case_body_RtemsIntrReqVectorDisable( void )
*/ */
@@ -577,53 +627,28 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqVectorDisable_Context *ctx; RtemsIntrReqVectorDisable_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqVectorDisable_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqVectorDisable_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqVectorDisable_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqVectorDisable_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqVectorDisable_Pre_IsEnabled_Yes; ctx->Map.pcs[ 1 ] = RtemsIntrReqVectorDisable_Pre_IsEnabled_Yes;
ctx->pcs[ 1 ] < RtemsIntrReqVectorDisable_Pre_IsEnabled_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqVectorDisable_Pre_IsEnabled_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqVectorDisable_Pre_CanDisable_Yes; ctx->Map.pcs[ 2 ] = RtemsIntrReqVectorDisable_Pre_CanDisable_Yes;
ctx->pcs[ 2 ] < RtemsIntrReqVectorDisable_Pre_CanDisable_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqVectorDisable_Pre_CanDisable_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
RtemsIntrReqVectorDisable_Entry entry; ctx->Map.entry = RtemsIntrReqVectorDisable_PopEntry( ctx );
size_t pcs[ 3 ]; RtemsIntrReqVectorDisable_TestVariant( ctx );
entry = RtemsIntrReqVectorDisable_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_IsEnabled_NA ) {
ctx->pcs[ 1 ] = RtemsIntrReqVectorDisable_Pre_IsEnabled_NA;
}
if ( entry.Pre_CanDisable_NA ) {
ctx->pcs[ 2 ] = RtemsIntrReqVectorDisable_Pre_CanDisable_NA;
}
RtemsIntrReqVectorDisable_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqVectorDisable_Pre_IsEnabled_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqVectorDisable_Pre_CanDisable_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsIntrReqVectorDisable_Action( ctx );
RtemsIntrReqVectorDisable_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqVectorDisable_Post_IsEnabled_Check(
ctx,
entry.Post_IsEnabled
);
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -102,6 +102,15 @@ typedef enum {
RtemsIntrReqVectorEnable_Post_IsEnabled_NA RtemsIntrReqVectorEnable_Post_IsEnabled_NA
} RtemsIntrReqVectorEnable_Post_IsEnabled; } RtemsIntrReqVectorEnable_Post_IsEnabled;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_IsEnabled_NA : 1;
uint8_t Pre_CanEnable_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsEnabled : 2;
} RtemsIntrReqVectorEnable_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/vector-enable test case. * @brief Test context for spec:/rtems/intr/req/vector-enable test case.
*/ */
@@ -128,16 +137,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 3 ]; */
size_t pcs[ 3 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqVectorEnable_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqVectorEnable_Context; } RtemsIntrReqVectorEnable_Context;
static RtemsIntrReqVectorEnable_Context static RtemsIntrReqVectorEnable_Context
@@ -518,15 +544,6 @@ static void RtemsIntrReqVectorEnable_Action(
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_IsEnabled_NA : 1;
uint8_t Pre_CanEnable_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsEnabled : 2;
} RtemsIntrReqVectorEnable_Entry;
static const RtemsIntrReqVectorEnable_Entry static const RtemsIntrReqVectorEnable_Entry
RtemsIntrReqVectorEnable_Entries[] = { RtemsIntrReqVectorEnable_Entries[] = {
{ 0, 0, 1, 1, RtemsIntrReqVectorEnable_Post_Status_InvId, { 0, 0, 1, 1, RtemsIntrReqVectorEnable_Post_Status_InvId,
@@ -550,8 +567,13 @@ static size_t RtemsIntrReqVectorEnable_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsIntrReqVectorEnable_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsIntrReqVectorEnable_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -565,15 +587,43 @@ static T_fixture RtemsIntrReqVectorEnable_Fixture = {
.initial_context = &RtemsIntrReqVectorEnable_Instance .initial_context = &RtemsIntrReqVectorEnable_Instance
}; };
static inline RtemsIntrReqVectorEnable_Entry RtemsIntrReqVectorEnable_GetEntry( static inline RtemsIntrReqVectorEnable_Entry RtemsIntrReqVectorEnable_PopEntry(
size_t index RtemsIntrReqVectorEnable_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqVectorEnable_Entries[ return RtemsIntrReqVectorEnable_Entries[
RtemsIntrReqVectorEnable_Map[ index ] RtemsIntrReqVectorEnable_Map[ index ]
]; ];
} }
static void RtemsIntrReqVectorEnable_TestVariant(
RtemsIntrReqVectorEnable_Context *ctx
)
{
RtemsIntrReqVectorEnable_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqVectorEnable_Pre_IsEnabled_Prepare(
ctx,
ctx->Map.entry.Pre_IsEnabled_NA ? RtemsIntrReqVectorEnable_Pre_IsEnabled_NA : ctx->Map.pcs[ 1 ]
);
RtemsIntrReqVectorEnable_Pre_CanEnable_Prepare(
ctx,
ctx->Map.entry.Pre_CanEnable_NA ? RtemsIntrReqVectorEnable_Pre_CanEnable_NA : ctx->Map.pcs[ 2 ]
);
RtemsIntrReqVectorEnable_Action( ctx );
RtemsIntrReqVectorEnable_Post_Status_Check(
ctx,
ctx->Map.entry.Post_Status
);
RtemsIntrReqVectorEnable_Post_IsEnabled_Check(
ctx,
ctx->Map.entry.Post_IsEnabled
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqVectorEnable( void ) * @fn void T_case_body_RtemsIntrReqVectorEnable( void )
*/ */
@@ -583,53 +633,28 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqVectorEnable_Context *ctx; RtemsIntrReqVectorEnable_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqVectorEnable_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqVectorEnable_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqVectorEnable_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqVectorEnable_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqVectorEnable_Pre_IsEnabled_Yes; ctx->Map.pcs[ 1 ] = RtemsIntrReqVectorEnable_Pre_IsEnabled_Yes;
ctx->pcs[ 1 ] < RtemsIntrReqVectorEnable_Pre_IsEnabled_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqVectorEnable_Pre_IsEnabled_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqVectorEnable_Pre_CanEnable_Yes; ctx->Map.pcs[ 2 ] = RtemsIntrReqVectorEnable_Pre_CanEnable_Yes;
ctx->pcs[ 2 ] < RtemsIntrReqVectorEnable_Pre_CanEnable_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqVectorEnable_Pre_CanEnable_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
RtemsIntrReqVectorEnable_Entry entry; ctx->Map.entry = RtemsIntrReqVectorEnable_PopEntry( ctx );
size_t pcs[ 3 ]; RtemsIntrReqVectorEnable_TestVariant( ctx );
entry = RtemsIntrReqVectorEnable_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_IsEnabled_NA ) {
ctx->pcs[ 1 ] = RtemsIntrReqVectorEnable_Pre_IsEnabled_NA;
}
if ( entry.Pre_CanEnable_NA ) {
ctx->pcs[ 2 ] = RtemsIntrReqVectorEnable_Pre_CanEnable_NA;
}
RtemsIntrReqVectorEnable_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqVectorEnable_Pre_IsEnabled_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqVectorEnable_Pre_CanEnable_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsIntrReqVectorEnable_Action( ctx );
RtemsIntrReqVectorEnable_Post_Status_Check( ctx, entry.Post_Status );
RtemsIntrReqVectorEnable_Post_IsEnabled_Check(
ctx,
entry.Post_IsEnabled
);
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -101,6 +101,15 @@ typedef enum {
RtemsIntrReqVectorIsEnabled_Post_IsEnabled_NA RtemsIntrReqVectorIsEnabled_Post_IsEnabled_NA
} RtemsIntrReqVectorIsEnabled_Post_IsEnabled; } RtemsIntrReqVectorIsEnabled_Post_IsEnabled;
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_Enabled_NA : 1;
uint8_t Pre_IsEnabled_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsEnabled : 2;
} RtemsIntrReqVectorIsEnabled_Entry;
/** /**
* @brief Test context for spec:/rtems/intr/req/vector-is-enabled test case. * @brief Test context for spec:/rtems/intr/req/vector-is-enabled test case.
*/ */
@@ -143,16 +152,33 @@ typedef struct {
*/ */
rtems_status_code status; rtems_status_code status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 3 ]; */
size_t pcs[ 3 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsIntrReqVectorIsEnabled_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsIntrReqVectorIsEnabled_Context; } RtemsIntrReqVectorIsEnabled_Context;
static RtemsIntrReqVectorIsEnabled_Context static RtemsIntrReqVectorIsEnabled_Context
@@ -495,15 +521,6 @@ static void RtemsIntrReqVectorIsEnabled_Action(
} }
} }
typedef struct {
uint8_t Skip : 1;
uint8_t Pre_Vector_NA : 1;
uint8_t Pre_Enabled_NA : 1;
uint8_t Pre_IsEnabled_NA : 1;
uint8_t Post_Status : 2;
uint8_t Post_IsEnabled : 2;
} RtemsIntrReqVectorIsEnabled_Entry;
static const RtemsIntrReqVectorIsEnabled_Entry static const RtemsIntrReqVectorIsEnabled_Entry
RtemsIntrReqVectorIsEnabled_Entries[] = { RtemsIntrReqVectorIsEnabled_Entries[] = {
{ 0, 0, 0, 0, RtemsIntrReqVectorIsEnabled_Post_Status_InvAddr, { 0, 0, 0, 0, RtemsIntrReqVectorIsEnabled_Post_Status_InvAddr,
@@ -533,12 +550,12 @@ static size_t RtemsIntrReqVectorIsEnabled_Scope(
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( return T_get_scope(
RtemsIntrReqVectorIsEnabled_PreDesc, RtemsIntrReqVectorIsEnabled_PreDesc,
buf, buf,
n, n,
ctx->pcs ctx->Map.pcs
); );
} }
@@ -554,13 +571,40 @@ static T_fixture RtemsIntrReqVectorIsEnabled_Fixture = {
}; };
static inline RtemsIntrReqVectorIsEnabled_Entry static inline RtemsIntrReqVectorIsEnabled_Entry
RtemsIntrReqVectorIsEnabled_GetEntry( size_t index ) RtemsIntrReqVectorIsEnabled_PopEntry(
RtemsIntrReqVectorIsEnabled_Context *ctx
)
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsIntrReqVectorIsEnabled_Entries[ return RtemsIntrReqVectorIsEnabled_Entries[
RtemsIntrReqVectorIsEnabled_Map[ index ] RtemsIntrReqVectorIsEnabled_Map[ index ]
]; ];
} }
static void RtemsIntrReqVectorIsEnabled_TestVariant(
RtemsIntrReqVectorIsEnabled_Context *ctx
)
{
RtemsIntrReqVectorIsEnabled_Pre_Vector_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsIntrReqVectorIsEnabled_Pre_Enabled_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_Prepare(
ctx,
ctx->Map.entry.Pre_IsEnabled_NA ? RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_NA : ctx->Map.pcs[ 2 ]
);
RtemsIntrReqVectorIsEnabled_Action( ctx );
RtemsIntrReqVectorIsEnabled_Post_Status_Check(
ctx,
ctx->Map.entry.Post_Status
);
RtemsIntrReqVectorIsEnabled_Post_IsEnabled_Check(
ctx,
ctx->Map.entry.Post_IsEnabled
);
}
/** /**
* @fn void T_case_body_RtemsIntrReqVectorIsEnabled( void ) * @fn void T_case_body_RtemsIntrReqVectorIsEnabled( void )
*/ */
@@ -570,55 +614,28 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsIntrReqVectorIsEnabled_Context *ctx; RtemsIntrReqVectorIsEnabled_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsIntrReqVectorIsEnabled_Pre_Vector_Valid; ctx->Map.pcs[ 0 ] = RtemsIntrReqVectorIsEnabled_Pre_Vector_Valid;
ctx->pcs[ 0 ] < RtemsIntrReqVectorIsEnabled_Pre_Vector_NA; ctx->Map.pcs[ 0 ] < RtemsIntrReqVectorIsEnabled_Pre_Vector_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsIntrReqVectorIsEnabled_Pre_Enabled_Obj; ctx->Map.pcs[ 1 ] = RtemsIntrReqVectorIsEnabled_Pre_Enabled_Obj;
ctx->pcs[ 1 ] < RtemsIntrReqVectorIsEnabled_Pre_Enabled_NA; ctx->Map.pcs[ 1 ] < RtemsIntrReqVectorIsEnabled_Pre_Enabled_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_Yes; ctx->Map.pcs[ 2 ] = RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_Yes;
ctx->pcs[ 2 ] < RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_NA; ctx->Map.pcs[ 2 ] < RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
RtemsIntrReqVectorIsEnabled_Entry entry; ctx->Map.entry = RtemsIntrReqVectorIsEnabled_PopEntry( ctx );
size_t pcs[ 3 ]; RtemsIntrReqVectorIsEnabled_TestVariant( ctx );
entry = RtemsIntrReqVectorIsEnabled_GetEntry( index );
++index;
memcpy( pcs, ctx->pcs, sizeof( pcs ) );
if ( entry.Pre_IsEnabled_NA ) {
ctx->pcs[ 2 ] = RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_NA;
}
RtemsIntrReqVectorIsEnabled_Pre_Vector_Prepare( ctx, ctx->pcs[ 0 ] );
RtemsIntrReqVectorIsEnabled_Pre_Enabled_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsIntrReqVectorIsEnabled_Pre_IsEnabled_Prepare(
ctx,
ctx->pcs[ 2 ]
);
RtemsIntrReqVectorIsEnabled_Action( ctx );
RtemsIntrReqVectorIsEnabled_Post_Status_Check(
ctx,
entry.Post_Status
);
RtemsIntrReqVectorIsEnabled_Post_IsEnabled_Check(
ctx,
entry.Post_IsEnabled
);
memcpy( ctx->pcs, pcs, sizeof( ctx->pcs ) );
} }
} }
} }

View File

@@ -122,6 +122,18 @@ typedef enum {
RtemsSignalReqCatch_Post_ASRInfo_NA RtemsSignalReqCatch_Post_ASRInfo_NA
} RtemsSignalReqCatch_Post_ASRInfo; } RtemsSignalReqCatch_Post_ASRInfo;
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Pending_NA : 1;
uint16_t Pre_Handler_NA : 1;
uint16_t Pre_Preempt_NA : 1;
uint16_t Pre_Timeslice_NA : 1;
uint16_t Pre_ASR_NA : 1;
uint16_t Pre_IntLvl_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_ASRInfo : 3;
} RtemsSignalReqCatch_Entry;
/** /**
* @brief Test context for spec:/rtems/signal/req/catch test case. * @brief Test context for spec:/rtems/signal/req/catch test case.
*/ */
@@ -196,16 +208,33 @@ typedef struct {
*/ */
rtems_status_code send_status; rtems_status_code send_status;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 6 ]; */
size_t pcs[ 6 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsSignalReqCatch_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsSignalReqCatch_Context; } RtemsSignalReqCatch_Context;
static RtemsSignalReqCatch_Context static RtemsSignalReqCatch_Context
@@ -685,7 +714,7 @@ static void RtemsSignalReqCatch_Setup_Wrap( void *arg )
RtemsSignalReqCatch_Context *ctx; RtemsSignalReqCatch_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsSignalReqCatch_Setup( ctx ); RtemsSignalReqCatch_Setup( ctx );
} }
@@ -700,7 +729,7 @@ static void RtemsSignalReqCatch_Teardown_Wrap( void *arg )
RtemsSignalReqCatch_Context *ctx; RtemsSignalReqCatch_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsSignalReqCatch_Teardown( ctx ); RtemsSignalReqCatch_Teardown( ctx );
} }
@@ -745,18 +774,6 @@ static void RtemsSignalReqCatch_Action( RtemsSignalReqCatch_Context *ctx )
T_rsc_success( sc ); T_rsc_success( sc );
} }
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Pending_NA : 1;
uint16_t Pre_Handler_NA : 1;
uint16_t Pre_Preempt_NA : 1;
uint16_t Pre_Timeslice_NA : 1;
uint16_t Pre_ASR_NA : 1;
uint16_t Pre_IntLvl_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_ASRInfo : 3;
} RtemsSignalReqCatch_Entry;
static const RtemsSignalReqCatch_Entry static const RtemsSignalReqCatch_Entry
RtemsSignalReqCatch_Entries[] = { RtemsSignalReqCatch_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, RtemsSignalReqCatch_Post_Status_Ok, { 0, 0, 0, 0, 0, 0, 0, RtemsSignalReqCatch_Post_Status_Ok,
@@ -795,8 +812,8 @@ static size_t RtemsSignalReqCatch_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsSignalReqCatch_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsSignalReqCatch_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -810,75 +827,76 @@ static T_fixture RtemsSignalReqCatch_Fixture = {
.initial_context = &RtemsSignalReqCatch_Instance .initial_context = &RtemsSignalReqCatch_Instance
}; };
static inline RtemsSignalReqCatch_Entry RtemsSignalReqCatch_GetEntry( static inline RtemsSignalReqCatch_Entry RtemsSignalReqCatch_PopEntry(
size_t index RtemsSignalReqCatch_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsSignalReqCatch_Entries[ return RtemsSignalReqCatch_Entries[
RtemsSignalReqCatch_Map[ index ] RtemsSignalReqCatch_Map[ index ]
]; ];
} }
static void RtemsSignalReqCatch_TestVariant( RtemsSignalReqCatch_Context *ctx )
{
RtemsSignalReqCatch_Pre_Pending_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsSignalReqCatch_Pre_Handler_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsSignalReqCatch_Pre_Preempt_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsSignalReqCatch_Pre_Timeslice_Prepare( ctx, ctx->Map.pcs[ 3 ] );
RtemsSignalReqCatch_Pre_ASR_Prepare( ctx, ctx->Map.pcs[ 4 ] );
RtemsSignalReqCatch_Pre_IntLvl_Prepare( ctx, ctx->Map.pcs[ 5 ] );
RtemsSignalReqCatch_Action( ctx );
RtemsSignalReqCatch_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsSignalReqCatch_Post_ASRInfo_Check( ctx, ctx->Map.entry.Post_ASRInfo );
}
/** /**
* @fn void T_case_body_RtemsSignalReqCatch( void ) * @fn void T_case_body_RtemsSignalReqCatch( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsSignalReqCatch, &RtemsSignalReqCatch_Fixture ) T_TEST_CASE_FIXTURE( RtemsSignalReqCatch, &RtemsSignalReqCatch_Fixture )
{ {
RtemsSignalReqCatch_Context *ctx; RtemsSignalReqCatch_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsSignalReqCatch_Pre_Pending_Yes; ctx->Map.pcs[ 0 ] = RtemsSignalReqCatch_Pre_Pending_Yes;
ctx->pcs[ 0 ] < RtemsSignalReqCatch_Pre_Pending_NA; ctx->Map.pcs[ 0 ] < RtemsSignalReqCatch_Pre_Pending_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsSignalReqCatch_Pre_Handler_Invalid; ctx->Map.pcs[ 1 ] = RtemsSignalReqCatch_Pre_Handler_Invalid;
ctx->pcs[ 1 ] < RtemsSignalReqCatch_Pre_Handler_NA; ctx->Map.pcs[ 1 ] < RtemsSignalReqCatch_Pre_Handler_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsSignalReqCatch_Pre_Preempt_Yes; ctx->Map.pcs[ 2 ] = RtemsSignalReqCatch_Pre_Preempt_Yes;
ctx->pcs[ 2 ] < RtemsSignalReqCatch_Pre_Preempt_NA; ctx->Map.pcs[ 2 ] < RtemsSignalReqCatch_Pre_Preempt_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsSignalReqCatch_Pre_Timeslice_Yes; ctx->Map.pcs[ 3 ] = RtemsSignalReqCatch_Pre_Timeslice_Yes;
ctx->pcs[ 3 ] < RtemsSignalReqCatch_Pre_Timeslice_NA; ctx->Map.pcs[ 3 ] < RtemsSignalReqCatch_Pre_Timeslice_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
for ( for (
ctx->pcs[ 4 ] = RtemsSignalReqCatch_Pre_ASR_Yes; ctx->Map.pcs[ 4 ] = RtemsSignalReqCatch_Pre_ASR_Yes;
ctx->pcs[ 4 ] < RtemsSignalReqCatch_Pre_ASR_NA; ctx->Map.pcs[ 4 ] < RtemsSignalReqCatch_Pre_ASR_NA;
++ctx->pcs[ 4 ] ++ctx->Map.pcs[ 4 ]
) { ) {
for ( for (
ctx->pcs[ 5 ] = RtemsSignalReqCatch_Pre_IntLvl_Zero; ctx->Map.pcs[ 5 ] = RtemsSignalReqCatch_Pre_IntLvl_Zero;
ctx->pcs[ 5 ] < RtemsSignalReqCatch_Pre_IntLvl_NA; ctx->Map.pcs[ 5 ] < RtemsSignalReqCatch_Pre_IntLvl_NA;
++ctx->pcs[ 5 ] ++ctx->Map.pcs[ 5 ]
) { ) {
RtemsSignalReqCatch_Entry entry; ctx->Map.entry = RtemsSignalReqCatch_PopEntry( ctx );
entry = RtemsSignalReqCatch_GetEntry( index );
++index;
RtemsSignalReqCatch_Prepare( ctx ); RtemsSignalReqCatch_Prepare( ctx );
RtemsSignalReqCatch_Pre_Pending_Prepare( ctx, ctx->pcs[ 0 ] ); RtemsSignalReqCatch_TestVariant( ctx );
RtemsSignalReqCatch_Pre_Handler_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsSignalReqCatch_Pre_Preempt_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsSignalReqCatch_Pre_Timeslice_Prepare( ctx, ctx->pcs[ 3 ] );
RtemsSignalReqCatch_Pre_ASR_Prepare( ctx, ctx->pcs[ 4 ] );
RtemsSignalReqCatch_Pre_IntLvl_Prepare( ctx, ctx->pcs[ 5 ] );
RtemsSignalReqCatch_Action( ctx );
RtemsSignalReqCatch_Post_Status_Check( ctx, entry.Post_Status );
RtemsSignalReqCatch_Post_ASRInfo_Check(
ctx,
entry.Post_ASRInfo
);
} }
} }
} }

View File

@@ -120,6 +120,18 @@ typedef enum {
RtemsSignalReqSend_Post_Recursive_NA RtemsSignalReqSend_Post_Recursive_NA
} RtemsSignalReqSend_Post_Recursive; } RtemsSignalReqSend_Post_Recursive;
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Task_NA : 1;
uint16_t Pre_Set_NA : 1;
uint16_t Pre_Handler_NA : 1;
uint16_t Pre_ASR_NA : 1;
uint16_t Pre_Nested_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Handler : 3;
uint16_t Post_Recursive : 2;
} RtemsSignalReqSend_Entry;
/** /**
* @brief Test context for spec:/rtems/signal/req/send test case. * @brief Test context for spec:/rtems/signal/req/send test case.
*/ */
@@ -152,16 +164,33 @@ typedef struct {
rtems_signal_set signal_set; rtems_signal_set signal_set;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 5 ]; */
size_t pcs[ 5 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsSignalReqSend_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsSignalReqSend_Context; } RtemsSignalReqSend_Context;
static RtemsSignalReqSend_Context static RtemsSignalReqSend_Context
@@ -658,7 +687,7 @@ static void RtemsSignalReqSend_Setup_Wrap( void *arg )
RtemsSignalReqSend_Context *ctx; RtemsSignalReqSend_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsSignalReqSend_Setup( ctx ); RtemsSignalReqSend_Setup( ctx );
} }
@@ -673,7 +702,7 @@ static void RtemsSignalReqSend_Teardown_Wrap( void *arg )
RtemsSignalReqSend_Context *ctx; RtemsSignalReqSend_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsSignalReqSend_Teardown( ctx ); RtemsSignalReqSend_Teardown( ctx );
} }
@@ -730,18 +759,6 @@ static void RtemsSignalReqSend_Action( RtemsSignalReqSend_Context *ctx )
} }
} }
typedef struct {
uint16_t Skip : 1;
uint16_t Pre_Task_NA : 1;
uint16_t Pre_Set_NA : 1;
uint16_t Pre_Handler_NA : 1;
uint16_t Pre_ASR_NA : 1;
uint16_t Pre_Nested_NA : 1;
uint16_t Post_Status : 3;
uint16_t Post_Handler : 3;
uint16_t Post_Recursive : 2;
} RtemsSignalReqSend_Entry;
static const RtemsSignalReqSend_Entry static const RtemsSignalReqSend_Entry
RtemsSignalReqSend_Entries[] = { RtemsSignalReqSend_Entries[] = {
{ 0, 0, 0, 0, 0, 0, RtemsSignalReqSend_Post_Status_InvNum, { 0, 0, 0, 0, 0, 0, RtemsSignalReqSend_Post_Status_InvNum,
@@ -782,8 +799,8 @@ static size_t RtemsSignalReqSend_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsSignalReqSend_PreDesc, buf, n, ctx->pcs ); return T_get_scope( RtemsSignalReqSend_PreDesc, buf, n, ctx->Map.pcs );
} }
return 0; return 0;
@@ -797,70 +814,74 @@ static T_fixture RtemsSignalReqSend_Fixture = {
.initial_context = &RtemsSignalReqSend_Instance .initial_context = &RtemsSignalReqSend_Instance
}; };
static inline RtemsSignalReqSend_Entry RtemsSignalReqSend_GetEntry( static inline RtemsSignalReqSend_Entry RtemsSignalReqSend_PopEntry(
size_t index RtemsSignalReqSend_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsSignalReqSend_Entries[ return RtemsSignalReqSend_Entries[
RtemsSignalReqSend_Map[ index ] RtemsSignalReqSend_Map[ index ]
]; ];
} }
static void RtemsSignalReqSend_TestVariant( RtemsSignalReqSend_Context *ctx )
{
RtemsSignalReqSend_Pre_Task_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsSignalReqSend_Pre_Set_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsSignalReqSend_Pre_Handler_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsSignalReqSend_Pre_ASR_Prepare( ctx, ctx->Map.pcs[ 3 ] );
RtemsSignalReqSend_Pre_Nested_Prepare( ctx, ctx->Map.pcs[ 4 ] );
RtemsSignalReqSend_Action( ctx );
RtemsSignalReqSend_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
RtemsSignalReqSend_Post_Handler_Check( ctx, ctx->Map.entry.Post_Handler );
RtemsSignalReqSend_Post_Recursive_Check(
ctx,
ctx->Map.entry.Post_Recursive
);
}
/** /**
* @fn void T_case_body_RtemsSignalReqSend( void ) * @fn void T_case_body_RtemsSignalReqSend( void )
*/ */
T_TEST_CASE_FIXTURE( RtemsSignalReqSend, &RtemsSignalReqSend_Fixture ) T_TEST_CASE_FIXTURE( RtemsSignalReqSend, &RtemsSignalReqSend_Fixture )
{ {
RtemsSignalReqSend_Context *ctx; RtemsSignalReqSend_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsSignalReqSend_Pre_Task_NoObj; ctx->Map.pcs[ 0 ] = RtemsSignalReqSend_Pre_Task_NoObj;
ctx->pcs[ 0 ] < RtemsSignalReqSend_Pre_Task_NA; ctx->Map.pcs[ 0 ] < RtemsSignalReqSend_Pre_Task_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsSignalReqSend_Pre_Set_Zero; ctx->Map.pcs[ 1 ] = RtemsSignalReqSend_Pre_Set_Zero;
ctx->pcs[ 1 ] < RtemsSignalReqSend_Pre_Set_NA; ctx->Map.pcs[ 1 ] < RtemsSignalReqSend_Pre_Set_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsSignalReqSend_Pre_Handler_Invalid; ctx->Map.pcs[ 2 ] = RtemsSignalReqSend_Pre_Handler_Invalid;
ctx->pcs[ 2 ] < RtemsSignalReqSend_Pre_Handler_NA; ctx->Map.pcs[ 2 ] < RtemsSignalReqSend_Pre_Handler_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsSignalReqSend_Pre_ASR_Enabled; ctx->Map.pcs[ 3 ] = RtemsSignalReqSend_Pre_ASR_Enabled;
ctx->pcs[ 3 ] < RtemsSignalReqSend_Pre_ASR_NA; ctx->Map.pcs[ 3 ] < RtemsSignalReqSend_Pre_ASR_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
for ( for (
ctx->pcs[ 4 ] = RtemsSignalReqSend_Pre_Nested_Yes; ctx->Map.pcs[ 4 ] = RtemsSignalReqSend_Pre_Nested_Yes;
ctx->pcs[ 4 ] < RtemsSignalReqSend_Pre_Nested_NA; ctx->Map.pcs[ 4 ] < RtemsSignalReqSend_Pre_Nested_NA;
++ctx->pcs[ 4 ] ++ctx->Map.pcs[ 4 ]
) { ) {
RtemsSignalReqSend_Entry entry; ctx->Map.entry = RtemsSignalReqSend_PopEntry( ctx );
entry = RtemsSignalReqSend_GetEntry( index );
++index;
RtemsSignalReqSend_Prepare( ctx ); RtemsSignalReqSend_Prepare( ctx );
RtemsSignalReqSend_Pre_Task_Prepare( ctx, ctx->pcs[ 0 ] ); RtemsSignalReqSend_TestVariant( ctx );
RtemsSignalReqSend_Pre_Set_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsSignalReqSend_Pre_Handler_Prepare( ctx, ctx->pcs[ 2 ] );
RtemsSignalReqSend_Pre_ASR_Prepare( ctx, ctx->pcs[ 3 ] );
RtemsSignalReqSend_Pre_Nested_Prepare( ctx, ctx->pcs[ 4 ] );
RtemsSignalReqSend_Action( ctx );
RtemsSignalReqSend_Post_Status_Check( ctx, entry.Post_Status );
RtemsSignalReqSend_Post_Handler_Check( ctx, entry.Post_Handler );
RtemsSignalReqSend_Post_Recursive_Check(
ctx,
entry.Post_Recursive
);
} }
} }
} }

View File

@@ -147,6 +147,22 @@ typedef enum {
RtemsTaskReqCreateErrors_Post_DelExt_NA RtemsTaskReqCreateErrors_Post_DelExt_NA
} RtemsTaskReqCreateErrors_Post_DelExt; } RtemsTaskReqCreateErrors_Post_DelExt;
typedef struct {
uint32_t Skip : 1;
uint32_t Pre_Name_NA : 1;
uint32_t Pre_Id_NA : 1;
uint32_t Pre_SysTsk_NA : 1;
uint32_t Pre_Prio_NA : 1;
uint32_t Pre_Free_NA : 1;
uint32_t Pre_Stack_NA : 1;
uint32_t Pre_Ext_NA : 1;
uint32_t Post_Status : 3;
uint32_t Post_Name : 2;
uint32_t Post_IdVar : 2;
uint32_t Post_CreateExt : 2;
uint32_t Post_DelExt : 2;
} RtemsTaskReqCreateErrors_Entry;
/** /**
* @brief Test context for spec:/rtems/task/req/create-errors test case. * @brief Test context for spec:/rtems/task/req/create-errors test case.
*/ */
@@ -175,16 +191,33 @@ typedef struct {
void *seized_objects; void *seized_objects;
/** struct {
* @brief This member defines the pre-condition states for the next action. /**
*/ * @brief This member defines the pre-condition states for the next action.
size_t pcs[ 7 ]; */
size_t pcs[ 7 ];
/** /**
* @brief This member indicates if the test action loop is currently * @brief If this member is true, then the test action loop is executed.
* executed. */
*/ bool in_action_loop;
bool in_action_loop;
/**
* @brief This member contains the next transition map index.
*/
size_t index;
/**
* @brief This member contains the current transition map entry.
*/
RtemsTaskReqCreateErrors_Entry entry;
/**
* @brief If this member is true, then the current transition variant
* should be skipped.
*/
bool skip;
} Map;
} RtemsTaskReqCreateErrors_Context; } RtemsTaskReqCreateErrors_Context;
static RtemsTaskReqCreateErrors_Context static RtemsTaskReqCreateErrors_Context
@@ -709,7 +742,7 @@ static void RtemsTaskReqCreateErrors_Setup_Wrap( void *arg )
RtemsTaskReqCreateErrors_Context *ctx; RtemsTaskReqCreateErrors_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsTaskReqCreateErrors_Setup( ctx ); RtemsTaskReqCreateErrors_Setup( ctx );
} }
@@ -728,7 +761,7 @@ static void RtemsTaskReqCreateErrors_Teardown_Wrap( void *arg )
RtemsTaskReqCreateErrors_Context *ctx; RtemsTaskReqCreateErrors_Context *ctx;
ctx = arg; ctx = arg;
ctx->in_action_loop = false; ctx->Map.in_action_loop = false;
RtemsTaskReqCreateErrors_Teardown( ctx ); RtemsTaskReqCreateErrors_Teardown( ctx );
} }
@@ -775,22 +808,6 @@ static void RtemsTaskReqCreateErrors_Cleanup(
T_surrender_objects( &ctx->seized_objects, rtems_task_delete ); T_surrender_objects( &ctx->seized_objects, rtems_task_delete );
} }
typedef struct {
uint32_t Skip : 1;
uint32_t Pre_Name_NA : 1;
uint32_t Pre_Id_NA : 1;
uint32_t Pre_SysTsk_NA : 1;
uint32_t Pre_Prio_NA : 1;
uint32_t Pre_Free_NA : 1;
uint32_t Pre_Stack_NA : 1;
uint32_t Pre_Ext_NA : 1;
uint32_t Post_Status : 3;
uint32_t Post_Name : 2;
uint32_t Post_IdVar : 2;
uint32_t Post_CreateExt : 2;
uint32_t Post_DelExt : 2;
} RtemsTaskReqCreateErrors_Entry;
static const RtemsTaskReqCreateErrors_Entry static const RtemsTaskReqCreateErrors_Entry
RtemsTaskReqCreateErrors_Entries[] = { RtemsTaskReqCreateErrors_Entries[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqCreateErrors_Post_Status_InvName, { 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqCreateErrors_Post_Status_InvName,
@@ -852,8 +869,13 @@ static size_t RtemsTaskReqCreateErrors_Scope( void *arg, char *buf, size_t n )
ctx = arg; ctx = arg;
if ( ctx->in_action_loop ) { if ( ctx->Map.in_action_loop ) {
return T_get_scope( RtemsTaskReqCreateErrors_PreDesc, buf, n, ctx->pcs ); return T_get_scope(
RtemsTaskReqCreateErrors_PreDesc,
buf,
n,
ctx->Map.pcs
);
} }
return 0; return 0;
@@ -867,15 +889,47 @@ static T_fixture RtemsTaskReqCreateErrors_Fixture = {
.initial_context = &RtemsTaskReqCreateErrors_Instance .initial_context = &RtemsTaskReqCreateErrors_Instance
}; };
static inline RtemsTaskReqCreateErrors_Entry RtemsTaskReqCreateErrors_GetEntry( static inline RtemsTaskReqCreateErrors_Entry RtemsTaskReqCreateErrors_PopEntry(
size_t index RtemsTaskReqCreateErrors_Context *ctx
) )
{ {
size_t index;
index = ctx->Map.index;
ctx->Map.index = index + 1;
return RtemsTaskReqCreateErrors_Entries[ return RtemsTaskReqCreateErrors_Entries[
RtemsTaskReqCreateErrors_Map[ index ] RtemsTaskReqCreateErrors_Map[ index ]
]; ];
} }
static void RtemsTaskReqCreateErrors_TestVariant(
RtemsTaskReqCreateErrors_Context *ctx
)
{
RtemsTaskReqCreateErrors_Pre_Name_Prepare( ctx, ctx->Map.pcs[ 0 ] );
RtemsTaskReqCreateErrors_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 1 ] );
RtemsTaskReqCreateErrors_Pre_SysTsk_Prepare( ctx, ctx->Map.pcs[ 2 ] );
RtemsTaskReqCreateErrors_Pre_Prio_Prepare( ctx, ctx->Map.pcs[ 3 ] );
RtemsTaskReqCreateErrors_Pre_Free_Prepare( ctx, ctx->Map.pcs[ 4 ] );
RtemsTaskReqCreateErrors_Pre_Stack_Prepare( ctx, ctx->Map.pcs[ 5 ] );
RtemsTaskReqCreateErrors_Pre_Ext_Prepare( ctx, ctx->Map.pcs[ 6 ] );
RtemsTaskReqCreateErrors_Action( ctx );
RtemsTaskReqCreateErrors_Post_Status_Check(
ctx,
ctx->Map.entry.Post_Status
);
RtemsTaskReqCreateErrors_Post_Name_Check( ctx, ctx->Map.entry.Post_Name );
RtemsTaskReqCreateErrors_Post_IdVar_Check( ctx, ctx->Map.entry.Post_IdVar );
RtemsTaskReqCreateErrors_Post_CreateExt_Check(
ctx,
ctx->Map.entry.Post_CreateExt
);
RtemsTaskReqCreateErrors_Post_DelExt_Check(
ctx,
ctx->Map.entry.Post_DelExt
);
}
/** /**
* @fn void T_case_body_RtemsTaskReqCreateErrors( void ) * @fn void T_case_body_RtemsTaskReqCreateErrors( void )
*/ */
@@ -885,96 +939,49 @@ T_TEST_CASE_FIXTURE(
) )
{ {
RtemsTaskReqCreateErrors_Context *ctx; RtemsTaskReqCreateErrors_Context *ctx;
size_t index;
ctx = T_fixture_context(); ctx = T_fixture_context();
ctx->in_action_loop = true; ctx->Map.in_action_loop = true;
index = 0; ctx->Map.index = 0;
for ( for (
ctx->pcs[ 0 ] = RtemsTaskReqCreateErrors_Pre_Name_Valid; ctx->Map.pcs[ 0 ] = RtemsTaskReqCreateErrors_Pre_Name_Valid;
ctx->pcs[ 0 ] < RtemsTaskReqCreateErrors_Pre_Name_NA; ctx->Map.pcs[ 0 ] < RtemsTaskReqCreateErrors_Pre_Name_NA;
++ctx->pcs[ 0 ] ++ctx->Map.pcs[ 0 ]
) { ) {
for ( for (
ctx->pcs[ 1 ] = RtemsTaskReqCreateErrors_Pre_Id_Valid; ctx->Map.pcs[ 1 ] = RtemsTaskReqCreateErrors_Pre_Id_Valid;
ctx->pcs[ 1 ] < RtemsTaskReqCreateErrors_Pre_Id_NA; ctx->Map.pcs[ 1 ] < RtemsTaskReqCreateErrors_Pre_Id_NA;
++ctx->pcs[ 1 ] ++ctx->Map.pcs[ 1 ]
) { ) {
for ( for (
ctx->pcs[ 2 ] = RtemsTaskReqCreateErrors_Pre_SysTsk_Yes; ctx->Map.pcs[ 2 ] = RtemsTaskReqCreateErrors_Pre_SysTsk_Yes;
ctx->pcs[ 2 ] < RtemsTaskReqCreateErrors_Pre_SysTsk_NA; ctx->Map.pcs[ 2 ] < RtemsTaskReqCreateErrors_Pre_SysTsk_NA;
++ctx->pcs[ 2 ] ++ctx->Map.pcs[ 2 ]
) { ) {
for ( for (
ctx->pcs[ 3 ] = RtemsTaskReqCreateErrors_Pre_Prio_Valid; ctx->Map.pcs[ 3 ] = RtemsTaskReqCreateErrors_Pre_Prio_Valid;
ctx->pcs[ 3 ] < RtemsTaskReqCreateErrors_Pre_Prio_NA; ctx->Map.pcs[ 3 ] < RtemsTaskReqCreateErrors_Pre_Prio_NA;
++ctx->pcs[ 3 ] ++ctx->Map.pcs[ 3 ]
) { ) {
for ( for (
ctx->pcs[ 4 ] = RtemsTaskReqCreateErrors_Pre_Free_Yes; ctx->Map.pcs[ 4 ] = RtemsTaskReqCreateErrors_Pre_Free_Yes;
ctx->pcs[ 4 ] < RtemsTaskReqCreateErrors_Pre_Free_NA; ctx->Map.pcs[ 4 ] < RtemsTaskReqCreateErrors_Pre_Free_NA;
++ctx->pcs[ 4 ] ++ctx->Map.pcs[ 4 ]
) { ) {
for ( for (
ctx->pcs[ 5 ] = RtemsTaskReqCreateErrors_Pre_Stack_Normal; ctx->Map.pcs[ 5 ] = RtemsTaskReqCreateErrors_Pre_Stack_Normal;
ctx->pcs[ 5 ] < RtemsTaskReqCreateErrors_Pre_Stack_NA; ctx->Map.pcs[ 5 ] < RtemsTaskReqCreateErrors_Pre_Stack_NA;
++ctx->pcs[ 5 ] ++ctx->Map.pcs[ 5 ]
) { ) {
for ( for (
ctx->pcs[ 6 ] = RtemsTaskReqCreateErrors_Pre_Ext_Ok; ctx->Map.pcs[ 6 ] = RtemsTaskReqCreateErrors_Pre_Ext_Ok;
ctx->pcs[ 6 ] < RtemsTaskReqCreateErrors_Pre_Ext_NA; ctx->Map.pcs[ 6 ] < RtemsTaskReqCreateErrors_Pre_Ext_NA;
++ctx->pcs[ 6 ] ++ctx->Map.pcs[ 6 ]
) { ) {
RtemsTaskReqCreateErrors_Entry entry; ctx->Map.entry = RtemsTaskReqCreateErrors_PopEntry( ctx );
entry = RtemsTaskReqCreateErrors_GetEntry( index );
++index;
RtemsTaskReqCreateErrors_Prepare( ctx ); RtemsTaskReqCreateErrors_Prepare( ctx );
RtemsTaskReqCreateErrors_Pre_Name_Prepare( RtemsTaskReqCreateErrors_TestVariant( ctx );
ctx,
ctx->pcs[ 0 ]
);
RtemsTaskReqCreateErrors_Pre_Id_Prepare( ctx, ctx->pcs[ 1 ] );
RtemsTaskReqCreateErrors_Pre_SysTsk_Prepare(
ctx,
ctx->pcs[ 2 ]
);
RtemsTaskReqCreateErrors_Pre_Prio_Prepare(
ctx,
ctx->pcs[ 3 ]
);
RtemsTaskReqCreateErrors_Pre_Free_Prepare(
ctx,
ctx->pcs[ 4 ]
);
RtemsTaskReqCreateErrors_Pre_Stack_Prepare(
ctx,
ctx->pcs[ 5 ]
);
RtemsTaskReqCreateErrors_Pre_Ext_Prepare( ctx, ctx->pcs[ 6 ] );
RtemsTaskReqCreateErrors_Action( ctx );
RtemsTaskReqCreateErrors_Post_Status_Check(
ctx,
entry.Post_Status
);
RtemsTaskReqCreateErrors_Post_Name_Check(
ctx,
entry.Post_Name
);
RtemsTaskReqCreateErrors_Post_IdVar_Check(
ctx,
entry.Post_IdVar
);
RtemsTaskReqCreateErrors_Post_CreateExt_Check(
ctx,
entry.Post_CreateExt
);
RtemsTaskReqCreateErrors_Post_DelExt_Check(
ctx,
entry.Post_DelExt
);
RtemsTaskReqCreateErrors_Cleanup( ctx ); RtemsTaskReqCreateErrors_Cleanup( ctx );
} }
} }