summaryrefslogtreecommitdiff
path: root/lily-test.h
blob: de69e9291eb5c8b19846ea8cfb20d0e9be235108 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#ifndef LILY_TEST_H
#define LILY_TEST_H

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <setjmp.h>

#define STR_IMP(x) #x
#define STR(x) STR_IMP(x)
/* define SOURCE_PATH_SIZE to strip away the
   leading parts of the full compilation path */
#ifndef SOURCE_PATH_SIZE
#define LILY_LOCATION (__FILE__ ":" STR(__LINE__))
#else
#define LILY_LOCATION ((__FILE__ ":" STR(__LINE__)) + SOURCE_PATH_SIZE)
#endif

struct lily_globals_t {
   jmp_buf env;
   char *error_msg;
   const char *error_location;
};

extern struct lily_globals_t _lily_globals;
void lily_init();

void lily_assert_msg(bool statement, const char *location,
		     const char *format_string, ...);

#define lily_assert_true(statement) _lily_assert_true(#statement, statement, LILY_LOCATION)
void _lily_assert_true(const char *statement, bool value, const char *location);


#define lily_assert_false(statement) _lily_assert_false(#statement, statement, LILY_LOCATION)
void _lily_assert_false(const char *statement, bool value, const char *location);


#define lily_assert_not_null(ptr) _lily_assert_not_null(#ptr, ptr, LILY_LOCATION)
void _lily_assert_not_null(const char *name, void *ptr, const char *location);


#define lily_assert_null(ptr) _lily_assert_null(#ptr, ptr, LILY_LOCATION)
void _lily_assert_null(const char *name, void *ptr, const char *location);


#define lily_assert_ptr_equal(a, b) _lily_assert_ptr_equal(#a, #b, a, b, LILY_LOCATION)
void _lily_assert_ptr_equal(const char *name_a, const char *name_b,
			    void *a, void *b, const char *location);


#define lily_assert_ptr_not_equal(a, b) _lily_assert_ptr_not_equal(#a, #b, a, b, LILY_LOCATION)
void _lily_assert_ptr_not_equal(const char *name_a, const char *name_b,
				void *a, void *b, const char *location);


#define lily_assert_int_equal(a, b) _lily_assert_int_equal(#a, #b, a, b, LILY_LOCATION)
void _lily_assert_int_equal(const char *name_a, const char *name_b,
			    intmax_t a, intmax_t b, const char *location);


#define lily_assert_int_not_equal(a, b) _lily_assert_int_not_equal(#a, #b, a, b, LILY_LOCATION)
void _lily_assert_int_not_equal(const char *name_a, const char *name_b,
				intmax_t a, intmax_t b, const char *location);


#define lily_assert_float_equal(a, b, epsilon)				\
   _lily_assert_float_equal(#a, #b, a, b, epsilon, LILY_LOCATION)
void _lily_assert_float_equal(const char *name_a, const char *name_b,
			      double a, double b, double epsilon, const char *location);


#define lily_assert_float_not_equal(a, b, epsilon)	\
   _lily_assert_float_not_equal(#a, #b, a, b, epsilon, LILY_LOCATION)
void _lily_assert_float_not_equal(const char *name_a, const char *name_b,
				  double a, double b, double epsilon, const char *location);


#define lily_assert_string_equal(a, b) _lily_assert_string_equal(#a, #b, a, b, LILY_LOCATION)
void _lily_assert_string_equal(const char *name_a, const char *name_b,
			       char *a, char *b, const char *location);


#define lily_assert_string_not_equal(a, b) _lily_assert_string_not_equal(#a, #b, a, b, LILY_LOCATION)
void _lily_assert_string_not_equal(const char *name_a, const char *name_b,
				   char *a, char *b, const char *location);


#define lily_assert_memory_equal(a, b, size)			\
   _lily_assert_memory_equal(#a, #b, a, b, size, LILY_LOCATION)
void _lily_assert_memory_equal(const char *name_a, const char *name_b,
			       void *a, void *b, size_t size, const char *location);


#define lily_assert_memory_not_equal(a, b, size)	\
   _lily_assert_memory_not_equal(#a, #b, a, b, size, LILY_LOCATION)
void _lily_assert_memory_not_equal(const char *name_a, const char *name_b,
				   void *a, void *b, size_t size, const char *location);

#endif