Files
bind9/lib/isc/tests/heap_test.c
Michał Kępień a6f2e36ee6 Use proper cmocka macros for pointer checks
Make sure pointer checks in unit tests use cmocka assertion macros
dedicated for use with pointers instead of those dedicated for use with
integers or booleans.

(cherry picked from commit f440600126)
2020-11-26 13:13:21 +01:00

117 lines
2.0 KiB
C

/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
/* ! \file */
#if HAVE_CMOCKA
#include <sched.h> /* IWYU pragma: keep */
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#define UNIT_TESTING
#include <cmocka.h>
#include <isc/heap.h>
#include <isc/mem.h>
#include <isc/util.h>
#include "isctest.h"
static int
_setup(void **state) {
isc_result_t result;
UNUSED(state);
result = isc_test_begin(NULL, true, 0);
assert_int_equal(result, ISC_R_SUCCESS);
return (0);
}
static int
_teardown(void **state) {
UNUSED(state);
isc_test_end();
return (0);
}
struct e {
unsigned int value;
unsigned int index;
};
static bool
compare(void *p1, void *p2) {
struct e *e1 = p1;
struct e *e2 = p2;
return (e1->value < e2->value);
}
static void
idx(void *p, unsigned int i) {
struct e *e = p;
e->index = i;
}
/* test isc_heap_delete() */
static void
isc_heap_delete_test(void **state) {
isc_heap_t *heap = NULL;
isc_result_t result;
struct e e1 = { 100, 0 };
UNUSED(state);
result = isc_heap_create(test_mctx, compare, idx, 0, &heap);
assert_int_equal(result, ISC_R_SUCCESS);
assert_non_null(heap);
isc_heap_insert(heap, &e1);
assert_int_equal(result, ISC_R_SUCCESS);
assert_int_equal(e1.index, 1);
isc_heap_delete(heap, e1.index);
assert_int_equal(e1.index, 0);
isc_heap_destroy(&heap);
assert_null(heap);
}
int
main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(isc_heap_delete_test),
};
return (cmocka_run_group_tests(tests, _setup, _teardown));
}
#else /* HAVE_CMOCKA */
#include <stdio.h>
int
main(void) {
printf("1..0 # Skipped: cmocka not available\n");
return (0);
}
#endif /* if HAVE_CMOCKA */