static void test2(bor_rand_mt_t *rand, bor_nn_t *n, bor_list_t *list, size_t num) { bor_nn_el_t *nn[10]; bor_list_t *nn2[10]; el_t *el, *el2; bor_vec2_t p; size_t len, len2, i; borVec2Set(&p, borRandMT(rand, -3, 3), borRandMT(rand, -3, 3)); len = borNNNearest(n, (const bor_vec_t *)&p, num, nn); len2 = borNearestLinear(list, (void *)&p, dist2, nn2, num, NULL); assertEquals(len, num); assertEquals(len2, num); for (i = 0; i < num; i++){ el = bor_container_of(nn[i], el_t, el); el2 = bor_container_of(nn2[i], el_t, list); assertTrue(el == el2 || borEq(borVec2Dist(&el->w, &p), borVec2Dist(&el2->w, &p))); if (el != el2 && !borEq(borVec2Dist(&el->w, &p), borVec2Dist(&el2->w, &p))){ fprintf(stderr, "%.30f %.30f [%.30f] - %.30f %.30f [%.30f]\n", borVec2X(&el->w), borVec2Y(&el->w), borVec2Dist(&el->w, &p), borVec2X(&el2->w), borVec2Y(&el2->w), borVec2Dist(&el2->w, &p)); } } }
static int cmpIncEl(const void *i1, const void *i2) { el_t *e1, *e2; e1 = (el_t *)i1; e2 = (el_t *)i2; if (borEq(e1->val, e2->val)) return 0; if (e1->val < e2->val) return -1; return 1; }