void test_list_compare(void) { pn_list_t *a = pn_list(PN_OBJECT, 0); pn_list_t *b = pn_list(PN_OBJECT, 0); assert(pn_equals(a, b)); void *one = pn_class_new(PN_OBJECT, 0); void *two = pn_class_new(PN_OBJECT, 0); void *three = pn_class_new(PN_OBJECT, 0); pn_list_add(a, one); assert(!pn_equals(a, b)); pn_list_add(b, one); assert(pn_equals(a, b)); pn_list_add(b, two); assert(!pn_equals(a, b)); pn_list_add(a, two); assert(pn_equals(a, b)); pn_list_add(a, three); assert(!pn_equals(a, b)); pn_list_add(b, three); assert(pn_equals(a, b)); pn_free(a); pn_free(b); pn_free(one); pn_free(two); pn_free(three); }
ssize_t pn_list_index(pn_list_t *list, void *value) { for (size_t i = 0; i < list->size; i++) { if (pn_equals(list->elements[i], value)) { return i; } } return -1; }
static void test_compare(void) { static pn_class_t clazz = PN_CLASS(compare); void *a = pn_class_new(&clazz, 0); assert(a); void *b = pn_class_new(&clazz, 0); assert(b); assert(pn_compare(a, b)); assert(!pn_equals(a, b)); assert(!pn_compare(a, a)); assert(pn_equals(a, a)); assert(!pn_compare(b, b)); assert(pn_equals(b, b)); assert(pn_compare(a, b) == (intptr_t) ((uintptr_t) b - (uintptr_t) a)); assert(pn_compare(NULL, b)); assert(!pn_equals(NULL, b)); assert(pn_compare(a, NULL)); assert(!pn_equals(a, NULL)); assert(!pn_compare(NULL, NULL)); assert(pn_equals(NULL, NULL)); pn_free(a); pn_free(b); }