mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			CRC tests: increase parameter reflection coverage
CRC tests failed to exercise handling of the initial and final-xor values with respect to reflection parameters. Add tests covering this. Expected behaviour is that the initial value is always non-reflected and the final-xor happens after the optional output reflection.pull/11897/head
							parent
							
								
									c46a2ad6ba
								
							
						
					
					
						commit
						83a9606140
					
				| 
						 | 
				
			
			@ -63,6 +63,26 @@ void test_supported_polynomials()
 | 
			
		|||
        TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0x57, crc);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, true, false);
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0x1D, crc);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, false, true);
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0x2E, crc);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, true, true);
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0x5C, crc);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_7BIT_SD, 7> ct(0, 0x2B, false, true);
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0x7C, crc);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_8BIT_CCITT, 8> ct;
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
 | 
			
		||||
| 
						 | 
				
			
			@ -98,6 +118,29 @@ void test_partial_crc()
 | 
			
		|||
 | 
			
		||||
        TEST_ASSERT_EQUAL(0x29B1, crc);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_32BIT_ANSI, 32> ct;
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 8, &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[8], 1, &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
 | 
			
		||||
 | 
			
		||||
        TEST_ASSERT_EQUAL(0xCBF43926, crc);
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_32BIT_ANSI, 32> ct(0xFFFFFFFF, 0, true, false);
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 8, &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
        MbedCRC<POLY_32BIT_ANSI, 32> ct(crc, 0xFFFFFFFF, true, true);
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[8], 1, &crc));
 | 
			
		||||
        TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
 | 
			
		||||
 | 
			
		||||
        TEST_ASSERT_EQUAL(0xCBF43926, crc);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void test_sd_crc()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -199,54 +199,78 @@ int main()
 | 
			
		|||
    // *INDENT-OFF*
 | 
			
		||||
    TEST_CASE local_test_cases[] = {
 | 
			
		||||
        /* Predefined polynomials. */
 | 
			
		||||
        /* 00 */{ {POLY_7BIT_SD     ,  7, 0x00000000, 0x00000000, false, false}, 0x75       },
 | 
			
		||||
        /* 01 */{ {POLY_7BIT_SD     ,  7, 0x0000007F, 0x00000000, false, false}, 0x50       },
 | 
			
		||||
        /* 02 */{ {POLY_7BIT_SD     ,  7, 0x0000002B, 0x00000000, false, false}, 0x3A       },
 | 
			
		||||
        /* 03 */{ {POLY_7BIT_SD     ,  7, 0x00000000, 0x0000007F, false, false}, 0x0A       },
 | 
			
		||||
        /* 04 */{ {POLY_7BIT_SD     ,  7, 0x00000000, 0x0000002B, false, false}, 0x5E       },
 | 
			
		||||
        /* 05 */{ {POLY_7BIT_SD     ,  7, 0x00000000, 0x00000000, true , false}, 0x52       },
 | 
			
		||||
        /* 06 */{ {POLY_7BIT_SD     ,  7, 0x00000000, 0x00000000, false, true }, 0x57       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x00000000, 0x00000000, false, false}, 0x75       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x0000007F, 0x00000000, false, false}, 0x50       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x0000002B, 0x00000000, false, false}, 0x3A       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x00000000, 0x0000007F, false, false}, 0x0A       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x00000000, 0x0000002B, false, false}, 0x5E       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x00000000, 0x00000000, true , false}, 0x52       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x00000000, 0x00000000, false, true }, 0x57       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x0000002B, 0x00000000, true , false}, 0x1D       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x0000002B, 0x00000000, false, true }, 0x2E       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x0000002B, 0x00000000, true , true }, 0x5C       },
 | 
			
		||||
        { {POLY_7BIT_SD     ,  7, 0x00000000, 0x0000002B, false, true }, 0x7C       },
 | 
			
		||||
 | 
			
		||||
        /* 07 */{ {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x00000000, false, false}, 0xF4       },
 | 
			
		||||
        /* 08 */{ {POLY_8BIT_CCITT  ,  8, 0x000000FF, 0x00000000, false, false}, 0xFB       },
 | 
			
		||||
        /* 09 */{ {POLY_8BIT_CCITT  ,  8, 0x000000AB, 0x00000000, false, false}, 0x87       },
 | 
			
		||||
        /* 10 */{ {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x000000FF, false, false}, 0x0B       },
 | 
			
		||||
        /* 11 */{ {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x000000AB, false, false}, 0x5F       },
 | 
			
		||||
        /* 12 */{ {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x00000000, true , false}, 0x04       },
 | 
			
		||||
        /* 13 */{ {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x00000000, false, true }, 0x2F       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x00000000, false, false}, 0xF4       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x000000FF, 0x00000000, false, false}, 0xFB       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x000000AB, 0x00000000, false, false}, 0x87       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x000000FF, false, false}, 0x0B       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x000000AB, false, false}, 0x5F       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x00000000, true , false}, 0x04       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x00000000, false, true }, 0x2F       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x000000AB, 0x00000000, true,  false}, 0x77       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x000000AB, 0x00000000, false, true }, 0xE1       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x000000AB, 0x00000000, true,  true }, 0xEE       },
 | 
			
		||||
        { {POLY_8BIT_CCITT  ,  8, 0x00000000, 0x000000AB, false, true }, 0x84       },
 | 
			
		||||
 | 
			
		||||
        /* 14 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, 0x31C3     },
 | 
			
		||||
        /* 15 */{ {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, 0x29B1     },
 | 
			
		||||
        /* 16 */{ {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, 0x7D70     },
 | 
			
		||||
        /* 17 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, 0xCE3C     },
 | 
			
		||||
        /* 18 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, 0x9A68     },
 | 
			
		||||
        /* 19 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, 0x9184     },
 | 
			
		||||
        /* 20 */{ {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, 0xC38C     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, false}, 0x31C3     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x0000FFFF, 0x00000000, false, false}, 0x29B1     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, false}, 0x7D70     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000FFFF, false, false}, 0xCE3C     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, false}, 0x9A68     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, true , false}, 0x9184     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x00000000, 0x00000000, false, true }, 0xC38C     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, true,  false}, 0xDD37     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, false, true }, 0x0EBE     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x0000ABAB, 0x00000000, true,  true }, 0xECBB     },
 | 
			
		||||
        { {POLY_16BIT_CCITT , 16, 0x00000000, 0x0000ABAB, false, true }, 0x6827     },
 | 
			
		||||
 | 
			
		||||
        /* 21 */{ {POLY_16BIT_IBM   , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8     },
 | 
			
		||||
        /* 22 */{ {POLY_16BIT_IBM   , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7     },
 | 
			
		||||
        /* 23 */{ {POLY_16BIT_IBM   , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887     },
 | 
			
		||||
        /* 24 */{ {POLY_16BIT_IBM   , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117     },
 | 
			
		||||
        /* 25 */{ {POLY_16BIT_IBM   , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543     },
 | 
			
		||||
        /* 26 */{ {POLY_16BIT_IBM   , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD     },
 | 
			
		||||
        /* 27 */{ {POLY_16BIT_IBM   , 16, 0x00000000, 0x00000000, false, true }, 0x177F     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x00000000, 0x00000000, false, false}, 0xFEE8     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x0000FFFF, 0x00000000, false, false}, 0xAEE7     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x0000ABAB, 0x00000000, false, false}, 0x0887     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x00000000, 0x0000FFFF, false, false}, 0x0117     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x00000000, 0x0000ABAB, false, false}, 0x5543     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x00000000, 0x00000000, true , false}, 0xBCDD     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x00000000, 0x00000000, false, true }, 0x177F     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x0000ABAB, 0x00000000, true,  false}, 0x4AB2     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x0000ABAB, 0x00000000, false, true }, 0xE110     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x0000ABAB, 0x00000000, true,  true }, 0x4D52     },
 | 
			
		||||
        { {POLY_16BIT_IBM   , 16, 0x00000000, 0x0000ABAB, false, true }, 0xBCD4     },
 | 
			
		||||
 | 
			
		||||
        /* 28 */{ {POLY_32BIT_ANSI  , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F },
 | 
			
		||||
        /* 29 */{ {POLY_32BIT_ANSI  , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 },
 | 
			
		||||
        /* 30 */{ {POLY_32BIT_ANSI  , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA },
 | 
			
		||||
        /* 31 */{ {POLY_32BIT_ANSI  , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 },
 | 
			
		||||
        /* 32 */{ {POLY_32BIT_ANSI  , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 },
 | 
			
		||||
        /* 33 */{ {POLY_32BIT_ANSI  , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 },
 | 
			
		||||
        /* 34 */{ {POLY_32BIT_ANSI  , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0x00000000, 0x00000000, false, false}, 0x89A1897F },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0xFFFFFFFF, 0x00000000, false, false}, 0x0376E6E7 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0xABABABAB, 0x00000000, false, false}, 0x871A2FAA },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0x00000000, 0xFFFFFFFF, false, false}, 0x765E7680 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0x00000000, 0xABABABAB, false, false}, 0x220A22D4 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0x00000000, 0x00000000, true , false}, 0x11B4BFB4 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0x00000000, 0x00000000, false, true }, 0xFE918591 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0xABABABAB, 0x00000000, true,  false}, 0x1F0F1961 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0xABABABAB, 0x00000000, false, true }, 0x55F458E1 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0xABABABAB, 0x00000000, true,  true }, 0x8698F0F8 },
 | 
			
		||||
        { {POLY_32BIT_ANSI  , 32, 0x00000000, 0xABABABAB, false, true }, 0x553A2E3A },
 | 
			
		||||
 | 
			
		||||
                /* Not-predefined polynomials. */
 | 
			
		||||
        /* 35 */{ {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x00000000, false, false}, 0xA2       },
 | 
			
		||||
        /* 36 */{ {POLY_8BIT_MAXIM  ,  8, 0x000000FF, 0x00000000, false, false}, 0xF7       },
 | 
			
		||||
        /* 37 */{ {POLY_8BIT_MAXIM  ,  8, 0x000000AB, 0x00000000, false, false}, 0x71       },
 | 
			
		||||
        /* 38 */{ {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x000000FF, false, false}, 0x5D       },
 | 
			
		||||
        /* 39 */{ {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x000000AB, false, false}, 0x09       },
 | 
			
		||||
        /* 40 */{ {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x00000000, true , false}, 0x85       },
 | 
			
		||||
        /* 41 */{ {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x00000000, false, true }, 0x45       },
 | 
			
		||||
        /* Not-predefined polynomials. */
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x00000000, false, false}, 0xA2       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x000000FF, 0x00000000, false, false}, 0xF7       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x000000AB, 0x00000000, false, false}, 0x71       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x000000FF, false, false}, 0x5D       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x000000AB, false, false}, 0x09       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x00000000, true , false}, 0x85       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x00000000, false, true }, 0x45       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x000000AB, 0x00000000, true,  false}, 0x56       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x000000AB, 0x00000000, false, true }, 0x8E       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x000000AB, 0x00000000, true,  true }, 0x6A       },
 | 
			
		||||
        { {POLY_8BIT_MAXIM  ,  8, 0x00000000, 0x000000AB, false, true }, 0xEE       },
 | 
			
		||||
    };
 | 
			
		||||
    // *INDENT-ON*
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue