Skip to content

Commit

Permalink
t/unit-tests: adapt priority queue test to use clar test framework
Browse files Browse the repository at this point in the history
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Seyi007 authored and gitster committed Jan 16, 2025
1 parent b5f6277 commit e802ba2
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 93 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1339,6 +1339,7 @@ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/%

CLAR_TEST_SUITES += u-ctype
CLAR_TEST_SUITES += u-mem-pool
CLAR_TEST_SUITES += u-prio-queue
CLAR_TEST_SUITES += u-strvec
CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X)
CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES))
Expand All @@ -1351,7 +1352,6 @@ UNIT_TEST_PROGRAMS += t-hashmap
UNIT_TEST_PROGRAMS += t-oid-array
UNIT_TEST_PROGRAMS += t-oidmap
UNIT_TEST_PROGRAMS += t-oidtree
UNIT_TEST_PROGRAMS += t-prio-queue
UNIT_TEST_PROGRAMS += t-reftable-basics
UNIT_TEST_PROGRAMS += t-reftable-block
UNIT_TEST_PROGRAMS += t-reftable-merged
Expand Down
2 changes: 1 addition & 1 deletion t/meson.build
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
clar_test_suites = [
'unit-tests/u-ctype.c',
'unit-tests/u-mem-pool.c',
'unit-tests/u-prio-queue.c',
'unit-tests/u-strvec.c',
]

Expand Down Expand Up @@ -47,7 +48,6 @@ unit_test_programs = [
'unit-tests/t-oid-array.c',
'unit-tests/t-oidmap.c',
'unit-tests/t-oidtree.c',
'unit-tests/t-prio-queue.c',
'unit-tests/t-reftable-basics.c',
'unit-tests/t-reftable-block.c',
'unit-tests/t-reftable-merged.c',
Expand Down
91 changes: 0 additions & 91 deletions t/unit-tests/t-prio-queue.c

This file was deleted.

94 changes: 94 additions & 0 deletions t/unit-tests/u-prio-queue.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#include "unit-test.h"
#include "prio-queue.h"

static int intcmp(const void *va, const void *vb, void *data UNUSED)
{
const int *a = va, *b = vb;
return *a - *b;
}


#define MISSING -1
#define DUMP -2
#define STACK -3
#define GET -4
#define REVERSE -5

static int show(int *v)
{
return v ? *v : MISSING;
}

static void test_prio_queue(int *input, size_t input_size,
int *result, size_t result_size)
{
struct prio_queue pq = { intcmp };
size_t j = 0;

for (size_t i = 0; i < input_size; i++) {
void *peek, *get;
switch(input[i]) {
case GET:
peek = prio_queue_peek(&pq);
get = prio_queue_get(&pq);
cl_assert(peek == get);
cl_assert(j < result_size);
cl_assert_equal_i(result[j], show(get));
j++;
break;
case DUMP:
while ((peek = prio_queue_peek(&pq))) {
get = prio_queue_get(&pq);
cl_assert(peek == get);
cl_assert(j < result_size);
cl_assert_equal_i(result[j], show(get));
j++;
}
break;
case STACK:
pq.compare = NULL;
break;
case REVERSE:
prio_queue_reverse(&pq);
break;
default:
prio_queue_put(&pq, &input[i]);
break;
}
}
cl_assert_equal_i(j, result_size);
clear_prio_queue(&pq);
}

#define TEST_INPUT(input, result) \
test_prio_queue(input, ARRAY_SIZE(input), result, ARRAY_SIZE(result))

void test_prio_queue__basic(void)
{
TEST_INPUT(((int []){ 2, 6, 3, 10, 9, 5, 7, 4, 5, 8, 1, DUMP }),
((int []){ 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10 }));
}

void test_prio_queue__mixed(void)
{
TEST_INPUT(((int []){ 6, 2, 4, GET, 5, 3, GET, GET, 1, DUMP }),
((int []){ 2, 3, 4, 1, 5, 6 }));
}

void test_prio_queue__empty(void)
{
TEST_INPUT(((int []){ 1, 2, GET, GET, GET, 1, 2, GET, GET, GET }),
((int []){ 1, 2, MISSING, 1, 2, MISSING }));
}

void test_prio_queue__stack(void)
{
TEST_INPUT(((int []){ STACK, 8, 1, 5, 4, 6, 2, 3, DUMP }),
((int []){ 3, 2, 6, 4, 5, 1, 8 }));
}

void test_prio_queue__reverse_stack(void)
{
TEST_INPUT(((int []){ STACK, 1, 2, 3, 4, 5, 6, REVERSE, DUMP }),
((int []){ 1, 2, 3, 4, 5, 6 }));
}

0 comments on commit e802ba2

Please sign in to comment.