1 /* Copyright (c) 2001-2004, Roger Dingledine.
2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
3 * Copyright (c) 2007-2019, The Tor Project, Inc. */
4 /* See LICENSE for licensing information */
7 #include "core/or/or.h"
9 #include "test/ptr_helpers.h"
14 /** Assert that <b>a</b> can be cast to void * and back. */
16 assert_int_voidptr_roundtrip(int a
)
18 intptr_t ap
= (intptr_t)a
;
19 void *b
= cast_intptr_to_voidstar(ap
);
20 intptr_t c
= cast_voidstar_to_intptr(b
);
21 void *d
= cast_intptr_to_voidstar(c
);
31 test_int_voidstar_interop(void *arg
)
36 for (a
= -1024; a
<= 1024; a
++) {
37 assert_int_voidptr_roundtrip(a
);
40 for (a
= INT_MIN
; a
<= INT_MIN
+1024; a
++) {
41 assert_int_voidptr_roundtrip(a
);
44 for (a
= INT_MAX
-1024; a
< INT_MAX
; a
++) {
45 assert_int_voidptr_roundtrip(a
);
49 for (unsigned long i
= 0; i
< sizeof(int) * 8; i
++) {
50 assert_int_voidptr_roundtrip(a
);
56 assert_uint_voidptr_roundtrip(unsigned int a
)
58 uintptr_t ap
= (uintptr_t)a
;
59 void *b
= cast_uintptr_to_voidstar(ap
);
60 uintptr_t c
= cast_voidstar_to_uintptr(b
);
61 void *d
= cast_uintptr_to_voidstar(c
);
71 test_uint_voidstar_interop(void *arg
)
76 for (a
= 0; a
<= 1024; a
++) {
77 assert_uint_voidptr_roundtrip(a
);
80 for (a
= UINT_MAX
-1024; a
< UINT_MAX
; a
++) {
81 assert_uint_voidptr_roundtrip(a
);
85 for (unsigned long i
= 0; i
< sizeof(int) * 8; i
++) {
86 assert_uint_voidptr_roundtrip(a
);
91 struct testcase_t slow_ptr_tests
[] = {
92 { .name
= "int_voidstar_interop",
93 .fn
= test_int_voidstar_interop
,
97 { .name
= "uint_voidstar_interop",
98 .fn
= test_uint_voidstar_interop
,
101 .setup_data
= NULL
},