test code 123

Dependencies:   mbed

Fork of LinkNode-Test by Qi Yao

Committer:
youkee
Date:
Thu Sep 01 05:14:03 2016 +0000
Revision:
0:1ad0e04b1bc5
change internal time from 1s to 200ms

Who changed what in which revision?

UserRevisionLine numberNew contents of line
youkee 0:1ad0e04b1bc5 1 /**************************************************************************/
youkee 0:1ad0e04b1bc5 2 /*!
youkee 0:1ad0e04b1bc5 3 @file assertion.h
youkee 0:1ad0e04b1bc5 4 @author hathach (tinyusb.org)
youkee 0:1ad0e04b1bc5 5
youkee 0:1ad0e04b1bc5 6 @section LICENSE
youkee 0:1ad0e04b1bc5 7
youkee 0:1ad0e04b1bc5 8 Software License Agreement (BSD License)
youkee 0:1ad0e04b1bc5 9
youkee 0:1ad0e04b1bc5 10 Copyright (c) 2013, K. Townsend (microBuilder.eu)
youkee 0:1ad0e04b1bc5 11 All rights reserved.
youkee 0:1ad0e04b1bc5 12
youkee 0:1ad0e04b1bc5 13 Redistribution and use in source and binary forms, with or without
youkee 0:1ad0e04b1bc5 14 modification, are permitted provided that the following conditions are met:
youkee 0:1ad0e04b1bc5 15 1. Redistributions of source code must retain the above copyright
youkee 0:1ad0e04b1bc5 16 notice, this list of conditions and the following disclaimer.
youkee 0:1ad0e04b1bc5 17 2. Redistributions in binary form must reproduce the above copyright
youkee 0:1ad0e04b1bc5 18 notice, this list of conditions and the following disclaimer in the
youkee 0:1ad0e04b1bc5 19 documentation and/or other materials provided with the distribution.
youkee 0:1ad0e04b1bc5 20 3. Neither the name of the copyright holders nor the
youkee 0:1ad0e04b1bc5 21 names of its contributors may be used to endorse or promote products
youkee 0:1ad0e04b1bc5 22 derived from this software without specific prior written permission.
youkee 0:1ad0e04b1bc5 23
youkee 0:1ad0e04b1bc5 24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
youkee 0:1ad0e04b1bc5 25 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
youkee 0:1ad0e04b1bc5 26 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
youkee 0:1ad0e04b1bc5 27 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
youkee 0:1ad0e04b1bc5 28 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
youkee 0:1ad0e04b1bc5 29 INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
youkee 0:1ad0e04b1bc5 30 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND
youkee 0:1ad0e04b1bc5 31 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
youkee 0:1ad0e04b1bc5 32 INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS
youkee 0:1ad0e04b1bc5 33 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
youkee 0:1ad0e04b1bc5 34 */
youkee 0:1ad0e04b1bc5 35 /**************************************************************************/
youkee 0:1ad0e04b1bc5 36
youkee 0:1ad0e04b1bc5 37 /** \file
youkee 0:1ad0e04b1bc5 38 * \brief TBD
youkee 0:1ad0e04b1bc5 39 *
youkee 0:1ad0e04b1bc5 40 * \note TBD
youkee 0:1ad0e04b1bc5 41 */
youkee 0:1ad0e04b1bc5 42
youkee 0:1ad0e04b1bc5 43 /** \ingroup TBD
youkee 0:1ad0e04b1bc5 44 * \defgroup TBD
youkee 0:1ad0e04b1bc5 45 * \brief TBD
youkee 0:1ad0e04b1bc5 46 *
youkee 0:1ad0e04b1bc5 47 * @{
youkee 0:1ad0e04b1bc5 48 */
youkee 0:1ad0e04b1bc5 49
youkee 0:1ad0e04b1bc5 50 #ifndef _ASSERTION_H_
youkee 0:1ad0e04b1bc5 51 #define _ASSERTION_H_
youkee 0:1ad0e04b1bc5 52
youkee 0:1ad0e04b1bc5 53 #include "projectconfig.h"
youkee 0:1ad0e04b1bc5 54
youkee 0:1ad0e04b1bc5 55 #ifdef __cplusplus
youkee 0:1ad0e04b1bc5 56 extern "C"
youkee 0:1ad0e04b1bc5 57 {
youkee 0:1ad0e04b1bc5 58 #endif
youkee 0:1ad0e04b1bc5 59
youkee 0:1ad0e04b1bc5 60 static inline void debugger_breakpoint(void) ATTR_ALWAYS_INLINE;
youkee 0:1ad0e04b1bc5 61 static inline void debugger_breakpoint(void)
youkee 0:1ad0e04b1bc5 62 {
youkee 0:1ad0e04b1bc5 63 #ifndef _TEST_
youkee 0:1ad0e04b1bc5 64 __asm("BKPT #0\n");
youkee 0:1ad0e04b1bc5 65 #endif
youkee 0:1ad0e04b1bc5 66 }
youkee 0:1ad0e04b1bc5 67
youkee 0:1ad0e04b1bc5 68 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 69 // Compile-time Assert
youkee 0:1ad0e04b1bc5 70 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 71 #if defined __COUNTER__ && __COUNTER__ != __COUNTER__
youkee 0:1ad0e04b1bc5 72 #define _ASSERT_COUNTER __COUNTER__
youkee 0:1ad0e04b1bc5 73 #else
youkee 0:1ad0e04b1bc5 74 #define _ASSERT_COUNTER __LINE__
youkee 0:1ad0e04b1bc5 75 #endif
youkee 0:1ad0e04b1bc5 76
youkee 0:1ad0e04b1bc5 77 #define ASSERT_STATIC(const_expr, message) enum { XSTRING_CONCAT_(static_assert_, _ASSERT_COUNTER) = 1/(!!(const_expr)) }
youkee 0:1ad0e04b1bc5 78
youkee 0:1ad0e04b1bc5 79 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 80 // Assert Helper
youkee 0:1ad0e04b1bc5 81 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 82 //#ifndef _TEST_
youkee 0:1ad0e04b1bc5 83 // #define ASSERT_MESSAGE(format, ...) _PRINTF("Assert at %s: %s: %d: " format "\n", __BASE_FILE__, __PRETTY_FUNCTION__, __LINE__, __VA_ARGS__)
youkee 0:1ad0e04b1bc5 84 //#else
youkee 0:1ad0e04b1bc5 85 // #define ASSERT_MESSAGE(format, ...) _PRINTF("%d:note: Assert " format "\n", __LINE__, __VA_ARGS__)
youkee 0:1ad0e04b1bc5 86 //#endif
youkee 0:1ad0e04b1bc5 87
youkee 0:1ad0e04b1bc5 88 #if CFG_DEBUG == 3
youkee 0:1ad0e04b1bc5 89 #define ASSERT_MESSAGE(format, ...) debugger_breakpoint()
youkee 0:1ad0e04b1bc5 90 #elif CFG_DEBUG == 2
youkee 0:1ad0e04b1bc5 91 #define ASSERT_MESSAGE(format, ...) printf("Assert at %s: %s: %d: " format "\n", __BASE_FILE__, __PRETTY_FUNCTION__, __LINE__, __VA_ARGS__)
youkee 0:1ad0e04b1bc5 92 #else
youkee 0:1ad0e04b1bc5 93 #define ASSERT_MESSAGE(format, ...)
youkee 0:1ad0e04b1bc5 94 #endif
youkee 0:1ad0e04b1bc5 95
youkee 0:1ad0e04b1bc5 96 #define ASSERT_ERROR_HANDLER(x, para) \
youkee 0:1ad0e04b1bc5 97 return (x)
youkee 0:1ad0e04b1bc5 98
youkee 0:1ad0e04b1bc5 99 #define ASSERT_DEFINE_WITH_HANDLER(error_handler, handler_para, setup_statement, condition, error, format, ...) \
youkee 0:1ad0e04b1bc5 100 do{\
youkee 0:1ad0e04b1bc5 101 setup_statement;\
youkee 0:1ad0e04b1bc5 102 if (!(condition)) {\
youkee 0:1ad0e04b1bc5 103 ASSERT_MESSAGE(format, __VA_ARGS__);\
youkee 0:1ad0e04b1bc5 104 error_handler(error, handler_para);\
youkee 0:1ad0e04b1bc5 105 }\
youkee 0:1ad0e04b1bc5 106 }while(0)
youkee 0:1ad0e04b1bc5 107
youkee 0:1ad0e04b1bc5 108 #define ASSERT_DEFINE(...) ASSERT_DEFINE_WITH_HANDLER(ASSERT_ERROR_HANDLER, NULL, __VA_ARGS__)
youkee 0:1ad0e04b1bc5 109
youkee 0:1ad0e04b1bc5 110 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 111 // error_t Status Assert TODO use ASSERT_DEFINE
youkee 0:1ad0e04b1bc5 112 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 113 #define ASSERT_STATUS_MESSAGE(sts, message) \
youkee 0:1ad0e04b1bc5 114 ASSERT_DEFINE(error_t status = (error_t)(sts),\
youkee 0:1ad0e04b1bc5 115 ERROR_NONE == status, status, "%s: %s", ErrorStr[status], message)
youkee 0:1ad0e04b1bc5 116
youkee 0:1ad0e04b1bc5 117 #define ASSERT_STATUS(sts) \
youkee 0:1ad0e04b1bc5 118 ASSERT_DEFINE(error_t status = (error_t)(sts),\
youkee 0:1ad0e04b1bc5 119 ERROR_NONE == status, status, "error = %d", status)
youkee 0:1ad0e04b1bc5 120
youkee 0:1ad0e04b1bc5 121 #define ASSERT_STATUS_RET_VOID(sts) \
youkee 0:1ad0e04b1bc5 122 ASSERT_DEFINE(error_t status = (error_t)(sts),\
youkee 0:1ad0e04b1bc5 123 ERROR_NONE == status, (void) 0, "error = %d", status)
youkee 0:1ad0e04b1bc5 124
youkee 0:1ad0e04b1bc5 125 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 126 // Logical Assert
youkee 0:1ad0e04b1bc5 127 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 128 #define ASSERT(...) ASSERT_TRUE(__VA_ARGS__)
youkee 0:1ad0e04b1bc5 129 #define ASSERT_TRUE(condition , error) ASSERT_DEFINE( , (condition), error, "%s", "evaluated to false")
youkee 0:1ad0e04b1bc5 130 #define ASSERT_FALSE(condition , error) ASSERT_DEFINE( ,!(condition), error, "%s", "evaluated to true")
youkee 0:1ad0e04b1bc5 131
youkee 0:1ad0e04b1bc5 132 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 133 // Pointer Assert
youkee 0:1ad0e04b1bc5 134 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 135 #define ASSERT_PTR(...) ASSERT_PTR_NOT_NULL(__VA_ARGS__)
youkee 0:1ad0e04b1bc5 136 #define ASSERT_PTR_NOT_NULL(pointer, error) ASSERT_DEFINE( , NULL != (pointer), error, "%s", "pointer is NULL")
youkee 0:1ad0e04b1bc5 137 #define ASSERT_PTR_NULL(pointer, error) ASSERT_DEFINE( , NULL == (pointer), error, "%s", "pointer is not NULL")
youkee 0:1ad0e04b1bc5 138
youkee 0:1ad0e04b1bc5 139 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 140 // Integral Assert
youkee 0:1ad0e04b1bc5 141 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 142 #define ASSERT_XXX_EQUAL(type_format, expected, actual, error) \
youkee 0:1ad0e04b1bc5 143 ASSERT_DEFINE(\
youkee 0:1ad0e04b1bc5 144 uint32_t exp = (expected); uint32_t act = (actual),\
youkee 0:1ad0e04b1bc5 145 exp==act,\
youkee 0:1ad0e04b1bc5 146 error,\
youkee 0:1ad0e04b1bc5 147 "expected " type_format ", actual " type_format, exp, act)
youkee 0:1ad0e04b1bc5 148
youkee 0:1ad0e04b1bc5 149 #define ASSERT_XXX_WITHIN(type_format, lower, upper, actual, error) \
youkee 0:1ad0e04b1bc5 150 ASSERT_DEFINE(\
youkee 0:1ad0e04b1bc5 151 uint32_t low = (lower); uint32_t up = (upper); uint32_t act = (actual),\
youkee 0:1ad0e04b1bc5 152 (low <= act) && (act <= up),\
youkee 0:1ad0e04b1bc5 153 error,\
youkee 0:1ad0e04b1bc5 154 "expected within " type_format " - " type_format ", actual " type_format, low, up, act)
youkee 0:1ad0e04b1bc5 155
youkee 0:1ad0e04b1bc5 156 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 157 // Integer Assert
youkee 0:1ad0e04b1bc5 158 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 159 #define ASSERT_INT(...) ASSERT_INT_EQUAL(__VA_ARGS__)
youkee 0:1ad0e04b1bc5 160 #define ASSERT_INT_EQUAL(...) ASSERT_XXX_EQUAL("%d", __VA_ARGS__)
youkee 0:1ad0e04b1bc5 161 #define ASSERT_INT_WITHIN(...) ASSERT_XXX_WITHIN("%d", __VA_ARGS__)
youkee 0:1ad0e04b1bc5 162
youkee 0:1ad0e04b1bc5 163 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 164 // Hex Assert
youkee 0:1ad0e04b1bc5 165 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 166 #define ASSERT_HEX(...) ASSERT_HEX_EQUAL(__VA_ARGS__)
youkee 0:1ad0e04b1bc5 167 #define ASSERT_HEX_EQUAL(...) ASSERT_XXX_EQUAL("0x%x", __VA_ARGS__)
youkee 0:1ad0e04b1bc5 168 #define ASSERT_HEX_WITHIN(...) ASSERT_XXX_WITHIN("0x%x", __VA_ARGS__)
youkee 0:1ad0e04b1bc5 169
youkee 0:1ad0e04b1bc5 170 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 171 // Bin Assert
youkee 0:1ad0e04b1bc5 172 //--------------------------------------------------------------------+
youkee 0:1ad0e04b1bc5 173 #define BIN8_PRINTF_PATTERN "%d%d%d%d%d%d%d%d"
youkee 0:1ad0e04b1bc5 174 #define BIN8_PRINTF_CONVERT(byte) \
youkee 0:1ad0e04b1bc5 175 ((byte) & 0x80 ? 1 : 0), \
youkee 0:1ad0e04b1bc5 176 ((byte) & 0x40 ? 1 : 0), \
youkee 0:1ad0e04b1bc5 177 ((byte) & 0x20 ? 1 : 0), \
youkee 0:1ad0e04b1bc5 178 ((byte) & 0x10 ? 1 : 0), \
youkee 0:1ad0e04b1bc5 179 ((byte) & 0x08 ? 1 : 0), \
youkee 0:1ad0e04b1bc5 180 ((byte) & 0x04 ? 1 : 0), \
youkee 0:1ad0e04b1bc5 181 ((byte) & 0x02 ? 1 : 0), \
youkee 0:1ad0e04b1bc5 182 ((byte) & 0x01 ? 1 : 0)
youkee 0:1ad0e04b1bc5 183
youkee 0:1ad0e04b1bc5 184 #define ASSERT_BIN8(...) ASSERT_BIN8_EQUAL(__VA_ARGS__)
youkee 0:1ad0e04b1bc5 185 #define ASSERT_BIN8_EQUAL(expected, actual, error)\
youkee 0:1ad0e04b1bc5 186 ASSERT_DEFINE(\
youkee 0:1ad0e04b1bc5 187 uint8_t exp = (expected); uint8_t act = (actual),\
youkee 0:1ad0e04b1bc5 188 exp==act,\
youkee 0:1ad0e04b1bc5 189 error,\
youkee 0:1ad0e04b1bc5 190 "expected " BIN8_PRINTF_PATTERN ", actual " BIN8_PRINTF_PATTERN, BIN8_PRINTF_CONVERT(exp), BIN8_PRINTF_CONVERT(act) )
youkee 0:1ad0e04b1bc5 191
youkee 0:1ad0e04b1bc5 192 #ifdef __cplusplus
youkee 0:1ad0e04b1bc5 193 }
youkee 0:1ad0e04b1bc5 194 #endif
youkee 0:1ad0e04b1bc5 195
youkee 0:1ad0e04b1bc5 196 #endif /* _ASSERTION_H_ */
youkee 0:1ad0e04b1bc5 197
youkee 0:1ad0e04b1bc5 198 /** @} */