Blame test/test-hash.c

Packit 352660
#include "../src/fchash.c"
Packit 352660
#include "../src/fcstr.c"
Packit 352660
Packit 352660
FcChar8 *
Packit 352660
FcLangNormalize (const FcChar8 *lang)
Packit 352660
{
Packit 352660
    return NULL;
Packit 352660
}
Packit 352660
Packit 352660
FcChar8 *
Packit 352660
FcConfigHome (void)
Packit 352660
{
Packit 352660
    return NULL;
Packit 352660
}
Packit 352660
Packit 352660
typedef struct _Test
Packit 352660
{
Packit 352660
    FcHashTable *table;
Packit 352660
} Test;
Packit 352660
Packit 352660
static Test *
Packit 352660
init (void)
Packit 352660
{
Packit 352660
    Test *ret;
Packit 352660
Packit 352660
    ret = malloc (sizeof (Test));
Packit 352660
    if (ret)
Packit 352660
    {
Packit 352660
	ret->table = FcHashTableCreate ((FcHashFunc) FcStrHashIgnoreCase,
Packit 352660
					(FcCompareFunc) FcStrCmp,
Packit 352660
					FcHashStrCopy,
Packit 352660
					FcHashUuidCopy,
Packit 352660
					(FcDestroyFunc) FcStrFree,
Packit 352660
					FcHashUuidFree);
Packit 352660
    }
Packit 352660
Packit 352660
    return ret;
Packit 352660
}
Packit 352660
Packit 352660
static void
Packit 352660
fini (Test *test)
Packit 352660
{
Packit 352660
    FcHashTableDestroy (test->table);
Packit 352660
    free (test);
Packit 352660
}
Packit 352660
Packit 352660
static FcBool
Packit 352660
test_add (Test *test, FcChar8 *key, FcBool replace)
Packit 352660
{
Packit 352660
    uuid_t uuid;
Packit 352660
    void *u;
Packit 352660
    FcBool (*hash_add) (FcHashTable *, void *, void *);
Packit 352660
    FcBool ret = FcFalse;
Packit 352660
Packit 352660
    uuid_generate_random (uuid);
Packit 352660
    if (replace)
Packit 352660
	hash_add = FcHashTableReplace;
Packit 352660
    else
Packit 352660
	hash_add = FcHashTableAdd;
Packit 352660
    if (!hash_add (test->table, key, uuid))
Packit 352660
	return FcFalse;
Packit 352660
    if (!FcHashTableFind (test->table, key, &u))
Packit 352660
	return FcFalse;
Packit 352660
    ret = (uuid_compare (uuid, u) == 0);
Packit 352660
    FcHashUuidFree (u);
Packit 352660
Packit 352660
    return ret;
Packit 352660
}
Packit 352660
Packit 352660
static FcBool
Packit 352660
test_remove (Test *test, FcChar8 *key)
Packit 352660
{
Packit 352660
    void *u;
Packit 352660
Packit 352660
    if (!FcHashTableFind (test->table, key, &u))
Packit 352660
	return FcFalse;
Packit 352660
    FcHashUuidFree (u);
Packit 352660
    if (!FcHashTableRemove (test->table, key))
Packit 352660
	return FcFalse;
Packit 352660
    if (FcHashTableFind (test->table, key, &u))
Packit 352660
	return FcFalse;
Packit 352660
Packit 352660
    return FcTrue;
Packit 352660
}
Packit 352660
Packit 352660
int
Packit 352660
main (void)
Packit 352660
{
Packit 352660
    Test *test;
Packit 352660
    uuid_t uuid;
Packit 352660
    int ret = 0;
Packit 352660
Packit 352660
    test = init ();
Packit 352660
    /* first op to add */
Packit 352660
    if (!test_add (test, "foo", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* second op to add */
Packit 352660
    if (!test_add (test, "bar", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* dup not allowed */
Packit 352660
    if (test_add (test, "foo", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* replacement */
Packit 352660
    if (!test_add (test, "foo", FcTrue))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* removal */
Packit 352660
    if (!test_remove (test, "foo"))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* not found to remove */
Packit 352660
    if (test_remove (test, "foo"))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* complex op in pointer */
Packit 352660
    if (!test_add (test, "foo", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    if (test_add (test, "foo", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    if (!test_remove (test, "foo"))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    if (!test_add (test, "foo", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    if (!test_remove (test, "bar"))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* completely remove */
Packit 352660
    if (!test_remove (test, "foo"))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    /* completely remove from the last one */
Packit 352660
    if (!test_add (test, "foo", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    if (!test_add (test, "bar", FcFalse))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    if (!test_remove (test, "bar"))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
    if (!test_remove (test, "foo"))
Packit 352660
    {
Packit 352660
	ret = 1;
Packit 352660
	goto bail;
Packit 352660
    }
Packit 352660
bail:
Packit 352660
    fini (test);
Packit 352660
Packit 352660
    return ret;
Packit 352660
}