Files
hdf5/test/tchecksum.c
T
jhendersonHDF af0b2315bd Remove const from testing parameters in testframe framework (#5214)
Makes testing parameters specified with AddTest non-const again when
passed to test functions. This allows test functions to update their
parameters during execution and is particularly useful for tests
which use those parameters to accumulate statistics, error counts,
etc. without resorting to global variables.
2025-01-08 13:33:00 -06:00

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 LICENSE 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 H5_ATTR_UNUSED *params)
{
/* 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 H5_ATTR_UNUSED *params)
{
/* no file to clean */
}