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); }
static void test_string(const char *value) { size_t size = value ? strlen(value) : 0; pn_string_t *str = pn_string(value); assert(equals(pn_string_get(str), value)); assert(pn_string_size(str) == size); pn_string_t *strn = pn_stringn(value, size); assert(equals(pn_string_get(strn), value)); assert(pn_string_size(strn) == size); pn_string_t *strset = pn_string(NULL); pn_string_set(strset, value); assert(equals(pn_string_get(strset), value)); assert(pn_string_size(strset) == size); pn_string_t *strsetn = pn_string(NULL); pn_string_setn(strsetn, value, size); assert(equals(pn_string_get(strsetn), value)); assert(pn_string_size(strsetn) == size); assert(pn_hashcode(str) == pn_hashcode(strn)); assert(pn_hashcode(str) == pn_hashcode(strset)); assert(pn_hashcode(str) == pn_hashcode(strsetn)); assert(!pn_compare(str, str)); assert(!pn_compare(str, strn)); assert(!pn_compare(str, strset)); assert(!pn_compare(str, strsetn)); pn_free(str); pn_free(strn); pn_free(strset); pn_free(strsetn); }
static void test_stringn(const char *value, size_t size) { pn_string_t *strn = pn_stringn(value, size); assert(equals(pn_string_get(strn), value)); assert(pn_string_size(strn) == size); pn_string_t *strsetn = pn_string(NULL); pn_string_setn(strsetn, value, size); assert(equals(pn_string_get(strsetn), value)); assert(pn_string_size(strsetn) == size); assert(pn_hashcode(strn) == pn_hashcode(strsetn)); assert(!pn_compare(strn, strsetn)); pn_free(strn); pn_free(strsetn); }
static intptr_t pn_list_compare(void *oa, void *ob) { assert(oa); assert(ob); pn_list_t *a = (pn_list_t *) oa; pn_list_t *b = (pn_list_t *) ob; size_t na = pn_list_size(a); size_t nb = pn_list_size(b); if (na != nb) { return nb - na; } else { for (size_t i = 0; i < na; i++) { intptr_t delta = pn_compare(pn_list_get(a, i), pn_list_get(b, i)); if (delta) return delta; } } return 0; }
static intptr_t pn_url_compare(void *oa, void *ob) { pn_url_t *a = (pn_url_t *) oa; pn_url_t *b = (pn_url_t *) ob; return pn_compare(pn_url_string(a), pn_url_string(b)); }