Skip to content

Commit 8c4ed4a

Browse files
authored
Merge pull request ARMmbed#11897 from kjbracey-arm/crc
MbedCRC: improve init value handling and tests
2 parents 759ce27 + ccd2a32 commit 8c4ed4a

File tree

4 files changed

+303
-163
lines changed

4 files changed

+303
-163
lines changed

TESTS/mbed_drivers/crc/main.cpp

+66
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,26 @@ void test_supported_polynomials()
6363
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
6464
TEST_ASSERT_EQUAL(0x57, crc);
6565
}
66+
{
67+
MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, true, false);
68+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
69+
TEST_ASSERT_EQUAL(0x1D, crc);
70+
}
71+
{
72+
MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, false, true);
73+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
74+
TEST_ASSERT_EQUAL(0x2E, crc);
75+
}
76+
{
77+
MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, true, true);
78+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
79+
TEST_ASSERT_EQUAL(0x5C, crc);
80+
}
81+
{
82+
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0x2B, false, true);
83+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
84+
TEST_ASSERT_EQUAL(0x7C, crc);
85+
}
6686
{
6787
MbedCRC<POLY_8BIT_CCITT, 8> ct;
6888
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
@@ -98,6 +118,51 @@ void test_partial_crc()
98118

99119
TEST_ASSERT_EQUAL(0x29B1, crc);
100120
}
121+
{
122+
MbedCRC<POLY_32BIT_ANSI, 32> ct;
123+
TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
124+
TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 8, &crc));
125+
TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[8], 1, &crc));
126+
TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
127+
128+
TEST_ASSERT_EQUAL(0xCBF43926, crc);
129+
}
130+
{
131+
MbedCRC<POLY_32BIT_ANSI, 32> ct(0xFFFFFFFF, 0, true, false);
132+
TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
133+
TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 8, &crc));
134+
TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
135+
}
136+
{
137+
MbedCRC<POLY_32BIT_ANSI, 32> ct(crc, 0xFFFFFFFF, true, true);
138+
TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
139+
TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[8], 1, &crc));
140+
TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
141+
142+
TEST_ASSERT_EQUAL(0xCBF43926, crc);
143+
}
144+
}
145+
146+
void test_mode_limit()
147+
{
148+
const char test[] = "123456789";
149+
uint32_t crc;
150+
151+
{
152+
MbedCRC<POLY_32BIT_ANSI, 32, CrcMode::BITWISE> ct;
153+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
154+
TEST_ASSERT_EQUAL(0xCBF43926, crc);
155+
}
156+
{
157+
MbedCRC<POLY_32BIT_ANSI, 32, CrcMode::TABLE> ct;
158+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
159+
TEST_ASSERT_EQUAL(0xCBF43926, crc);
160+
}
161+
{
162+
MbedCRC<POLY_32BIT_ANSI, 32, CrcMode::HARDWARE> ct;
163+
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
164+
TEST_ASSERT_EQUAL(0xCBF43926, crc);
165+
}
101166
}
102167

