Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests: move t0009-prio-queue.sh to the new unit testing framework #1642

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -828,7 +828,6 @@ TEST_BUILTINS_OBJS += test-partial-clone.o
TEST_BUILTINS_OBJS += test-path-utils.o
TEST_BUILTINS_OBJS += test-pcre2-config.o
TEST_BUILTINS_OBJS += test-pkt-line.o
TEST_BUILTINS_OBJS += test-prio-queue.o
TEST_BUILTINS_OBJS += test-proc-receive.o
TEST_BUILTINS_OBJS += test-progress.o
TEST_BUILTINS_OBJS += test-reach.o
Expand Down Expand Up @@ -1340,6 +1339,7 @@ THIRD_PARTY_SOURCES += sha1dc/%

UNIT_TEST_PROGRAMS += t-basic
UNIT_TEST_PROGRAMS += t-strbuf
UNIT_TEST_PROGRAMS += t-prio-queue
UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS))
UNIT_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS))
UNIT_TEST_OBJS += $(UNIT_TEST_DIR)/test-lib.o
Expand Down
51 changes: 0 additions & 51 deletions t/helper/test-prio-queue.c

This file was deleted.

1 change: 0 additions & 1 deletion t/helper/test-tool.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ static struct test_cmd cmds[] = {
{ "path-utils", cmd__path_utils },
{ "pcre2-config", cmd__pcre2_config },
{ "pkt-line", cmd__pkt_line },
{ "prio-queue", cmd__prio_queue },
{ "proc-receive", cmd__proc_receive },
{ "progress", cmd__progress },
{ "reach", cmd__reach },
Expand Down
1 change: 0 additions & 1 deletion t/helper/test-tool.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ int cmd__partial_clone(int argc, const char **argv);
int cmd__path_utils(int argc, const char **argv);
int cmd__pcre2_config(int argc, const char **argv);
int cmd__pkt_line(int argc, const char **argv);
int cmd__prio_queue(int argc, const char **argv);
int cmd__proc_receive(int argc, const char **argv);
int cmd__progress(int argc, const char **argv);
int cmd__reach(int argc, const char **argv);
Expand Down
66 changes: 0 additions & 66 deletions t/t0009-prio-queue.sh

This file was deleted.

129 changes: 129 additions & 0 deletions t/unit-tests/t-prio-queue.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
#include "test-lib.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 print_input(int *input, size_t input_size)
{
char buf[128];
int len = 0;
for(size_t i = 0; i < input_size; i++) {
switch (input[i]) {
case GET:
len += xsnprintf(buf+len, sizeof(buf), "get, ");
break;
case DUMP:
len += xsnprintf(buf+len, sizeof(buf), "dump");
break;
case STACK:
len += xsnprintf(buf+len, sizeof(buf), "stack, ");
break;
case REVERSE:
len += xsnprintf(buf+len, sizeof(buf), "reverse, ");
break;
default:
len += xsnprintf(buf+len, sizeof(buf), "push %d, ", input[i]);
break;
}
}
test_msg("input: %s", buf);
}

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

for (int i = 0, j = 0; i < input_size; i++) {
void *peek, *get;
switch (input[i]) {
case GET:
peek = prio_queue_peek(&pq);
get = prio_queue_get(&pq);
if (!check(peek == get))
return;
if (!check_int(result[j++], ==, show(get))) {
print_input(input, input_size);
test_msg("failed at input index %d", i);
}
break;
case DUMP:
while ((peek = prio_queue_peek(&pq))) {
get = prio_queue_get(&pq);
if (!check(peek == get))
return;
if (!check_int(result[j++], ==, show(get))) {
print_input(input, input_size);
test_msg("failed at input index %d", i);
}
}
break;
case STACK:
pq.compare = NULL;
break;
case REVERSE:
prio_queue_reverse(&pq);
break;
default:
prio_queue_put(&pq, &input[i]);
break;
}
}
clear_prio_queue(&pq);
}


#define BASIC_INPUT 2, 6, 3, 10, 9, 5, 7, 4, 5, 8, 1, DUMP
#define BASIC_RESULT 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10

#define MIXED_PUT_GET_INPUT 6, 2, 4, GET, 5, 3, GET, GET, 1, DUMP
#define MIXED_PUT_GET_RESULT 2, 3, 4, 1, 5, 6

#define EMPTY_QUEUE_INPUT 1, 2, GET, GET, GET, 1, 2, GET, GET, GET
#define EMPTY_QUEUE_RESULT 1, 2, MISSING, 1, 2, MISSING

#define STACK_INPUT STACK, 8, 1, 5, 4, 6, 2, 3, DUMP
#define STACK_RESULT 3, 2, 6, 4, 5, 1, 8

#define REVERSE_STACK_INPUT STACK, 1, 2, 3, 4, 5, 6, REVERSE, DUMP
#define REVERSE_STACK_RESULT 1, 2, 3, 4, 5, 6

#define TEST_INPUT(INPUT, RESULT, name) \
static void test_##name(void) \
{ \
int input[] = {INPUT}; \
int result[] = {RESULT}; \
test_prio_queue(input, result, ARRAY_SIZE(input)); \
}

TEST_INPUT(BASIC_INPUT, BASIC_RESULT, basic)
TEST_INPUT(MIXED_PUT_GET_INPUT, MIXED_PUT_GET_RESULT, mixed)
TEST_INPUT(EMPTY_QUEUE_INPUT, EMPTY_QUEUE_RESULT, empty)
TEST_INPUT(STACK_INPUT, STACK_RESULT, stack)
TEST_INPUT(REVERSE_STACK_INPUT, REVERSE_STACK_RESULT, reverse)

int cmd_main(int argc, const char **argv)
{
TEST(test_basic(), "prio-queue works for basic input");
TEST(test_mixed(), "prio-queue works for mixed put & get commands");
TEST(test_empty(), "prio-queue works when queue is empty");
TEST(test_stack(), "prio-queue works when used as a LIFO stack");
TEST(test_reverse(), "prio-queue works when LIFO stack is reversed");

return test_done();
}
Loading