Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upcyrus-imapd/cunit/crc32.testc
Go to file| /* Unit test for lib/crc32.c */ | |
| #include "cunit/cyrunit.h" | |
| #include "crc32.h" | |
| #include "crc32c.h" | |
| static void test_rfc3720(void) | |
| { | |
| // resulting CRCs are reversed endianness | |
| const char ZEROS[] = { | |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | |
| }; | |
| uint32_t ZEROSCRC = 0x8a9136aa; | |
| const char ONES[] = { | |
| 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
| 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
| 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
| 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff | |
| }; | |
| uint32_t ONESCRC = 0x62a8ab43; | |
| const char INCR[] = { | |
| 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, | |
| 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, | |
| 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, | |
| 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f | |
| }; | |
| uint32_t INCRCRC = 0x46dd794e; | |
| const char DECR[] = { | |
| 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, | |
| 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, | |
| 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, | |
| 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 | |
| }; | |
| uint32_t DECRCRC = 0x113fdb5c; | |
| const char SCSIREAD[] = { | |
| 0x01, 0xc0, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, | |
| 0x14, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x04, 0x00, | |
| 0x00, 0x00, 0x00, 0x14, | |
| 0x00, 0x00, 0x00, 0x18, | |
| 0x28, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00, | |
| 0x02, 0x00, 0x00, 0x00, | |
| 0x00, 0x00, 0x00, 0x00 | |
| }; | |
| uint32_t SCSIREADCRC = 0xd9963a56; | |
| uint32_t c; | |
| c = crc32c_map(ZEROS, sizeof(ZEROS)); | |
| CU_ASSERT_EQUAL(c, ZEROSCRC); | |
| c = crc32c_map(ONES, sizeof(ONES)); | |
| CU_ASSERT_EQUAL(c, ONESCRC); | |
| c = crc32c_map(INCR, sizeof(INCR)); | |
| CU_ASSERT_EQUAL(c, INCRCRC); | |
| c = crc32c_map(DECR, sizeof(DECR)); | |
| CU_ASSERT_EQUAL(c, DECRCRC); | |
| c = crc32c_map(SCSIREAD, sizeof(SCSIREAD)); | |
| CU_ASSERT_EQUAL(c, SCSIREADCRC); | |
| } | |
| static void test_crc32c(void) | |
| { | |
| static const char TEXT[] = "lorem ipsum"; | |
| static const char TEXT1[] = "lorem"; | |
| static const char TEXT2[] = " ipsum"; | |
| static uint32_t CRC32C = 0xdfb4e6c9; | |
| uint32_t c; | |
| struct iovec iov[2]; | |
| memset(iov, 0, sizeof(iov)); | |
| iov[0].iov_base = (char *)TEXT1; | |
| iov[0].iov_len = sizeof(TEXT1)-1; | |
| iov[1].iov_base = (char *)TEXT2; | |
| iov[1].iov_len = sizeof(TEXT2)-1; | |
| c = crc32c_iovec(iov, 2); | |
| CU_ASSERT_EQUAL(c, CRC32C); | |
| c = crc32c_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32C); | |
| } | |
| static void test_map(void) | |
| { | |
| static const char TEXT[] = "lorem ipsum"; | |
| static uint32_t CRC32 = 0x72d7748e; | |
| uint32_t c; | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_iovec(void) | |
| { | |
| static const char TEXT1[] = "lorem"; | |
| static const char TEXT2[] = " ipsum"; | |
| static uint32_t CRC32 = 0x72d7748e; | |
| uint32_t c; | |
| struct iovec iov[2]; | |
| memset(iov, 0, sizeof(iov)); | |
| iov[0].iov_base = (char *)TEXT1; | |
| iov[0].iov_len = sizeof(TEXT1)-1; | |
| iov[1].iov_base = (char *)TEXT2; | |
| iov[1].iov_len = sizeof(TEXT2)-1; | |
| c = crc32_iovec(iov, 2); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_zero(void) | |
| { | |
| static const char TEXT[] = ""; | |
| static uint32_t CRC32 = 0; | |
| uint32_t c; | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_one(void) | |
| { | |
| static const char TEXT[] = " "; | |
| static uint32_t CRC32 = 0xe96ccf45; | |
| uint32_t c; | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_nine(void) | |
| { | |
| static const char TEXT[] = "123456789"; | |
| static uint32_t CRC32 = 0xcbf43926; | |
| uint32_t c; | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_alpha(void) | |
| { | |
| static const char TEXT[] = "abcdefghijklmnopqrstuvwxyz"; | |
| static uint32_t CRC32 = 0x4c2750bd; | |
| uint32_t c; | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_null(void) | |
| { | |
| static const char TEXT[] = "\0"; | |
| static uint32_t CRC32 = 0xd202ef8d; | |
| uint32_t c; | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_twonull(void) | |
| { | |
| static const char TEXT[] = "\0\0"; | |
| static uint32_t CRC32 = 0x41d912ff; | |
| uint32_t c; | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_bigbuf(void) | |
| { | |
| static char TEXT[50000]; | |
| static uint32_t CRC32 = 0xa6c997c2; | |
| uint32_t c; | |
| size_t i; | |
| for (i = 0; i < sizeof(TEXT); i++) { | |
| TEXT[i] = i % 256; | |
| } | |
| c = crc32_map(TEXT, sizeof(TEXT)-1); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_iovec_empty(void) | |
| { | |
| static const char TEXT1[] = "lorem"; | |
| static const char TEXT2[] = " ipsum"; | |
| static uint32_t CRC32 = 0; | |
| uint32_t c; | |
| struct iovec iov[2]; | |
| memset(iov, 0, sizeof(iov)); | |
| iov[0].iov_base = (char *)TEXT1; | |
| iov[0].iov_len = sizeof(TEXT1)-1; | |
| iov[1].iov_base = (char *)TEXT2; | |
| iov[1].iov_len = sizeof(TEXT2)-1; | |
| c = crc32_iovec(iov, 0); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| static void test_iovec_blank(void) | |
| { | |
| static const char TEXT1[] = "lorem"; | |
| static const char TEXT2[] = " ipsum"; | |
| static uint32_t CRC32 = 0x72d7748e; | |
| uint32_t c; | |
| struct iovec iov[3]; | |
| memset(iov, 0, sizeof(iov)); | |
| iov[0].iov_base = (char *)TEXT1; | |
| iov[0].iov_len = sizeof(TEXT1)-1; | |
| iov[1].iov_base = NULL; | |
| iov[1].iov_len = 0; | |
| iov[2].iov_base = (char *)TEXT2; | |
| iov[2].iov_len = sizeof(TEXT2)-1; | |
| c = crc32_iovec(iov, 3); | |
| CU_ASSERT_EQUAL(c, CRC32); | |
| } | |
| /* vim: set ft=c: */ |