@@ -38,78 +38,14 @@ const uint8_t input_data[] = "123456789";
38
38
typedef struct
39
39
{
40
40
const crc_mbed_config config_data;
41
- const char * input_data;
42
41
uint32_t expected_result;
43
42
44
43
} TEST_CASE;
45
44
46
- static TEST_CASE test_cases[] = {
47
- /* Predefined polynomials. */
48
- { {POLY_7BIT_SD , 7 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0xEA },
49
- { {POLY_7BIT_SD , 7 , 0x0000007F , 0x00000000 , false , false }, " 123456789" , 0xA0 },
50
- { {POLY_7BIT_SD , 7 , 0x0000002B , 0x00000000 , false , false }, " 123456789" , 0x74 },
51
- { {POLY_7BIT_SD , 7 , 0x00000000 , 0x0000007F , false , false }, " 123456789" , 0x95 },
52
- { {POLY_7BIT_SD , 7 , 0x00000000 , 0x0000002B , false , false }, " 123456789" , 0xC1 },
53
- { {POLY_7BIT_SD , 7 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0xA4 },
54
- { {POLY_7BIT_SD , 7 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0x57 },
55
-
56
- { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0xF4 },
57
- { {POLY_8BIT_CCITT , 8 , 0x000000FF , 0x00000000 , false , false }, " 123456789" , 0xFB },
58
- { {POLY_8BIT_CCITT , 8 , 0x000000AB , 0x00000000 , false , false }, " 123456789" , 0x87 },
59
- { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x000000FF , false , false }, " 123456789" , 0x0B },
60
- { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x000000AB , false , false }, " 123456789" , 0x5F },
61
- { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0x04 },
62
- { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0x2F },
63
-
64
- { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0x31C3 },
65
- { {POLY_16BIT_CCITT , 16 , 0x0000FFFF , 0x00000000 , false , false }, " 123456789" , 0x29B1 },
66
- { {POLY_16BIT_CCITT , 16 , 0x0000ABAB , 0x00000000 , false , false }, " 123456789" , 0x7D70 },
67
- { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x0000FFFF , false , false }, " 123456789" , 0xCE3C },
68
- { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x0000ABAB , false , false }, " 123456789" , 0x9A68 },
69
- { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0x9184 },
70
- { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0xC38C },
71
-
72
- { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0xFEE8 },
73
- { {POLY_16BIT_IBM , 16 , 0x0000FFFF , 0x00000000 , false , false }, " 123456789" , 0xAEE7 },
74
- { {POLY_16BIT_IBM , 16 , 0x0000ABAB , 0x00000000 , false , false }, " 123456789" , 0x0887 },
75
- { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x0000FFFF , false , false }, " 123456789" , 0x0117 },
76
- { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x0000ABAB , false , false }, " 123456789" , 0x5543 },
77
- { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0xBCDD },
78
- { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0x177F },
79
-
80
- { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0x89A1897F },
81
- { {POLY_32BIT_ANSI , 32 , 0xFFFFFFFF , 0x00000000 , false , false }, " 123456789" , 0x0376E6E7 },
82
- { {POLY_32BIT_ANSI , 32 , 0xABABABAB , 0x00000000 , false , false }, " 123456789" , 0x871A2FAA },
83
- { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0xFFFFFFFF , false , false }, " 123456789" , 0x765E7680 },
84
- { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0xABABABAB , false , false }, " 123456789" , 0x220A22D4 },
85
- { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0x11B4BFB4 },
86
- { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0xFE918591 },
87
-
88
- /* Not-predefined polynomials. */
89
- { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0xA2 },
90
- { {POLY_8BIT_MAXIM , 8 , 0x000000FF , 0x00000000 , false , false }, " 123456789" , 0xF7 },
91
- { {POLY_8BIT_MAXIM , 8 , 0x000000AB , 0x00000000 , false , false }, " 123456789" , 0x71 },
92
- { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x000000FF , false , false }, " 123456789" , 0x5D },
93
- { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x000000AB , false , false }, " 123456789" , 0x09 },
94
- { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0x85 },
95
- { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0x45 },
96
-
97
- { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0xFEE8 },
98
- { {POLY_16BIT_MAXIM , 16 , 0x0000FFFF , 0x00000000 , false , false }, " 123456789" , 0xAEE7 },
99
- { {POLY_16BIT_MAXIM , 16 , 0x0000ABAB , 0x00000000 , false , false }, " 123456789" , 0x0887 },
100
- { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x0000FFFF , false , false }, " 123456789" , 0x0117 },
101
- { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x0000ABAB , false , false }, " 123456789" , 0x5543 },
102
- { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0xBCDD },
103
- { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0x177F },
104
-
105
- { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0x00000000 , false , false }, " 123456789" , 0x89A1897F },
106
- { {POLY_32BIT_POSIX , 32 , 0xFFFFFFFF , 0x00000000 , false , false }, " 123456789" , 0x0376E6E7 },
107
- { {POLY_32BIT_POSIX , 32 , 0xABABABAB , 0x00000000 , false , false }, " 123456789" , 0x871A2FAA },
108
- { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0xFFFFFFFF , false , false }, " 123456789" , 0x765E7680 },
109
- { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0xABABABAB , false , false }, " 123456789" , 0x220A22D4 },
110
- { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0x00000000 , true , false }, " 123456789" , 0x11B4BFB4 },
111
- { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0x00000000 , false , true }, " 123456789" , 0xFE918591 },
112
- };
45
+ /* We will allocate test case array on stack since memory limits on some boards
46
+ * like NUCLEO_F070RB. */
47
+ static TEST_CASE *test_cases;
48
+ static uint32_t test_cases_size;
113
49
114
50
/* Test that hal_crc_is_supported() function returns true if given polynomial
115
51
* is supported, false otherwise (at least one polynomial from the predefined list must be supported). */
@@ -118,8 +54,9 @@ void crc_is_supported_test()
118
54
/* Check if at least one crc polynomial/config is supported. */
119
55
uint32_t num_of_supported_polynomials = 0 ;
120
56
121
- for (unsigned int i = 0 ; i < (sizeof (test_cases) / sizeof (TEST_CASE)); i++) {
57
+ for (unsigned int i = 0 ; i < (test_cases_size / sizeof (TEST_CASE)); i++) {
122
58
if (hal_crc_is_supported (&test_cases[i].config_data ) == true ) {
59
+
123
60
num_of_supported_polynomials++;
124
61
}
125
62
}
@@ -131,11 +68,11 @@ void crc_is_supported_test()
131
68
* be successfully obtained. */
132
69
void crc_calc_single_test ()
133
70
{
134
- for (unsigned int i = 0 ; i < (sizeof (test_cases) / sizeof (TEST_CASE)); i++) {
71
+ for (unsigned int i = 0 ; i < (test_cases_size / sizeof (TEST_CASE)); i++) {
135
72
if (hal_crc_is_supported (&test_cases[i].config_data ) == true ) {
136
73
137
74
hal_crc_compute_partial_start (&test_cases[i].config_data );
138
- hal_crc_compute_partial ((uint8_t *) test_cases[i]. input_data , strlen ((const char *) test_cases[i]. input_data ));
75
+ hal_crc_compute_partial ((uint8_t *) input_data, strlen ((const char *) input_data));
139
76
const uint32_t crc = hal_crc_get_result ();
140
77
141
78
TEST_ASSERT_EQUAL (test_cases[i].expected_result , crc);
@@ -147,18 +84,18 @@ void crc_calc_single_test()
147
84
* succession in order to provide additional data to CRC module. */
148
85
void crc_calc_multi_test ()
149
86
{
150
- for (unsigned int i = 0 ; i < (sizeof (test_cases) / sizeof (TEST_CASE)); i++) {
87
+ for (unsigned int i = 0 ; i < (test_cases_size / sizeof (TEST_CASE)); i++) {
151
88
if (hal_crc_is_supported (&test_cases[i].config_data ) == true ) {
152
89
153
90
const uint32_t first_part_bytes = 3 ;
154
91
const uint32_t second_part_bytes = 1 ;
155
- const uint32_t third_part_bytes = strlen ((const char *) test_cases[i]. input_data ) - first_part_bytes
92
+ const uint32_t third_part_bytes = strlen ((const char *) input_data) - first_part_bytes
156
93
- second_part_bytes;
157
94
158
95
hal_crc_compute_partial_start (&test_cases[i].config_data );
159
- hal_crc_compute_partial ((uint8_t *) test_cases[i]. input_data , first_part_bytes);
160
- hal_crc_compute_partial ((uint8_t *) (test_cases[i]. input_data + first_part_bytes), second_part_bytes);
161
- hal_crc_compute_partial ((uint8_t *) (test_cases[i]. input_data + first_part_bytes + second_part_bytes),
96
+ hal_crc_compute_partial ((uint8_t *) input_data, first_part_bytes);
97
+ hal_crc_compute_partial ((uint8_t *) (input_data + first_part_bytes), second_part_bytes);
98
+ hal_crc_compute_partial ((uint8_t *) (input_data + first_part_bytes + second_part_bytes),
162
99
third_part_bytes);
163
100
const uint32_t crc = hal_crc_get_result ();
164
101
@@ -178,7 +115,7 @@ void crc_reconfigure_test()
178
115
179
116
/* At least one configuration must be supported. If two are supported, then
180
117
* re-initialize CRC module using different config. */
181
- for (unsigned int i = 0 ; i < (sizeof (test_cases) / sizeof (TEST_CASE)); i++) {
118
+ for (unsigned int i = 0 ; i < (test_cases_size / sizeof (TEST_CASE)); i++) {
182
119
183
120
/* Find two supported polynomials if possible. */
184
121
if (hal_crc_is_supported (&test_cases[i].config_data ) == true ) {
@@ -209,8 +146,7 @@ void crc_reconfigure_test()
209
146
210
147
/* Now re-init CRC module and provide new data and check the result. */
211
148
hal_crc_compute_partial_start (&test_cases[pol_idx[pol_cnt]].config_data );
212
- hal_crc_compute_partial ((uint8_t *) test_cases[pol_idx[pol_cnt]].input_data ,
213
- strlen ((const char *) test_cases[pol_idx[pol_cnt]].input_data ));
149
+ hal_crc_compute_partial ((uint8_t *) input_data, strlen ((const char *) input_data));
214
150
const uint32_t crc = hal_crc_get_result ();
215
151
216
152
TEST_ASSERT_EQUAL (test_cases[pol_idx[pol_cnt]].expected_result , crc);
@@ -223,18 +159,18 @@ void crc_compute_partial_invalid_param_test()
223
159
uint32_t crc = 0 ;
224
160
225
161
/* At least one polynomial must be supported. */
226
- for (unsigned int i = 0 ; i < (sizeof (test_cases) / sizeof (TEST_CASE)); i++) {
162
+ for (unsigned int i = 0 ; i < (test_cases_size / sizeof (TEST_CASE)); i++) {
227
163
if (hal_crc_is_supported (&test_cases[i].config_data ) == true ) {
228
164
229
165
hal_crc_compute_partial_start (&test_cases[i].config_data );
230
166
231
167
/* Call hal_crc_compute_partial() with invalid parameters. */
232
- hal_crc_compute_partial ((uint8_t *) NULL , strlen ((const char *) test_cases[i]. input_data ));
233
- hal_crc_compute_partial ((uint8_t *) test_cases[i]. input_data , 0 );
168
+ hal_crc_compute_partial ((uint8_t *) NULL , strlen ((const char *) input_data));
169
+ hal_crc_compute_partial ((uint8_t *) input_data, 0 );
234
170
235
171
/* Now use valid parameters. */
236
- hal_crc_compute_partial ((uint8_t *) test_cases[i]. input_data ,
237
- strlen ((const char *) test_cases[i]. input_data ));
172
+ hal_crc_compute_partial ((uint8_t *) input_data,
173
+ strlen ((const char *) input_data));
238
174
239
175
crc = hal_crc_get_result ();
240
176
@@ -270,5 +206,76 @@ Specification specification(greentea_test_setup, cases, greentea_test_teardown_h
270
206
271
207
int main ()
272
208
{
209
+ TEST_CASE local_test_cases[] = {
210
+ /* Predefined polynomials. */
211
+ /* 00 */ { {POLY_7BIT_SD , 7 , 0x00000000 , 0x00000000 , false , false }, 0xEA },
212
+ /* 01 */ { {POLY_7BIT_SD , 7 , 0x0000007F , 0x00000000 , false , false }, 0xA0 },
213
+ /* 02 */ { {POLY_7BIT_SD , 7 , 0x0000002B , 0x00000000 , false , false }, 0x74 },
214
+ /* 03 */ { {POLY_7BIT_SD , 7 , 0x00000000 , 0x0000007F , false , false }, 0x95 },
215
+ /* 04 */ { {POLY_7BIT_SD , 7 , 0x00000000 , 0x0000002B , false , false }, 0xC1 },
216
+ /* 05 */ { {POLY_7BIT_SD , 7 , 0x00000000 , 0x00000000 , true , false }, 0xA4 },
217
+ /* 06 */ { {POLY_7BIT_SD , 7 , 0x00000000 , 0x00000000 , false , true }, 0x57 },
218
+
219
+ /* 07 */ { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x00000000 , false , false }, 0xF4 },
220
+ /* 08 */ { {POLY_8BIT_CCITT , 8 , 0x000000FF , 0x00000000 , false , false }, 0xFB },
221
+ /* 09 */ { {POLY_8BIT_CCITT , 8 , 0x000000AB , 0x00000000 , false , false }, 0x87 },
222
+ /* 10 */ { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x000000FF , false , false }, 0x0B },
223
+ /* 11 */ { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x000000AB , false , false }, 0x5F },
224
+ /* 12 */ { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x00000000 , true , false }, 0x04 },
225
+ /* 13 */ { {POLY_8BIT_CCITT , 8 , 0x00000000 , 0x00000000 , false , true }, 0x2F },
226
+
227
+ /* 14 */ { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x00000000 , false , false }, 0x31C3 },
228
+ /* 15 */ { {POLY_16BIT_CCITT , 16 , 0x0000FFFF , 0x00000000 , false , false }, 0x29B1 },
229
+ /* 16 */ { {POLY_16BIT_CCITT , 16 , 0x0000ABAB , 0x00000000 , false , false }, 0x7D70 },
230
+ /* 17 */ { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x0000FFFF , false , false }, 0xCE3C },
231
+ /* 18 */ { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x0000ABAB , false , false }, 0x9A68 },
232
+ /* 19 */ { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x00000000 , true , false }, 0x9184 },
233
+ /* 20 */ { {POLY_16BIT_CCITT , 16 , 0x00000000 , 0x00000000 , false , true }, 0xC38C },
234
+
235
+ /* 21 */ { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x00000000 , false , false }, 0xFEE8 },
236
+ /* 22 */ { {POLY_16BIT_IBM , 16 , 0x0000FFFF , 0x00000000 , false , false }, 0xAEE7 },
237
+ /* 23 */ { {POLY_16BIT_IBM , 16 , 0x0000ABAB , 0x00000000 , false , false }, 0x0887 },
238
+ /* 24 */ { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x0000FFFF , false , false }, 0x0117 },
239
+ /* 25 */ { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x0000ABAB , false , false }, 0x5543 },
240
+ /* 26 */ { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x00000000 , true , false }, 0xBCDD },
241
+ /* 27 */ { {POLY_16BIT_IBM , 16 , 0x00000000 , 0x00000000 , false , true }, 0x177F },
242
+
243
+ /* 28 */ { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0x00000000 , false , false }, 0x89A1897F },
244
+ /* 29 */ { {POLY_32BIT_ANSI , 32 , 0xFFFFFFFF , 0x00000000 , false , false }, 0x0376E6E7 },
245
+ /* 30 */ { {POLY_32BIT_ANSI , 32 , 0xABABABAB , 0x00000000 , false , false }, 0x871A2FAA },
246
+ /* 31 */ { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0xFFFFFFFF , false , false }, 0x765E7680 },
247
+ /* 32 */ { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0xABABABAB , false , false }, 0x220A22D4 },
248
+ /* 33 */ { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0x00000000 , true , false }, 0x11B4BFB4 },
249
+ /* 34 */ { {POLY_32BIT_ANSI , 32 , 0x00000000 , 0x00000000 , false , true }, 0xFE918591 },
250
+
251
+ /* Not-predefined polynomials. */
252
+ /* 35 */ { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x00000000 , false , false }, 0xA2 },
253
+ /* 36 */ { {POLY_8BIT_MAXIM , 8 , 0x000000FF , 0x00000000 , false , false }, 0xF7 },
254
+ /* 37 */ { {POLY_8BIT_MAXIM , 8 , 0x000000AB , 0x00000000 , false , false }, 0x71 },
255
+ /* 38 */ { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x000000FF , false , false }, 0x5D },
256
+ /* 39 */ { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x000000AB , false , false }, 0x09 },
257
+ /* 40 */ { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x00000000 , true , false }, 0x85 },
258
+ /* 41 */ { {POLY_8BIT_MAXIM , 8 , 0x00000000 , 0x00000000 , false , true }, 0x45 },
259
+
260
+ /* 42 */ { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x00000000 , false , false }, 0xFEE8 },
261
+ /* 43 */ { {POLY_16BIT_MAXIM , 16 , 0x0000FFFF , 0x00000000 , false , false }, 0xAEE7 },
262
+ /* 44 */ { {POLY_16BIT_MAXIM , 16 , 0x0000ABAB , 0x00000000 , false , false }, 0x0887 },
263
+ /* 45 */ { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x0000FFFF , false , false }, 0x0117 },
264
+ /* 46 */ { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x0000ABAB , false , false }, 0x5543 },
265
+ /* 47 */ { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x00000000 , true , false }, 0xBCDD },
266
+ /* 48 */ { {POLY_16BIT_MAXIM , 16 , 0x00000000 , 0x00000000 , false , true }, 0x177F },
267
+
268
+ /* 49 */ { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0x00000000 , false , false }, 0x89A1897F },
269
+ /* 50 */ { {POLY_32BIT_POSIX , 32 , 0xFFFFFFFF , 0x00000000 , false , false }, 0x0376E6E7 },
270
+ /* 51 */ { {POLY_32BIT_POSIX , 32 , 0xABABABAB , 0x00000000 , false , false }, 0x871A2FAA },
271
+ /* 52 */ { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0xFFFFFFFF , false , false }, 0x765E7680 },
272
+ /* 53 */ { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0xABABABAB , false , false }, 0x220A22D4 },
273
+ /* 54 */ { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0x00000000 , true , false }, 0x11B4BFB4 },
274
+ /* 55 */ { {POLY_32BIT_POSIX , 32 , 0x00000000 , 0x00000000 , false , true }, 0xFE918591 },
275
+ };
276
+
277
+ test_cases = local_test_cases;
278
+ test_cases_size = sizeof (local_test_cases);
279
+
273
280
Harness::run (specification);
274
281
}
0 commit comments