1 /*
2  * Macros for testing
3  *
4  * Copyright (C) 2013-2021, Joachim Metz <joachim.metz@gmail.com>
5  *
6  * Refer to AUTHORS for acknowledgements.
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #if !defined( _CREG_TEST_MACROS_H )
23 #define _CREG_TEST_MACROS_H
24 
25 #include <common.h>
26 #include <file_stream.h>
27 
28 #if defined( HAVE_STDLIB_H ) || defined( WINAPI )
29 #include <stdlib.h>
30 #endif
31 
32 #define CREG_TEST_ASSERT_EQUAL_INT( name, value, expected_value ) \
33 	if( value != expected_value ) \
34 	{ \
35 		fprintf( stdout, "%s:%d %s (%d) != %d\n", __FILE__, __LINE__, name, value, expected_value ); \
36 		goto on_error; \
37 	}
38 
39 #define CREG_TEST_ASSERT_NOT_EQUAL_INT( name, value, expected_value ) \
40 	if( value == expected_value ) \
41 	{ \
42 		fprintf( stdout, "%s:%d %s (%d) == %d\n", __FILE__, __LINE__, name, value, expected_value ); \
43 		goto on_error; \
44 	}
45 
46 #define CREG_TEST_ASSERT_GREATER_THAN_INT( name, value, expected_value ) \
47 	if( value <= expected_value ) \
48 	{ \
49 		fprintf( stdout, "%s:%d %s (%d) <= %d\n", __FILE__, __LINE__, name, value, expected_value ); \
50 		goto on_error; \
51 	}
52 
53 #define CREG_TEST_ASSERT_LESS_THAN_INT( name, value, expected_value ) \
54 	if( value >= expected_value ) \
55 	{ \
56 		fprintf( stdout, "%s:%d %s (%d) >= %d\n", __FILE__, __LINE__, name, value, expected_value ); \
57 		goto on_error; \
58 	}
59 
60 #define CREG_TEST_ASSERT_EQUAL_INTPTR( name, value, expected_value ) \
61 	if( value != expected_value ) \
62 	{ \
63 		fprintf( stdout, "%s:%d %s (0x%08x" PRIjx ") != 0x%08x" PRIjx "\n", __FILE__, __LINE__, name, value, expected_value ); \
64 		goto on_error; \
65 	}
66 
67 #define CREG_TEST_ASSERT_NOT_EQUAL_INTPTR( name, value, expected_value ) \
68 	if( value == expected_value ) \
69 	{ \
70 		fprintf( stdout, "%s:%d %s (0x%08x" PRIjx ") == 0x%08x" PRIjx "\n", __FILE__, __LINE__, name, value, expected_value ); \
71 		goto on_error; \
72 	}
73 
74 #define CREG_TEST_ASSERT_EQUAL_FLOAT( name, value, expected_value ) \
75 	if( value != expected_value ) \
76 	{ \
77 		fprintf( stdout, "%s:%d %s (%f) != %f\n", __FILE__, __LINE__, name, value, expected_value ); \
78 		goto on_error; \
79 	}
80 
81 #define CREG_TEST_ASSERT_NOT_EQUAL_FLOAT( name, value, expected_value ) \
82 	if( value == expected_value ) \
83 	{ \
84 		fprintf( stdout, "%s:%d %s (%f) == %f\n", __FILE__, __LINE__, name, value, expected_value ); \
85 		goto on_error; \
86 	}
87 
88 #define CREG_TEST_ASSERT_EQUAL_SIZE( name, value, expected_value ) \
89 	if( value != expected_value ) \
90 	{ \
91 		fprintf( stdout, "%s:%d %s (%" PRIzd ") != %" PRIzd "\n", __FILE__, __LINE__, name, value, expected_value ); \
92 		goto on_error; \
93 	}
94 
95 #define CREG_TEST_ASSERT_EQUAL_SSIZE( name, value, expected_value ) \
96 	if( value != expected_value ) \
97 	{ \
98 		fprintf( stdout, "%s:%d %s (%" PRIzd ") != %" PRIzd "\n", __FILE__, __LINE__, name, value, expected_value ); \
99 		goto on_error; \
100 	}
101 
102 #define CREG_TEST_ASSERT_NOT_EQUAL_SSIZE( name, value, expected_value ) \
103 	if( value == expected_value ) \
104 	{ \
105 		fprintf( stdout, "%s:%d %s (%" PRIzd ") == %" PRIzd "\n", __FILE__, __LINE__, name, value, expected_value ); \
106 		goto on_error; \
107 	}
108 
109 #define CREG_TEST_ASSERT_EQUAL_INT8( name, value, expected_value ) \
110 	if( value != expected_value ) \
111 	{ \
112 		fprintf( stdout, "%s:%d %s (%" PRIi8 ") != %" PRIi8 "\n", __FILE__, __LINE__, name, value, expected_value ); \
113 		goto on_error; \
114 	}
115 
116 #define CREG_TEST_ASSERT_NOT_EQUAL_INT8( name, value, expected_value ) \
117 	if( value == expected_value ) \
118 	{ \
119 		fprintf( stdout, "%s:%d %s (%" PRIi8 ") == %" PRIi8 "\n", __FILE__, __LINE__, name, value, expected_value ); \
120 		goto on_error; \
121 	}
122 
123 #define CREG_TEST_ASSERT_EQUAL_UINT8( name, value, expected_value ) \
124 	if( value != expected_value ) \
125 	{ \
126 		fprintf( stdout, "%s:%d %s (%" PRIi8 ") != %" PRIu8 "\n", __FILE__, __LINE__, name, value, expected_value ); \
127 		goto on_error; \
128 	}
129 
130 #define CREG_TEST_ASSERT_LESS_THAN_UINT8( name, value, expected_value ) \
131 	if( value >= expected_value ) \
132 	{ \
133 		fprintf( stdout, "%s:%d %s (%" PRIi8 ") >= %" PRIu8 "\n", __FILE__, __LINE__, name, value, expected_value ); \
134 		goto on_error; \
135 	}
136 
137 #define CREG_TEST_ASSERT_EQUAL_INT16( name, value, expected_value ) \
138 	if( value != expected_value ) \
139 	{ \
140 		fprintf( stdout, "%s:%d %s (%" PRIi16 ") != %" PRIi16 "\n", __FILE__, __LINE__, name, value, expected_value ); \
141 		goto on_error; \
142 	}
143 
144 #define CREG_TEST_ASSERT_NOT_EQUAL_INT16( name, value, expected_value ) \
145 	if( value == expected_value ) \
146 	{ \
147 		fprintf( stdout, "%s:%d %s (%" PRIi16 ") == %" PRIi16 "\n", __FILE__, __LINE__, name, value, expected_value ); \
148 		goto on_error; \
149 	}
150 
151 #define CREG_TEST_ASSERT_EQUAL_UINT16( name, value, expected_value ) \
152 	if( value != expected_value ) \
153 	{ \
154 		fprintf( stdout, "%s:%d %s (%" PRIi16 ") != %" PRIu16 "\n", __FILE__, __LINE__, name, value, expected_value ); \
155 		goto on_error; \
156 	}
157 
158 #define CREG_TEST_ASSERT_LESS_THAN_UINT16( name, value, expected_value ) \
159 	if( value >= expected_value ) \
160 	{ \
161 		fprintf( stdout, "%s:%d %s (%" PRIi16 ") >= %" PRIu16 "\n", __FILE__, __LINE__, name, value, expected_value ); \
162 		goto on_error; \
163 	}
164 
165 #define CREG_TEST_ASSERT_EQUAL_INT32( name, value, expected_value ) \
166 	if( value != expected_value ) \
167 	{ \
168 		fprintf( stdout, "%s:%d %s (%" PRIi32 ") != %" PRIi32 "\n", __FILE__, __LINE__, name, value, expected_value ); \
169 		goto on_error; \
170 	}
171 
172 #define CREG_TEST_ASSERT_NOT_EQUAL_INT32( name, value, expected_value ) \
173 	if( value == expected_value ) \
174 	{ \
175 		fprintf( stdout, "%s:%d %s (%" PRIi32 ") == %" PRIi32 "\n", __FILE__, __LINE__, name, value, expected_value ); \
176 		goto on_error; \
177 	}
178 
179 #define CREG_TEST_ASSERT_EQUAL_UINT32( name, value, expected_value ) \
180 	if( value != expected_value ) \
181 	{ \
182 		fprintf( stdout, "%s:%d %s (%" PRIu32 ") != %" PRIu32 "\n", __FILE__, __LINE__, name, value, expected_value ); \
183 		goto on_error; \
184 	}
185 
186 #define CREG_TEST_ASSERT_LESS_THAN_UINT32( name, value, expected_value ) \
187 	if( value >= expected_value ) \
188 	{ \
189 		fprintf( stdout, "%s:%d %s (%" PRIu32 ") >= %" PRIu32 "\n", __FILE__, __LINE__, name, value, expected_value ); \
190 		goto on_error; \
191 	}
192 
193 #define CREG_TEST_ASSERT_EQUAL_INT64( name, value, expected_value ) \
194 	if( value != expected_value ) \
195 	{ \
196 		fprintf( stdout, "%s:%d %s (%" PRIi64 ") != %" PRIi64 "\n", __FILE__, __LINE__, name, value, expected_value ); \
197 		goto on_error; \
198 	}
199 
200 #define CREG_TEST_ASSERT_NOT_EQUAL_INT64( name, value, expected_value ) \
201 	if( value == expected_value ) \
202 	{ \
203 		fprintf( stdout, "%s:%d %s (%" PRIi64 ") == %" PRIi64 "\n", __FILE__, __LINE__, name, value, expected_value ); \
204 		goto on_error; \
205 	}
206 
207 #define CREG_TEST_ASSERT_EQUAL_UINT64( name, value, expected_value ) \
208 	if( value != expected_value ) \
209 	{ \
210 		fprintf( stdout, "%s:%d %s (%" PRIu64 ") != %" PRIu64 "\n", __FILE__, __LINE__, name, value, expected_value ); \
211 		goto on_error; \
212 	}
213 
214 #define CREG_TEST_ASSERT_LESS_THAN_UINT64( name, value, expected_value ) \
215 	if( value >= expected_value ) \
216 	{ \
217 		fprintf( stdout, "%s:%d %s (%" PRIu64 ") >= %" PRIu64 "\n", __FILE__, __LINE__, name, value, expected_value ); \
218 		goto on_error; \
219 	}
220 
221 #define CREG_TEST_ASSERT_IS_NOT_NULL( name, value ) \
222 	if( value == NULL ) \
223 	{ \
224 		fprintf( stdout, "%s:%d %s == NULL\n", __FILE__, __LINE__, name ); \
225 		goto on_error; \
226 	}
227 
228 #define CREG_TEST_ASSERT_IS_NULL( name, value ) \
229 	if( value != NULL ) \
230 	{ \
231 		fprintf( stdout, "%s:%d %s != NULL\n", __FILE__, __LINE__, name ); \
232 		goto on_error; \
233 	}
234 
235 #define CREG_TEST_RUN( name, function ) \
236 	if( function() != 1 ) \
237 	{ \
238 		fprintf( stdout, "Unable to run test: %s\n", name ); \
239 		goto on_error; \
240 	}
241 
242 #if !defined( __BORLANDC__ ) || ( __BORLANDC__ >= 0x0560 )
243 
244 #define CREG_TEST_RUN_WITH_ARGS( name, function, ... ) \
245 	if( function( __VA_ARGS__ ) != 1 ) \
246 	{ \
247 		fprintf( stdout, "Unable to run test: %s\n", name ); \
248 		goto on_error; \
249 	}
250 
251 #endif /* !defined( __BORLANDC__ ) || ( __BORLANDC__ >= 0x0560 ) */
252 
253 #define CREG_TEST_FPRINT_ERROR( error ) \
254 	libcerror_error_backtrace_fprint( error, stdout );
255 
256 #endif /* !defined( _CREG_TEST_MACROS_H ) */
257 
258