Skip to content
Permalink
Branch: master
Go to file
 
 
Cannot retrieve contributors at this time
241 lines (196 sloc) 5.76 KB
/* 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: */
You can’t perform that action at this time.