hdf5/test/tchecksum.c
Quincey Koziol 46467e91b0 [svn-r12649] Description:
Add a CRC algorithm to the library, initially for "small" (<256 byte)
metadata blocks.

    Update checksum tests to verify it's working correctly.

Tested:
    Linux/32 2.6 (chicago)
    Linux/64 2.6 (chicago2)
    (Will be testing on more platforms after checkin)
2006-09-05 18:06:54 -05:00

225 lines
7.2 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by the Board of Trustees of the University of Illinois. *
* 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 files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*-------------------------------------------------------------------------
*
* Created: tchecksum.c
* Aug 21 2006
* Quincey Koziol <koziol@hdfgroup.org>
*
* Purpose: Test internal checksum routine(s)
*
*-------------------------------------------------------------------------
*/
/***********/
/* Headers */
/***********/
#include "testhdf5.h"
/**********/
/* Macros */
/**********/
#define BUF_LEN 3093 /* No particular value */
/*******************/
/* Local variables */
/*******************/
uint8_t large_buf[BUF_LEN];
/****************************************************************
**
** 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");
/* Buffer w/zero(s) for data */
HDmemset(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");
} /* 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");
/* Buffer w/zero(s) for data */
HDmemset(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");
} /* 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");
/* Buffer w/zero(s) for data */
HDmemset(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");
} /* 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");
/* Buffer w/zero(s) for data */
HDmemset(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");
} /* test_chksum_size_four() */
/****************************************************************
**
** test_chksum_large(): Checksum larger buffer
**
****************************************************************/
static void
test_chksum_large(void)
{
uint32_t chksum; /* Checksum value */
size_t u; /* Local index variable */
/* Initialize buffer w/known data */
for(u = 0; u < BUF_LEN; u++)
large_buf[u] = u * 3;
/* Buffer w/real data */
chksum = H5_checksum_fletcher32(large_buf, sizeof(large_buf));
VERIFY(chksum, 0x85b4e2a, "H5_checksum_fletcher32");
chksum = H5_checksum_crc(large_buf, sizeof(large_buf));
VERIFY(chksum, 0xfbd0f7c0, "H5_checksum_crc");
/* Buffer w/zero(s) for data */
HDmemset(large_buf, 0, sizeof(large_buf));
chksum = H5_checksum_fletcher32(large_buf, sizeof(large_buf));
VERIFY(chksum, 0, "H5_checksum_fletcher32");
chksum = H5_checksum_crc(large_buf, sizeof(large_buf));
VERIFY(chksum, 0xfac8b4c4, "H5_checksum_crc");
} /* 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
*
* Programmer: Quincey Koziol
* August 21, 2006
*
*-------------------------------------------------------------------------
*/
void
cleanup_checksum(void)
{
/* no file to clean */
}