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 RtemsObjectValObject
0007  */
0008 
0009 /*
0010  * Copyright (C) 2021 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 
0057 #include <rtems/test.h>
0058 
0059 /**
0060  * @defgroup RtemsObjectValObject spec:/rtems/object/val/object
0061  *
0062  * @ingroup TestsuitesValidationNoClock0
0063  *
0064  * @brief Tests some @ref RTEMSAPIClassicObject directives.
0065  *
0066  * This test case performs the following actions:
0067  *
0068  * - Validate the results of rtems_build_name() (function) and
0069  *   rtems_build_name() (macro) for a sample set of parameters.
0070  *
0071  *   - Check that the accumulated name has the expected value.
0072  *
0073  * - Validate the result of rtems_object_get_local_node().
0074  *
0075  *   - Check that the returned value is one.
0076  *
0077  * @{
0078  */
0079 
0080 static rtems_name BuildNameMacro( char c1, char c2, char c3, char c4 )
0081 {
0082   return rtems_build_name( c1, c2, c3, c4 );
0083 }
0084 
0085 #undef rtems_build_name
0086 
0087 static rtems_name BuildName( char c1, char c2, char c3, char c4 )
0088 {
0089   return rtems_build_name( c1, c2, c3, c4 );
0090 }
0091 
0092 /**
0093  * @brief Validate the results of rtems_build_name() (function) and
0094  *   rtems_build_name() (macro) for a sample set of parameters.
0095  */
0096 static void RtemsObjectValObject_Action_0( void )
0097 {
0098   static const uint16_t chars[] = { 0, 255, 257 };
0099   rtems_name            accumulated_name;
0100   size_t                i;
0101   size_t                j;
0102   size_t                k;
0103   size_t                r;
0104 
0105   accumulated_name = 0;
0106 
0107   for ( i = 0; i < RTEMS_ARRAY_SIZE( chars ); ++i ) {
0108     for ( j = 0; j < RTEMS_ARRAY_SIZE( chars ); ++j ) {
0109       for ( k = 0; k < RTEMS_ARRAY_SIZE( chars ); ++k ) {
0110         for ( r = 0; r < RTEMS_ARRAY_SIZE( chars ); ++r ) {
0111           unsigned char u1;
0112           unsigned char u2;
0113           unsigned char u3;
0114           unsigned char u4;
0115           signed char s1;
0116           signed char s2;
0117           signed char s3;
0118           signed char s4;
0119           rtems_name expected_name;
0120           rtems_name actual_name;
0121 
0122           expected_name = ( chars[ i ] % 256 ) * UINT32_C( 16777216 ) +
0123             ( chars[ j ] % 256 ) * UINT32_C( 65536 ) +
0124             ( chars[ k ] % 256 ) * UINT32_C( 256 ) +
0125             ( chars[ r ] % 256 );
0126 
0127           u1 = (unsigned char) chars[ i ];
0128           u2 = (unsigned char) chars[ j ];
0129           u3 = (unsigned char) chars[ k ];
0130           u4 = (unsigned char) chars[ r ];
0131           actual_name = rtems_build_name( u1, u2, u3, u4 );
0132           T_quiet_eq_u32( actual_name, expected_name )
0133           accumulated_name += actual_name;
0134 
0135           s1 = (signed char) u1;
0136           s2 = (signed char) u2;
0137           s3 = (signed char) u3;
0138           s4 = (signed char) u4;
0139           actual_name = rtems_build_name( s1, s2, s3, s4 );
0140           T_quiet_eq_u32( actual_name, expected_name )
0141           accumulated_name += actual_name;
0142 
0143           actual_name = BuildName(
0144             chars[ i ],
0145             chars[ j ],
0146             chars[ k ],
0147             chars[ r ]
0148           );
0149           T_quiet_eq_u32( actual_name, expected_name );
0150 
0151           actual_name = BuildNameMacro(
0152             chars[ i ],
0153             chars[ j ],
0154             chars[ k ],
0155             chars[ r ]
0156           );
0157           T_quiet_eq_u32( actual_name, expected_name );
0158 
0159           accumulated_name += actual_name;
0160         }
0161       }
0162     }
0163   }
0164 
0165   /*
0166    * Check that the accumulated name has the expected value.
0167    */
0168   T_step_eq_u32( 0, accumulated_name, 0x51515100 );
0169 }
0170 
0171 /**
0172  * @brief Validate the result of rtems_object_get_local_node().
0173  */
0174 static void RtemsObjectValObject_Action_1( void )
0175 {
0176   uint32_t node;
0177 
0178   node = rtems_object_get_local_node();
0179 
0180   /*
0181    * Check that the returned value is one.
0182    */
0183   T_step_eq_u32( 1, node, 1 );
0184 }
0185 
0186 /**
0187  * @fn void T_case_body_RtemsObjectValObject( void )
0188  */
0189 T_TEST_CASE( RtemsObjectValObject )
0190 {
0191   T_plan( 2 );
0192 
0193   RtemsObjectValObject_Action_0();
0194   RtemsObjectValObject_Action_1();
0195 }
0196 
0197 /** @} */