MRMD 0.4.0
Multi Resolution Molecular Dynamics
Loading...
Searching...
No Matches
device.hpp
Go to the documentation of this file.
1// Copyright 2024 Sebastian Eibl
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#pragma once
16
17#include "cmake.hpp"
18#include "normal.hpp"
19#include "verbose.hpp"
20
21#ifdef VERBOSE_ASSERT
22#define MRMD_DEVICE_CHECK_1(X) \
23 { \
24 MRMD_VERBOSE_CHECK_1(X) \
25 }
26#define MRMD_DEVICE_CHECK_2(X, MSG) \
27 { \
28 MRMD_VERBOSE_CHECK_2(X, MSG) \
29 }
30
31#define MRMD_DEVICE_CHECK_NULLPTR_1(X) \
32 { \
33 MRMD_VERBOSE_CHECK_NULLPTR_1(X) \
34 }
35#define MRMD_DEVICE_CHECK_NULLPTR_2(X, MSG) \
36 { \
37 MRMD_VERBOSE_CHECK_NULLPTR_2(X, MSG) \
38 }
39
40#define MRMD_DEVICE_CHECK_NOT_NULLPTR_1(X) \
41 { \
42 MRMD_VERBOSE_CHECK_NOT_NULLPTR_1(X) \
43 }
44#define MRMD_DEVICE_CHECK_NOT_NULLPTR_2(X, MSG) \
45 { \
46 MRMD_VERBOSE_CHECK_NOT_NULLPTR_2(X, MSG) \
47 }
48
49#define MRMD_DEVICE_CHECK_EQUAL_2(X, Y) \
50 { \
51 MRMD_VERBOSE_CHECK_EQUAL_2(X, Y) \
52 }
53#define MRMD_DEVICE_CHECK_EQUAL_3(X, Y, MSG) \
54 { \
55 MRMD_VERBOSE_CHECK_EQUAL_3(X, Y, MSG) \
56 }
57
58#define MRMD_DEVICE_CHECK_FLOAT_EQUAL_2(X, Y) \
59 { \
60 MRMD_VERBOSE_CHECK_EQUAL_2(X, Y) \
61 }
62#define MRMD_DEVICE_CHECK_FLOAT_EQUAL_3(X, Y, MSG) \
63 { \
64 MRMD_VERBOSE_CHECK_EQUAL_3(X, Y, MSG) \
65 }
66
67#define MRMD_DEVICE_CHECK_NOT_EQUAL_2(X, Y) \
68 { \
69 MRMD_VERBOSE_CHECK_NOT_EQUAL_2(X, Y) \
70 }
71#define MRMD_DEVICE_CHECK_NOT_EQUAL_3(X, Y, MSG) \
72 { \
73 MRMD_VERBOSE_CHECK_NOT_EQUAL_3(X, Y, MSG) \
74 }
75
76#define MRMD_DEVICE_CHECK_GREATER_2(X, Y) \
77 { \
78 MRMD_VERBOSE_CHECK_GREATER_2(X, Y) \
79 }
80#define MRMD_DEVICE_CHECK_GREATER_3(X, Y, MSG) \
81 { \
82 MRMD_VERBOSE_CHECK_GREATER_3(X, Y, MSG) \
83 }
84
85#define MRMD_DEVICE_CHECK_LESS_2(X, Y) \
86 { \
87 MRMD_VERBOSE_CHECK_LESS_2(X, Y) \
88 }
89#define MRMD_DEVICE_CHECK_LESS_3(X, Y, MSG) \
90 { \
91 MRMD_VERBOSE_CHECK_LESS_3(X, Y, MSG) \
92 }
93
94#define MRMD_DEVICE_CHECK_GREATEREQUAL_2(X, Y) \
95 { \
96 MRMD_VERBOSE_CHECK_GREATEREQUAL_2(X, Y) \
97 }
98#define MRMD_DEVICE_CHECK_GREATEREQUAL_3(X, Y, MSG) \
99 { \
100 MRMD_VERBOSE_CHECK_GREATEREQUAL_3(X, Y, MSG) \
101 }
102
103#define MRMD_DEVICE_CHECK_LESSEQUAL_2(X, Y) \
104 { \
105 MRMD_VERBOSE_CHECK_LESSEQUAL_2(X, Y) \
106 }
107#define MRMD_DEVICE_CHECK_LESSEQUAL_3(X, Y, MSG) \
108 { \
109 MRMD_VERBOSE_CHECK_LESSEQUAL_3(X, Y, MSG) \
110 }
111#else
112#define MRMD_DEVICE_CHECK_1(X) \
113 { \
114 MRMD_NORMAL_CHECK_1(X) \
115 }
116#define MRMD_DEVICE_CHECK_2(X, MSG) \
117 { \
118 MRMD_NORMAL_CHECK_2(X, MSG) \
119 }
120
121#define MRMD_DEVICE_CHECK_NULLPTR_1(X) \
122 { \
123 MRMD_NORMAL_CHECK_NULLPTR_1(X) \
124 }
125#define MRMD_DEVICE_CHECK_NULLPTR_2(X, MSG) \
126 { \
127 MRMD_NORMAL_CHECK_NULLPTR_2(X, MSG) \
128 }
129
130#define MRMD_DEVICE_CHECK_NOT_NULLPTR_1(X) \
131 { \
132 MRMD_NORMAL_CHECK_NOT_NULLPTR_1(X) \
133 }
134#define MRMD_DEVICE_CHECK_NOT_NULLPTR_2(X, MSG) \
135 { \
136 MRMD_NORMAL_CHECK_NOT_NULLPTR_2(X, MSG) \
137 }
138
139#define MRMD_DEVICE_CHECK_EQUAL_2(X, Y) \
140 { \
141 MRMD_NORMAL_CHECK_EQUAL_2(X, Y) \
142 }
143#define MRMD_DEVICE_CHECK_EQUAL_3(X, Y, MSG) \
144 { \
145 MRMD_NORMAL_CHECK_EQUAL_3(X, Y, MSG) \
146 }
147
148#define MRMD_DEVICE_CHECK_FLOAT_EQUAL_2(X, Y) \
149 { \
150 MRMD_NORMAL_CHECK_EQUAL_2(X, Y) \
151 }
152#define MRMD_DEVICE_CHECK_FLOAT_EQUAL_3(X, Y, MSG) \
153 { \
154 MRMD_NORMAL_CHECK_EQUAL_3(X, Y, MSG) \
155 }
156
157#define MRMD_DEVICE_CHECK_NOT_EQUAL_2(X, Y) \
158 { \
159 MRMD_NORMAL_CHECK_NOT_EQUAL_2(X, Y) \
160 }
161#define MRMD_DEVICE_CHECK_NOT_EQUAL_3(X, Y, MSG) \
162 { \
163 MRMD_NORMAL_CHECK_NOT_EQUAL_3(X, Y, MSG) \
164 }
165
166#define MRMD_DEVICE_CHECK_GREATER_2(X, Y) \
167 { \
168 MRMD_NORMAL_CHECK_GREATER_2(X, Y) \
169 }
170#define MRMD_DEVICE_CHECK_GREATER_3(X, Y, MSG) \
171 { \
172 MRMD_NORMAL_CHECK_GREATER_3(X, Y, MSG) \
173 }
174
175#define MRMD_DEVICE_CHECK_LESS_2(X, Y) \
176 { \
177 MRMD_NORMAL_CHECK_LESS_2(X, Y) \
178 }
179#define MRMD_DEVICE_CHECK_LESS_3(X, Y, MSG) \
180 { \
181 MRMD_NORMAL_CHECK_LESS_3(X, Y, MSG) \
182 }
183
184#define MRMD_DEVICE_CHECK_GREATEREQUAL_2(X, Y) \
185 { \
186 MRMD_NORMAL_CHECK_GREATEREQUAL_2(X, Y) \
187 }
188#define MRMD_DEVICE_CHECK_GREATEREQUAL_3(X, Y, MSG) \
189 { \
190 MRMD_NORMAL_CHECK_GREATEREQUAL_3(X, Y, MSG) \
191 }
192
193#define MRMD_DEVICE_CHECK_LESSEQUAL_2(X, Y) \
194 { \
195 MRMD_NORMAL_CHECK_LESSEQUAL_2(X, Y) \
196 }
197#define MRMD_DEVICE_CHECK_LESSEQUAL_3(X, Y, MSG) \
198 { \
199 MRMD_NORMAL_CHECK_LESSEQUAL_3(X, Y, MSG) \
200 }
201#endif
202
203#define MRMD_DEVICE_CHECK(...) MACRO_OVERLOAD(MRMD_DEVICE_CHECK_, __VA_ARGS__)
204#define MRMD_DEVICE_CHECK_NULLPTR(...) MACRO_OVERLOAD(MRMD_DEVICE_CHECK_EQUAL_, __VA_ARGS__)
205#define MRMD_DEVICE_CHECK_NOT_NULLPTR(...) \
206 MACRO_OVERLOAD(MRMD_DEVICE_CHECK_NOT_NULLPTR_, __VA_ARGS__)
207#define MRMD_DEVICE_CHECK_EQUAL(...) MACRO_OVERLOAD(MRMD_DEVICE_CHECK_EQUAL_, __VA_ARGS__)
208#define MRMD_DEVICE_CHECK_NOT_EQUAL(...) MACRO_OVERLOAD(MRMD_DEVICE_CHECK_NOT_EQUAL_, __VA_ARGS__)
209#define MRMD_DEVICE_CHECK_GREATER(...) MACRO_OVERLOAD(MRMD_DEVICE_CHECK_GREATER_, __VA_ARGS__)
210#define MRMD_DEVICE_CHECK_LESS(...) MACRO_OVERLOAD(MRMD_DEVICE_CHECK_LESS_, __VA_ARGS__)
211#define MRMD_DEVICE_CHECK_GREATEREQUAL(...) \
212 MACRO_OVERLOAD(MRMD_DEVICE_CHECK_GREATEREQUAL_, __VA_ARGS__)
213#define MRMD_DEVICE_CHECK_LESSEQUAL(...) MACRO_OVERLOAD(MRMD_DEVICE_CHECK_LESSEQUAL_, __VA_ARGS__)
214
215#ifndef NDEBUG
216#ifdef VERBOSE_ASSERT
217#define MRMD_DEVICE_ASSERT_1(X) \
218 { \
219 MRMD_VERBOSE_CHECK_1(X) \
220 }
221#define MRMD_DEVICE_ASSERT_2(X, MSG) \
222 { \
223 MRMD_VERBOSE_CHECK_2(X, MSG) \
224 }
225
226#define MRMD_DEVICE_ASSERT_NULLPTR_1(X) \
227 { \
228 MRMD_VERBOSE_CHECK_NULLPTR_1(X) \
229 }
230#define MRMD_DEVICE_ASSERT_NULLPTR_2(X, MSG) \
231 { \
232 MRMD_VERBOSE_CHECK_NULLPTR_2(X, MSG) \
233 }
234
235#define MRMD_DEVICE_ASSERT_NOT_NULLPTR_1(X) \
236 { \
237 MRMD_VERBOSE_CHECK_NOT_NULLPTR_1(X) \
238 }
239#define MRMD_DEVICE_ASSERT_NOT_NULLPTR_2(X, MSG) \
240 { \
241 MRMD_VERBOSE_CHECK_NOT_NULLPTR_2(X, MSG) \
242 }
243
244#define MRMD_DEVICE_ASSERT_EQUAL_2(X, Y) \
245 { \
246 MRMD_VERBOSE_CHECK_EQUAL_2(X, Y) \
247 }
248#define MRMD_DEVICE_ASSERT_EQUAL_3(X, Y, MSG) \
249 { \
250 MRMD_VERBOSE_CHECK_EQUAL_3(X, Y, MSG) \
251 }
252
253#define MRMD_DEVICE_ASSERT_FLOAT_EQUAL_2(X, Y) \
254 { \
255 MRMD_VERBOSE_CHECK_EQUAL_2(X, Y) \
256 }
257#define MRMD_DEVICE_ASSERT_FLOAT_EQUAL_3(X, Y, MSG) \
258 { \
259 MRMD_VERBOSE_CHECK_EQUAL_3(X, Y, MSG) \
260 }
261
262#define MRMD_DEVICE_ASSERT_NOT_EQUAL_2(X, Y) \
263 { \
264 MRMD_VERBOSE_CHECK_NOT_EQUAL_2(X, Y) \
265 }
266#define MRMD_DEVICE_ASSERT_NOT_EQUAL_3(X, Y, MSG) \
267 { \
268 MRMD_VERBOSE_CHECK_NOT_EQUAL_3(X, Y, MSG) \
269 }
270
271#define MRMD_DEVICE_ASSERT_GREATER_2(X, Y) \
272 { \
273 MRMD_VERBOSE_CHECK_GREATER_2(X, Y) \
274 }
275#define MRMD_DEVICE_ASSERT_GREATER_3(X, Y, MSG) \
276 { \
277 MRMD_VERBOSE_CHECK_GREATER_3(X, Y, MSG) \
278 }
279
280#define MRMD_DEVICE_ASSERT_LESS_2(X, Y) \
281 { \
282 MRMD_VERBOSE_CHECK_LESS_2(X, Y) \
283 }
284#define MRMD_DEVICE_ASSERT_LESS_3(X, Y, MSG) \
285 { \
286 MRMD_VERBOSE_CHECK_LESS_3(X, Y, MSG) \
287 }
288
289#define MRMD_DEVICE_ASSERT_GREATEREQUAL_2(X, Y) \
290 { \
291 MRMD_VERBOSE_CHECK_GREATEREQUAL_2(X, Y) \
292 }
293#define MRMD_DEVICE_ASSERT_GREATEREQUAL_3(X, Y, MSG) \
294 { \
295 MRMD_VERBOSE_CHECK_GREATEREQUAL_3(X, Y, MSG) \
296 }
297
298#define MRMD_DEVICE_ASSERT_LESSEQUAL_2(X, Y) \
299 { \
300 MRMD_VERBOSE_CHECK_LESSEQUAL_2(X, Y) \
301 }
302#define MRMD_DEVICE_ASSERT_LESSEQUAL_3(X, Y, MSG) \
303 { \
304 MRMD_VERBOSE_CHECK_LESSEQUAL_3(X, Y, MSG) \
305 }
306#else
307#define MRMD_DEVICE_ASSERT_1(X) \
308 { \
309 MRMD_NORMAL_CHECK_1(X) \
310 }
311#define MRMD_DEVICE_ASSERT_2(X, MSG) \
312 { \
313 MRMD_NORMAL_CHECK_2(X, MSG) \
314 }
315
316#define MRMD_DEVICE_ASSERT_NULLPTR_1(X) \
317 { \
318 MRMD_NORMAL_CHECK_NULLPTR_1(X) \
319 }
320#define MRMD_DEVICE_ASSERT_NULLPTR_2(X, MSG) \
321 { \
322 MRMD_NORMAL_CHECK_NULLPTR_2(X, MSG) \
323 }
324
325#define MRMD_DEVICE_ASSERT_NOT_NULLPTR_1(X) \
326 { \
327 MRMD_NORMAL_CHECK_NOT_NULLPTR_1(X) \
328 }
329#define MRMD_DEVICE_ASSERT_NOT_NULLPTR_2(X, MSG) \
330 { \
331 MRMD_NORMAL_CHECK_NOT_NULLPTR_2(X, MSG) \
332 }
333
334#define MRMD_DEVICE_ASSERT_EQUAL_2(X, Y) \
335 { \
336 MRMD_NORMAL_CHECK_EQUAL_2(X, Y) \
337 }
338#define MRMD_DEVICE_ASSERT_EQUAL_3(X, Y, MSG) \
339 { \
340 MRMD_NORMAL_CHECK_EQUAL_3(X, Y, MSG) \
341 }
342
343#define MRMD_DEVICE_ASSERT_FLOAT_EQUAL_2(X, Y) \
344 { \
345 MRMD_NORMAL_CHECK_EQUAL_2(X, Y) \
346 }
347#define MRMD_DEVICE_ASSERT_FLOAT_EQUAL_3(X, Y, MSG) \
348 { \
349 MRMD_NORMAL_CHECK_EQUAL_3(X, Y, MSG) \
350 }
351
352#define MRMD_DEVICE_ASSERT_NOT_EQUAL_2(X, Y) \
353 { \
354 MRMD_NORMAL_CHECK_NOT_EQUAL_2(X, Y) \
355 }
356#define MRMD_DEVICE_ASSERT_NOT_EQUAL_3(X, Y, MSG) \
357 { \
358 MRMD_NORMAL_CHECK_NOT_EQUAL_3(X, Y, MSG) \
359 }
360
361#define MRMD_DEVICE_ASSERT_GREATER_2(X, Y) \
362 { \
363 MRMD_NORMAL_CHECK_GREATER_2(X, Y) \
364 }
365#define MRMD_DEVICE_ASSERT_GREATER_3(X, Y, MSG) \
366 { \
367 MRMD_NORMAL_CHECK_GREATER_3(X, Y, MSG) \
368 }
369
370#define MRMD_DEVICE_ASSERT_LESS_2(X, Y) \
371 { \
372 MRMD_NORMAL_CHECK_LESS_2(X, Y) \
373 }
374#define MRMD_DEVICE_ASSERT_LESS_3(X, Y, MSG) \
375 { \
376 MRMD_NORMAL_CHECK_LESS_3(X, Y, MSG) \
377 }
378
379#define MRMD_DEVICE_ASSERT_GREATEREQUAL_2(X, Y) \
380 { \
381 MRMD_NORMAL_CHECK_GREATEREQUAL_2(X, Y) \
382 }
383#define MRMD_DEVICE_ASSERT_GREATEREQUAL_3(X, Y, MSG) \
384 { \
385 MRMD_NORMAL_CHECK_GREATEREQUAL_3(X, Y, MSG) \
386 }
387
388#define MRMD_DEVICE_ASSERT_LESSEQUAL_2(X, Y) \
389 { \
390 MRMD_NORMAL_CHECK_LESSEQUAL_2(X, Y) \
391 }
392#define MRMD_DEVICE_ASSERT_LESSEQUAL_3(X, Y, MSG) \
393 { \
394 MRMD_NORMAL_CHECK_LESSEQUAL_3(X, Y, MSG) \
395 }
396#endif
397
398#else
399
400#define MRMD_DEVICE_ASSERT_1(X) \
401 { \
402 }
403#define MRMD_DEVICE_ASSERT_2(X, MSG) \
404 { \
405 }
406
407#define MRMD_DEVICE_ASSERT_NULLPTR_1(X) \
408 { \
409 }
410#define MRMD_DEVICE_ASSERT_NULLPTR_2(X, MSG) \
411 { \
412 }
413
414#define MRMD_DEVICE_ASSERT_NOT_NULLPTR_1(X) \
415 { \
416 }
417#define MRMD_DEVICE_ASSERT_NOT_NULLPTR_2(X, MSG) \
418 { \
419 }
420
421#define MRMD_DEVICE_ASSERT_EQUAL_2(X, Y) \
422 { \
423 }
424#define MRMD_DEVICE_ASSERT_EQUAL_3(X, Y, MSG) \
425 { \
426 }
427
428#define MRMD_DEVICE_ASSERT_NOT_EQUAL_2(X, Y) \
429 { \
430 }
431#define MRMD_DEVICE_ASSERT_NOT_EQUAL_3(X, Y, MSG) \
432 { \
433 }
434
435#define MRMD_DEVICE_ASSERT_GREATER_2(X, Y) \
436 { \
437 }
438#define MRMD_DEVICE_ASSERT_GREATER_3(X, Y, MSG) \
439 { \
440 }
441
442#define MRMD_DEVICE_ASSERT_LESS_2(X, Y) \
443 { \
444 }
445#define MRMD_DEVICE_ASSERT_LESS_3(X, Y, MSG) \
446 { \
447 }
448
449#define MRMD_DEVICE_ASSERT_GREATEREQUAL_2(X, Y) \
450 { \
451 }
452#define MRMD_DEVICE_ASSERT_GREATEREQUAL_3(X, Y, MSG) \
453 { \
454 }
455
456#define MRMD_DEVICE_ASSERT_LESSEQUAL_2(X, Y) \
457 { \
458 }
459#define MRMD_DEVICE_ASSERT_LESSEQUAL_3(X, Y, MSG) \
460 { \
461 }
462
463#endif
464
465#define MRMD_DEVICE_ASSERT(...) MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_, __VA_ARGS__)
466#define MRMD_DEVICE_ASSERT_NULLPTR(...) MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_EQUAL_, __VA_ARGS__)
467#define MRMD_DEVICE_ASSERT_NOT_NULLPTR(...) \
468 MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_NOT_NULLPTR_, __VA_ARGS__)
469#define MRMD_DEVICE_ASSERT_EQUAL(...) MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_EQUAL_, __VA_ARGS__)
470#define MRMD_DEVICE_ASSERT_NOT_EQUAL(...) MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_NOT_EQUAL_, __VA_ARGS__)
471#define MRMD_DEVICE_ASSERT_GREATER(...) MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_GREATER_, __VA_ARGS__)
472#define MRMD_DEVICE_ASSERT_LESS(...) MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_LESS_, __VA_ARGS__)
473#define MRMD_DEVICE_ASSERT_GREATEREQUAL(...) \
474 MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_GREATEREQUAL_, __VA_ARGS__)
475#define MRMD_DEVICE_ASSERT_LESSEQUAL(...) MACRO_OVERLOAD(MRMD_DEVICE_ASSERT_LESSEQUAL_, __VA_ARGS__)