X-Git-Url: https://git.auder.net/?p=cgds.git;a=blobdiff_plain;f=test%2Ft.PriorityQueue.c;h=f408f89d3942a40b74488253576b5e5dccd8ba48;hp=8cabc1e086233146d4be77456b512eda634324d2;hb=e45132acdb58c076d5e06849fa51c26de9a7486d;hpb=1ff641f9960fa6c6081817a5641afb22fad91dcd diff --git a/test/t.PriorityQueue.c b/test/t.PriorityQueue.c index 8cabc1e..f408f89 100644 --- a/test/t.PriorityQueue.c +++ b/test/t.PriorityQueue.c @@ -5,168 +5,168 @@ void t_priorityqueue_clear() { - PriorityQueue* pq = priorityqueue_new(int, MIN_T, 2); + PriorityQueue* pq = priorityqueue_new(int, MIN_T, 2); - // NOTE: items with same priorities are supported; - // since it is unused in this test, we arbitrarily choose 0.0 - priorityqueue_insert(pq, 0, 0.0); - priorityqueue_insert(pq, 0, 0.0); - priorityqueue_insert(pq, 0, 0.0); + // NOTE: items with same priorities are supported; + // since it is unused in this test, we arbitrarily choose 0.0 + priorityqueue_insert(pq, 0, 0.0); + priorityqueue_insert(pq, 0, 0.0); + priorityqueue_insert(pq, 0, 0.0); - priorityqueue_clear(pq); - lu_assert(priorityqueue_empty(pq)); + priorityqueue_clear(pq); + lu_assert(priorityqueue_empty(pq)); - priorityqueue_destroy(pq); + priorityqueue_destroy(pq); } void t_priorityqueue_size() { - PriorityQueue* pq = priorityqueue_new(double, MAX_T, 3); + PriorityQueue* pq = priorityqueue_new(double, MAX_T, 3); - priorityqueue_insert(pq, 0.0, 0.0); - priorityqueue_insert(pq, 0.0, 0.0); - priorityqueue_insert(pq, 0.0, 0.0); - lu_assert_int_eq(priorityqueue_size(pq), 3); + priorityqueue_insert(pq, 0.0, 0.0); + priorityqueue_insert(pq, 0.0, 0.0); + priorityqueue_insert(pq, 0.0, 0.0); + lu_assert_int_eq(priorityqueue_size(pq), 3); - priorityqueue_insert(pq, 0.0, 0.0); - priorityqueue_insert(pq, 0.0, 0.0); - lu_assert_int_eq(priorityqueue_size(pq), 5); + priorityqueue_insert(pq, 0.0, 0.0); + priorityqueue_insert(pq, 0.0, 0.0); + lu_assert_int_eq(priorityqueue_size(pq), 5); - priorityqueue_insert(pq, 0.0, 0.0); - priorityqueue_insert(pq, 0.0, 0.0); - priorityqueue_insert(pq, 0.0, 0.0); - lu_assert_int_eq(priorityqueue_size(pq), 8); + priorityqueue_insert(pq, 0.0, 0.0); + priorityqueue_insert(pq, 0.0, 0.0); + priorityqueue_insert(pq, 0.0, 0.0); + lu_assert_int_eq(priorityqueue_size(pq), 8); - priorityqueue_destroy(pq); + priorityqueue_destroy(pq); } void t_priorityqueue_push_pop_basic() { - PriorityQueue* pq = priorityqueue_new(int, MIN_T, 3); - - priorityqueue_insert(pq, 1, 1.0); - priorityqueue_insert(pq, 2, 3.0); - priorityqueue_insert(pq, 3, 2.0); - priorityqueue_insert(pq, 4, 4.0); - priorityqueue_insert(pq, 5, 0.0); - - int a; - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 5); //5 has "highest" priority (0.0, MIN_T) - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 1); //1 -> 1.0 - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 3); //3 -> 2.0 - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 2); //2 -> 3.0 - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 4); //4 -> 4.0 - priorityqueue_pop(pq); - lu_assert(priorityqueue_empty(pq)); - - pq->heap->hType = MAX_T; //HACK... (why not?) - priorityqueue_insert(pq, 1, 1.0); - priorityqueue_insert(pq, 2, 3.0); - priorityqueue_insert(pq, 3, 2.0); - priorityqueue_insert(pq, 4, 4.0); - priorityqueue_insert(pq, 5, 0.0); - priorityqueue_insert(pq, 6, 0.0); - priorityqueue_insert(pq, 7, 6.0); - priorityqueue_remove(pq, 6); - priorityqueue_remove(pq, 7); - priorityqueue_set(pq, 3, 5.0); - priorityqueue_set(pq, 5, 2.0); - - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 3); //3 has highest priority (5.0, MAX_T) - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 4); //4 -> 4.0 - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 2); //2 -> 3.0 - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 5); //5 -> 2.0 - priorityqueue_pop(pq); - priorityqueue_peek(pq, a); - lu_assert_int_eq(a, 1); // 1 -> 1.0 - priorityqueue_pop(pq); - - lu_assert(priorityqueue_empty(pq)); - priorityqueue_destroy(pq); + PriorityQueue* pq = priorityqueue_new(int, MIN_T, 3); + + priorityqueue_insert(pq, 1, 1.0); + priorityqueue_insert(pq, 2, 3.0); + priorityqueue_insert(pq, 3, 2.0); + priorityqueue_insert(pq, 4, 4.0); + priorityqueue_insert(pq, 5, 0.0); + + int a; + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 5); //5 has "highest" priority (0.0, MIN_T) + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 1); //1 -> 1.0 + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 3); //3 -> 2.0 + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 2); //2 -> 3.0 + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 4); //4 -> 4.0 + priorityqueue_pop(pq); + lu_assert(priorityqueue_empty(pq)); + + pq->heap->hType = MAX_T; //HACK... (why not?) + priorityqueue_insert(pq, 1, 1.0); + priorityqueue_insert(pq, 2, 3.0); + priorityqueue_insert(pq, 3, 2.0); + priorityqueue_insert(pq, 4, 4.0); + priorityqueue_insert(pq, 5, 0.0); + priorityqueue_insert(pq, 6, 0.0); + priorityqueue_insert(pq, 7, 6.0); + priorityqueue_remove(pq, 6); + priorityqueue_remove(pq, 7); + priorityqueue_set(pq, 3, 5.0); + priorityqueue_set(pq, 5, 2.0); + + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 3); //3 has highest priority (5.0, MAX_T) + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 4); //4 -> 4.0 + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 2); //2 -> 3.0 + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 5); //5 -> 2.0 + priorityqueue_pop(pq); + priorityqueue_peek(pq, a); + lu_assert_int_eq(a, 1); // 1 -> 1.0 + priorityqueue_pop(pq); + + lu_assert(priorityqueue_empty(pq)); + priorityqueue_destroy(pq); } void t_priorityqueue_push_pop_evolved() { - int n = 10; - - PriorityQueue* pq = priorityqueue_new(StructTest1, MAX_T, 2); - StructTest1* st1 = (StructTest1*) safe_malloc(n * sizeof (StructTest1)); - for (int i = n - 1; i >= 0; i--) - { - st1[i].a = i; - st1[i].b = (double) rand() / RAND_MAX; - priorityqueue_insert(pq, *(st1 + i), i); //item i has priority i - } - for (int i = n - 1; i >= 0; i--) - { - StructTest1 st1Cell; - priorityqueue_peek(pq, st1Cell); - lu_assert_int_eq(st1Cell.a, i); - priorityqueue_pop(pq); - } - safe_free(st1); - priorityqueue_destroy(pq); - - pq = priorityqueue_new(StructTest2*, MAX_T, 4); - StructTest2* st2 = (StructTest2*) safe_malloc(n * sizeof (StructTest2)); - for (int i = n - 1; i >= 0; i--) - { - st2[i].a = (float) rand() / RAND_MAX; - st2[i].b = (StructTest1*) safe_malloc(sizeof (StructTest1)); - st2[i].b->a = i; - st2[i].b->b = (double) rand() / RAND_MAX; - // item i has priority i+1 if i is even, i-1 if i is odd - // that is to say, priorities are 1 0 3 2 5 4 ... - priorityqueue_insert(pq, st2 + i, i % 2 == 0 ? i + 1 : i - 1); - } - for (int i = n - 1; i >= 0; i--) - { - StructTest2* st2Cell; - priorityqueue_peek(pq, st2Cell); - // NOTE: i |--> i%2==0 ? i+1 : i-1 is an involution - lu_assert_int_eq(st2Cell->b->a, i % 2 == 0 ? i + 1 : i - 1); - priorityqueue_pop(pq); - safe_free(st2Cell->b); - } - safe_free(st2); - priorityqueue_destroy(pq); + int n = 10; + + PriorityQueue* pq = priorityqueue_new(StructTest1, MAX_T, 2); + StructTest1* st1 = (StructTest1*) safe_malloc(n * sizeof (StructTest1)); + for (int i = n - 1; i >= 0; i--) + { + st1[i].a = i; + st1[i].b = (double) rand() / RAND_MAX; + priorityqueue_insert(pq, *(st1 + i), i); //item i has priority i + } + for (int i = n - 1; i >= 0; i--) + { + StructTest1 st1Cell; + priorityqueue_peek(pq, st1Cell); + lu_assert_int_eq(st1Cell.a, i); + priorityqueue_pop(pq); + } + safe_free(st1); + priorityqueue_destroy(pq); + + pq = priorityqueue_new(StructTest2*, MAX_T, 4); + StructTest2* st2 = (StructTest2*) safe_malloc(n * sizeof (StructTest2)); + for (int i = n - 1; i >= 0; i--) + { + st2[i].a = (float) rand() / RAND_MAX; + st2[i].b = (StructTest1*) safe_malloc(sizeof (StructTest1)); + st2[i].b->a = i; + st2[i].b->b = (double) rand() / RAND_MAX; + // item i has priority i+1 if i is even, i-1 if i is odd + // that is to say, priorities are 1 0 3 2 5 4 ... + priorityqueue_insert(pq, st2 + i, i % 2 == 0 ? i + 1 : i - 1); + } + for (int i = n - 1; i >= 0; i--) + { + StructTest2* st2Cell; + priorityqueue_peek(pq, st2Cell); + // NOTE: i |--> i%2==0 ? i+1 : i-1 is an involution + lu_assert_int_eq(st2Cell->b->a, i % 2 == 0 ? i + 1 : i - 1); + priorityqueue_pop(pq); + safe_free(st2Cell->b); + } + safe_free(st2); + priorityqueue_destroy(pq); } void t_priorityqueue_copy() { - int n = 10; - - PriorityQueue* pq = priorityqueue_new(int, MIN_T, 3); - for (int i = 0; i < n; i++) - priorityqueue_insert(pq, rand() % 42, (double) rand() / RAND_MAX); - PriorityQueue* pqc = priorityqueue_copy(pq); - - lu_assert_int_eq(priorityqueue_size(pq), priorityqueue_size(pqc)); - int a, b; - for (int i = 0; i < n; i++) - { - priorityqueue_peek(pq, a); - priorityqueue_peek(pqc, b); - lu_assert_int_eq(a, b); - priorityqueue_pop(pq); - priorityqueue_pop(pqc); - } - priorityqueue_destroy(pq); - priorityqueue_destroy(pqc); + int n = 10; + + PriorityQueue* pq = priorityqueue_new(int, MIN_T, 3); + for (int i = 0; i < n; i++) + priorityqueue_insert(pq, rand() % 42, (double) rand() / RAND_MAX); + PriorityQueue* pqc = priorityqueue_copy(pq); + + lu_assert_int_eq(priorityqueue_size(pq), priorityqueue_size(pqc)); + int a, b; + for (int i = 0; i < n; i++) + { + priorityqueue_peek(pq, a); + priorityqueue_peek(pqc, b); + lu_assert_int_eq(a, b); + priorityqueue_pop(pq); + priorityqueue_pop(pqc); + } + priorityqueue_destroy(pq); + priorityqueue_destroy(pqc); }