예제 #1
0
파일: nn.c 프로젝트: danfis/boruvka
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));
        }
    }
}
예제 #2
0
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;
}