Many chain of changes listed below in detail:

Change the name and implementation of spell_list_add function. Add to
the head of the linked list as required in this application. Remove the
old implementation which was adding entries to the tail. Remove the
tests as well. Rename the function name to reflect this.

Fix the itos function, it was returning wrong values.
Fix the test_spell_hash_resize test to not to use hardcoded values and
use the macro.

Add a utility function to generate a hashtable of given size with dummy
data inserted.
Add test for get_keys function of the hash table.

Remove the setup function from the linked list tests and fix all the
tests accordingly. Now it is possible to pass a NULL pointer to the
linked list add function and it will generate the head instead of
returning -1.
Since now the default behaviour for adding elements to the linked
list is adding to the head, fix the tests accordingly.
Add function for getting the list of all keys, values and key-value
pairs in the hash table.