123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /* Copyright (c) 2001-2004, Roger Dingledine.
- * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2019, The Tor Project, Inc. */
- /* See LICENSE for licensing information */
- #include "orconfig.h"
- #include "core/or/or.h"
- #include "test/test.h"
- #include "test/ptr_helpers.h"
- #include <stdint.h>
- #include <limits.h>
- /** Assert that <b>a</b> can be cast to void * and back. */
- static void
- assert_int_voidptr_roundtrip(int a)
- {
- intptr_t ap = (intptr_t)a;
- void *b = cast_intptr_to_voidstar(ap);
- intptr_t c = cast_voidstar_to_intptr(b);
- void *d = cast_intptr_to_voidstar(c);
- tt_assert(ap == c);
- tt_assert(b == d);
- done:
- return;
- }
- /** Test for possibility of casting `int` to `void *` and back. */
- static void
- test_int_voidstar_interop(void *arg)
- {
- int a;
- (void)arg;
- for (a = -1024; a <= 1024; a++) {
- assert_int_voidptr_roundtrip(a);
- }
- for (a = INT_MIN; a <= INT_MIN+1024; a++) {
- assert_int_voidptr_roundtrip(a);
- }
- for (a = INT_MAX-1024; a < INT_MAX; a++) {
- assert_int_voidptr_roundtrip(a);
- }
- a = 1;
- for (unsigned long i = 0; i < sizeof(int) * 8; i++) {
- assert_int_voidptr_roundtrip(a);
- a = (a << 1);
- }
- }
- /** Assert that <b>a</b> can be cast to void * and back. */
- static void
- assert_uint_voidptr_roundtrip(unsigned int a)
- {
- uintptr_t ap = (uintptr_t)a;
- void *b = cast_uintptr_to_voidstar(ap);
- uintptr_t c = cast_voidstar_to_uintptr(b);
- void *d = cast_uintptr_to_voidstar(c);
- tt_assert(ap == c);
- tt_assert(b == d);
- done:
- return;
- }
- /** Test for possibility of casting `int` to `void *` and back. */
- static void
- test_uint_voidstar_interop(void *arg)
- {
- unsigned int a;
- (void)arg;
- for (a = 0; a <= 1024; a++) {
- assert_uint_voidptr_roundtrip(a);
- }
- for (a = UINT_MAX-1024; a < UINT_MAX; a++) {
- assert_uint_voidptr_roundtrip(a);
- }
- a = 1;
- for (unsigned long i = 0; i < sizeof(int) * 8; i++) {
- assert_uint_voidptr_roundtrip(a);
- a = (a << 1);
- }
- }
- struct testcase_t slow_ptr_tests[] = {
- { .name = "int_voidstar_interop",
- .fn = test_int_voidstar_interop,
- .flags = 0,
- .setup = NULL,
- .setup_data = NULL },
- { .name = "uint_voidstar_interop",
- .fn = test_uint_voidstar_interop,
- .flags = 0,
- .setup = NULL,
- .setup_data = NULL },
- END_OF_TESTCASES
- };
|