Kaynağa Gözat

fix: tests/check_list. finally added
M: tests/Makefile.am is convenient to edit

Stasik0 11 yıl önce
ebeveyn
işleme
bc7fb75909
2 değiştirilmiş dosya ile 102 ekleme ve 12 silme
  1. 4 12
      tests/Makefile.am
  2. 98 0
      tests/check_list.c

+ 4 - 12
tests/Makefile.am

@@ -1,19 +1,11 @@
+TESTS = check_stack check_list
+
+# --- no changes beyond this line needed ---
 INCLUDE = @CHECK_CFLAGS@ -I$(top_builddir)/src -I$(top_builddir)/include
 LDADD = $(top_builddir)/lib/libopen62541.a @CHECK_LIBS@
-TESTS =
-# --- no changes above this line needed ---
-
-#add new tests using the following templates
-TESTS += check_stack
-check_stack_SOURCES = check_stack.c
-check_stack_LDADD = $(LDADD)
 
-TESTS += check_list
-check_list_SOURCES = check_list.c
-check_list_LDADD = $(LDADD)
-
-# --- no changes beyond this line needed ---
 check_PROGRAMS = $(TESTS)
+AM_LDFLAGS = $(LDADD)
 
 #optimization levels depending on debug
 if DEBUG

+ 98 - 0
tests/check_list.c

@@ -0,0 +1,98 @@
+#include "UA_config.h"
+#include "UA_list.h"
+
+#include "check.h"
+
+/* global test counters */
+Int32 visit_count = 0;
+Int32 free_count = 0;
+
+void visitor(void* payload){
+	visit_count++;
+}
+
+void freer(void* payload){
+	if(payload){
+		free_count++;
+		opcua_free(payload);
+	}
+}
+
+Boolean matcher(void* payload){
+	if(payload == NULL){
+		return FALSE;
+	}
+	if(*((Int32*)payload) == 42){
+		return TRUE;
+	}
+	return FALSE;
+}
+
+START_TEST(list_test_basic)
+{
+
+	UA_list_List list;
+	UA_list_init(&list);
+
+	ck_assert_int_eq(list.size, 0);
+
+	Int32* payload = (Int32*)opcua_malloc(sizeof(*payload));
+	*payload = 42;
+	UA_list_addPayloadToFront(&list, payload);
+	payload = (Int32*)opcua_malloc(sizeof(*payload));
+	*payload = 24;
+	UA_list_addPayloadToFront(&list, payload);
+	payload = (Int32*)opcua_malloc(sizeof(*payload));
+	*payload = 1;
+	UA_list_addPayloadToBack(&list, payload);
+
+	ck_assert_int_eq(list.size, 3);
+
+	UA_list_iteratePayload(&list, visitor);
+
+	ck_assert_int_eq(visit_count, 3);
+
+	UA_list_Element* elem = NULL;
+	elem = UA_list_find(&list, matcher);
+	if(elem){
+		ck_assert_int_eq((*((Int32*)elem->payload)), 42);
+		UA_list_removeElement(elem, freer);
+		ck_assert_int_eq(free_count, 1);
+		free_count = 0; //reset free counter
+		ck_assert_int_eq(list.size, 2);
+	}else{
+		fail("Element 42 not found");
+	}
+	UA_list_destroy(&list, freer);
+
+	ck_assert_int_eq(free_count, 2);
+
+	ck_assert_int_eq(list.size, 0);
+
+}
+END_TEST
+
+Suite*list_testSuite(void)
+{
+	Suite *s = suite_create("list_test");
+	TCase *tc_core = tcase_create("Core");
+	tcase_add_test(tc_core, list_test_basic);
+	suite_add_tcase(s,tc_core);
+	return s;
+}
+
+int main (void)
+{
+	int number_failed = 0;
+
+	/* check_list */
+	Suite* s = list_testSuite();
+	SRunner* sr = srunner_create(s);
+	srunner_run_all(sr,CK_NORMAL);
+	number_failed += srunner_ntests_failed(sr);
+	srunner_free(sr);
+
+	return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+
+}
+