XCORE SDK
XCORE Software Development Kit
tst_asserts.h
1 // Copyright 2020-2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #pragma once
5 
6 #include <stdint.h>
7 
8 
9 #define XTEST_ASSERT(CONDITION, FMT, ...) \
10  do { \
11  if(!(CONDITION)) { \
12  printf( FMT, __VA_ARGS__ ); \
13  } \
14  TEST_ASSERT(CONDITION); \
15  } while(0)
16 
17 
18 #define XTEST_ASSERT_VECT_S16_EQUAL(EXPECTED, ACTUAL, LEN, FMT, ...) \
19  do { \
20  for(int i = 0; i < (LEN); i++) { \
21  if(((int16_t)(EXPECTED)[i]) != ((int16_t)(ACTUAL)[i])) { \
22  printf("\n*** %s[%d] != %s[%d] ***\n", #EXPECTED, i, #ACTUAL, i); \
23  printf(FMT, __VA_ARGS__ ); \
24  } \
25  TEST_ASSERT_EQUAL_INT16_MESSAGE((EXPECTED)[i], (ACTUAL)[i],""); \
26  } \
27  } while(0)
28 
29 
30 #define XTEST_ASSERT_VECT_S32_EQUAL(EXPECTED, ACTUAL, LEN, FMT, ...) \
31  do { \
32  for(int i = 0; i < (LEN); i++) { \
33  if(((int32_t)(EXPECTED)[i]) != ((int32_t)(ACTUAL)[i])) { \
34  printf("\n*** %s[%d] != %s[%d] ***\n", #EXPECTED, i, #ACTUAL, i); \
35  printf(FMT, __VA_ARGS__ ); \
36  } \
37  TEST_ASSERT_EQUAL_INT32_MESSAGE((EXPECTED)[i], (ACTUAL)[i],""); \
38  } \
39  } while(0)
40 
41 
42 
43 #define XTEST_ASSERT_VECT_S16_WITHIN(THRESH, EXPECTED, ACTUAL, LEN, FMT, ...) \
44  do { \
45  for(int i = 0; i < (LEN); i++) { \
46  int16_t d = abs(((int16_t)(EXPECTED)[i]) - ((int16_t)(ACTUAL)[i])); \
47  if(d > (THRESH)) { \
48  printf("\n*** abs(%s[%d] - %s[%d]) > %d ***\n", \
49  #EXPECTED, i, #ACTUAL, i, (THRESH)); \
50  printf("Actual delta: %d\n", d); \
51  printf(FMT, __VA_ARGS__ ); \
52  } \
53  TEST_ASSERT_INT16_WITHIN_MESSAGE((THRESH), \
54  (EXPECTED)[i], (ACTUAL)[i],""); \
55  } \
56  } while(0)
57 
58 
59 #define XTEST_ASSERT_VECT_S32_WITHIN(THRESH, EXPECTED, ACTUAL, LEN, FMT, ...) \
60  do { \
61  for(int i = 0; i < (LEN); i++) { \
62  int32_t d = abs(((int32_t)(EXPECTED)[i]) - ((int32_t)(ACTUAL)[i])); \
63  if(d > (THRESH)) { \
64  printf("\n*** abs(%s[%d] - %s[%d]) > %d ***\n", \
65  #EXPECTED, i, #ACTUAL, i, (THRESH)); \
66  printf("Actual delta: %d\n", d); \
67  printf(FMT, __VA_ARGS__ ); \
68  } \
69  TEST_ASSERT_INT32_WITHIN_MESSAGE((THRESH), \
70  (EXPECTED)[i], (ACTUAL)[i],""); \
71  } \
72  } while(0)
73 
74 
75 
76 #define XTEST_ASSERT_VECT_C32_WITHIN(THRESH, EXPECTED, ACTUAL, LEN, FMT, ...) \
77  do { \
78  for(int i = 0; i < (LEN); i++) { \
79  int32_t d_re = abs(((int32_t)(EXPECTED)[i].re) - ((int32_t)(ACTUAL)[i].re)); \
80  int32_t d_im = abs(((int32_t)(EXPECTED)[i].im) - ((int32_t)(ACTUAL)[i].im)); \
81  if(d_re > (THRESH)){ \
82  printf("\n*** abs(%s[%d].re - %s[%d].re) > %d ***\n", \
83  #EXPECTED, i, #ACTUAL, i, (THRESH)); \
84  printf("Actual delta: %d\n", d_re); \
85  printf(FMT, __VA_ARGS__ ); \
86  } else if(d_im > (THRESH)) { \
87  printf("\n*** abs(%s[%d].im - %s[%d].im) > %d ***\n", \
88  #EXPECTED, i, #ACTUAL, i, (THRESH)); \
89  printf("Actual delta: %d\n", d_im); \
90  printf(FMT, __VA_ARGS__ ); \
91  } \
92  TEST_ASSERT_INT32_WITHIN_MESSAGE((THRESH), \
93  (EXPECTED)[i].re, (ACTUAL)[i].re,""); \
94  TEST_ASSERT_INT32_WITHIN_MESSAGE((THRESH), \
95  (EXPECTED)[i].im, (ACTUAL)[i].im,""); \
96  } \
97  } while(0)
98