testPreCompiler.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2019 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #include "squid.h"
10 #include "testPreCompiler.h"
11 #include "unitTestMain.h"
12 
13 #include <cassert>
14 
16 
22 void
24 {
25  /* Defined to explicit value 1 should be true */
26 #define ONE_FOO 1
27 #if ONE_FOO
28  bool oneTrue = true;
29 #else
30  bool oneTrue = false;
31 #endif
32 #if !ONE_FOO
33  bool oneFalse = true;
34 #else
35  bool oneFalse = false;
36 #endif
37  CPPUNIT_ASSERT(oneTrue);
38  CPPUNIT_ASSERT(!oneFalse);
39 
40  /* Defined to explicit value 0 should be false */
41 #define ZERO_FOO 0
42 #if ZERO_FOO
43  bool zeroTrue = true;
44 #else
45  bool zeroTrue = false;
46 #endif
47 #if !ZERO_FOO
48  bool zeroFalse = true;
49 #else
50  bool zeroFalse = false;
51 #endif
52  CPPUNIT_ASSERT(zeroFalse);
53  CPPUNIT_ASSERT(!zeroTrue);
54 
55  /* Defined to exist without a value generates pre-compiler errors when used in #if . */
56 
57  /* Not Defined to exist at all == false */
58 #undef UNDEFINED_FOO
59 #if UNDEFINED_FOO
60  bool undefinedTrue = true;
61 #else
62  bool undefinedTrue = false;
63 #endif
64 #if !UNDEFINED_FOO
65  bool undefinedFalse = true;
66 #else
67  bool undefinedFalse = false;
68 #endif
69  CPPUNIT_ASSERT(undefinedFalse);
70  CPPUNIT_ASSERT(!undefinedTrue);
71 }
72 
79 void
81 {
82  /* Not Defined to exist at all == false - when used in a compound if */
83 #undef UNDEFINED_FOO
84 #define ONE_FOO 1
85 
86 #if UNDEFINED_FOO && ONE_FOO
87  bool undefinedAndTrueA = true;
88 #else
89  bool undefinedAndTrueA = false;
90 #endif
91 #if !UNDEFINED_FOO && ONE_FOO
92  bool undefinedAndFalseA = true;
93 #else
94  bool undefinedAndFalseA = false;
95 #endif
96  CPPUNIT_ASSERT(undefinedAndFalseA);
97  CPPUNIT_ASSERT(!undefinedAndTrueA);
98 
99 #if ONE_FOO && UNDEFINED_FOO
100  bool undefinedAndTrueB = true;
101 #else
102  bool undefinedAndTrueB = false;
103 #endif
104 #if ONE_FOO && !UNDEFINED_FOO
105  bool undefinedAndFalseB = true;
106 #else
107  bool undefinedAndFalseB = false;
108 #endif
109  CPPUNIT_ASSERT(undefinedAndFalseB);
110  CPPUNIT_ASSERT(!undefinedAndTrueB);
111 
112 #if UNDEFINED_FOO && UNDEFINED_FOO
113  bool undefinedAndUndefinedC = true;
114 #else
115  bool undefinedAndUndefinedC = false;
116 #endif
117 #if !UNDEFINED_FOO && !UNDEFINED_FOO
118  bool notUndefinedAndNotUndefinedC = true;
119 #else
120  bool notUndefinedAndNotUndefinedC = false;
121 #endif
122  CPPUNIT_ASSERT(!undefinedAndUndefinedC);
123  CPPUNIT_ASSERT(notUndefinedAndNotUndefinedC);
124 }
125 
132 void
134 {
135  /* Not Defined to exist at all == false - when used in a compound if */
136 #undef UNDEFINED_FOO
137 #define ZERO_FOO 0
138 
139 #if UNDEFINED_FOO || ZERO_FOO
140  bool undefinedOrTrueA = true;
141 #else
142  bool undefinedOrTrueA = false;
143 #endif
144 #if !UNDEFINED_FOO || ZERO_FOO
145  bool undefinedOrFalseA = true;
146 #else
147  bool undefinedOrFalseA = false;
148 #endif
149  CPPUNIT_ASSERT(undefinedOrFalseA);
150  CPPUNIT_ASSERT(!undefinedOrTrueA);
151 
152 #if ZERO_FOO || UNDEFINED_FOO
153  bool undefinedOrTrueB = true;
154 #else
155  bool undefinedOrTrueB = false;
156 #endif
157 #if ZERO_FOO || !UNDEFINED_FOO
158  bool undefinedOrFalseB = true;
159 #else
160  bool undefinedOrFalseB = false;
161 #endif
162  CPPUNIT_ASSERT(undefinedOrFalseB);
163  CPPUNIT_ASSERT(!undefinedOrTrueB);
164 
165 #if UNDEFINED_FOO || UNDEFINED_FOO
166  bool undefinedOrUndefinedC = true;
167 #else
168  bool undefinedOrUndefinedC = false;
169 #endif
170 #if !UNDEFINED_FOO || !UNDEFINED_FOO
171  bool notUndefinedOrNotUndefinedC = true;
172 #else
173  bool notUndefinedOrNotUndefinedC = false;
174 #endif
175  CPPUNIT_ASSERT(notUndefinedOrNotUndefinedC);
176  CPPUNIT_ASSERT(!undefinedOrUndefinedC);
177 }
178 
CPPUNIT_TEST_SUITE_REGISTRATION(testPreCompiler)

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors