Prakticke aspekty vývoje softwaru: Projekt 1 – Testování
1.0
Projekt zaměřený na osvojení praktik testování včetně technik test driven development, black box testing a white box testing.
|
Definice metod tridy reprezentujici hashovácí tabulku. ...
Funkce | |
size_t | hash_function (const char *str) |
Výpočet haše pro zadaný řetězec. ... | |
size_t | hash_map_lookup_handle (hash_map_t *self, const char *key, size_t hash, bool ignore_dummy) |
Výpočet indexu v hašovací tabulce v závislosti na dvojici klíč-hash. ... | |
size_t | hash_map_lookup (hash_map_t *self, const char *key, size_t hash) |
Výpočet indexu v hašovací tabulce v závislosti na dvojici klíč-hash. ... | |
hash_map_state_code_t | hash_map_init (hash_map_t *self, size_t size) |
Inicializace hašovací tabulky. ... | |
hash_map_t * | hash_map_ctor () |
Konstruktor hašovací tabulky. ... | |
void | hash_map_clear (hash_map_t *self) |
Dealokace vytvořeních položek a vymazání indexu. ... | |
void | hash_map_dtor (hash_map_t *self) |
Destruktor hašovací tabulky. ... | |
hash_map_state_code_t | hash_map_reserve (hash_map_t *self, size_t size) |
Realokace rezervovaného místa pro index. ... | |
size_t | hash_map_size (hash_map_t *self) |
Vrací počet vložených záznamů do tabulky. ... | |
size_t | hash_map_capacity (hash_map_t *self) |
Vrací alokované místa pro tabulku. ... | |
bool | hash_map_contains (hash_map_t *self, const char *key) |
Obsahuje tabulka záznam s daným klíčem? ... | |
hash_map_state_code_t | hash_map_put (hash_map_t *self, const char *key, int value) |
Vloží klíč a hodnotu do tabulky. ... | |
hash_map_state_code_t | hash_map_get (hash_map_t *self, const char *key, int *dst) |
Uloží hodnotu asociovanou se zadaným klíčem na určené místo v paměti. ... | |
hash_map_state_code_t | hash_map_remove (hash_map_t *self, const char *key) |
Odstranění položky z hašovací tabulky. ... | |
hash_map_state_code_t | hash_map_pop (hash_map_t *self, const char *key, int *dst) |
Uloží hodnotu z hašovací tabulky a odstraní záznam. ... | |
Definice metod tridy reprezentujici hashovácí tabulku.
size_t hash_function | ( | const char * | str | ) |
Výpočet haše pro zadaný řetězec.
[in] | str | klíč |
size_t hash_map_capacity | ( | hash_map_t * | self | ) |
Vrací alokované místa pro tabulku.
hash_map_size(map)
se nerovná hash_map_capacity(map)
! Jelikož je alokace (resp. realokace) paměti časově "drahá" operace, alokuje se vždy více paměti než je aktuálně potřeba. K realokaci tedy dochází jen když je potřeba a výrazně méně často.[in] | self | Ukazatel na strukturu hašovací tabulky. |
void hash_map_clear | ( | hash_map_t * | self | ) |
Dealokace vytvořeních položek a vymazání indexu.
[in] | self | Ukazatel na strukturu hašovací tabulky. |
bool hash_map_contains | ( | hash_map_t * | self, |
const char * | key | ||
) |
Obsahuje tabulka záznam s daným klíčem?
Vyhledá zadaný klíč v tabulce a pokud tabulka obsahuje pod daným klíčem záznam, vrátí nenulovou hodnotu.
[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | key | Klíč do tabulky. |
hash_map_t* hash_map_ctor | ( | ) |
Konstruktor hašovací tabulky.
Vytvoří a inicializuje hašovací tabulku s velikostí indexu 8, tzn. hašovací tabulka může obsahovat 8 záznamů s různými klíči.
Příklad užití:
NULL
.void hash_map_dtor | ( | hash_map_t * | self | ) |
Destruktor hašovací tabulky.
Uklidí a uvolní paměť alokovanou hašovací tabulkou, tzn. jednotlivé položky seznamu, index a následně samotnou tabulku self
.
Příklad užití:
[in] | self | Ukazatel na hašovací tabulku |
hash_map_state_code_t hash_map_get | ( | hash_map_t * | self, |
const char * | key, | ||
int * | value | ||
) |
Uloží hodnotu asociovanou se zadaným klíčem na určené místo v paměti.
Vyhledá klíč v tabulce a uloží hodnotu přiřazenou ke klíči na místo kde ukazuje argument value
. Pokud tabulka neobsahuje k danému klíči žádný záznam, vrací hodnotu KEY_ERROR
.
Příklad užití:
[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | key | Klíč do tabulky. |
[out] | value | Ukazatel na místo, kde se uloží hodnota. |
KEY_ERROR
pokud se klíč nenachází v tabulce, jinak OK
. hash_map_state_code_t hash_map_init | ( | hash_map_t * | self, |
size_t | size | ||
) |
Inicializace hašovací tabulky.
Metoda alokuje a inicializuje položky struktury hašovací tabulky.
self[in] | Ukazatel na neinicializovanou hašovací tabulku |
size[in] | Počet prvků v tabulce. |
MEMORY_ERROR
v případě chyby v alokaci paměti, jinak OK
. size_t hash_map_lookup | ( | hash_map_t * | self, |
const char * | key, | ||
size_t | hash | ||
) |
Výpočet indexu v hašovací tabulce v závislosti na dvojici klíč-hash.
[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | str | Klíč. |
[in] | str | Haš zadaného klíče. |
size_t hash_map_lookup_handle | ( | hash_map_t * | self, |
const char * | key, | ||
size_t | hash, | ||
bool | ignore_dummy | ||
) |
Výpočet indexu v hašovací tabulce v závislosti na dvojici klíč-hash.
V případě kolize funkce nalezne další volný index v tabulce. V případě vyhledávání považujeme dummy
objekt jako jakýkoliv jiný záznam, tedy ignore_dummy
je nastaveno na false
. Při vkládání je dummy
objekt ekvivalentní prázdnému místu, tedy ignore_dummy
je nastaveno na true
. Tento jev je způsoben kvůli kolizím klíčů. Když je záznam odstraněn, je nahrazen za dummy
objekt, aby bylo možné vyřešit případné kolize.
[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | str | Klíč. |
[in] | str | Haš zadaného klíče. |
[in] | ignore_dummy | Pokud true , dummy objekt je vždy přeskočen, pokud false , dummy objekt je interpretován jako NULL . |
hash_map_state_code_t hash_map_pop | ( | hash_map_t * | self, |
const char * | key, | ||
int * | value | ||
) |
Uloží hodnotu z hašovací tabulky a odstraní záznam.
Vyhledá klíč v tabulce, uloží hodnotu přiřazenou ke klíči na místo kde ukazuje parametr value
a odstraní záznam z tabulky. Pokud tabulka neobsahuje k danému klíči žádný záznam, vrací hodnotu KEY_ERROR
.
Příklad užití:
[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | key | Klíč do tabulky. |
[out] | value | Ukazatel na místo, kde se uloží hodnota. |
KEY_ERROR
pokud se klíč nenachází v tabulce, jinak OK
.hash_map_state_code_t hash_map_put | ( | hash_map_t * | self, |
const char * | key, | ||
int | value | ||
) |
Vloží klíč a hodnotu do tabulky.
Pokud je již index tabulky zaplněn ze 2/3, realokuje pro index 2x větší místo v paměti a provede reindexaci. Pokud tabulka již obsahuje k danému klíči záznam, hodnota záznamu se přepíše a funkce vrací hodnotu KEY_ALREADY_EXISTS
.
Příklad užití:
[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | key | Klíč do tabulky. |
[in] | value | Hodnota k uložení. |
KEY_ALREADY_EXISTS
pokud se klíč nachází v tabulce, jinak OK
.hash_map_state_code_t hash_map_remove | ( | hash_map_t * | self, |
const char * | key | ||
) |
Odstranění položky z hašovací tabulky.
Vyhledá klíč v tabulce a odstraní záznam z tabulky. Pokud tabulka neobsahuje k danému klíči žádný záznam, vrací hodnotu KEY_ERROR}
.
Příklad užití:
[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | key | Klíč do tabulky. |
KEY_ERROR
pokud se klíč nenachází v tabulce, jinak OK
.hash_map_state_code_t hash_map_reserve | ( | hash_map_t * | self, |
size_t | size | ||
) |
Realokace rezervovaného místa pro index.
Funkce je implicitně volána ve funci hash_map_put
, když je potřeba.
Příklad užití:
VALUE_ERROR
.[in] | self | Ukazatel na strukturu hašovací tabulky. |
[in] | size | Velikost indexu. |
VALUE_ERROR
pokud bude nová rezervovaná velikost hašovací tabulky menší jak počet doposud vložených prvků, jinak OK
.size_t hash_map_size | ( | hash_map_t * | self | ) |
Vrací počet vložených záznamů do tabulky.
[in] | self | Ukazatel na strukturu hašovací tabulky. |