forked from Imagelibrary/rtems
validation: Add comments to barrier tests
Unify code sections across tests.
This commit is contained in:
@@ -54,8 +54,6 @@
|
||||
|
||||
#include <rtems.h>
|
||||
#include <string.h>
|
||||
#include <rtems/score/chainimpl.h>
|
||||
#include <rtems/score/objectimpl.h>
|
||||
|
||||
#include <rtems/test.h>
|
||||
|
||||
@@ -252,11 +250,17 @@ static void RtemsBarrierReqCreate_Pre_Name_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Pre_Name_Valid: {
|
||||
/*
|
||||
* The ``name`` parameter shall be valid.
|
||||
*/
|
||||
ctx->name = NAME;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Pre_Name_Invalid: {
|
||||
/*
|
||||
* The ``name`` parameter shall be invalid.
|
||||
*/
|
||||
ctx->name = 0;
|
||||
break;
|
||||
}
|
||||
@@ -273,16 +277,28 @@ static void RtemsBarrierReqCreate_Pre_Class_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Pre_Class_Default: {
|
||||
/*
|
||||
* The ``attribute_set`` parameter shall specify the default
|
||||
* class.
|
||||
*/
|
||||
/* Nothing to do */
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Pre_Class_Manual: {
|
||||
/*
|
||||
* The ``attribute_set`` parameter shall specify the manual
|
||||
* release class.
|
||||
*/
|
||||
ctx->attribute_set |= RTEMS_BARRIER_MANUAL_RELEASE;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Pre_Class_Auto: {
|
||||
/*
|
||||
* The ``attribute_set`` parameter shall specify the
|
||||
* automatic release class.
|
||||
*/
|
||||
ctx->attribute_set |= RTEMS_BARRIER_AUTOMATIC_RELEASE;
|
||||
break;
|
||||
}
|
||||
@@ -299,11 +315,17 @@ static void RtemsBarrierReqCreate_Pre_MaxWait_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Pre_MaxWait_Zero: {
|
||||
/*
|
||||
* The ``maximum_waiters`` parameter shall be zero.
|
||||
*/
|
||||
ctx->maximum_waiters = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Pre_MaxWait_Positive: {
|
||||
/*
|
||||
* The ``maximum_waiters`` parameter shall be positive.
|
||||
*/
|
||||
ctx->maximum_waiters = 1;
|
||||
break;
|
||||
}
|
||||
@@ -320,11 +342,19 @@ static void RtemsBarrierReqCreate_Pre_Id_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Pre_Id_Valid: {
|
||||
/*
|
||||
* The ``id`` parameter shall reference an object
|
||||
* identifier value.
|
||||
*/
|
||||
ctx->id = &ctx->id_value;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Pre_Id_Null: {
|
||||
/*
|
||||
* The ``id`` parameter shall be
|
||||
* NULL.
|
||||
*/
|
||||
ctx->id = NULL;
|
||||
break;
|
||||
}
|
||||
@@ -341,11 +371,17 @@ static void RtemsBarrierReqCreate_Pre_Free_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Pre_Free_Yes: {
|
||||
/*
|
||||
* The system shall have at least one inactive barrier object available.
|
||||
*/
|
||||
/* Nothing to do */
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Pre_Free_No: {
|
||||
/*
|
||||
* The system shall have no inactive partition object available.
|
||||
*/
|
||||
ctx->seized_objects = T_seize_objects( Create, NULL );
|
||||
break;
|
||||
}
|
||||
@@ -362,26 +398,46 @@ static void RtemsBarrierReqCreate_Post_Status_Check(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Post_Status_Ok: {
|
||||
/*
|
||||
* The return status of rtems_barrier_create() shall be
|
||||
* RTEMS_SUCCESSFUL.
|
||||
*/
|
||||
T_rsc_success( ctx->status );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_Status_InvName: {
|
||||
/*
|
||||
* The return status of rtems_barrier_create() shall be
|
||||
* RTEMS_INVALID_NAME.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_INVALID_NAME );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_Status_InvAddr: {
|
||||
/*
|
||||
* The return status of rtems_barrier_create() shall be
|
||||
* RTEMS_INVALID_ADDRESS.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_Status_InvNum: {
|
||||
/*
|
||||
* The return status of rtems_barrier_create() shall be
|
||||
* RTEMS_INVALID_NUMBER.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_INVALID_NUMBER );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_Status_TooMany: {
|
||||
/*
|
||||
* The return status of rtems_barrier_create() shall be
|
||||
* RTEMS_TOO_MANY.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_TOO_MANY );
|
||||
break;
|
||||
}
|
||||
@@ -401,7 +457,11 @@ static void RtemsBarrierReqCreate_Post_Name_Check(
|
||||
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Post_Name_Valid: {
|
||||
id = INVALID_ID;
|
||||
/*
|
||||
* The unique object name shall identify the barrier created by the
|
||||
* rtems_barrier_create() call.
|
||||
*/
|
||||
id = 0;
|
||||
sc = rtems_barrier_ident( NAME, &id );
|
||||
T_rsc_success( sc );
|
||||
T_eq_u32( id, ctx->id_value );
|
||||
@@ -409,6 +469,9 @@ static void RtemsBarrierReqCreate_Post_Name_Check(
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_Name_Invalid: {
|
||||
/*
|
||||
* The unique object name shall not identify a barrier.
|
||||
*/
|
||||
sc = rtems_barrier_ident( NAME, &id );
|
||||
T_rsc( sc, RTEMS_INVALID_NAME );
|
||||
break;
|
||||
@@ -428,11 +491,17 @@ static void RtemsBarrierReqCreate_Post_Class_Check(
|
||||
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Post_Class_NoObj: {
|
||||
/*
|
||||
* The barrier class is not applicable since there was no barrier created.
|
||||
*/
|
||||
/* Not applicable */
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_Class_Manual: {
|
||||
/*
|
||||
* The class of the barrier shall be manual release.
|
||||
*/
|
||||
sc = rtems_barrier_wait( ctx->id_value, RTEMS_NO_TIMEOUT );
|
||||
T_rsc_success( sc );
|
||||
|
||||
@@ -442,6 +511,9 @@ static void RtemsBarrierReqCreate_Post_Class_Check(
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_Class_Auto: {
|
||||
/*
|
||||
* The class of the barrier shall be automatic release.
|
||||
*/
|
||||
sc = rtems_barrier_wait( ctx->id_value, RTEMS_NO_TIMEOUT );
|
||||
T_rsc_success( sc );
|
||||
|
||||
@@ -461,12 +533,20 @@ static void RtemsBarrierReqCreate_Post_IdValue_Check(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqCreate_Post_IdValue_Assigned: {
|
||||
/*
|
||||
* The value of the object identifier variable shall be equal to the object
|
||||
* identifier of the barrier created by the rtems_barrier_create() call.
|
||||
*/
|
||||
T_eq_ptr( ctx->id, &ctx->id_value );
|
||||
T_ne_u32( ctx->id_value, INVALID_ID );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqCreate_Post_IdValue_Unchanged: {
|
||||
/*
|
||||
* The value of the object identifier variable shall be unchanged by the
|
||||
* rtems_barrier_create() call.
|
||||
*/
|
||||
T_eq_u32( ctx->id_value, INVALID_ID );
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -183,11 +183,18 @@ static void RtemsBarrierReqDelete_Pre_Id_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqDelete_Pre_Id_Valid: {
|
||||
/*
|
||||
* The ``id`` parameter shall be associated with
|
||||
* the barrier.
|
||||
*/
|
||||
ctx->id = ctx->barrier_id;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqDelete_Pre_Id_Invalid: {
|
||||
/*
|
||||
* The ``id`` parameter shall be invalid.
|
||||
*/
|
||||
ctx->id = 0;
|
||||
break;
|
||||
}
|
||||
@@ -204,12 +211,20 @@ static void RtemsBarrierReqDelete_Post_Status_Check(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqDelete_Post_Status_Ok: {
|
||||
/*
|
||||
* The return status of rtems_barrier_delete() shall be
|
||||
* RTEMS_SUCCESSFUL.
|
||||
*/
|
||||
ctx->barrier_id = 0;
|
||||
T_rsc_success( ctx->status );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqDelete_Post_Status_InvId: {
|
||||
/*
|
||||
* The return status of rtems_barrier_delete() shall be
|
||||
* RTEMS_INVALID_ID.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_INVALID_ID );
|
||||
break;
|
||||
}
|
||||
@@ -229,6 +244,9 @@ static void RtemsBarrierReqDelete_Post_Id_Check(
|
||||
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqDelete_Post_Id_Valid: {
|
||||
/*
|
||||
* The unique object name shall identify the barrier.
|
||||
*/
|
||||
id = 0;
|
||||
sc = rtems_barrier_ident( NAME, &id );
|
||||
T_rsc_success( sc );
|
||||
@@ -237,6 +255,9 @@ static void RtemsBarrierReqDelete_Post_Id_Check(
|
||||
}
|
||||
|
||||
case RtemsBarrierReqDelete_Post_Id_Invalid: {
|
||||
/*
|
||||
* The unique object name shall not identify the barrier.
|
||||
*/
|
||||
sc = rtems_barrier_ident( NAME, &id );
|
||||
T_rsc( sc, RTEMS_INVALID_NAME );
|
||||
break;
|
||||
@@ -254,12 +275,18 @@ static void RtemsBarrierReqDelete_Post_Flush_Check(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqDelete_Post_Flush_Yes: {
|
||||
/*
|
||||
* Tasks waiting at the barrier shall be unblocked.
|
||||
*/
|
||||
++ctx->wait_expected;
|
||||
T_eq_u32( ctx->wait_done, ctx->wait_expected );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqDelete_Post_Flush_No: {
|
||||
/*
|
||||
* Tasks waiting at the barrier shall remain blocked.
|
||||
*/
|
||||
T_eq_u32( ctx->wait_done, ctx->wait_expected );
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -213,16 +213,27 @@ static void RtemsBarrierReqRelease_Pre_Barrier_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqRelease_Pre_Barrier_NoObj: {
|
||||
/*
|
||||
* The ``id`` parameter shall be invalid.
|
||||
*/
|
||||
ctx->id = 0xffffffff;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqRelease_Pre_Barrier_Manual: {
|
||||
/*
|
||||
* The ``id`` parameter shall be associated with a
|
||||
* manual release barrier.
|
||||
*/
|
||||
ctx->id = ctx->manual_release_id;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqRelease_Pre_Barrier_Auto: {
|
||||
/*
|
||||
* The ``id`` parameter shall be associated with an
|
||||
* automatic release barrier.
|
||||
*/
|
||||
ctx->id = ctx->auto_release_id;
|
||||
break;
|
||||
}
|
||||
@@ -241,11 +252,18 @@ static void RtemsBarrierReqRelease_Pre_Released_Prepare(
|
||||
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqRelease_Pre_Released_Valid: {
|
||||
/*
|
||||
* The ``released`` parameter shall reference an integer variable.
|
||||
*/
|
||||
ctx->released = &ctx->released_value;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqRelease_Pre_Released_Null: {
|
||||
/*
|
||||
* The ``released`` parameter shall be
|
||||
* NULL.
|
||||
*/
|
||||
ctx->released = NULL;
|
||||
break;
|
||||
}
|
||||
@@ -262,11 +280,17 @@ static void RtemsBarrierReqRelease_Pre_Waiting_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqRelease_Pre_Waiting_Zero: {
|
||||
/*
|
||||
* The number of tasks waiting at the barrier shall be zero.
|
||||
*/
|
||||
ctx->waiting_tasks = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqRelease_Pre_Waiting_Positive: {
|
||||
/*
|
||||
* The number of tasks waiting at the barrier shall be positive.
|
||||
*/
|
||||
ctx->waiting_tasks = 1;
|
||||
SendEvents( ctx->worker_id, EVENT_WAIT );
|
||||
break;
|
||||
@@ -284,16 +308,28 @@ static void RtemsBarrierReqRelease_Post_Status_Check(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqRelease_Post_Status_Ok: {
|
||||
/*
|
||||
* The return status of rtems_barrier_release() shall be
|
||||
* RTEMS_SUCCESSFUL.
|
||||
*/
|
||||
T_rsc_success( ctx->status );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqRelease_Post_Status_InvId: {
|
||||
/*
|
||||
* The return status of rtems_barrier_release() shall be
|
||||
* RTEMS_INVALID_ID.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_INVALID_ID );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqRelease_Post_Status_InvAddr: {
|
||||
/*
|
||||
* The return status of rtems_barrier_release() shall be
|
||||
* RTEMS_INVALID_ADDRESS.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
|
||||
break;
|
||||
}
|
||||
@@ -310,11 +346,19 @@ static void RtemsBarrierReqRelease_Post_Released_Check(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqRelease_Post_Released_Valid: {
|
||||
/*
|
||||
* The value of the variable for the number of released tasks shall equal
|
||||
* the number of tasks released by the rtems_barrier_release() call.
|
||||
*/
|
||||
T_eq_u32( ctx->released_value, ctx->waiting_tasks );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqRelease_Post_Released_Unchanged: {
|
||||
/*
|
||||
* The value of variable for the number of released tasks shall be unchanged
|
||||
* by the rtems_barrier_release() call.
|
||||
*/
|
||||
T_eq_u32( ctx->released_value, RELEASED_INVALID_VALUE );
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -263,16 +263,27 @@ static void RtemsBarrierReqWait_Pre_Barrier_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqWait_Pre_Barrier_NoObj: {
|
||||
/*
|
||||
* The ``id`` parameter shall be invalid.
|
||||
*/
|
||||
ctx->id = 0xffffffff;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Pre_Barrier_Manual: {
|
||||
/*
|
||||
* The ``id`` parameter shall be associated with a
|
||||
* manual release barrier.
|
||||
*/
|
||||
ctx->id = ctx->manual_release_id;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Pre_Barrier_Auto: {
|
||||
/*
|
||||
* The ``id`` parameter shall be associated with an
|
||||
* automatic release barrier.
|
||||
*/
|
||||
ctx->id = ctx->auto_release_id;
|
||||
break;
|
||||
}
|
||||
@@ -289,11 +300,19 @@ static void RtemsBarrierReqWait_Pre_Timeout_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqWait_Pre_Timeout_Ticks: {
|
||||
/*
|
||||
* The ``released`` parameter shall be a clock tick
|
||||
* interval.
|
||||
*/
|
||||
ctx->timeout = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Pre_Timeout_Forever: {
|
||||
/*
|
||||
* The ``released`` parameter shall be
|
||||
* RTEMS_NO_TIMEOUT.
|
||||
*/
|
||||
ctx->timeout = RTEMS_NO_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
@@ -310,6 +329,10 @@ static void RtemsBarrierReqWait_Pre_Satisfy_Prepare(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqWait_Pre_Satisfy_Never: {
|
||||
/*
|
||||
* While the calling task waits at the barrier, the barrier shall not be
|
||||
* released or deleted.
|
||||
*/
|
||||
if ( ctx->timeout == RTEMS_NO_TIMEOUT ) {
|
||||
SendEvents( ctx->low_worker_id, EVENT_CHECK_TIMER | EVENT_RELEASE );
|
||||
}
|
||||
@@ -317,16 +340,27 @@ static void RtemsBarrierReqWait_Pre_Satisfy_Prepare(
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Pre_Satisfy_Wait: {
|
||||
/*
|
||||
* Calling the directive shall release the barrier.
|
||||
*/
|
||||
SendEvents( ctx->high_worker_id, EVENT_WAIT );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Pre_Satisfy_Release: {
|
||||
/*
|
||||
* While the calling task waits at the barrier, the barrier shall be
|
||||
* released.
|
||||
*/
|
||||
SendEvents( ctx->low_worker_id, EVENT_RELEASE );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Pre_Satisfy_Delete: {
|
||||
/*
|
||||
* While the calling task waits at the barrier, the barrier shall be
|
||||
* deleted.
|
||||
*/
|
||||
SendEvents( ctx->low_worker_id, EVENT_DELETE );
|
||||
break;
|
||||
}
|
||||
@@ -343,26 +377,45 @@ static void RtemsBarrierReqWait_Post_Status_Check(
|
||||
{
|
||||
switch ( state ) {
|
||||
case RtemsBarrierReqWait_Post_Status_Ok: {
|
||||
/*
|
||||
* The return status of rtems_barrier_wait() shall be
|
||||
* RTEMS_SUCCESSFUL.
|
||||
*/
|
||||
T_rsc_success( ctx->status );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Post_Status_InvId: {
|
||||
/*
|
||||
* The return status of rtems_barrier_wait() shall be
|
||||
* RTEMS_INVALID_ID.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_INVALID_ID );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Post_Status_Timeout: {
|
||||
/*
|
||||
* The return status of rtems_barrier_wait() shall be
|
||||
* RTEMS_TIMEOUT.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_TIMEOUT );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Post_Status_ObjDel: {
|
||||
/*
|
||||
* The return status of rtems_barrier_wait() shall be
|
||||
* RTEMS_OBJECT_WAS_DELETED.
|
||||
*/
|
||||
T_rsc( ctx->status, RTEMS_OBJECT_WAS_DELETED );
|
||||
break;
|
||||
}
|
||||
|
||||
case RtemsBarrierReqWait_Post_Status_NoReturn: {
|
||||
/*
|
||||
* The call to rtems_barrier_wait() shall not return to the calling task.
|
||||
*/
|
||||
T_rsc_success( ctx->status );
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user