fold in another changes item
[tor.git] / src / test / test.h
bloba89b558e5ac8e2e0201708714abbb931279ac25b
1 /* Copyright (c) 2001-2003, Roger Dingledine.
2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
3 * Copyright (c) 2007-2013, The Tor Project, Inc. */
4 /* See LICENSE for licensing information */
6 #ifndef TOR_TEST_H
7 #define TOR_TEST_H
9 /**
10 * \file test.h
11 * \brief Macros and functions used by unit tests.
14 #include "compat.h"
15 #include "tinytest.h"
16 #define TT_EXIT_TEST_FUNCTION STMT_BEGIN goto done; STMT_END
17 #include "tinytest_macros.h"
19 #ifdef __GNUC__
20 #define PRETTY_FUNCTION __PRETTY_FUNCTION__
21 #else
22 #define PRETTY_FUNCTION ""
23 #endif
25 #define test_fail_msg(msg) TT_DIE((msg))
27 #define test_fail() test_fail_msg("Assertion failed.")
29 #define test_assert(expr) tt_assert(expr)
31 #define test_eq(expr1, expr2) tt_int_op((expr1), ==, (expr2))
32 #define test_eq_ptr(expr1, expr2) tt_ptr_op((expr1), ==, (expr2))
33 #define test_neq(expr1, expr2) tt_int_op((expr1), !=, (expr2))
34 #define test_neq_ptr(expr1, expr2) tt_ptr_op((expr1), !=, (expr2))
35 #define test_streq(expr1, expr2) tt_str_op((expr1), ==, (expr2))
36 #define test_strneq(expr1, expr2) tt_str_op((expr1), !=, (expr2))
38 #define test_mem_op(expr1, op, expr2, len) \
39 tt_assert_test_fmt_type(expr1,expr2,#expr1" "#op" "#expr2, \
40 const char *, \
41 (memcmp(val1_, val2_, len) op 0), \
42 char *, "%s", \
43 { size_t printlen = (len)*2+1; \
44 print_ = tor_malloc(printlen); \
45 base16_encode(print_, printlen, value_, \
46 (len)); }, \
47 { tor_free(print_); }, \
48 TT_EXIT_TEST_FUNCTION \
51 #define test_memeq(expr1, expr2, len) test_mem_op((expr1), ==, (expr2), len)
52 #define test_memneq(expr1, expr2, len) test_mem_op((expr1), !=, (expr2), len)
54 /* As test_mem_op, but decodes 'hex' before comparing. There must be a
55 * local char* variable called mem_op_hex_tmp for this to work. */
56 #define test_mem_op_hex(expr1, op, hex) \
57 STMT_BEGIN \
58 size_t length = strlen(hex); \
59 tor_free(mem_op_hex_tmp); \
60 mem_op_hex_tmp = tor_malloc(length/2); \
61 tor_assert((length&1)==0); \
62 base16_decode(mem_op_hex_tmp, length/2, hex, length); \
63 test_mem_op(expr1, op, mem_op_hex_tmp, length/2); \
64 STMT_END
66 #define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, ==, hex)
68 #define tt_double_op(a,op,b) \
69 tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%f", \
70 TT_EXIT_TEST_FUNCTION)
72 const char *get_fname(const char *name);
73 crypto_pk_t *pk_generate(int idx);
75 void legacy_test_helper(void *data);
76 extern const struct testcase_setup_t legacy_setup;
78 #endif