UA_Int32 UA_list_destroy(UA_list_List* list, UA_list_PayloadVisitor visitor){ if(list==UA_NULL)return UA_ERROR; UA_list_Element* current = UA_NULL; current=list->first; while(current){ UA_list_Element* next = current->next; if(visitor){ (*visitor)(current->payload); } UA_free(current); current = next; } UA_list_init(list); return UA_NO_ERROR; }
END_TEST START_TEST(findElementShallFind42) { // given UA_list_List list; UA_list_init(&list); UA_Int32 plv[] = {42,24,1}; myAddPayloadVectorToFront(&list,plv,sizeof(plv)/sizeof(UA_Int32)); // when UA_list_Element* e = UA_list_find(&list,matcher); // then ck_assert_ptr_ne(e, UA_NULL); ck_assert_int_eq(*(UA_Int32*)(e->payload), 42); // finally UA_list_destroy(&list, freer); }
END_TEST START_TEST(searchElementShallFind24) { // given UA_list_List list; UA_list_init(&list); UA_Int32 plv[] = {42,24,1}; myAddPayloadVectorToFront(&list,plv,sizeof(plv)/sizeof(UA_Int32)); UA_Int32 payload = 24; // when UA_list_Element* e = UA_list_search(&list,comparer,(void*)&payload); // then ck_assert_ptr_ne(e, UA_NULL); ck_assert_int_eq(*(UA_Int32*)(e->payload), 24); // finally UA_list_destroy(&list, freer); }
END_TEST START_TEST(addTwiceAndRemoveLastShallYieldListWithOneElement) { // given UA_list_List list; UA_list_init(&list); UA_Int32 plv[] = {42,24}; myAddPayloadVectorToFront(&list,plv,sizeof(plv)/sizeof(UA_Int32)); // when UA_list_Element* e = UA_list_search(&list,comparer,(void*)&plv[1]); UA_list_removeElement(e,UA_NULL); visit_count = 0; UA_list_iteratePayload(&list,visitor); // then ck_assert_int_eq(list.size,1); ck_assert_int_eq(visit_count,1); // finally UA_list_destroy(&list, freer); }
UA_Int32 UA_indexedList_init(UA_indexedList_List* list){ if(list==UA_NULL)return UA_ERROR; return UA_list_init((UA_list_List*)list); }