• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*	$NetBSD: assertions.h,v 1.1.1.1 2004/05/20 19:49:41 christos Exp $	*/
2 
3 /*
4  * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
5  * Copyright (c) 1997-1999 by Internet Software Consortium.
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
17  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /*
21  * Id: assertions.h,v 1.1.206.1 2004/03/09 08:33:30 marka Exp
22  */
23 
24 #ifndef ASSERTIONS_H
25 #define ASSERTIONS_H		1
26 
27 typedef enum {
28 	assert_require, assert_ensure, assert_insist, assert_invariant
29 } assertion_type;
30 
31 typedef void (*assertion_failure_callback)(const char *, int, assertion_type,
32 					   const char *, int);
33 
34 extern assertion_failure_callback __assertion_failed;
35 void set_assertion_failure_callback(assertion_failure_callback f);
36 const char *assertion_type_to_text(assertion_type type);
37 
38 #ifdef CHECK_ALL
39 #define CHECK_REQUIRE		1
40 #define CHECK_ENSURE		1
41 #define CHECK_INSIST		1
42 #define CHECK_INVARIANT		1
43 #endif
44 
45 #ifdef CHECK_NONE
46 #define CHECK_REQUIRE		0
47 #define CHECK_ENSURE		0
48 #define CHECK_INSIST		0
49 #define CHECK_INVARIANT		0
50 #endif
51 
52 #ifndef CHECK_REQUIRE
53 #define CHECK_REQUIRE		1
54 #endif
55 
56 #ifndef CHECK_ENSURE
57 #define CHECK_ENSURE		1
58 #endif
59 
60 #ifndef CHECK_INSIST
61 #define CHECK_INSIST		1
62 #endif
63 
64 #ifndef CHECK_INVARIANT
65 #define CHECK_INVARIANT		1
66 #endif
67 
68 #if CHECK_REQUIRE != 0
69 #define REQUIRE(cond) \
70 	((void) ((cond) || \
71 		 ((__assertion_failed)(__FILE__, __LINE__, assert_require, \
72 				       #cond, 0), 0)))
73 #define REQUIRE_ERR(cond) \
74 	((void) ((cond) || \
75 		 ((__assertion_failed)(__FILE__, __LINE__, assert_require, \
76 				       #cond, 1), 0)))
77 #else
78 #define REQUIRE(cond)		((void) (cond))
79 #define REQUIRE_ERR(cond)	((void) (cond))
80 #endif /* CHECK_REQUIRE */
81 
82 #if CHECK_ENSURE != 0
83 #define ENSURE(cond) \
84 	((void) ((cond) || \
85 		 ((__assertion_failed)(__FILE__, __LINE__, assert_ensure, \
86 				       #cond, 0), 0)))
87 #define ENSURE_ERR(cond) \
88 	((void) ((cond) || \
89 		 ((__assertion_failed)(__FILE__, __LINE__, assert_ensure, \
90 				       #cond, 1), 0)))
91 #else
92 #define ENSURE(cond)		((void) (cond))
93 #define ENSURE_ERR(cond)	((void) (cond))
94 #endif /* CHECK_ENSURE */
95 
96 #if CHECK_INSIST != 0
97 #define INSIST(cond) \
98 	((void) ((cond) || \
99 		 ((__assertion_failed)(__FILE__, __LINE__, assert_insist, \
100 				       #cond, 0), 0)))
101 #define INSIST_ERR(cond) \
102 	((void) ((cond) || \
103 		 ((__assertion_failed)(__FILE__, __LINE__, assert_insist, \
104 				       #cond, 1), 0)))
105 #else
106 #define INSIST(cond)		((void) (cond))
107 #define INSIST_ERR(cond)	((void) (cond))
108 #endif /* CHECK_INSIST */
109 
110 #if CHECK_INVARIANT != 0
111 #define INVARIANT(cond) \
112 	((void) ((cond) || \
113 		 ((__assertion_failed)(__FILE__, __LINE__, assert_invariant, \
114 				       #cond, 0), 0)))
115 #define INVARIANT_ERR(cond) \
116 	((void) ((cond) || \
117 		 ((__assertion_failed)(__FILE__, __LINE__, assert_invariant, \
118 				       #cond, 1), 0)))
119 #else
120 #define INVARIANT(cond)		((void) (cond))
121 #define INVARIANT_ERR(cond)	((void) (cond))
122 #endif /* CHECK_INVARIANT */
123 
124 #endif /* ASSERTIONS_H */
125