Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:51

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RtemsPartReqCreate
0007  */
0008 
0009 /*
0010  * Copyright (C) 2020 embedded brains GmbH & Co. KG
0011  *
0012  * Redistribution and use in source and binary forms, with or without
0013  * modification, are permitted provided that the following conditions
0014  * are met:
0015  * 1. Redistributions of source code must retain the above copyright
0016  *    notice, this list of conditions and the following disclaimer.
0017  * 2. Redistributions in binary form must reproduce the above copyright
0018  *    notice, this list of conditions and the following disclaimer in the
0019  *    documentation and/or other materials provided with the distribution.
0020  *
0021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0022  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0024  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0025  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0026  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0027  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0028  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0029  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0030  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0031  * POSSIBILITY OF SUCH DAMAGE.
0032  */
0033 
0034 /*
0035  * This file is part of the RTEMS quality process and was automatically
0036  * generated.  If you find something that needs to be fixed or
0037  * worded better please post a report or patch to an RTEMS mailing list
0038  * or raise a bug report:
0039  *
0040  * https://www.rtems.org/bugs.html
0041  *
0042  * For information on updating and regenerating please refer to the How-To
0043  * section in the Software Requirements Engineering chapter of the
0044  * RTEMS Software Engineering manual.  The manual is provided as a part of
0045  * a release.  For development sources please refer to the online
0046  * documentation at:
0047  *
0048  * https://docs.rtems.org
0049  */
0050 
0051 #ifdef HAVE_CONFIG_H
0052 #include "config.h"
0053 #endif
0054 
0055 #include <rtems.h>
0056 #include <string.h>
0057 
0058 #include "ts-config.h"
0059 #include "tx-support.h"
0060 
0061 #include <rtems/test.h>
0062 
0063 /**
0064  * @defgroup RtemsPartReqCreate spec:/rtems/part/req/create
0065  *
0066  * @ingroup TestsuitesValidationNoClock0
0067  *
0068  * @{
0069  */
0070 
0071 typedef enum {
0072   RtemsPartReqCreate_Pre_Name_Valid,
0073   RtemsPartReqCreate_Pre_Name_Invalid,
0074   RtemsPartReqCreate_Pre_Name_NA
0075 } RtemsPartReqCreate_Pre_Name;
0076 
0077 typedef enum {
0078   RtemsPartReqCreate_Pre_Id_Valid,
0079   RtemsPartReqCreate_Pre_Id_Null,
0080   RtemsPartReqCreate_Pre_Id_NA
0081 } RtemsPartReqCreate_Pre_Id;
0082 
0083 typedef enum {
0084   RtemsPartReqCreate_Pre_Start_Valid,
0085   RtemsPartReqCreate_Pre_Start_Null,
0086   RtemsPartReqCreate_Pre_Start_BadAlign,
0087   RtemsPartReqCreate_Pre_Start_NA
0088 } RtemsPartReqCreate_Pre_Start;
0089 
0090 typedef enum {
0091   RtemsPartReqCreate_Pre_Length_Valid,
0092   RtemsPartReqCreate_Pre_Length_Zero,
0093   RtemsPartReqCreate_Pre_Length_Invalid,
0094   RtemsPartReqCreate_Pre_Length_NA
0095 } RtemsPartReqCreate_Pre_Length;
0096 
0097 typedef enum {
0098   RtemsPartReqCreate_Pre_Size_Valid,
0099   RtemsPartReqCreate_Pre_Size_Zero,
0100   RtemsPartReqCreate_Pre_Size_Skew,
0101   RtemsPartReqCreate_Pre_Size_Small,
0102   RtemsPartReqCreate_Pre_Size_NA
0103 } RtemsPartReqCreate_Pre_Size;
0104 
0105 typedef enum {
0106   RtemsPartReqCreate_Pre_Free_Yes,
0107   RtemsPartReqCreate_Pre_Free_No,
0108   RtemsPartReqCreate_Pre_Free_NA
0109 } RtemsPartReqCreate_Pre_Free;
0110 
0111 typedef enum {
0112   RtemsPartReqCreate_Post_Status_Ok,
0113   RtemsPartReqCreate_Post_Status_InvAddr,
0114   RtemsPartReqCreate_Post_Status_InvName,
0115   RtemsPartReqCreate_Post_Status_InvSize,
0116   RtemsPartReqCreate_Post_Status_TooMany,
0117   RtemsPartReqCreate_Post_Status_NA
0118 } RtemsPartReqCreate_Post_Status;
0119 
0120 typedef enum {
0121   RtemsPartReqCreate_Post_Name_Valid,
0122   RtemsPartReqCreate_Post_Name_Invalid,
0123   RtemsPartReqCreate_Post_Name_NA
0124 } RtemsPartReqCreate_Post_Name;
0125 
0126 typedef enum {
0127   RtemsPartReqCreate_Post_IdVar_Set,
0128   RtemsPartReqCreate_Post_IdVar_Nop,
0129   RtemsPartReqCreate_Post_IdVar_NA
0130 } RtemsPartReqCreate_Post_IdVar;
0131 
0132 typedef struct {
0133   uint16_t Skip : 1;
0134   uint16_t Pre_Name_NA : 1;
0135   uint16_t Pre_Id_NA : 1;
0136   uint16_t Pre_Start_NA : 1;
0137   uint16_t Pre_Length_NA : 1;
0138   uint16_t Pre_Size_NA : 1;
0139   uint16_t Pre_Free_NA : 1;
0140   uint16_t Post_Status : 3;
0141   uint16_t Post_Name : 2;
0142   uint16_t Post_IdVar : 2;
0143 } RtemsPartReqCreate_Entry;
0144 
0145 /**
0146  * @brief Test context for spec:/rtems/part/req/create test case.
0147  */
0148 typedef struct {
0149   void *seized_objects;
0150 
0151   rtems_status_code status;
0152 
0153   rtems_name name;
0154 
0155   void *starting_address;
0156 
0157   uintptr_t length;
0158 
0159   size_t buffer_size;
0160 
0161   rtems_attribute attribute_set;
0162 
0163   rtems_id *id;
0164 
0165   rtems_id id_value;
0166 
0167   struct {
0168     /**
0169      * @brief This member defines the pre-condition states for the next action.
0170      */
0171     size_t pcs[ 6 ];
0172 
0173     /**
0174      * @brief If this member is true, then the test action loop is executed.
0175      */
0176     bool in_action_loop;
0177 
0178     /**
0179      * @brief This member contains the next transition map index.
0180      */
0181     size_t index;
0182 
0183     /**
0184      * @brief This member contains the current transition map entry.
0185      */
0186     RtemsPartReqCreate_Entry entry;
0187 
0188     /**
0189      * @brief If this member is true, then the current transition variant
0190      *   should be skipped.
0191      */
0192     bool skip;
0193   } Map;
0194 } RtemsPartReqCreate_Context;
0195 
0196 static RtemsPartReqCreate_Context
0197   RtemsPartReqCreate_Instance;
0198 
0199 static const char * const RtemsPartReqCreate_PreDesc_Name[] = {
0200   "Valid",
0201   "Invalid",
0202   "NA"
0203 };
0204 
0205 static const char * const RtemsPartReqCreate_PreDesc_Id[] = {
0206   "Valid",
0207   "Null",
0208   "NA"
0209 };
0210 
0211 static const char * const RtemsPartReqCreate_PreDesc_Start[] = {
0212   "Valid",
0213   "Null",
0214   "BadAlign",
0215   "NA"
0216 };
0217 
0218 static const char * const RtemsPartReqCreate_PreDesc_Length[] = {
0219   "Valid",
0220   "Zero",
0221   "Invalid",
0222   "NA"
0223 };
0224 
0225 static const char * const RtemsPartReqCreate_PreDesc_Size[] = {
0226   "Valid",
0227   "Zero",
0228   "Skew",
0229   "Small",
0230   "NA"
0231 };
0232 
0233 static const char * const RtemsPartReqCreate_PreDesc_Free[] = {
0234   "Yes",
0235   "No",
0236   "NA"
0237 };
0238 
0239 static const char * const * const RtemsPartReqCreate_PreDesc[] = {
0240   RtemsPartReqCreate_PreDesc_Name,
0241   RtemsPartReqCreate_PreDesc_Id,
0242   RtemsPartReqCreate_PreDesc_Start,
0243   RtemsPartReqCreate_PreDesc_Length,
0244   RtemsPartReqCreate_PreDesc_Size,
0245   RtemsPartReqCreate_PreDesc_Free,
0246   NULL
0247 };
0248 
0249 #define NAME rtems_build_name( 'T', 'E', 'S', 'T' )
0250 
0251 #define MAX_PARTITIONS ( TEST_MAXIMUM_PARTITIONS + 1 )
0252 
0253 #define BUFFER_COUNT 2
0254 
0255 #define BUFFER_SIZE ( 2 * sizeof( void * ) )
0256 
0257 static RTEMS_ALIGNED( RTEMS_PARTITION_ALIGNMENT ) uint8_t
0258   buffers_to_seize[ MAX_PARTITIONS ][ BUFFER_COUNT ][ BUFFER_SIZE ];
0259 
0260 static RTEMS_ALIGNED( RTEMS_PARTITION_ALIGNMENT ) uint8_t
0261   buffers[ BUFFER_COUNT ][ BUFFER_SIZE ];
0262 
0263 static rtems_status_code Create( void *arg, uint32_t *id )
0264 {
0265   size_t *i;
0266   size_t  j;
0267 
0268   i = arg;
0269   j = *i;
0270   T_quiet_lt_sz( j, MAX_PARTITIONS );
0271 
0272   *i = j + 1;
0273 
0274   return rtems_partition_create(
0275     rtems_build_name( 'S', 'I', 'Z', 'E' ),
0276     buffers_to_seize[ j ],
0277     sizeof( buffers_to_seize[ j ] ),
0278     sizeof( buffers_to_seize[ j ][ 0 ] ),
0279     RTEMS_DEFAULT_ATTRIBUTES,
0280     id
0281   );
0282 }
0283 
0284 static void RtemsPartReqCreate_Pre_Name_Prepare(
0285   RtemsPartReqCreate_Context *ctx,
0286   RtemsPartReqCreate_Pre_Name state
0287 )
0288 {
0289   switch ( state ) {
0290     case RtemsPartReqCreate_Pre_Name_Valid: {
0291       /*
0292        * While the ``name`` parameter is valid.
0293        */
0294       ctx->name = NAME;
0295       break;
0296     }
0297 
0298     case RtemsPartReqCreate_Pre_Name_Invalid: {
0299       /*
0300        * While the ``name`` parameter is invalid.
0301        */
0302       ctx->name = 0;
0303       break;
0304     }
0305 
0306     case RtemsPartReqCreate_Pre_Name_NA:
0307       break;
0308   }
0309 }
0310 
0311 static void RtemsPartReqCreate_Pre_Id_Prepare(
0312   RtemsPartReqCreate_Context *ctx,
0313   RtemsPartReqCreate_Pre_Id   state
0314 )
0315 {
0316   switch ( state ) {
0317     case RtemsPartReqCreate_Pre_Id_Valid: {
0318       /*
0319        * While the ``id`` parameter references an object of type rtems_id.
0320        */
0321       ctx->id = &ctx->id_value;
0322       break;
0323     }
0324 
0325     case RtemsPartReqCreate_Pre_Id_Null: {
0326       /*
0327        * While the ``id`` parameter is NULL.
0328        */
0329       ctx->id = NULL;
0330       break;
0331     }
0332 
0333     case RtemsPartReqCreate_Pre_Id_NA:
0334       break;
0335   }
0336 }
0337 
0338 static void RtemsPartReqCreate_Pre_Start_Prepare(
0339   RtemsPartReqCreate_Context  *ctx,
0340   RtemsPartReqCreate_Pre_Start state
0341 )
0342 {
0343   switch ( state ) {
0344     case RtemsPartReqCreate_Pre_Start_Valid: {
0345       /*
0346        * While the ``starting_address`` parameter is valid.
0347        */
0348       ctx->starting_address = buffers;
0349       break;
0350     }
0351 
0352     case RtemsPartReqCreate_Pre_Start_Null: {
0353       /*
0354        * While the ``starting_address`` parameter is NULL.
0355        */
0356       ctx->starting_address = NULL;
0357       break;
0358     }
0359 
0360     case RtemsPartReqCreate_Pre_Start_BadAlign: {
0361       /*
0362        * While the ``starting_address`` parameter is misaligned.
0363        */
0364       ctx->starting_address = &buffers[ 0 ][ 1 ];
0365       break;
0366     }
0367 
0368     case RtemsPartReqCreate_Pre_Start_NA:
0369       break;
0370   }
0371 }
0372 
0373 static void RtemsPartReqCreate_Pre_Length_Prepare(
0374   RtemsPartReqCreate_Context   *ctx,
0375   RtemsPartReqCreate_Pre_Length state
0376 )
0377 {
0378   switch ( state ) {
0379     case RtemsPartReqCreate_Pre_Length_Valid: {
0380       /*
0381        * While the ``length`` parameter is valid.
0382        */
0383       ctx->length = sizeof( buffers );
0384       break;
0385     }
0386 
0387     case RtemsPartReqCreate_Pre_Length_Zero: {
0388       /*
0389        * While the ``length`` parameter is zero.
0390        */
0391       ctx->length = 0;
0392       break;
0393     }
0394 
0395     case RtemsPartReqCreate_Pre_Length_Invalid: {
0396       /*
0397        * While the ``length`` parameter is less than the buffer size.
0398        */
0399       ctx->length = sizeof( buffers[ 0 ] ) - 1;
0400       break;
0401     }
0402 
0403     case RtemsPartReqCreate_Pre_Length_NA:
0404       break;
0405   }
0406 }
0407 
0408 static void RtemsPartReqCreate_Pre_Size_Prepare(
0409   RtemsPartReqCreate_Context *ctx,
0410   RtemsPartReqCreate_Pre_Size state
0411 )
0412 {
0413   switch ( state ) {
0414     case RtemsPartReqCreate_Pre_Size_Valid: {
0415       /*
0416        * While the ``buffer_size`` parameter is valid.
0417        */
0418       ctx->buffer_size = sizeof( buffers[ 0 ] );
0419       break;
0420     }
0421 
0422     case RtemsPartReqCreate_Pre_Size_Zero: {
0423       /*
0424        * While the ``buffer_size`` parameter is zero.
0425        */
0426       ctx->buffer_size = 0;
0427       break;
0428     }
0429 
0430     case RtemsPartReqCreate_Pre_Size_Skew: {
0431       /*
0432        * The ``buffer_size`` parameter shall not an integral multiple of the
0433        * pointer size.
0434        */
0435       ctx->buffer_size = 1;
0436       break;
0437     }
0438 
0439     case RtemsPartReqCreate_Pre_Size_Small: {
0440       /*
0441        * The ``buffer_size`` parameter shall greater than zero and an integral
0442        * multiple of the pointer size and less than the size of two pointers.
0443        */
0444       ctx->buffer_size = sizeof( uintptr_t );
0445       break;
0446     }
0447 
0448     case RtemsPartReqCreate_Pre_Size_NA:
0449       break;
0450   }
0451 }
0452 
0453 static void RtemsPartReqCreate_Pre_Free_Prepare(
0454   RtemsPartReqCreate_Context *ctx,
0455   RtemsPartReqCreate_Pre_Free state
0456 )
0457 {
0458   size_t i;
0459 
0460   switch ( state ) {
0461     case RtemsPartReqCreate_Pre_Free_Yes: {
0462       /*
0463        * While the system has at least one inactive partition object available.
0464        */
0465       /* Nothing to do */
0466       break;
0467     }
0468 
0469     case RtemsPartReqCreate_Pre_Free_No: {
0470       /*
0471        * While the system has no inactive partition object available.
0472        */
0473       i = 0;
0474       ctx->seized_objects = T_seize_objects( Create, &i );
0475       break;
0476     }
0477 
0478     case RtemsPartReqCreate_Pre_Free_NA:
0479       break;
0480   }
0481 }
0482 
0483 static void RtemsPartReqCreate_Post_Status_Check(
0484   RtemsPartReqCreate_Context    *ctx,
0485   RtemsPartReqCreate_Post_Status state
0486 )
0487 {
0488   switch ( state ) {
0489     case RtemsPartReqCreate_Post_Status_Ok: {
0490       /*
0491        * The return status of rtems_partition_create() shall be
0492        * RTEMS_SUCCESSFUL.
0493        */
0494       T_rsc_success( ctx->status );
0495       break;
0496     }
0497 
0498     case RtemsPartReqCreate_Post_Status_InvAddr: {
0499       /*
0500        * The return status of rtems_partition_create() shall be
0501        * RTEMS_INVALID_ADDRESS.
0502        */
0503       T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
0504       break;
0505     }
0506 
0507     case RtemsPartReqCreate_Post_Status_InvName: {
0508       /*
0509        * The return status of rtems_partition_create() shall be
0510        * RTEMS_INVALID_NAME.
0511        */
0512       T_rsc( ctx->status, RTEMS_INVALID_NAME );
0513       break;
0514     }
0515 
0516     case RtemsPartReqCreate_Post_Status_InvSize: {
0517       /*
0518        * The return status of rtems_partition_create() shall be
0519        * RTEMS_INVALID_SIZE.
0520        */
0521       T_rsc( ctx->status, RTEMS_INVALID_SIZE );
0522       break;
0523     }
0524 
0525     case RtemsPartReqCreate_Post_Status_TooMany: {
0526       /*
0527        * The return status of rtems_partition_create() shall be RTEMS_TOO_MANY.
0528        */
0529       T_rsc( ctx->status, RTEMS_TOO_MANY );
0530       break;
0531     }
0532 
0533     case RtemsPartReqCreate_Post_Status_NA:
0534       break;
0535   }
0536 }
0537 
0538 static void RtemsPartReqCreate_Post_Name_Check(
0539   RtemsPartReqCreate_Context  *ctx,
0540   RtemsPartReqCreate_Post_Name state
0541 )
0542 {
0543   rtems_status_code sc;
0544   rtems_id          id;
0545 
0546   switch ( state ) {
0547     case RtemsPartReqCreate_Post_Name_Valid: {
0548       /*
0549        * The unique object name shall identify the partition created by the
0550        * rtems_partition_create() call.
0551        */
0552       id = 0;
0553       sc = rtems_partition_ident( NAME, RTEMS_SEARCH_LOCAL_NODE, &id );
0554       T_rsc_success( sc );
0555       T_eq_u32( id, ctx->id_value );
0556       break;
0557     }
0558 
0559     case RtemsPartReqCreate_Post_Name_Invalid: {
0560       /*
0561        * The unique object name shall not identify a partition.
0562        */
0563       sc = rtems_partition_ident( NAME, RTEMS_SEARCH_LOCAL_NODE, &id );
0564       T_rsc( sc, RTEMS_INVALID_NAME );
0565       break;
0566     }
0567 
0568     case RtemsPartReqCreate_Post_Name_NA:
0569       break;
0570   }
0571 }
0572 
0573 static void RtemsPartReqCreate_Post_IdVar_Check(
0574   RtemsPartReqCreate_Context   *ctx,
0575   RtemsPartReqCreate_Post_IdVar state
0576 )
0577 {
0578   rtems_status_code sc;
0579   size_t            i;
0580   void             *buffers[ BUFFER_COUNT ];
0581   void             *no_buffer;
0582 
0583   switch ( state ) {
0584     case RtemsPartReqCreate_Post_IdVar_Set: {
0585       /*
0586        * The value of the object referenced by the ``id`` parameter shall be
0587        * set to the object identifier of the created partition after the return
0588        * of the rtems_partition_create() call.
0589        */
0590       T_eq_ptr( ctx->id, &ctx->id_value );
0591       T_ne_u32( ctx->id_value, INVALID_ID );
0592 
0593       for ( i = 0; i < BUFFER_COUNT; ++i) {
0594         sc = rtems_partition_get_buffer( ctx->id_value, &buffers[ i ] );
0595         T_rsc_success( sc );
0596         T_not_null( buffers[ i ] );
0597       }
0598 
0599       no_buffer = (void *) (uintptr_t) 1;
0600       sc = rtems_partition_get_buffer( ctx->id_value, &no_buffer );
0601       T_rsc( sc, RTEMS_UNSATISFIED );
0602       T_eq_ptr( no_buffer, (void *) (uintptr_t) 1 );
0603 
0604       for ( i = 0; i < BUFFER_COUNT; ++i) {
0605         sc = rtems_partition_return_buffer( ctx->id_value, buffers[ i ] );
0606         T_rsc_success( sc );
0607       }
0608 
0609       sc = rtems_partition_delete( ctx->id_value );
0610       T_rsc_success( sc );
0611       break;
0612     }
0613 
0614     case RtemsPartReqCreate_Post_IdVar_Nop: {
0615       /*
0616        * Objects referenced by the ``id`` parameter in past calls to
0617        * rtems_partition_create() shall not be accessed by the
0618        * rtems_partition_create() call.
0619        */
0620       T_eq_u32( ctx->id_value, INVALID_ID );
0621       break;
0622     }
0623 
0624     case RtemsPartReqCreate_Post_IdVar_NA:
0625       break;
0626   }
0627 }
0628 
0629 static void RtemsPartReqCreate_Prepare( RtemsPartReqCreate_Context *ctx )
0630 {
0631   rtems_status_code sc;
0632   rtems_id          id;
0633 
0634   ctx->id_value = INVALID_ID;
0635   ctx->attribute_set = RTEMS_DEFAULT_ATTRIBUTES;
0636 
0637   id = INVALID_ID;
0638   sc = rtems_partition_ident( NAME, RTEMS_SEARCH_LOCAL_NODE, &id );
0639   T_rsc( sc, RTEMS_INVALID_NAME );
0640   T_eq_u32( id, INVALID_ID );
0641 }
0642 
0643 static void RtemsPartReqCreate_Action( RtemsPartReqCreate_Context *ctx )
0644 {
0645   ctx->status = rtems_partition_create(
0646     ctx->name,
0647     ctx->starting_address,
0648     ctx->length,
0649     ctx->buffer_size,
0650     ctx->attribute_set,
0651     ctx->id
0652   );
0653 }
0654 
0655 static void RtemsPartReqCreate_Cleanup( RtemsPartReqCreate_Context *ctx )
0656 {
0657   T_surrender_objects( &ctx->seized_objects, rtems_partition_delete );
0658 }
0659 
0660 static const RtemsPartReqCreate_Entry
0661 RtemsPartReqCreate_Entries[] = {
0662   { 0, 0, 0, 0, 0, 0, 0, RtemsPartReqCreate_Post_Status_InvName,
0663     RtemsPartReqCreate_Post_Name_Invalid, RtemsPartReqCreate_Post_IdVar_Nop },
0664   { 0, 0, 0, 0, 0, 0, 0, RtemsPartReqCreate_Post_Status_InvAddr,
0665     RtemsPartReqCreate_Post_Name_Invalid, RtemsPartReqCreate_Post_IdVar_Nop },
0666   { 0, 0, 0, 0, 0, 0, 0, RtemsPartReqCreate_Post_Status_InvSize,
0667     RtemsPartReqCreate_Post_Name_Invalid, RtemsPartReqCreate_Post_IdVar_Nop },
0668   { 0, 0, 0, 0, 0, 0, 0, RtemsPartReqCreate_Post_Status_Ok,
0669     RtemsPartReqCreate_Post_Name_Valid, RtemsPartReqCreate_Post_IdVar_Set },
0670   { 0, 0, 0, 0, 0, 0, 0, RtemsPartReqCreate_Post_Status_TooMany,
0671     RtemsPartReqCreate_Post_Name_Invalid, RtemsPartReqCreate_Post_IdVar_Nop }
0672 };
0673 
0674 static const uint8_t
0675 RtemsPartReqCreate_Map[] = {
0676   3, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,
0677   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
0678   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
0679   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0680   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0681   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0682   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0683   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0684   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0685   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0686   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0687   0, 0
0688 };
0689 
0690 static size_t RtemsPartReqCreate_Scope( void *arg, char *buf, size_t n )
0691 {
0692   RtemsPartReqCreate_Context *ctx;
0693 
0694   ctx = arg;
0695 
0696   if ( ctx->Map.in_action_loop ) {
0697     return T_get_scope( RtemsPartReqCreate_PreDesc, buf, n, ctx->Map.pcs );
0698   }
0699 
0700   return 0;
0701 }
0702 
0703 static T_fixture RtemsPartReqCreate_Fixture = {
0704   .setup = NULL,
0705   .stop = NULL,
0706   .teardown = NULL,
0707   .scope = RtemsPartReqCreate_Scope,
0708   .initial_context = &RtemsPartReqCreate_Instance
0709 };
0710 
0711 static inline RtemsPartReqCreate_Entry RtemsPartReqCreate_PopEntry(
0712   RtemsPartReqCreate_Context *ctx
0713 )
0714 {
0715   size_t index;
0716 
0717   index = ctx->Map.index;
0718   ctx->Map.index = index + 1;
0719   return RtemsPartReqCreate_Entries[
0720     RtemsPartReqCreate_Map[ index ]
0721   ];
0722 }
0723 
0724 static void RtemsPartReqCreate_TestVariant( RtemsPartReqCreate_Context *ctx )
0725 {
0726   RtemsPartReqCreate_Pre_Name_Prepare( ctx, ctx->Map.pcs[ 0 ] );
0727   RtemsPartReqCreate_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 1 ] );
0728   RtemsPartReqCreate_Pre_Start_Prepare( ctx, ctx->Map.pcs[ 2 ] );
0729   RtemsPartReqCreate_Pre_Length_Prepare( ctx, ctx->Map.pcs[ 3 ] );
0730   RtemsPartReqCreate_Pre_Size_Prepare( ctx, ctx->Map.pcs[ 4 ] );
0731   RtemsPartReqCreate_Pre_Free_Prepare( ctx, ctx->Map.pcs[ 5 ] );
0732   RtemsPartReqCreate_Action( ctx );
0733   RtemsPartReqCreate_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
0734   RtemsPartReqCreate_Post_Name_Check( ctx, ctx->Map.entry.Post_Name );
0735   RtemsPartReqCreate_Post_IdVar_Check( ctx, ctx->Map.entry.Post_IdVar );
0736 }
0737 
0738 /**
0739  * @fn void T_case_body_RtemsPartReqCreate( void )
0740  */
0741 T_TEST_CASE_FIXTURE( RtemsPartReqCreate, &RtemsPartReqCreate_Fixture )
0742 {
0743   RtemsPartReqCreate_Context *ctx;
0744 
0745   ctx = T_fixture_context();
0746   ctx->Map.in_action_loop = true;
0747   ctx->Map.index = 0;
0748 
0749   for (
0750     ctx->Map.pcs[ 0 ] = RtemsPartReqCreate_Pre_Name_Valid;
0751     ctx->Map.pcs[ 0 ] < RtemsPartReqCreate_Pre_Name_NA;
0752     ++ctx->Map.pcs[ 0 ]
0753   ) {
0754     for (
0755       ctx->Map.pcs[ 1 ] = RtemsPartReqCreate_Pre_Id_Valid;
0756       ctx->Map.pcs[ 1 ] < RtemsPartReqCreate_Pre_Id_NA;
0757       ++ctx->Map.pcs[ 1 ]
0758     ) {
0759       for (
0760         ctx->Map.pcs[ 2 ] = RtemsPartReqCreate_Pre_Start_Valid;
0761         ctx->Map.pcs[ 2 ] < RtemsPartReqCreate_Pre_Start_NA;
0762         ++ctx->Map.pcs[ 2 ]
0763       ) {
0764         for (
0765           ctx->Map.pcs[ 3 ] = RtemsPartReqCreate_Pre_Length_Valid;
0766           ctx->Map.pcs[ 3 ] < RtemsPartReqCreate_Pre_Length_NA;
0767           ++ctx->Map.pcs[ 3 ]
0768         ) {
0769           for (
0770             ctx->Map.pcs[ 4 ] = RtemsPartReqCreate_Pre_Size_Valid;
0771             ctx->Map.pcs[ 4 ] < RtemsPartReqCreate_Pre_Size_NA;
0772             ++ctx->Map.pcs[ 4 ]
0773           ) {
0774             for (
0775               ctx->Map.pcs[ 5 ] = RtemsPartReqCreate_Pre_Free_Yes;
0776               ctx->Map.pcs[ 5 ] < RtemsPartReqCreate_Pre_Free_NA;
0777               ++ctx->Map.pcs[ 5 ]
0778             ) {
0779               ctx->Map.entry = RtemsPartReqCreate_PopEntry( ctx );
0780               RtemsPartReqCreate_Prepare( ctx );
0781               RtemsPartReqCreate_TestVariant( ctx );
0782               RtemsPartReqCreate_Cleanup( ctx );
0783             }
0784           }
0785         }
0786       }
0787     }
0788   }
0789 }
0790 
0791 /** @} */