From 484b2deea04bfb706fb9ddce1b22a98ff1a891b7 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Fri, 11 Sep 2015 17:59:04 -0400 Subject: [PATCH] move manual tests to unit tests: checkpoint --- c/Makefile | 1 + c/containers/test_multiple_containers.c | 72 +++++++++++++------------ c/containers/top_keeper.c | 10 ++++ c/containers/top_keeper.h | 3 ++ 4 files changed, 52 insertions(+), 34 deletions(-) diff --git a/c/Makefile b/c/Makefile index 96b418b9b..43720c794 100644 --- a/c/Makefile +++ b/c/Makefile @@ -64,6 +64,7 @@ containers/hss.c \ containers/lhmsi.c \ containers/lhms2v.c \ containers/lhmslv.c \ +containers/top_keeper.c \ containers/dheap.c \ input/file_reader_mmap.c input/file_reader_stdio.c \ input/lrec_reader_mmap_csvlite.c input/lrec_reader_stdio_csvlite.c \ diff --git a/c/containers/test_multiple_containers.c b/c/containers/test_multiple_containers.c index 58e17be6b..b54f19eb2 100644 --- a/c/containers/test_multiple_containers.c +++ b/c/containers/test_multiple_containers.c @@ -8,8 +8,8 @@ #include "containers/lhmsi.h" #include "containers/lhms2v.h" #include "containers/lhmslv.h" -#include "containers/dheap.h" #include "containers/top_keeper.h" +#include "containers/dheap.h" #ifdef __TEST_MAPS_AND_SETS_MAIN__ int tests_run = 0; @@ -383,43 +383,47 @@ static char* test_percentile_keeper() { // ---------------------------------------------------------------- static char* test_top_keeper() { mu_assert_lf(0 == 0); + int capacity = 3; + top_keeper_t* ptop_keeper = top_keeper_alloc(capacity); + mu_assert_lf(ptop_keeper->size == 0); + + top_keeper_add(ptop_keeper, 5.0, NULL); + top_keeper_print(ptop_keeper); + mu_assert_lf(ptop_keeper->size == 1); + mu_assert_lf(ptop_keeper->top_values[0] == 5.0); + + top_keeper_add(ptop_keeper, 6.0, NULL); + top_keeper_print(ptop_keeper); + mu_assert_lf(ptop_keeper->size == 2); + mu_assert_lf(ptop_keeper->top_values[0] == 6.0); + mu_assert_lf(ptop_keeper->top_values[1] == 5.0); + + top_keeper_add(ptop_keeper, 4.0, NULL); + top_keeper_print(ptop_keeper); + mu_assert_lf(ptop_keeper->size == 3); + mu_assert_lf(ptop_keeper->top_values[0] == 6.0); + mu_assert_lf(ptop_keeper->top_values[1] == 5.0); + mu_assert_lf(ptop_keeper->top_values[2] == 4.0); + + top_keeper_add(ptop_keeper, 2.0, NULL); + top_keeper_print(ptop_keeper); + mu_assert_lf(ptop_keeper->size == 3); + mu_assert_lf(ptop_keeper->top_values[0] == 6.0); + mu_assert_lf(ptop_keeper->top_values[1] == 5.0); + mu_assert_lf(ptop_keeper->top_values[2] == 4.0); + + top_keeper_add(ptop_keeper, 7.0, NULL); + top_keeper_print(ptop_keeper); + mu_assert_lf(ptop_keeper->size == 3); + mu_assert_lf(ptop_keeper->top_values[0] == 7.0); + mu_assert_lf(ptop_keeper->top_values[1] == 6.0); + mu_assert_lf(ptop_keeper->top_values[2] == 5.0); + + top_keeper_free(ptop_keeper); return NULL; } -//void top_keeper_dump(top_keeper_t* ptop_keeper) { -// for (int i = 0; i < ptop_keeper->size; i++) -// printf("[%02d] %.8lf\n", i, ptop_keeper->top_values[i]); -// for (int i = ptop_keeper->size; i < ptop_keeper->capacity; i++) -// printf("[%02d] ---\n", i); -//} - -// int capacity = 5; -// char buffer[1024]; -// if (argc == 2) -// (void)sscanf(argv[1], "%d", &capacity); -// top_keeper_t* ptop_keeper = top_keeper_alloc(capacity); -// char* line; -// while ((line = fgets(buffer, sizeof(buffer), stdin)) != NULL) { -// int len = strlen(line); -// if (len >= 1) // xxx write and use a chomp() -// if (line[len-1] == '\n') -// line[len-1] = 0; -// if (streq(line, "")) { -// //top_keeper_dump(ptop_keeper); -// printf("\n"); -// } else { -// double v; -// if (!mlr_try_double_from_string(line, &v)) { -// top_keeper_add(ptop_keeper, v, NULL); -// top_keeper_dump(ptop_keeper); -// printf("\n"); -// } else { -// printf("meh? >>%s<<\n", line); -// } -// } -// } - // ---------------------------------------------------------------- static char* test_dheap() { mu_assert_lf(0 == 0); diff --git a/c/containers/top_keeper.c b/c/containers/top_keeper.c index 3eda084cf..2db8197a3 100644 --- a/c/containers/top_keeper.c +++ b/c/containers/top_keeper.c @@ -1,3 +1,4 @@ +#include #include #include "lib/mlrutil.h" #include "containers/top_keeper.h" @@ -76,3 +77,12 @@ void top_keeper_add(top_keeper_t* ptop_keeper, double value, lrec_t* prec) { ptop_keeper->top_precords[destidx] = prec; // xxx copy?? xxx free on shift-off?!? } } + +// ---------------------------------------------------------------- +void top_keeper_print(top_keeper_t* ptop_keeper) { + printf("top_keeper dump:\n"); + for (int i = 0; i < ptop_keeper->size; i++) + printf("[%02d] %.8lf\n", i, ptop_keeper->top_values[i]); + for (int i = ptop_keeper->size; i < ptop_keeper->capacity; i++) + printf("[%02d] ---\n", i); +} diff --git a/c/containers/top_keeper.h b/c/containers/top_keeper.h index c657c8a9c..69b1b6ce6 100644 --- a/c/containers/top_keeper.h +++ b/c/containers/top_keeper.h @@ -17,4 +17,7 @@ top_keeper_t* top_keeper_alloc(int capacity); void top_keeper_free(top_keeper_t* ptop_keeper); void top_keeper_add(top_keeper_t* ptop_keeper, double value, lrec_t* prec); +// For debug/test +void top_keeper_print(top_keeper_t* ptop_keeper); + #endif // TOP_KEEPER_H