static void test_hashcode(void) { static pn_class_t clazz = PN_CLASS(hashcode); void *obj = pn_class_new(&clazz, 0); assert(obj); assert(pn_hashcode(obj) == (uintptr_t) obj); assert(pn_hashcode(NULL) == 0); pn_free(obj); }
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 uintptr_t pn_list_hashcode(void *object) { assert(object); pn_list_t *list = (pn_list_t *) object; uintptr_t hash = 1; for (size_t i = 0; i < list->size; i++) { hash = hash * 31 + pn_hashcode(pn_list_get(list, i)); } return hash; }
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 uintptr_t pn_url_hashcode(void *object) { pn_url_t *url = (pn_url_t *) object; return pn_hashcode(pn_url_string(url)); }