X-Git-Url: https://git.auder.net/?p=cgds.git;a=blobdiff_plain;f=test%2Ft.BufferTop.c;fp=test%2Ft.BufferTop.c;h=1c390cd83d8fa841408b1ca236d27a46c0b81b93;hp=53899c4c38f5bfd157faf1cd62b3c5cf86f46867;hb=e45132acdb58c076d5e06849fa51c26de9a7486d;hpb=1ff641f9960fa6c6081817a5641afb22fad91dcd diff --git a/test/t.BufferTop.c b/test/t.BufferTop.c index 53899c4..1c390cd 100644 --- a/test/t.BufferTop.c +++ b/test/t.BufferTop.c @@ -5,156 +5,156 @@ void t_buffertop_clear() { - BufferTop* bt = buffertop_new(int, 10, MIN_T, 2); + BufferTop* bt = buffertop_new(int, 10, MIN_T, 2); - // NOTE: items with same values are supported; - // since it is unused in this test, we arbitrarily choose 0.0 - buffertop_tryadd(bt, 0, 0.0); - buffertop_tryadd(bt, 0, 0.0); - buffertop_tryadd(bt, 0, 0.0); + // NOTE: items with same values are supported; + // since it is unused in this test, we arbitrarily choose 0.0 + buffertop_tryadd(bt, 0, 0.0); + buffertop_tryadd(bt, 0, 0.0); + buffertop_tryadd(bt, 0, 0.0); - buffertop_clear(bt); - lu_assert(buffertop_empty(bt)); + buffertop_clear(bt); + lu_assert(buffertop_empty(bt)); - buffertop_destroy(bt); + buffertop_destroy(bt); } void t_buffertop_size() { - BufferTop* bt = buffertop_new(double, 10, MAX_T, 3); - - buffertop_tryadd(bt, 0.0, 0.0); - buffertop_tryadd(bt, 0.0, 0.0); - buffertop_tryadd(bt, 0.0, 0.0); - lu_assert_int_eq(buffertop_size(bt), 3); - - buffertop_tryadd(bt, 0.0, 0.0); - buffertop_tryadd(bt, 0.0, 0.0); - lu_assert_int_eq(buffertop_size(bt), 5); - - buffertop_tryadd(bt, 0.0, 0.0); - buffertop_tryadd(bt, 0.0, 0.0); - buffertop_tryadd(bt, 0.0, 0.0); - lu_assert_int_eq(buffertop_size(bt), 8); - buffertop_destroy(bt); - - // Now try to add beyond capacity, with reorganizing - bt = buffertop_new(double, 3, MAX_T, 2); - buffertop_tryadd(bt, 0.0, 0.0); - buffertop_tryadd(bt, 0.0, 1.0); - buffertop_tryadd(bt, 0.0, 2.0); - buffertop_tryadd(bt, 0.0, 3.0); - buffertop_tryadd(bt, 0.0, 4.0); - buffertop_tryadd(bt, 0.0, 5.0); - buffertop_tryadd(bt, 0.0, 6.0); - buffertop_tryadd(bt, 0.0, 7.0); - lu_assert_int_eq(buffertop_size(bt), 3); - - buffertop_clear(bt); - lu_assert(buffertop_empty(bt)); - buffertop_destroy(bt); + BufferTop* bt = buffertop_new(double, 10, MAX_T, 3); + + buffertop_tryadd(bt, 0.0, 0.0); + buffertop_tryadd(bt, 0.0, 0.0); + buffertop_tryadd(bt, 0.0, 0.0); + lu_assert_int_eq(buffertop_size(bt), 3); + + buffertop_tryadd(bt, 0.0, 0.0); + buffertop_tryadd(bt, 0.0, 0.0); + lu_assert_int_eq(buffertop_size(bt), 5); + + buffertop_tryadd(bt, 0.0, 0.0); + buffertop_tryadd(bt, 0.0, 0.0); + buffertop_tryadd(bt, 0.0, 0.0); + lu_assert_int_eq(buffertop_size(bt), 8); + buffertop_destroy(bt); + + // Now try to add beyond capacity, with reorganizing + bt = buffertop_new(double, 3, MAX_T, 2); + buffertop_tryadd(bt, 0.0, 0.0); + buffertop_tryadd(bt, 0.0, 1.0); + buffertop_tryadd(bt, 0.0, 2.0); + buffertop_tryadd(bt, 0.0, 3.0); + buffertop_tryadd(bt, 0.0, 4.0); + buffertop_tryadd(bt, 0.0, 5.0); + buffertop_tryadd(bt, 0.0, 6.0); + buffertop_tryadd(bt, 0.0, 7.0); + lu_assert_int_eq(buffertop_size(bt), 3); + + buffertop_clear(bt); + lu_assert(buffertop_empty(bt)); + buffertop_destroy(bt); } void t_buffertop_push_pop_basic() { - BufferTop* bt = buffertop_new(int, 5, MIN_T, 3); - - buffertop_tryadd(bt, 1, 2.0); - buffertop_tryadd(bt, 2, 6.0); - buffertop_tryadd(bt, 3, 4.0); - buffertop_tryadd(bt, 4, 8.0); - buffertop_tryadd(bt, 5, 3.0); - buffertop_tryadd(bt, 6, 1.0); - buffertop_tryadd(bt, 7, 5.0); - buffertop_tryadd(bt, 8, 7.0); - - int a; - buffertop_first(bt, a); - lu_assert_int_eq(a, 7); //7 -> 5.0 - buffertop_pop(bt); - buffertop_first(bt, a); - lu_assert_int_eq(a, 3); //3 -> 4.0 - buffertop_pop(bt); - buffertop_first(bt, a); - lu_assert_int_eq(a, 5); //5 -> 3.0 - buffertop_pop(bt); - buffertop_first(bt, a); - lu_assert_int_eq(a, 1); //1 -> 2.0 - buffertop_pop(bt); - buffertop_first(bt, a); - lu_assert_int_eq(a, 6); //6 has "highest" priority (1.0, MIN_T) - buffertop_pop(bt); - - lu_assert(buffertop_empty(bt)); - buffertop_destroy(bt); + BufferTop* bt = buffertop_new(int, 5, MIN_T, 3); + + buffertop_tryadd(bt, 1, 2.0); + buffertop_tryadd(bt, 2, 6.0); + buffertop_tryadd(bt, 3, 4.0); + buffertop_tryadd(bt, 4, 8.0); + buffertop_tryadd(bt, 5, 3.0); + buffertop_tryadd(bt, 6, 1.0); + buffertop_tryadd(bt, 7, 5.0); + buffertop_tryadd(bt, 8, 7.0); + + int a; + buffertop_first(bt, a); + lu_assert_int_eq(a, 7); //7 -> 5.0 + buffertop_pop(bt); + buffertop_first(bt, a); + lu_assert_int_eq(a, 3); //3 -> 4.0 + buffertop_pop(bt); + buffertop_first(bt, a); + lu_assert_int_eq(a, 5); //5 -> 3.0 + buffertop_pop(bt); + buffertop_first(bt, a); + lu_assert_int_eq(a, 1); //1 -> 2.0 + buffertop_pop(bt); + buffertop_first(bt, a); + lu_assert_int_eq(a, 6); //6 has "highest" priority (1.0, MIN_T) + buffertop_pop(bt); + + lu_assert(buffertop_empty(bt)); + buffertop_destroy(bt); } void t_buffertop_push_pop_evolved() { - int n = 10; - - BufferTop* bt = buffertop_new(StructTest1, 5, 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; - buffertop_tryadd(bt, *(st1 + i), i); //item i has value i - } - for (int i = n - buffertop_size(bt); i < n; i++) - { - StructTest1 st1Cell; - buffertop_first(bt, st1Cell); - lu_assert_int_eq(st1Cell.a, i); - buffertop_pop(bt); - } - safe_free(st1); - buffertop_destroy(bt); - - bt = buffertop_new(StructTest2*, 15, 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 value i+1 if i is even, i-1 if i is odd - // that is to say, values are 1 0 3 2 5 4 ... - buffertop_tryadd(bt, st2 + i, i % 2 == 0 ? i + 1 : i - 1); - } - for (int i = 0; i < n; i++) - { - StructTest2* st2Cell; - buffertop_first(bt, 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); - buffertop_pop(bt); - safe_free(st2Cell->b); - } - safe_free(st2); - buffertop_destroy(bt); + int n = 10; + + BufferTop* bt = buffertop_new(StructTest1, 5, 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; + buffertop_tryadd(bt, *(st1 + i), i); //item i has value i + } + for (int i = n - buffertop_size(bt); i < n; i++) + { + StructTest1 st1Cell; + buffertop_first(bt, st1Cell); + lu_assert_int_eq(st1Cell.a, i); + buffertop_pop(bt); + } + safe_free(st1); + buffertop_destroy(bt); + + bt = buffertop_new(StructTest2*, 15, 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 value i+1 if i is even, i-1 if i is odd + // that is to say, values are 1 0 3 2 5 4 ... + buffertop_tryadd(bt, st2 + i, i % 2 == 0 ? i + 1 : i - 1); + } + for (int i = 0; i < n; i++) + { + StructTest2* st2Cell; + buffertop_first(bt, 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); + buffertop_pop(bt); + safe_free(st2Cell->b); + } + safe_free(st2); + buffertop_destroy(bt); } void t_buffertop_copy() { - int n = 10; - - BufferTop* bt = buffertop_new(int, n, MIN_T, 3); - for (int i = 0; i < n; i++) - buffertop_tryadd(bt, rand() % 42, (double) rand() / RAND_MAX); - BufferTop* btc = buffertop_copy(bt); - - lu_assert_int_eq(buffertop_size(bt), buffertop_size(btc)); - int a, b; - for (int i = 0; i < n; i++) - { - buffertop_first(bt, a); - buffertop_first(btc, b); - lu_assert_int_eq(a, b); - buffertop_pop(bt); - buffertop_pop(btc); - } - buffertop_destroy(bt); - buffertop_destroy(btc); + int n = 10; + + BufferTop* bt = buffertop_new(int, n, MIN_T, 3); + for (int i = 0; i < n; i++) + buffertop_tryadd(bt, rand() % 42, (double) rand() / RAND_MAX); + BufferTop* btc = buffertop_copy(bt); + + lu_assert_int_eq(buffertop_size(bt), buffertop_size(btc)); + int a, b; + for (int i = 0; i < n; i++) + { + buffertop_first(bt, a); + buffertop_first(btc, b); + lu_assert_int_eq(a, b); + buffertop_pop(bt); + buffertop_pop(btc); + } + buffertop_destroy(bt); + buffertop_destroy(btc); }