File:  [ELWIX - Embedded LightWeight unIX -] / libaitcrc / example / test_hash.c
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Wed Aug 29 09:00:44 2012 UTC (11 years, 8 months ago) by misho
Branches: MAIN
CVS tags: crc2_4, HEAD, CRC2_3
version 3.2

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/endian.h>
#include <sys/time.h>
#include "aitcrc.h"


int main()
{
	int i, f;
	u_int n;
	char szLine[256], szAvalanche[][2] = { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, 
		{ 4, 0 }, { 5, 0 }, { 6, 0 }, { 7, 0 } };
	struct timeval before, after;

	f = open("/dev/urandom", O_RDONLY);
	if (f == -1)
		return 1;
	// hash_varchar
	gettimeofday(&before, NULL);
	for (i = 0; i < 100000; i++) {
		memset(szLine, 0, 256);
		read(f, szLine, 255);
		hash_varchar(szLine, 256, 1);
//		printf("%u\n", hash_varchar(szLine, 256));
	}
	gettimeofday(&after, NULL);
	printf("hash_varchar:: elapsed time %f seconds\n", 
			(after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6); 
	// hash_bernstein
	gettimeofday(&before, NULL);
	for (i = 0; i < 100000; i++) {
		memset(szLine, 0, 256);
		read(f, szLine, 255);
		hash_bernstein(szLine, 256, 0);
//		printf("%u\n", hash_varchar(szLine, 256));
	}
	gettimeofday(&after, NULL);
	printf("hash_bernstein:: elapsed time %f seconds\n", 
			(after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6); 
	// hash_bernstein DJBX33A
	gettimeofday(&before, NULL);
	for (i = 0; i < 100000; i++) {
		memset(szLine, 0, 256);
		read(f, szLine, 255);
		hash_bernstein(szLine, 256, 1);
//		printf("%u\n", hash_varchar(szLine, 256));
	}
	gettimeofday(&after, NULL);
	printf("hash_bernstein DJBX33A:: elapsed time %f seconds\n", 
			(after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6); 
	// hash_FNV-1a
	gettimeofday(&before, NULL);
	for (i = 0; i < 100000; i++) {
		memset(szLine, 0, 256);
		read(f, szLine, 255);
		hash_fnv1(szLine, 256, 0);
//		printf("%u\n", hash_varchar(szLine, 256));
	}
	gettimeofday(&after, NULL);
	printf("hash_fnv1:: elapsed time %f seconds\n", 
			(after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6); 
	// hash_FNV-1
	gettimeofday(&before, NULL);
	for (i = 0; i < 100000; i++) {
		memset(szLine, 0, 256);
		read(f, szLine, 255);
		hash_fnv1(szLine, 256, 1);
//		printf("%u\n", hash_varchar(szLine, 256));
	}
	gettimeofday(&after, NULL);
	printf("hash_fnv1 A:: elapsed time %f seconds\n", 
			(after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6); 
	// hash_jenkins
	gettimeofday(&before, NULL);
	for (i = 0; i < 100000; i++) {
		memset(szLine, 0, 256);
		read(f, szLine, 255);
		hash_jenkins(szLine, 256);
//		printf("%u\n", hash_varchar(szLine, 256));
	}
	gettimeofday(&after, NULL);
	printf("hash_jenkins:: elapsed time %f seconds\n", 
			(after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6); 

	// hash_jenkins32
	gettimeofday(&before, NULL);
	for (i = 0; i < 100000; i++) {
		memset(szLine, 0, 256);
		read(f, szLine, 255);
		/*n =*/ hash_jenkins32((u_int*) szLine, 256 / 4, 0);
//		printf("%u\n", n);
	}
	gettimeofday(&after, NULL);
	printf("hash_jenkins32:: elapsed time %f seconds\n", 
			(after.tv_sec - before.tv_sec) + (after.tv_usec - before.tv_usec) / 1.e6); 

	close(f);
	printf("\n");

	printf("Test avalanche 0 .. 7::\n");

	printf("  hash_varchar:");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_varchar(szLine, 1, 1));
	}
	printf("\n");
	printf("  hash_fnv1:");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_fnv1(szLine, 1, 0));
	}
	printf("\n");
	printf("  hash_fnv1 A:");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_fnv1(szLine, 1, 1));
	}
	printf("\n");
	printf("  hash_fnv1 A (define):");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_fnv(szLine, 1));
	}
	printf("\n");
	printf("  hash_bernstein:");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_bernstein(szLine, 1, 0));
	}
	printf("\n");
	printf("  hash_bernstein DJBX33A:");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_bernstein(szLine, 1, 1));
	}
	printf("\n");
	printf("  hash_jenkins:");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_jenkins(szLine, 1));
	}
	printf("\n");
	printf("  hash_jenkins32:");
	for (i = 0; i < 8; i++) {
		n = szAvalanche[i][0];
		printf(" %d=>%u/", i, hash_jenkins32(&n, 1, 0));

		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf("%d=>%u ", i, hash_jenkins32((u_int*) szLine, 1, 0));
	}
	printf("\n");
	printf("  hash_reddragon:");
	for (i = 0; i < 8; i++) {
		memset(szLine, 0, 256);
		memcpy(szLine, &szAvalanche[i][0], 1);
		printf(" %d=>%u", i, hash_reddragon(szLine, 1));
	}
	printf("\n");
	printf(" aaa>%u\n", hash_reddragon("aaa", 3));
	printf(" aab>%u\n", hash_reddragon("aab", 3));
	return 0;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>