1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* 3 * Copyright (c) 2020-2021, Arm Limited. All rights reserved. 4 */ 5 6 #ifndef LIBSP_TEST_MOCK_ASSERT_H_ 7 #define LIBSP_TEST_MOCK_ASSERT_H_ 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 #include <setjmp.h> 14 15 typedef jmp_buf assert_environment_t; 16 17 /* 18 * SETUP_ASSERT_ENVIRONMENT 19 * Both expect_assert and setjmp must be called without putting them into a new 20 * function. The only way is to use an operator between them. Logical operators 21 * would introduce branches which could introduce uncovered branches. The 22 * solution is use arithmetic operators. expect_assert always return 0 so the 23 * value of the sum is determined by the setjmp return value. 24 * 25 * Example usage: 26 * assert_environment_t env; 27 * 28 * if (SETUP_ASSERT_ENVIRONMENT(env) { 29 * function_with_assert_fail(); 30 * } 31 */ 32 #define SETUP_ASSERT_ENVIRONMENT(env) (expect_assert(&env) + (setjmp(env) == 0)) 33 34 int expect_assert(assert_environment_t *env); 35 36 #ifdef __cplusplus 37 } 38 #endif 39 40 #endif /* LIBSP_TEST_MOCK_ASSERT_H_ */ 41