mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
247 lines
8.2 KiB
C
247 lines
8.2 KiB
C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
* Copyright by The HDF Group. *
|
|
* All rights reserved. *
|
|
* *
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
* terms governing use, modification, and redistribution, is contained in *
|
|
* the COPYING file, which can be found at the root of the source code *
|
|
* distribution tree, or in https://www.hdfgroup.org/licenses. *
|
|
* If you do not have access to either file, you may request a copy from *
|
|
* help@hdfgroup.org. *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
/*-------------------------------------------------------------------------
|
|
*
|
|
* Created: tchecksum.c
|
|
*
|
|
* Purpose: Test internal checksum routine(s)
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
/***********/
|
|
/* Headers */
|
|
/***********/
|
|
#include "testhdf5.h"
|
|
|
|
/**********/
|
|
/* Macros */
|
|
/**********/
|
|
#define BUF_LEN 3093 /* No particular value */
|
|
|
|
/*******************/
|
|
/* Local variables */
|
|
/*******************/
|
|
|
|
/****************************************************************
|
|
**
|
|
** test_chksum_size_one(): Checksum 1 byte buffer
|
|
**
|
|
****************************************************************/
|
|
static void
|
|
test_chksum_size_one(void)
|
|
{
|
|
uint8_t buf[1] = {23}; /* Buffer to checksum */
|
|
uint32_t chksum; /* Checksum value */
|
|
|
|
/* Buffer w/real data */
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0x17001700, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xfa2568b7, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0xa209c931, "H5_checksum_lookup3");
|
|
|
|
/* Buffer w/zero(s) for data */
|
|
memset(buf, 0, sizeof(buf));
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xfa60fb57, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0x8ba9414b, "H5_checksum_lookup3");
|
|
} /* test_chksum_size_one() */
|
|
|
|
/****************************************************************
|
|
**
|
|
** test_chksum_size_two(): Checksum 2 byte buffer
|
|
**
|
|
****************************************************************/
|
|
static void
|
|
test_chksum_size_two(void)
|
|
{
|
|
uint8_t buf[2] = {23, 187}; /* Buffer to checksum */
|
|
uint32_t chksum; /* Checksum value */
|
|
|
|
/* Buffer w/real data */
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0x17bb17bb, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xfc856608, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0x8ba7a6c9, "H5_checksum_lookup3");
|
|
|
|
/* Buffer w/zero(s) for data */
|
|
memset(buf, 0, sizeof(buf));
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xfc7e9b20, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0x62cd61b3, "H5_checksum_lookup3");
|
|
} /* test_chksum_size_two() */
|
|
|
|
/****************************************************************
|
|
**
|
|
** test_chksum_size_three(): Checksum 3 byte buffer
|
|
**
|
|
****************************************************************/
|
|
static void
|
|
test_chksum_size_three(void)
|
|
{
|
|
uint8_t buf[3] = {23, 187, 98}; /* Buffer to checksum */
|
|
uint32_t chksum; /* Checksum value */
|
|
|
|
/* Buffer w/real data */
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0x917679bb, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xfebc5d70, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0xcebdf4f0, "H5_checksum_lookup3");
|
|
|
|
/* Buffer w/zero(s) for data */
|
|
memset(buf, 0, sizeof(buf));
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xf9cc4c7a, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0x6bd0060f, "H5_checksum_lookup3");
|
|
} /* test_chksum_size_three() */
|
|
|
|
/****************************************************************
|
|
**
|
|
** test_chksum_size_four(): Checksum 4 byte buffer
|
|
**
|
|
****************************************************************/
|
|
static void
|
|
test_chksum_size_four(void)
|
|
{
|
|
uint8_t buf[4] = {23, 187, 98, 217}; /* Buffer to checksum */
|
|
uint32_t chksum; /* Checksum value */
|
|
|
|
/* Buffer w/real data */
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0x924f7a94, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xff398a46, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0x2c88bb51, "H5_checksum_lookup3");
|
|
|
|
/* Buffer w/zero(s) for data */
|
|
memset(buf, 0, sizeof(buf));
|
|
chksum = H5_checksum_fletcher32(buf, sizeof(buf));
|
|
VERIFY(chksum, 0, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(buf, sizeof(buf));
|
|
VERIFY(chksum, 0xff117081, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(buf, sizeof(buf), 0);
|
|
VERIFY(chksum, 0x049396b8, "H5_checksum_lookup3");
|
|
} /* test_chksum_size_four() */
|
|
|
|
/****************************************************************
|
|
**
|
|
** test_chksum_large(): Checksum larger buffer
|
|
**
|
|
****************************************************************/
|
|
static void
|
|
test_chksum_large(void)
|
|
{
|
|
uint8_t *large_buf; /* Buffer for checksum calculations */
|
|
uint32_t chksum; /* Checksum value */
|
|
size_t u; /* Local index variable */
|
|
|
|
/* Allocate the buffer */
|
|
large_buf = (uint8_t *)malloc((size_t)BUF_LEN);
|
|
CHECK_PTR(large_buf, "malloc");
|
|
|
|
/* Initialize buffer w/known data */
|
|
for (u = 0; u < BUF_LEN; u++)
|
|
large_buf[u] = (uint8_t)(u * 3);
|
|
|
|
/* Buffer w/real data */
|
|
chksum = H5_checksum_fletcher32(large_buf, (size_t)BUF_LEN);
|
|
VERIFY(chksum, 0x85b4e2a, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(large_buf, (size_t)BUF_LEN);
|
|
VERIFY(chksum, 0xfbd0f7c0, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(large_buf, (size_t)BUF_LEN, 0);
|
|
VERIFY(chksum, 0x1bd2ee7b, "H5_checksum_lookup3");
|
|
|
|
/* Buffer w/zero(s) for data */
|
|
memset(large_buf, 0, (size_t)BUF_LEN);
|
|
chksum = H5_checksum_fletcher32(large_buf, (size_t)BUF_LEN);
|
|
VERIFY(chksum, 0, "H5_checksum_fletcher32");
|
|
|
|
chksum = H5_checksum_crc(large_buf, (size_t)BUF_LEN);
|
|
VERIFY(chksum, 0xfac8b4c4, "H5_checksum_crc");
|
|
|
|
chksum = H5_checksum_lookup3(large_buf, (size_t)BUF_LEN, 0);
|
|
VERIFY(chksum, 0x930c7afc, "H5_checksum_lookup3");
|
|
|
|
/* Release memory for buffer */
|
|
free(large_buf);
|
|
} /* test_chksum_large() */
|
|
|
|
/****************************************************************
|
|
**
|
|
** test_checksum(): Main checksum testing routine.
|
|
**
|
|
****************************************************************/
|
|
void
|
|
test_checksum(void)
|
|
{
|
|
/* Output message about test being performed */
|
|
MESSAGE(5, ("Testing checksum algorithms\n"));
|
|
|
|
/* Various checks for fletcher32 checksum algorithm */
|
|
test_chksum_size_one(); /* Test buffer w/only 1 byte */
|
|
test_chksum_size_two(); /* Test buffer w/only 2 bytes */
|
|
test_chksum_size_three(); /* Test buffer w/only 3 bytes */
|
|
test_chksum_size_four(); /* Test buffer w/only 4 bytes */
|
|
test_chksum_large(); /* Test buffer w/larger # of bytes */
|
|
|
|
} /* test_checksum() */
|
|
|
|
/*-------------------------------------------------------------------------
|
|
* Function: cleanup_checksum
|
|
*
|
|
* Purpose: Cleanup temporary test files
|
|
*
|
|
* Return: none
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
void
|
|
cleanup_checksum(void)
|
|
{
|
|
/* no file to clean */
|
|
}
|