From 15482217681b5550477b87d01dac85feeda0fcae Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 1 Aug 2008 12:22:31 +0000 Subject: [PATCH] Add the beginning of a tests suite. SVN revision: 35285 --- legacy/eina/configure.in | 1 + legacy/eina/src/Makefile.am | 2 +- legacy/eina/src/tests/Makefile.am | 20 +++ legacy/eina/src/tests/eina_suite.c | 52 +++++++ legacy/eina/src/tests/eina_suite.h | 13 ++ legacy/eina/src/tests/eina_test_array.c | 147 ++++++++++++++++++ legacy/eina/src/tests/eina_test_stringshare.c | 125 +++++++++++++++ 7 files changed, 359 insertions(+), 1 deletion(-) create mode 100644 legacy/eina/src/tests/Makefile.am create mode 100644 legacy/eina/src/tests/eina_suite.c create mode 100644 legacy/eina/src/tests/eina_suite.h create mode 100644 legacy/eina/src/tests/eina_test_array.c create mode 100644 legacy/eina/src/tests/eina_test_stringshare.c diff --git a/legacy/eina/configure.in b/legacy/eina/configure.in index 265c8b0601..b3441542e1 100644 --- a/legacy/eina/configure.in +++ b/legacy/eina/configure.in @@ -176,6 +176,7 @@ src/modules/Makefile src/modules/mp/Makefile src/modules/mp/chained_pool/Makefile src/modules/mp/ememoa_fixed/Makefile +src/tests/Makefile ]) AC_OUTPUT diff --git a/legacy/eina/src/Makefile.am b/legacy/eina/src/Makefile.am index 7e99d0bc11..207ac0d5ce 100644 --- a/legacy/eina/src/Makefile.am +++ b/legacy/eina/src/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = lib include modules +SUBDIRS = lib include modules tests MAINTAINERCLEANFILES = Makefile.in diff --git a/legacy/eina/src/tests/Makefile.am b/legacy/eina/src/tests/Makefile.am new file mode 100644 index 0000000000..682011b440 --- /dev/null +++ b/legacy/eina/src/tests/Makefile.am @@ -0,0 +1,20 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_srcdir)/src/lib \ +-I$(top_srcdir)/src/include \ +@CHECK_CFLAGS@ + + +if EINA_ENABLE_TESTS + +check_PROGRAMS = eina_suite + +eina_suite_SOURCES = eina_suite.c eina_test_stringshare.c eina_test_array.c +eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la + +EXTRA_DIST = eina_suite.h + +endif + + diff --git a/legacy/eina/src/tests/eina_suite.c b/legacy/eina/src/tests/eina_suite.c new file mode 100644 index 0000000000..a12e239a7b --- /dev/null +++ b/legacy/eina/src/tests/eina_suite.c @@ -0,0 +1,52 @@ +#include "eina_suite.h" + +typedef struct _Eina_Test_Case Eina_Test_Case; +struct _Eina_Test_Case +{ + const char *test_case; + void (*build)(TCase *tc); +}; + +static const Eina_Test_Case etc[] = { + { "Array", eina_test_array }, + { "String Share", eina_test_stringshare }, + { NULL, NULL } +}; + +Suite * +eina_build_suite(void) +{ + TCase *tc; + Suite *s; + int i; + + s = suite_create("Eina"); + + for (i = 0; etc[i].test_case != NULL; ++i) + { + tc = tcase_create(etc[i].test_case); + + etc[i].build(tc); + + suite_add_tcase(s, tc); + } + + return s; +} + +int +main(void) +{ + Suite *s; + SRunner *sr; + int failed_count; + + + s = eina_build_suite(); + sr = srunner_create(s); + srunner_run_all(sr, CK_NORMAL); + failed_count = srunner_ntests_failed(sr); + srunner_free(sr); + + return (failed_count == 0) ? 0 : 255; +} diff --git a/legacy/eina/src/tests/eina_suite.h b/legacy/eina/src/tests/eina_suite.h new file mode 100644 index 0000000000..9d1b044b7c --- /dev/null +++ b/legacy/eina/src/tests/eina_suite.h @@ -0,0 +1,13 @@ +#ifndef EINA_SUITE_H_ +#define EINA_SUITE_H_ + +#include + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +void eina_test_stringshare(TCase *tc); +void eina_test_array(TCase *tc); + +#endif /* EINA_SUITE_H_ */ diff --git a/legacy/eina/src/tests/eina_test_array.c b/legacy/eina/src/tests/eina_test_array.c new file mode 100644 index 0000000000..44850aaec7 --- /dev/null +++ b/legacy/eina/src/tests/eina_test_array.c @@ -0,0 +1,147 @@ +#include + +#include "eina_suite.h" +#include "eina_array.h" + +START_TEST(eina_array_simple) +{ + Eina_Array *ea; + char *tmp; + unsigned int i; + + ea = eina_array_new(11); + fail_if(!ea); + + for (i = 0; i < 200; ++i) + { + tmp = malloc(sizeof(char) * 10); + fail_if(!tmp); + snprintf(tmp, 10, "%i", i); + + eina_array_append(ea, tmp); + } + + fail_if(eina_array_get(ea, 10) == NULL); + fail_if(atoi(eina_array_get(ea, 10)) != 10); + + EINA_ARRAY_ITER_NEXT(ea, i, tmp) + { + fail_if((unsigned int) atoi(tmp) != i); + free(tmp); + } + + fail_if(i != 200); + + eina_array_clean(ea); + eina_array_flush(ea); + eina_array_free(ea); +} +END_TEST + +START_TEST(eina_array_static) +{ + Eina_Array sea = { NULL, 0, 0, 0 }; + char *tmp; + unsigned int i; + + eina_array_setup(&sea, 10); + + for (i = 0; i < 200; ++i) + { + tmp = malloc(sizeof(char) * 10); + fail_if(!tmp); + snprintf(tmp, 10, "%i", i); + + eina_array_append(&sea, tmp); + } + + fail_if(eina_array_get(&sea, 10) == NULL); + fail_if(atoi(eina_array_get(&sea, 10)) != 10); + + EINA_ARRAY_ITER_NEXT(&sea, i, tmp) + { + fail_if((unsigned int) atoi(tmp) != i); + free(tmp); + } + + fail_if(i != 200); + + eina_array_clean(&sea); + eina_array_flush(&sea); +} +END_TEST + +Eina_Bool +keep_int(void *data, void *gdata) +{ + int *tmp = data; + + fail_if(gdata); + fail_if(!tmp); + + if (*tmp == 0) return EINA_FALSE; + return EINA_TRUE; +} + +START_TEST(eina_array_remove_stuff) +{ + Eina_Array *ea; + int *tmp; + unsigned int i; + + ea = eina_array_new(64); + fail_if(!ea); + + for (i = 0; i < 1000; ++i) + { + tmp = malloc(sizeof(int)); + fail_if(!tmp); + *tmp = i; + + eina_array_append(ea, tmp); + } + + // Remove the first 10 items + for (i = 0; i < 10; ++i) + { + tmp = eina_array_get(ea, i); + fail_if(!tmp); + *tmp = 0; + } + eina_array_remove(ea, keep_int, NULL); + + fail_if(eina_array_count(ea) != 990); + EINA_ARRAY_ITER_NEXT(ea, i, tmp) + fail_if(*tmp == 0); + + // Remove the last items + for (i = 980; i < 990; ++i) + { + tmp = eina_array_get(ea, i); + fail_if(!tmp); + *tmp = 0; + } + eina_array_remove(ea, keep_int, NULL); + + // Remove all items + fail_if(eina_array_count(ea) != 980); + EINA_ARRAY_ITER_NEXT(ea, i, tmp) + { + fail_if(*tmp == 0); + *tmp = 0; + } + eina_array_remove(ea, keep_int, NULL); + + fail_if(eina_array_count(ea) != 0); + + eina_array_free(ea); +} +END_TEST + +void +eina_test_array(TCase *tc) +{ + tcase_add_test(tc, eina_array_simple); + tcase_add_test(tc, eina_array_static); + tcase_add_test(tc, eina_array_remove_stuff); +} diff --git a/legacy/eina/src/tests/eina_test_stringshare.c b/legacy/eina/src/tests/eina_test_stringshare.c new file mode 100644 index 0000000000..33ebecbd3f --- /dev/null +++ b/legacy/eina/src/tests/eina_test_stringshare.c @@ -0,0 +1,125 @@ +#include +#include +#include + +#include "eina_suite.h" +#include "eina_stringshare.h" +#include "eina_array.h" + +START_TEST(eina_stringshare_init_shutdown) +{ + eina_stringshare_init(); + eina_stringshare_init(); + eina_stringshare_shutdown(); + eina_stringshare_init(); + eina_stringshare_init(); + eina_stringshare_shutdown(); + eina_stringshare_shutdown(); + eina_stringshare_shutdown(); +} +END_TEST + +#define TEST0 "test/0" +#define TEST1 "test/1" + +START_TEST(eina_stringshare_simple) +{ + const char *t0; + const char *t1; + + eina_stringshare_init(); + + t0 = eina_stringshare_add(TEST0); + t1 = eina_stringshare_add(TEST1); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(strcmp(t0, TEST0) != 0); + fail_if(strcmp(t1, TEST1) != 0); + + eina_stringshare_del(t0); + eina_stringshare_del(t1); + + eina_stringshare_shutdown(); +} +END_TEST + +START_TEST(eina_stringshare_test_share) +{ + const char *t0; + const char *t1; + + eina_stringshare_init(); + + t0 = eina_stringshare_add(TEST0); + t1 = eina_stringshare_add(TEST0); + + fail_if(t0 == NULL); + fail_if(t1 == NULL); + fail_if(strcmp(t0, TEST0) != 0); + fail_if(strcmp(t1, TEST0) != 0); + fail_if(t0 != t1); + + eina_stringshare_del(t0); + eina_stringshare_del(t1); + + eina_stringshare_shutdown(); +} +END_TEST + +START_TEST(eina_stringshare_collision) +{ + Eina_Array *ea; + char buffer[50]; + int i; + + srand(time(NULL)); + + eina_stringshare_init(); + + ea = eina_array_new(256); + fail_if(!ea); + + for (i = 0; i < 10000; ++i) + { + snprintf(buffer, 1024, "%i", rand()); + eina_array_append(ea, (void*) eina_stringshare_add(buffer)); + if (rand() > RAND_MAX / 2) eina_stringshare_add(buffer); + } + + for (i = 0; i < 10000; ++i) + { + snprintf(buffer, 1024, "%i", 60000 - i); + eina_array_append(ea, (void*) eina_stringshare_add(buffer)); + eina_stringshare_add(buffer); + } + + for (i = 0; i < 200; ++i) + eina_stringshare_del(eina_array_get(ea, i)); + + eina_stringshare_shutdown(); + + eina_array_free(ea); +} +END_TEST + +START_TEST(eina_stringshare_not_owned) +{ + eina_stringshare_init(); + + eina_stringshare_add(TEST0); + eina_stringshare_del(TEST0); + + eina_stringshare_shutdown(); +} +END_TEST + +void +eina_test_stringshare(TCase *tc) +{ + tcase_add_test(tc, eina_stringshare_init_shutdown); + tcase_add_test(tc, eina_stringshare_simple); + tcase_add_test(tc, eina_stringshare_test_share); + tcase_add_test(tc, eina_stringshare_collision); + tcase_add_test(tc, eina_stringshare_not_owned); +}