static void checkCorrect3(int ID, size_t num) { el_t *els, *el; int *ids; bor_pairheap_t *heap; bor_pairheap_node_t *n; size_t i; FILE *fout1, *fout2; char fn[300]; bor_rand_t r; borRandInit(&r); sprintf(fn, "regressions/tmp.TSPairHeap.rand-%d.out", ID); fout1 = fopen(fn, "w"); sprintf(fn, "regressions/TSPairHeap.rand-%d.out", ID); fout2 = fopen(fn, "w"); els = randomEls(num); ids = BOR_ALLOC_ARR(int, num); heap = borPairHeapNew(ltEl, NULL); for (i = 0; i < num; i++){ borPairHeapAdd(heap, &els[i].node); } for (i = 0; i < num; i += 10){ els[i].val += borRand(&r, 1, 100); borPairHeapUpdate(heap, &els[i].node); } i = 0; while (!borPairHeapEmpty(heap)){ n = borPairHeapExtractMin(heap); el = bor_container_of(n, el_t, node); fprintf(fout1, "%d\n", el->val); el = bor_container_of(n, el_t, node); ids[i] = el->id; i++; } qsort(els, num, sizeof(el_t), cmpIncEl); for (i = 0; i < num; i++){ fprintf(fout2, "%d\n", els[i].val); } borPairHeapDel(heap); free(els); free(ids); fclose(fout1); fclose(fout2); }
static el_t *randomEls(size_t num) { bor_rand_t r; bor_real_t val; el_t *els; size_t i; borRandInit(&r); els = BOR_ALLOC_ARR(el_t, num); for (i = 0; i < num; i++){ val = borRand(&r, -500., 500.); els[i].val = val; els[i].id = i; } return els; }
int main(int argc, char *argv[]) { if (argc != 5){ fprintf(stderr, "Usage: %s test|bench arr_len loops nearest_len<50\n", argv[0]); return -1; } arr_len = atoi(argv[2]); loops = atoi(argv[3]); nearest_len = atoi(argv[4]); borRandInit(&r); if (strcmp(argv[1], "test") == 0){ testCorrect(); }else{ bench(); } return 0; }