103168
void test_sd_crc()
@@ -189,6 +254,7 @@ void test_thread_safety()
189254
Case cases[] = {
190255
Case("Test supported polynomials", test_supported_polynomials),
191256
Case("Test partial CRC", test_partial_crc),
257+
Case("Test mode-limited CRC", test_mode_limit),
192258
Case("Test SD CRC polynomials", test_sd_crc),
193259
#if defined(MBED_CONF_RTOS_PRESENT)
194260
Case("Test thread safety", test_thread_safety),

TESTS/mbed_hal/crc/main.cpp

+72-66
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@
2727
using namespace utest::v1;
2828

2929
#define POLY_8BIT_MAXIM 0x31
30-
#define POLY_16BIT_MAXIM 0x8005
31-
#define POLY_32BIT_POSIX 0x4C11DB7
3230

3331
#define UNSUPPORTED (-1)
3432
#define POL_CNT (2)
@@ -201,70 +199,78 @@ int main()
201199
// *INDENT-OFF*
202200
TEST_CASE local_test_cases[] = {
203201
/* Predefined polynomials. */
204-
/* 00 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0x75 },
205-
/* 01 */{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0x50 },
206-
/* 02 */{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x3A },
207-
/* 03 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x0A },
208-
/* 04 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0x5E },
209-
/* 05 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0x52 },
210-
/* 06 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, 0x57 },
211-
212-
/* 07 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, 0xF4 },
213-
/* 08 */{ {POLY_8BIT_CCITT , 8, 0x000000FF, 0x00000000, false, false}, 0xFB },
214-
/* 09 */{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, false, false}, 0x87 },
215-
/* 10 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000FF, false, false}, 0x0B },
216-
/* 11 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000AB, false, false}, 0x5F },
217-
/* 12 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, true , false}, 0x04 },
218-
/* 13 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, true }, 0x2F },
219-
220-
/* 14 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, 0x31C3 },
221-
/* 15 */{ {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, 0x29B1 },
222-
/* 16 */{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, 0x7D70 },
223-
/* 17 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, 0xCE3C },
224-
/* 18 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, 0x9A68 },
225-
/* 19 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, 0x9184 },
226-
/* 20 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, 0xC38C },
227-
228-
/* 21 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8 },
229-
/* 22 */{ {POLY_16BIT_IBM , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7 },
230-
/* 23 */{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887 },
231-
/* 24 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117 },
232-
/* 25 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543 },
233-
/* 26 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD },
234-
/* 27 */{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, true }, 0x177F },
235-
236-
/* 28 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F },
237-
/* 29 */{ {POLY_32BIT_ANSI , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 },
238-
/* 30 */{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA },
239-
/* 31 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 },
240-
/* 32 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 },
241-
/* 33 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 },
242-
/* 34 */{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 },
243-
244-
/* Not-predefined polynomials. */
245-
/* 35 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, false}, 0xA2 },
246-
/* 36 */{ {POLY_8BIT_MAXIM , 8, 0x000000FF, 0x00000000, false, false}, 0xF7 },
247-
/* 37 */{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, false, false}, 0x71 },
248-
/* 38 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000FF, false, false}, 0x5D },
249-
/* 39 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000AB, false, false}, 0x09 },
250-
/* 40 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, true , false}, 0x85 },
251-
/* 41 */{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, true }, 0x45 },
252-
253-
/* 42 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8 },
254-
/* 43 */{ {POLY_16BIT_MAXIM , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7 },
255-
/* 44 */{ {POLY_16BIT_MAXIM , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887 },
256-
/* 45 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117 },
257-
/* 46 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543 },
258-
/* 47 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD },
259-
/* 48 */{ {POLY_16BIT_MAXIM , 16, 0x00000000, 0x00000000, false, true }, 0x177F },
260-
261-
/* 49 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F },
262-
/* 50 */{ {POLY_32BIT_POSIX , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 },
263-
/* 51 */{ {POLY_32BIT_POSIX , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA },
264-
/* 52 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 },
265-
/* 53 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 },
266-
/* 54 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 },
267-
/* 55 */{ {POLY_32BIT_POSIX , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 },
202+
{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0x75 },
203+
{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0x50 },
204+
{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x3A },
205+
{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x0A },
206+
{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0x5E },
207+
{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0x52 },
208+
{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, 0x57 },
209+
{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, true , false}, 0x1D },
210+
{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, true }, 0x2E },
211+
{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, true , true }, 0x5C },
212+
{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, true }, 0x7C },
213+
214+
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, 0xF4 },
215+
{ {POLY_8BIT_CCITT , 8, 0x000000FF, 0x00000000, false, false}, 0xFB },
216+
{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, false, false}, 0x87 },
217+
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000FF, false, false}, 0x0B },
218+
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000AB, false, false}, 0x5F },
219+
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, true , false}, 0x04 },
220+
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, true }, 0x2F },
221+
{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, true, false}, 0x77 },
222+
{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, false, true }, 0xE1 },
223+
{ {POLY_8BIT_CCITT , 8, 0x000000AB, 0x00000000, true, true }, 0xEE },
224+
{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x000000AB, false, true }, 0x84 },
225+
226+
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, 0x31C3 },
227+
{ {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, 0x29B1 },
228+
{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, 0x7D70 },
229+
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, 0xCE3C },
230+
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, 0x9A68 },
231+
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, 0x9184 },
232+
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, 0xC38C },
233+
{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, true, false}, 0xDD37 },
234+
{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, true }, 0x0EBE },
235+
{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, true, true }, 0xECBB },
236+
{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, true }, 0x6827 },
237+
238+
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8 },
239+
{ {POLY_16BIT_IBM , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7 },
240+
{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887 },
241+
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117 },
242+
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543 },
243+
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD },
244+
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x00000000, false, true }, 0x177F },
245+
{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, true, false}, 0x4AB2 },
246+
{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, false, true }, 0xE110 },
247+
{ {POLY_16BIT_IBM , 16, 0x0000ABAB, 0x00000000, true, true }, 0x4D52 },
248+
{ {POLY_16BIT_IBM , 16, 0x00000000, 0x0000ABAB, false, true }, 0xBCD4 },
249+
250+
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F },
251+
{ {POLY_32BIT_ANSI , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 },
252+
{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA },
253+
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 },
254+
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 },
255+
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 },
256+
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 },
257+
{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, true, false}, 0x1F0F1961 },
258+
{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, false, true }, 0x55F458E1 },
259+
{ {POLY_32BIT_ANSI , 32, 0xABABABAB, 0x00000000, true, true }, 0x8698F0F8 },
260+
{ {POLY_32BIT_ANSI , 32, 0x00000000, 0xABABABAB, false, true }, 0x553A2E3A },
261+
262+
/* Not-predefined polynomials. */
263+
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, false}, 0xA2 },
264+
{ {POLY_8BIT_MAXIM , 8, 0x000000FF, 0x00000000, false, false}, 0xF7 },
265+
{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, false, false}, 0x71 },
266+
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000FF, false, false}, 0x5D },
267+
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000AB, false, false}, 0x09 },
268+
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, true , false}, 0x85 },
269+
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x00000000, false, true }, 0x45 },
270+
{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, true, false}, 0x56 },
271+
{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, false, true }, 0x8E },
272+
{ {POLY_8BIT_MAXIM , 8, 0x000000AB, 0x00000000, true, true }, 0x6A },
273+
{ {POLY_8BIT_MAXIM , 8, 0x00000000, 0x000000AB, false, true }, 0xEE },
268274
};
269275
// *INDENT-ON*
270276

0 commit comments

Comments
 (0)