File: testPreCompiler.cc

package info (click to toggle)
squid 5.7-2%2Bdeb12u5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 37,848 kB
  • sloc: cpp: 196,107; ansic: 20,277; makefile: 6,056; sh: 5,267; perl: 2,292; sql: 326; python: 248; awk: 142; sed: 1
file content (178 lines) | stat: -rw-r--r-- 4,405 bytes parent folder | download
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*
 * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
 *
 * Squid software is distributed under GPLv2+ license and includes
 * contributions from numerous individuals and organizations.
 * Please see the COPYING and CONTRIBUTORS files for details.
 */

#include "squid.h"
#include "testPreCompiler.h"
#include "unitTestMain.h"

#include <cassert>

CPPUNIT_TEST_SUITE_REGISTRATION( testPreCompiler );

/**
 * Test several ways of defining pre-compiler directives.
 * Squid-3 uses #if FOO syntax for precompiler directives.
 * These tests ensure that the inputs will work as expected.
 */
void
testPreCompiler::testIfDef()
{
    /* Defined to explicit value 1 should be true */
#define ONE_FOO 1
#if ONE_FOO
    bool oneTrue = true;
#else
    bool oneTrue = false;
#endif
#if !ONE_FOO
    bool oneFalse = true;
#else
    bool oneFalse = false;
#endif
    CPPUNIT_ASSERT(oneTrue);
    CPPUNIT_ASSERT(!oneFalse);

    /* Defined to explicit value 0 should be false */
#define ZERO_FOO 0
#if ZERO_FOO
    bool zeroTrue = true;
#else
    bool zeroTrue = false;
#endif
#if !ZERO_FOO
    bool zeroFalse = true;
#else
    bool zeroFalse = false;
#endif
    CPPUNIT_ASSERT(zeroFalse);
    CPPUNIT_ASSERT(!zeroTrue);

    /* Defined to exist without a value generates pre-compiler errors when used in #if . */

    /* Not Defined to exist at all == false */
#undef UNDEFINED_FOO
#if UNDEFINED_FOO
    bool undefinedTrue = true;
#else
    bool undefinedTrue = false;
#endif
#if !UNDEFINED_FOO
    bool undefinedFalse = true;
#else
    bool undefinedFalse = false;
#endif
    CPPUNIT_ASSERT(undefinedFalse);
    CPPUNIT_ASSERT(!undefinedTrue);
}

/**
 * Test several ways of defining pre-compiler directives.
 * Squid-3 uses #if FOO syntax for precompiler directives.
 * These tests ensure that the inputs will work as expected
 * when undefined macros are used in && conditions
 */
void
testPreCompiler::testIfDefAnd()
{
    /* Not Defined to exist at all == false - when used in a compound if */
#undef UNDEFINED_FOO
#define ONE_FOO 1

#if UNDEFINED_FOO && ONE_FOO
    bool undefinedAndTrueA = true;
#else
    bool undefinedAndTrueA = false;
#endif
#if !UNDEFINED_FOO && ONE_FOO
    bool undefinedAndFalseA = true;
#else
    bool undefinedAndFalseA = false;
#endif
    CPPUNIT_ASSERT(undefinedAndFalseA);
    CPPUNIT_ASSERT(!undefinedAndTrueA);

#if ONE_FOO && UNDEFINED_FOO
    bool undefinedAndTrueB = true;
#else
    bool undefinedAndTrueB = false;
#endif
#if ONE_FOO && !UNDEFINED_FOO
    bool undefinedAndFalseB = true;
#else
    bool undefinedAndFalseB = false;
#endif
    CPPUNIT_ASSERT(undefinedAndFalseB);
    CPPUNIT_ASSERT(!undefinedAndTrueB);

#if UNDEFINED_FOO && UNDEFINED_FOO
    bool undefinedAndUndefinedC = true;
#else
    bool undefinedAndUndefinedC = false;
#endif
#if !UNDEFINED_FOO && !UNDEFINED_FOO
    bool notUndefinedAndNotUndefinedC = true;
#else
    bool notUndefinedAndNotUndefinedC = false;
#endif
    CPPUNIT_ASSERT(!undefinedAndUndefinedC);
    CPPUNIT_ASSERT(notUndefinedAndNotUndefinedC);
}

/**
 * Test several ways of defining pre-compiler directives.
 * Squid-3 uses #if FOO syntax for precompiler directives.
 * These tests ensure that the inputs will work as expected
 * when undefined macros are used in || conditions
 */
void
testPreCompiler::testIfDefOr()
{
    /* Not Defined to exist at all == false - when used in a compound if */
#undef UNDEFINED_FOO
#define ZERO_FOO 0

#if UNDEFINED_FOO || ZERO_FOO
    bool undefinedOrTrueA = true;
#else
    bool undefinedOrTrueA = false;
#endif
#if !UNDEFINED_FOO || ZERO_FOO
    bool undefinedOrFalseA = true;
#else
    bool undefinedOrFalseA = false;
#endif
    CPPUNIT_ASSERT(undefinedOrFalseA);
    CPPUNIT_ASSERT(!undefinedOrTrueA);

#if ZERO_FOO || UNDEFINED_FOO
    bool undefinedOrTrueB = true;
#else
    bool undefinedOrTrueB = false;
#endif
#if ZERO_FOO || !UNDEFINED_FOO
    bool undefinedOrFalseB = true;
#else
    bool undefinedOrFalseB = false;
#endif
    CPPUNIT_ASSERT(undefinedOrFalseB);
    CPPUNIT_ASSERT(!undefinedOrTrueB);

#if UNDEFINED_FOO || UNDEFINED_FOO
    bool undefinedOrUndefinedC = true;
#else
    bool undefinedOrUndefinedC = false;
#endif
#if !UNDEFINED_FOO || !UNDEFINED_FOO
    bool notUndefinedOrNotUndefinedC = true;
#else
    bool notUndefinedOrNotUndefinedC = false;
#endif
    CPPUNIT_ASSERT(notUndefinedOrNotUndefinedC);
    CPPUNIT_ASSERT(!undefinedOrUndefinedC);
}