Back to home page

LXR

 
 

    


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

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RtemsSignalValSignalConstant
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 "tr-signal-constant.h"
0058 
0059 #include <rtems/test.h>
0060 
0061 /**
0062  * @defgroup RtemsSignalValSignalConstant \
0063  *   spec:/rtems/signal/val/signal-constant
0064  *
0065  * @ingroup TestsuitesValidationNoClock0
0066  *
0067  * @brief Tests a signal constant of the @ref RTEMSAPIClassicSignal using the
0068  *   signal set of the executing task.
0069  *
0070  * This test case performs the following actions:
0071  *
0072  * - Validate the signal constant.
0073  *
0074  *   - Check that the signal constant is equal to the integer representation of
0075  *     the signal in the signal set.
0076  *
0077  * - Validate the signal delivery.
0078  *
0079  *   - Check that the caught signal set represents exactly the sent signal.
0080  *
0081  * @{
0082  */
0083 
0084 /**
0085  * @brief Test context for spec:/rtems/signal/val/signal-constant test case.
0086  */
0087 typedef struct {
0088   /**
0089    * @brief This member contains the caught signal set.
0090    */
0091   rtems_signal_set signal_set;
0092 
0093   /**
0094    * @brief This member contains a copy of the corresponding
0095    *   RtemsSignalValSignalConstant_Run() parameter.
0096    */
0097   rtems_signal_set signal;
0098 
0099   /**
0100    * @brief This member contains a copy of the corresponding
0101    *   RtemsSignalValSignalConstant_Run() parameter.
0102    */
0103   int number;
0104 } RtemsSignalValSignalConstant_Context;
0105 
0106 static RtemsSignalValSignalConstant_Context
0107   RtemsSignalValSignalConstant_Instance;
0108 
0109 typedef RtemsSignalValSignalConstant_Context Context;
0110 
0111 static void SignalHandler( rtems_signal_set signal_set )
0112 {
0113   Context *ctx;
0114 
0115   ctx = T_fixture_context();
0116   ctx->signal_set = signal_set;
0117 }
0118 
0119 static T_fixture RtemsSignalValSignalConstant_Fixture = {
0120   .setup = NULL,
0121   .stop = NULL,
0122   .teardown = NULL,
0123   .scope = NULL,
0124   .initial_context = &RtemsSignalValSignalConstant_Instance
0125 };
0126 
0127 /**
0128  * @brief Validate the signal constant.
0129  */
0130 static void RtemsSignalValSignalConstant_Action_0(
0131   RtemsSignalValSignalConstant_Context *ctx
0132 )
0133 {
0134   /* No action */
0135 
0136   /*
0137    * Check that the signal constant is equal to the integer representation of
0138    * the signal in the signal set.
0139    */
0140   T_step_eq_u32(
0141     0,
0142     ctx->signal,
0143     ( (rtems_signal_set) 1 ) << ctx->number
0144   );
0145 }
0146 
0147 /**
0148  * @brief Validate the signal delivery.
0149  */
0150 static void RtemsSignalValSignalConstant_Action_1(
0151   RtemsSignalValSignalConstant_Context *ctx
0152 )
0153 {
0154   rtems_status_code sc;
0155 
0156   ctx->signal_set = 0;
0157 
0158   sc = rtems_signal_catch( NULL, RTEMS_DEFAULT_MODES );
0159   T_step_rsc_success( 1, sc );
0160 
0161   sc = rtems_signal_catch( SignalHandler, RTEMS_NO_ASR );
0162   T_step_rsc_success( 2, sc );
0163 
0164   sc = rtems_signal_send( RTEMS_SELF, ctx->signal );
0165   T_step_rsc_success( 3, sc );
0166 
0167   /*
0168    * Check that the caught signal set represents exactly the sent signal.
0169    */
0170   T_step_eq_u32(
0171     4,
0172     ctx->signal_set,
0173     ctx->signal
0174   );
0175 }
0176 
0177 static T_fixture_node RtemsSignalValSignalConstant_Node;
0178 
0179 static T_remark RtemsSignalValSignalConstant_Remark = {
0180   .next = NULL,
0181   .remark = "RtemsSignalValSignalConstant"
0182 };
0183 
0184 void RtemsSignalValSignalConstant_Run( rtems_signal_set signal, int number )
0185 {
0186   RtemsSignalValSignalConstant_Context *ctx;
0187 
0188   ctx = &RtemsSignalValSignalConstant_Instance;
0189   ctx->signal = signal;
0190   ctx->number = number;
0191 
0192   ctx = T_push_fixture(
0193     &RtemsSignalValSignalConstant_Node,
0194     &RtemsSignalValSignalConstant_Fixture
0195   );
0196 
0197   T_plan( 5 );
0198 
0199   RtemsSignalValSignalConstant_Action_0( ctx );
0200   RtemsSignalValSignalConstant_Action_1( ctx );
0201 
0202   T_add_remark( &RtemsSignalValSignalConstant_Remark );
0203   T_pop_fixture();
0204 }
0205 
0206 /** @} */