radare2/test/unit/test_binheap.c
2020-07-31 18:09:50 +08:00

52 lines
1.7 KiB
C

#include <r_util.h>
#include "minunit.h"
int basic_cmp(const void *a, const void *b) {
size_t sa = (size_t)a;
size_t sb = (size_t)b;
return sa >= sb? sa - sb: -1;
}
bool test_basic(void) {
RBinHeap *bh = r_binheap_new (basic_cmp);
mu_assert_notnull (bh, "binheap is created");
mu_assert_true (r_binheap_empty (bh), "binheap is empty");
r_binheap_push (bh, (void *)(size_t)10);
mu_assert_false (r_binheap_empty (bh), "binheap is not empty anymore");
r_binheap_clear (bh);
mu_assert_true (r_binheap_empty (bh), "binheap is empty again after clear");
r_binheap_free (bh);
mu_end;
}
bool test_pushpop(void) {
RBinHeap *bh = r_binheap_new (basic_cmp);
r_binheap_push (bh, (void *)(size_t)10);
mu_assert_eq ((size_t)r_binheap_top (bh), (size_t)10, "10 is the top");
mu_assert_eq ((size_t)r_binheap_pop (bh), (size_t)10, "10 is popped");
mu_assert_true (r_binheap_empty (bh), "the only element has been popped out");
r_binheap_push (bh, (void *)(size_t)10);
r_binheap_push (bh, (void *)(size_t)2);
r_binheap_push (bh, (void *)(size_t)5);
r_binheap_push (bh, (void *)(size_t)4);
r_binheap_push (bh, (void *)(size_t)11);
mu_assert_eq ((size_t)r_binheap_top (bh), (size_t)2, "2 is the top");
mu_assert_eq ((size_t)r_binheap_pop (bh), (size_t)2, "2 is popped");
mu_assert_eq ((size_t)r_binheap_pop (bh), (size_t)4, "4 is popped");
mu_assert_eq ((size_t)r_binheap_pop (bh), (size_t)5, "5 is popped");
mu_assert_eq ((size_t)r_binheap_pop (bh), (size_t)10, "10 is popped");
mu_assert_eq ((size_t)r_binheap_pop (bh), (size_t)11, "11 is popped");
r_binheap_free (bh);
mu_end;
}
bool all_tests () {
mu_run_test (test_basic);
mu_run_test (test_pushpop);
return tests_passed != tests_run;
}
int main(int argc, char **argv) {
return all_tests ();
}