
/*
 * Ten program moze sie przydac do testowania funkcji haszujacych.
 * Wszystko, co trzeba zrobic, zeby wprobowac swoja funkcje, to
 * zmienic dane w procedurze HashInit, gdzie podaje sie wskaznik do
 * funkcji haszujacej wlasnego wyrobu. Funkcje tego typu mozna definiowac
 * np. w module HashFnc.h - ktory jest dolaczony do programu w trakcie kompilacji.
 * [c]piotao, 20060108
 */

// na poczatku ladujemy wymagane przez program biblioteki
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


// jezeli chcemy, aby program wypisal wiecej informacji, nalezy zdefiniowac
// literal DEBUG, inaczej niewiele sie dowiemy po wykonaniu. Mozna zrobic to
// podczas samej kompilacji, podajac parametr -D..., czyli -DDEBUG albo
// odkomentowac wiersz nizej:

// #define DEBUG


// tutaj jest cala obsluga tablic asocjacyjnych (lub 'haszy') :)
#include "Hash.h"


// no i program glowny
int main(){

	Hash H;   // struktura odpowiedzialna za trzymanie informacji - hasz

	// inicjalizacja naszego hasza, podajemy nazwe funkcji haszujacej, ktora bedzie
	// uzywana do wyliczania polozenia danych (a dane to liczby rzeczywiste)
	HashInit(&H,&hashgen5);

	// wstawiamy liczbe 1/2 do hasza i patrzymy co sie dzieje
	HashInsert(&H, 0.5);
	print("Mamy %i liczb w haszu, ostatnia kolizja zawiera %i elementow, dla liczby %1.3f\n",H.size, H.hash[H.index]->size, H.hash[H.index]->first->x);

	// wkladamy jeszcze jedna liczbe do hasza aby wywolac kolizje i patrzymy znowu
	HashInsert(&H, 0.5);
	print("Mamy %i liczb w haszu, ostatnia kolizja zawiera %i elementow, dla liczby %1.3f\n",H.size, H.hash[H.index]->size, H.hash[H.index]->first->x);

	// no i szukamy tez takiej, ktora juz wstawilismy
	if( HashSearch( &H, 0.5) ){
		printf("Znaleziono!\n");
	}
	else{ printf("Nie znaleziono!\n"); }

	// probujemy wyszukac w haszu liczbe, ktorej nie ma ale ma taki sam klucz jak 0.5
	if( HashSearch( &H, 2.5 ) ){
		printf("Znaleziono!\n");
	}
	else{ printf("Nie znaleziono!\n"); }

	// probujemy wyszukac w haszu liczbe, ktorej W ogole jeszcze hasz nie widzial
	if( HashSearch( &H, 3.14159 ) ){
		printf("Znaleziono!\n");
	}
	else{ printf("Nie znaleziono!\n"); }

	// na koniec - zwalniamy zajeta przez hasz pamiec
	HashFree(&H);

}


