summaryrefslogtreecommitdiff
path: root/fw/midi-dials/Drivers/CMSIS/DSP/DSP_Lib_TestSuite/Common/JTest/inc/jtest_test_define.h
blob: 1447dd006668bd291e949faf1a9b9570c8db8cd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef _JTEST_TEST_DEFINE_H_
#define _JTEST_TEST_DEFINE_H_

/*--------------------------------------------------------------------------------*/
/* Includes */
/*--------------------------------------------------------------------------------*/

#include "jtest_util.h"
#include "jtest_define.h"
#include "jtest_test.h"

/* For defining macros with optional arguments */
#include "opt_arg/opt_arg.h"

/*--------------------------------------------------------------------------------*/
/* Macros and Defines */
/*--------------------------------------------------------------------------------*/

/**
 *  Prefix for all #JTEST_TEST_t structs.
 */
#define JTEST_TEST_STRUCT_NAME_PREFIX G_JTEST_TEST_STRUCT_

/**
 *  Define test template used by #JTEST_TEST_t tests.
 */
#define JTEST_TEST_FN_TEMPLATE(test_fn)                         \
    JTEST_TEST_RET_t test_fn(void)

#define JTEST_TEST_FN_PROTOTYPE JTEST_TEST_FN_TEMPLATE /**< Alias for
                                                        * #JTEST_TEST_FN_TEMPLATE. */

/**
 *  Evaluate to the name of the #JTEST_TEST_t struct associated with test_fn.
 */
#define JTEST_TEST_STRUCT_NAME(test_fn)                         \
    JTEST_STRUCT_NAME(JTEST_TEST_STRUCT_NAME_PREFIX, test_fn)

/**
 *  Define a #JTEST_TEST_t struct based on the given test_fn.
 */
#define JTEST_TEST_DEFINE_STRUCT(test_fn)                   \
    JTEST_DEFINE_STRUCT(JTEST_TEST_t,                       \
                        JTEST_TEST_STRUCT_NAME(test_fn))

/**
 *  Declare a #JTEST_TEST_t struct based on the given test_fn.
 */
#define JTEST_TEST_DECLARE_STRUCT(test_fn)      \
    JTEST_DECLARE_STRUCT(JTEST_TEST_DEFINE_STRUCT(test_fn))

/**
 *  Contents needed to initialize a JTEST_TEST_t struct.
 */
#define JTEST_TEST_STRUCT_INIT(test_fn, fut, enable)    \
    test_fn,                                            \
        STR_NL(test_fn),                                   \
        STR_NL(fut),                                       \
    {                                                   \
        {                                               \
            enable,                                     \
                0                                       \
        }                                               \
    }                                                   \
        

/**
 *  Initialize the contents of a #JTEST_TEST_t struct.
 */
#define JTEST_TEST_INIT(test_fn, fut, enable)              \
    JTEST_TEST_DEFINE_STRUCT(test_fn) = {                  \
        JTEST_TEST_STRUCT_INIT(test_fn, fut, enable)       \
    }

/* Test Definition Macro */
/*--------------------------------------------------------------------------------*/

/**
 *  Define a #JTEST_TEST_t object and a test function.
 */
#define _JTEST_DEFINE_TEST(test_fn, fut, enable)           \
    JTEST_TEST_FN_PROTOTYPE(test_fn);                      \
    JTEST_TEST_INIT(test_fn, fut, enable);                 \
    JTEST_TEST_FN_PROTOTYPE(test_fn) /* Notice the lacking semicolon */

/**
 *  Declare a #JTEST_TEST_t object and a test function prototype.
 */
#define JTEST_DECLARE_TEST(test_fn)                                     \
    JTEST_TEST_FN_PROTOTYPE(test_fn);                                   \
    JTEST_TEST_DECLARE_STRUCT(test_fn) /* Note the lacking semicolon */

/*--------------------------------------------------------------------------------*/
/* Macros with optional arguments */
/*--------------------------------------------------------------------------------*/

/* Top-level Interface */
#define JTEST_DEFINE_TEST(...)                             \
    JTEST_DEFINE_TEST_(PP_NARG(__VA_ARGS__), ##__VA_ARGS__)

/* Dispatch Macro*/
#define JTEST_DEFINE_TEST_(N, ...)                         \
    SPLICE(JTEST_DEFINE_TEST_, N)(__VA_ARGS__)

/* Default Arguments */
#define JTEST_DEFINE_TEST_DEFAULT_FUT /* Blank */
#define JTEST_DEFINE_TEST_DEFAULT_ENABLE                   \
    JTEST_TRUE                                 /* Tests enabled by
                                                * default. */ 

/* Dispatch Cases*/
#define JTEST_DEFINE_TEST_1(_1)                            \
    _JTEST_DEFINE_TEST(                                    \
        _1,                                                \
        JTEST_DEFINE_TEST_DEFAULT_FUT,                     \
        JTEST_DEFINE_TEST_DEFAULT_ENABLE                   \
        )

#define JTEST_DEFINE_TEST_2(_1, _2)                        \
    _JTEST_DEFINE_TEST(                                    \
        _1,                                                \
        _2,                                                \
        JTEST_DEFINE_TEST_DEFAULT_ENABLE                   \
        )

#define JTEST_DEFINE_TEST_3(_1, _2, _3)                    \
    _JTEST_DEFINE_TEST(                                    \
        _1,                                                \
        _2,                                                \
        _3                                                 \
        )

#endif /* _JTEST_TEST_DEFINE_H_ */