Git fork

t/unit-tests: adapt priority queue test to use clar test framework

Convert the prio-queue test script to clar framework by using clar
assertions where necessary. Test functions are created as a standalone
to test different cases.

update the type of the variable `j` from int to `size_t`, this ensures
compatibility with the type used for result_size, which is also size_t,
preventing a potential warning or error caused by comparisons between
signed and unsigned integers.

Mentored-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Seyi Kuforiji <kuforiji98@gmail.com>
Acked-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

Seyi Kuforiji and committed by
Junio C Hamano
8b702f93 c143dfa7

+96 -93
+1 -1
Makefile
··· 1339 1340 CLAR_TEST_SUITES += u-ctype 1341 CLAR_TEST_SUITES += u-mem-pool 1342 CLAR_TEST_SUITES += u-strvec 1343 CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X) 1344 CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES)) ··· 1351 UNIT_TEST_PROGRAMS += t-oid-array 1352 UNIT_TEST_PROGRAMS += t-oidmap 1353 UNIT_TEST_PROGRAMS += t-oidtree 1354 - UNIT_TEST_PROGRAMS += t-prio-queue 1355 UNIT_TEST_PROGRAMS += t-reftable-basics 1356 UNIT_TEST_PROGRAMS += t-reftable-block 1357 UNIT_TEST_PROGRAMS += t-reftable-merged
··· 1339 1340 CLAR_TEST_SUITES += u-ctype 1341 CLAR_TEST_SUITES += u-mem-pool 1342 + CLAR_TEST_SUITES += u-prio-queue 1343 CLAR_TEST_SUITES += u-strvec 1344 CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X) 1345 CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES)) ··· 1352 UNIT_TEST_PROGRAMS += t-oid-array 1353 UNIT_TEST_PROGRAMS += t-oidmap 1354 UNIT_TEST_PROGRAMS += t-oidtree 1355 UNIT_TEST_PROGRAMS += t-reftable-basics 1356 UNIT_TEST_PROGRAMS += t-reftable-block 1357 UNIT_TEST_PROGRAMS += t-reftable-merged
+1 -1
t/meson.build
··· 1 clar_test_suites = [ 2 'unit-tests/u-ctype.c', 3 'unit-tests/u-mem-pool.c', 4 'unit-tests/u-strvec.c', 5 ] 6 ··· 47 'unit-tests/t-oid-array.c', 48 'unit-tests/t-oidmap.c', 49 'unit-tests/t-oidtree.c', 50 - 'unit-tests/t-prio-queue.c', 51 'unit-tests/t-reftable-basics.c', 52 'unit-tests/t-reftable-block.c', 53 'unit-tests/t-reftable-merged.c',
··· 1 clar_test_suites = [ 2 'unit-tests/u-ctype.c', 3 'unit-tests/u-mem-pool.c', 4 + 'unit-tests/u-prio-queue.c', 5 'unit-tests/u-strvec.c', 6 ] 7 ··· 48 'unit-tests/t-oid-array.c', 49 'unit-tests/t-oidmap.c', 50 'unit-tests/t-oidtree.c', 51 'unit-tests/t-reftable-basics.c', 52 'unit-tests/t-reftable-block.c', 53 'unit-tests/t-reftable-merged.c',
-91
t/unit-tests/t-prio-queue.c
··· 1 - #include "test-lib.h" 2 - #include "prio-queue.h" 3 - 4 - static int intcmp(const void *va, const void *vb, void *data UNUSED) 5 - { 6 - const int *a = va, *b = vb; 7 - return *a - *b; 8 - } 9 - 10 - 11 - #define MISSING -1 12 - #define DUMP -2 13 - #define STACK -3 14 - #define GET -4 15 - #define REVERSE -5 16 - 17 - static int show(int *v) 18 - { 19 - return v ? *v : MISSING; 20 - } 21 - 22 - static void test_prio_queue(int *input, size_t input_size, 23 - int *result, size_t result_size) 24 - { 25 - struct prio_queue pq = { intcmp }; 26 - int j = 0; 27 - 28 - for (size_t i = 0; i < input_size; i++) { 29 - void *peek, *get; 30 - switch(input[i]) { 31 - case GET: 32 - peek = prio_queue_peek(&pq); 33 - get = prio_queue_get(&pq); 34 - if (!check(peek == get)) 35 - return; 36 - if (!check_uint(j, <, result_size)) 37 - break; 38 - if (!check_int(result[j], ==, show(get))) 39 - test_msg(" j: %d", j); 40 - j++; 41 - break; 42 - case DUMP: 43 - while ((peek = prio_queue_peek(&pq))) { 44 - get = prio_queue_get(&pq); 45 - if (!check(peek == get)) 46 - return; 47 - if (!check_uint(j, <, result_size)) 48 - break; 49 - if (!check_int(result[j], ==, show(get))) 50 - test_msg(" j: %d", j); 51 - j++; 52 - } 53 - break; 54 - case STACK: 55 - pq.compare = NULL; 56 - break; 57 - case REVERSE: 58 - prio_queue_reverse(&pq); 59 - break; 60 - default: 61 - prio_queue_put(&pq, &input[i]); 62 - break; 63 - } 64 - } 65 - check_uint(j, ==, result_size); 66 - clear_prio_queue(&pq); 67 - } 68 - 69 - #define TEST_INPUT(input, result) \ 70 - test_prio_queue(input, ARRAY_SIZE(input), result, ARRAY_SIZE(result)) 71 - 72 - int cmd_main(int argc UNUSED, const char **argv UNUSED) 73 - { 74 - TEST(TEST_INPUT(((int []){ 2, 6, 3, 10, 9, 5, 7, 4, 5, 8, 1, DUMP }), 75 - ((int []){ 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10 })), 76 - "prio-queue works for basic input"); 77 - TEST(TEST_INPUT(((int []){ 6, 2, 4, GET, 5, 3, GET, GET, 1, DUMP }), 78 - ((int []){ 2, 3, 4, 1, 5, 6 })), 79 - "prio-queue works for mixed put & get commands"); 80 - TEST(TEST_INPUT(((int []){ 1, 2, GET, GET, GET, 1, 2, GET, GET, GET }), 81 - ((int []){ 1, 2, MISSING, 1, 2, MISSING })), 82 - "prio-queue works when queue is empty"); 83 - TEST(TEST_INPUT(((int []){ STACK, 8, 1, 5, 4, 6, 2, 3, DUMP }), 84 - ((int []){ 3, 2, 6, 4, 5, 1, 8 })), 85 - "prio-queue works when used as a LIFO stack"); 86 - TEST(TEST_INPUT(((int []){ STACK, 1, 2, 3, 4, 5, 6, REVERSE, DUMP }), 87 - ((int []){ 1, 2, 3, 4, 5, 6 })), 88 - "prio-queue works when LIFO stack is reversed"); 89 - 90 - return test_done(); 91 - }
···
+94
t/unit-tests/u-prio-queue.c
···
··· 1 + #include "unit-test.h" 2 + #include "prio-queue.h" 3 + 4 + static int intcmp(const void *va, const void *vb, void *data UNUSED) 5 + { 6 + const int *a = va, *b = vb; 7 + return *a - *b; 8 + } 9 + 10 + 11 + #define MISSING -1 12 + #define DUMP -2 13 + #define STACK -3 14 + #define GET -4 15 + #define REVERSE -5 16 + 17 + static int show(int *v) 18 + { 19 + return v ? *v : MISSING; 20 + } 21 + 22 + static void test_prio_queue(int *input, size_t input_size, 23 + int *result, size_t result_size) 24 + { 25 + struct prio_queue pq = { intcmp }; 26 + size_t j = 0; 27 + 28 + for (size_t i = 0; i < input_size; i++) { 29 + void *peek, *get; 30 + switch(input[i]) { 31 + case GET: 32 + peek = prio_queue_peek(&pq); 33 + get = prio_queue_get(&pq); 34 + cl_assert(peek == get); 35 + cl_assert(j < result_size); 36 + cl_assert_equal_i(result[j], show(get)); 37 + j++; 38 + break; 39 + case DUMP: 40 + while ((peek = prio_queue_peek(&pq))) { 41 + get = prio_queue_get(&pq); 42 + cl_assert(peek == get); 43 + cl_assert(j < result_size); 44 + cl_assert_equal_i(result[j], show(get)); 45 + j++; 46 + } 47 + break; 48 + case STACK: 49 + pq.compare = NULL; 50 + break; 51 + case REVERSE: 52 + prio_queue_reverse(&pq); 53 + break; 54 + default: 55 + prio_queue_put(&pq, &input[i]); 56 + break; 57 + } 58 + } 59 + cl_assert_equal_i(j, result_size); 60 + clear_prio_queue(&pq); 61 + } 62 + 63 + #define TEST_INPUT(input, result) \ 64 + test_prio_queue(input, ARRAY_SIZE(input), result, ARRAY_SIZE(result)) 65 + 66 + void test_prio_queue__basic(void) 67 + { 68 + TEST_INPUT(((int []){ 2, 6, 3, 10, 9, 5, 7, 4, 5, 8, 1, DUMP }), 69 + ((int []){ 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10 })); 70 + } 71 + 72 + void test_prio_queue__mixed(void) 73 + { 74 + TEST_INPUT(((int []){ 6, 2, 4, GET, 5, 3, GET, GET, 1, DUMP }), 75 + ((int []){ 2, 3, 4, 1, 5, 6 })); 76 + } 77 + 78 + void test_prio_queue__empty(void) 79 + { 80 + TEST_INPUT(((int []){ 1, 2, GET, GET, GET, 1, 2, GET, GET, GET }), 81 + ((int []){ 1, 2, MISSING, 1, 2, MISSING })); 82 + } 83 + 84 + void test_prio_queue__stack(void) 85 + { 86 + TEST_INPUT(((int []){ STACK, 8, 1, 5, 4, 6, 2, 3, DUMP }), 87 + ((int []){ 3, 2, 6, 4, 5, 1, 8 })); 88 + } 89 + 90 + void test_prio_queue__reverse_stack(void) 91 + { 92 + TEST_INPUT(((int []){ STACK, 1, 2, 3, 4, 5, 6, REVERSE, DUMP }), 93 + ((int []){ 1, 2, 3, 4, 5, 6 })); 94 + }