1 | # /* ************************************************************************** |
2 | # * * |
3 | # * (C) Copyright Paul Mensonides 2002. |
4 | # * Distributed under the Boost Software License, Version 1.0. (See |
5 | # * accompanying file LICENSE_1_0.txt or copy at |
6 | # * http://www.boost.org/LICENSE_1_0.txt) |
7 | # * * |
8 | # ************************************************************************** */ |
9 | # |
10 | # /* See http://www.boost.org for most recent version. */ |
11 | # |
12 | # include <boost/preprocessor/config/limits.hpp> |
13 | # include <boost/preprocessor/arithmetic.hpp> |
14 | # include "test.h" |
15 | |
16 | /* addition */ |
17 | |
18 | BEGIN BOOST_PP_ADD(2, 3) == 5 END |
19 | |
20 | BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), 2) == 6 END |
21 | BEGIN BOOST_PP_ADD(2, BOOST_PP_ADD(1, 4)) == 7 END |
22 | BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), BOOST_PP_ADD(2, 2)) == 8 END |
23 | |
24 | #if BOOST_PP_LIMIT_MAG == 256 && BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() |
25 | |
26 | BEGIN BOOST_PP_ADD(1, 256) == 256 END |
27 | BEGIN BOOST_PP_ADD(256, 1) == 256 END |
28 | BEGIN BOOST_PP_ADD(2, 255) == 256 END |
29 | BEGIN BOOST_PP_ADD(255, 2) == 256 END |
30 | BEGIN BOOST_PP_ADD(1, 255) == 256 END |
31 | BEGIN BOOST_PP_ADD(255, 1) == 256 END |
32 | |
33 | #endif |
34 | |
35 | #if BOOST_PP_LIMIT_MAG == 512 |
36 | |
37 | BEGIN BOOST_PP_ADD(374, 129) == 503 END |
38 | |
39 | BEGIN BOOST_PP_ADD(1, 512) == 512 END |
40 | BEGIN BOOST_PP_ADD(512, 1) == 512 END |
41 | BEGIN BOOST_PP_ADD(2, 511) == 512 END |
42 | BEGIN BOOST_PP_ADD(511, 2) == 512 END |
43 | |
44 | BEGIN BOOST_PP_ADD(BOOST_PP_ADD(134, 187), 95) == 416 END |
45 | BEGIN BOOST_PP_ADD(BOOST_PP_ADD(83, 120), BOOST_PP_ADD(204, 51)) == 458 END |
46 | BEGIN BOOST_PP_ADD(149, BOOST_PP_ADD(102, 137)) == 388 END |
47 | BEGIN BOOST_PP_ADD(357, BOOST_PP_ADD(102, 137)) == 512 END |
48 | |
49 | #endif |
50 | |
51 | #if BOOST_PP_LIMIT_MAG == 1024 |
52 | |
53 | BEGIN BOOST_PP_ADD(732, 188) == 920 END |
54 | |
55 | BEGIN BOOST_PP_ADD(1, 1024) == 1024 END |
56 | BEGIN BOOST_PP_ADD(1024, 1) == 1024 END |
57 | BEGIN BOOST_PP_ADD(2, 1023) == 1024 END |
58 | BEGIN BOOST_PP_ADD(1023, 2) == 1024 END |
59 | |
60 | BEGIN BOOST_PP_ADD(BOOST_PP_ADD(254, 525), 149) == 928 END |
61 | BEGIN BOOST_PP_ADD(BOOST_PP_ADD(241, 96), BOOST_PP_ADD(373, 175)) == 885 END |
62 | BEGIN BOOST_PP_ADD(792, BOOST_PP_ADD(356, 410)) == 1024 END |
63 | |
64 | #endif |
65 | |
66 | /* subtraction */ |
67 | |
68 | BEGIN BOOST_PP_SUB(11, 0) == 11 END |
69 | BEGIN BOOST_PP_SUB(12, 1) == 11 END |
70 | BEGIN BOOST_PP_SUB(3, 4) == 0 END |
71 | |
72 | BEGIN BOOST_PP_SUB(5, BOOST_PP_SUB(3, 2)) == 4 END |
73 | BEGIN BOOST_PP_SUB(BOOST_PP_SUB(10, 5), 2) == 3 END |
74 | BEGIN BOOST_PP_SUB(BOOST_PP_SUB(7, 3), BOOST_PP_SUB(10, 8)) == 2 END |
75 | |
76 | #if BOOST_PP_LIMIT_MAG == 256 && BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() |
77 | |
78 | BEGIN BOOST_PP_SUB(1, 256) == 0 END |
79 | BEGIN BOOST_PP_SUB(256, 255) == 1 END |
80 | |
81 | #endif |
82 | |
83 | #if BOOST_PP_LIMIT_MAG == 512 |
84 | |
85 | BEGIN BOOST_PP_SUB(315, 412) == 0 END |
86 | BEGIN BOOST_PP_SUB(511, 510) == 1 END |
87 | BEGIN BOOST_PP_SUB(463, 317) == 146 END |
88 | BEGIN BOOST_PP_SUB(272, 195) == 77 END |
89 | |
90 | BEGIN BOOST_PP_SUB(1, 512) == 0 END |
91 | BEGIN BOOST_PP_SUB(512, 511) == 1 END |
92 | |
93 | BEGIN BOOST_PP_SUB(371, BOOST_PP_SUB(3, 2)) == 370 END |
94 | BEGIN BOOST_PP_SUB(BOOST_PP_SUB(478, 211), 58) == 209 END |
95 | BEGIN BOOST_PP_SUB(BOOST_PP_SUB(395, 277), BOOST_PP_SUB(10, 7)) == 115 END |
96 | BEGIN BOOST_PP_SUB(BOOST_PP_SUB(412, 383), BOOST_PP_SUB(512, 506)) == 23 END |
97 | |
98 | #endif |
99 | |
100 | #if BOOST_PP_LIMIT_MAG == 1024 |
101 | |
102 | BEGIN BOOST_PP_SUB(782, 849) == 0 END |
103 | BEGIN BOOST_PP_SUB(1023, 1022) == 1 END |
104 | BEGIN BOOST_PP_SUB(654, 538) == 116 END |
105 | |
106 | BEGIN BOOST_PP_SUB(1, 1024) == 0 END |
107 | BEGIN BOOST_PP_SUB(1024, 1023) == 1 END |
108 | |
109 | BEGIN BOOST_PP_SUB(829, BOOST_PP_SUB(3, 2)) == 828 END |
110 | BEGIN BOOST_PP_SUB(BOOST_PP_SUB(616, 439), 92) == 85 END |
111 | BEGIN BOOST_PP_SUB(BOOST_PP_SUB(822, 547), BOOST_PP_SUB(1024, 1011)) == 262 END |
112 | |
113 | #endif |
114 | |
115 | /* multiplication */ |
116 | |
117 | BEGIN BOOST_PP_MUL(0, 1) == 0 END |
118 | BEGIN BOOST_PP_MUL(1, 0) == 0 END |
119 | BEGIN BOOST_PP_MUL(1, 1) == 1 END |
120 | BEGIN BOOST_PP_MUL(4, 3) == 12 END |
121 | |
122 | BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), 2) == 8 END |
123 | BEGIN BOOST_PP_MUL(2, BOOST_PP_MUL(2, 2)) == 8 END |
124 | BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), BOOST_PP_MUL(2, 2)) == 16 END |
125 | |
126 | #if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() |
127 | |
128 | BEGIN BOOST_PP_MUL(0, BOOST_PP_LIMIT_MAG) == 0 END |
129 | BEGIN BOOST_PP_MUL(1, BOOST_PP_LIMIT_MAG) == BOOST_PP_LIMIT_MAG END |
130 | BEGIN BOOST_PP_MUL(2, BOOST_PP_LIMIT_MAG) == BOOST_PP_LIMIT_MAG END |
131 | BEGIN BOOST_PP_MUL(BOOST_PP_LIMIT_MAG, 0) == 0 END |
132 | BEGIN BOOST_PP_MUL(BOOST_PP_LIMIT_MAG, 1) == BOOST_PP_LIMIT_MAG END |
133 | BEGIN BOOST_PP_MUL(BOOST_PP_LIMIT_MAG, 2) == BOOST_PP_LIMIT_MAG END |
134 | |
135 | #endif |
136 | |
137 | #if BOOST_PP_LIMIT_MAG == 256 && BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_STRICT() |
138 | |
139 | BEGIN BOOST_PP_MUL(17, 17) == 256 END |
140 | BEGIN BOOST_PP_MUL(0, 255) == 0 END |
141 | BEGIN BOOST_PP_MUL(1, 255) == 255 END |
142 | BEGIN BOOST_PP_MUL(2, 255) == 256 END |
143 | BEGIN BOOST_PP_MUL(255, 0) == 0 END |
144 | BEGIN BOOST_PP_MUL(255, 1) == 255 END |
145 | BEGIN BOOST_PP_MUL(255, 2) == 256 END |
146 | |
147 | #endif |
148 | |
149 | #if BOOST_PP_LIMIT_MAG == 512 |
150 | |
151 | BEGIN BOOST_PP_MUL(0, 351) == 0 END |
152 | BEGIN BOOST_PP_MUL(489, 0) == 0 END |
153 | BEGIN BOOST_PP_MUL(1, 272) == 272 END |
154 | BEGIN BOOST_PP_MUL(34, 11) == 374 END |
155 | |
156 | BEGIN BOOST_PP_MUL(BOOST_PP_MUL(7, 7), 7) == 343 END |
157 | BEGIN BOOST_PP_MUL(7, BOOST_PP_MUL(7, 7)) == 343 END |
158 | BEGIN BOOST_PP_MUL(BOOST_PP_MUL(5, 5), BOOST_PP_MUL(4, 4)) == 400 END |
159 | |
160 | BEGIN BOOST_PP_MUL(24, 24) == 512 END |
161 | BEGIN BOOST_PP_MUL(0, 511) == 0 END |
162 | BEGIN BOOST_PP_MUL(1, 511) == 511 END |
163 | BEGIN BOOST_PP_MUL(2, 511) == 512 END |
164 | BEGIN BOOST_PP_MUL(511, 0) == 0 END |
165 | BEGIN BOOST_PP_MUL(511, 1) == 511 END |
166 | BEGIN BOOST_PP_MUL(511, 2) == 512 END |
167 | |
168 | #endif |
169 | |
170 | #if BOOST_PP_LIMIT_MAG == 1024 |
171 | |
172 | BEGIN BOOST_PP_MUL(0, 653) == 0 END |
173 | BEGIN BOOST_PP_MUL(926, 0) == 0 END |
174 | BEGIN BOOST_PP_MUL(1, 849) == 849 END |
175 | BEGIN BOOST_PP_MUL(42, 17) == 714 END |
176 | |
177 | BEGIN BOOST_PP_MUL(BOOST_PP_MUL(9, 9), 9) == 729 END |
178 | BEGIN BOOST_PP_MUL(9, BOOST_PP_MUL(9, 9)) == 729 END |
179 | BEGIN BOOST_PP_MUL(BOOST_PP_MUL(6, 6), BOOST_PP_MUL(5, 5)) == 900 END |
180 | |
181 | BEGIN BOOST_PP_MUL(35, 35) == 1024 END |
182 | BEGIN BOOST_PP_MUL(0, 1024) == 0 END |
183 | BEGIN BOOST_PP_MUL(1, 1024) == 1024 END |
184 | BEGIN BOOST_PP_MUL(2, 1024) == 1024 END |
185 | BEGIN BOOST_PP_MUL(1023, 0) == 0 END |
186 | BEGIN BOOST_PP_MUL(1023, 1) == 1023 END |
187 | BEGIN BOOST_PP_MUL(1023, 2) == 1024 END |
188 | |
189 | #endif |
190 | |
191 | /* division */ |
192 | |
193 | BEGIN BOOST_PP_DIV(2, 1) == 2 END |
194 | BEGIN BOOST_PP_DIV(0, 5) == 0 END |
195 | BEGIN BOOST_PP_DIV(7, 3) == 2 END |
196 | |
197 | BEGIN BOOST_PP_DIV(BOOST_PP_DIV(4, 2), 2) == 1 END |
198 | BEGIN BOOST_PP_DIV(10, BOOST_PP_DIV(10, 2)) == 2 END |
199 | BEGIN BOOST_PP_DIV(BOOST_PP_DIV(10, 2), BOOST_PP_DIV(4, 2)) == 2 END |
200 | |
201 | #if BOOST_PP_LIMIT_MAG == 512 |
202 | |
203 | BEGIN BOOST_PP_DIV(468, 3) == 156 END |
204 | BEGIN BOOST_PP_DIV(0, 272) == 0 END |
205 | BEGIN BOOST_PP_DIV(335, 6) == 55 END |
206 | |
207 | BEGIN BOOST_PP_DIV(BOOST_PP_DIV(498, 2), 2) == 124 END |
208 | BEGIN BOOST_PP_DIV(375, BOOST_PP_DIV(279, 3)) == 4 END |
209 | BEGIN BOOST_PP_DIV(BOOST_PP_DIV(486, 2), BOOST_PP_DIV(17, 4)) == 60 END |
210 | |
211 | #endif |
212 | |
213 | #if BOOST_PP_LIMIT_MAG == 1024 |
214 | |
215 | BEGIN BOOST_PP_DIV(849, 36) == 23 END |
216 | BEGIN BOOST_PP_DIV(0, 638) == 0 END |
217 | BEGIN BOOST_PP_DIV(467, 17) == 27 END |
218 | |
219 | BEGIN BOOST_PP_DIV(BOOST_PP_DIV(1004, 10), 5) == 20 END |
220 | BEGIN BOOST_PP_DIV(593, BOOST_PP_DIV(925, 25)) == 16 END |
221 | BEGIN BOOST_PP_DIV(BOOST_PP_DIV(746, 12), BOOST_PP_DIV(848, 424)) == 31 END |
222 | |
223 | #endif |
224 | |
225 | /* modulus */ |
226 | |
227 | BEGIN BOOST_PP_MOD(5, 5) == 0 END |
228 | BEGIN BOOST_PP_MOD(9, 5) == 4 END |
229 | BEGIN BOOST_PP_MOD(7, 4) == 3 END |
230 | |
231 | BEGIN BOOST_PP_MOD(BOOST_PP_MOD(5, 3), 3) == 2 END |
232 | BEGIN BOOST_PP_MOD(5, BOOST_PP_MOD(4, 3)) == 0 END |
233 | |
234 | #if BOOST_PP_LIMIT_MAG == 512 |
235 | |
236 | BEGIN BOOST_PP_MOD(473, 473) == 0 END |
237 | BEGIN BOOST_PP_MOD(381, 126) == 3 END |
238 | BEGIN BOOST_PP_MOD(262, 27) == 19 END |
239 | |
240 | BEGIN BOOST_PP_MOD(BOOST_PP_MOD(368, 65), 7) == 1 END |
241 | BEGIN BOOST_PP_MOD(194, BOOST_PP_MOD(411, 205)) == 0 END |
242 | |
243 | #endif |
244 | |
245 | #if BOOST_PP_LIMIT_MAG == 1024 |
246 | |
247 | BEGIN BOOST_PP_MOD(831, 831) == 0 END |
248 | BEGIN BOOST_PP_MOD(935, 73) == 59 END |
249 | BEGIN BOOST_PP_MOD(610, 84) == 22 END |
250 | |
251 | BEGIN BOOST_PP_MOD(BOOST_PP_MOD(732, 27), 2) == 1 END |
252 | BEGIN BOOST_PP_MOD(1023, BOOST_PP_MOD(544, 29)) == 11 END |
253 | |
254 | #endif |
255 | |
256 | /* increment */ |
257 | |
258 | BEGIN BOOST_PP_INC(0) == 1 END |
259 | BEGIN BOOST_PP_INC(22) == 23 END |
260 | BEGIN BOOST_PP_INC(BOOST_PP_INC(0)) == 2 END |
261 | BEGIN BOOST_PP_INC(BOOST_PP_INC(17)) == 19 END |
262 | |
263 | #if BOOST_PP_LIMIT_MAG == 256 |
264 | |
265 | BEGIN BOOST_PP_INC(256) == 256 END |
266 | BEGIN BOOST_PP_INC(BOOST_PP_INC(255)) == 256 END |
267 | |
268 | #endif |
269 | |
270 | #if BOOST_PP_LIMIT_MAG == 512 |
271 | |
272 | BEGIN BOOST_PP_INC(349) == 350 END |
273 | BEGIN BOOST_PP_INC(426) == 427 END |
274 | BEGIN BOOST_PP_INC(256) == 257 END |
275 | BEGIN BOOST_PP_INC(BOOST_PP_INC(505)) == 507 END |
276 | BEGIN BOOST_PP_INC(BOOST_PP_INC(272)) == 274 END |
277 | BEGIN BOOST_PP_INC(BOOST_PP_INC(255)) == 257 END |
278 | |
279 | #endif |
280 | |
281 | #if BOOST_PP_LIMIT_MAG == 1024 |
282 | |
283 | BEGIN BOOST_PP_INC(593) == 594 END |
284 | BEGIN BOOST_PP_INC(821) == 822 END |
285 | BEGIN BOOST_PP_INC(512) == 513 END |
286 | BEGIN BOOST_PP_INC(BOOST_PP_INC(924)) == 926 END |
287 | BEGIN BOOST_PP_INC(BOOST_PP_INC(732)) == 734 END |
288 | BEGIN BOOST_PP_INC(BOOST_PP_INC(511)) == 513 END |
289 | |
290 | #endif |
291 | |
292 | /* decrement */ |
293 | |
294 | BEGIN BOOST_PP_DEC(256) == 255 END |
295 | BEGIN BOOST_PP_DEC(47) == 46 END |
296 | BEGIN BOOST_PP_DEC(0) == 0 END |
297 | |
298 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(256)) == 254 END |
299 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(85)) == 83 END |
300 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(1)) == 0 END |
301 | |
302 | #if BOOST_PP_LIMIT_MAG == 512 |
303 | |
304 | BEGIN BOOST_PP_DEC(257) == 256 END |
305 | BEGIN BOOST_PP_DEC(473) == 472 END |
306 | BEGIN BOOST_PP_DEC(512) == 511 END |
307 | |
308 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(257)) == 255 END |
309 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(329)) == 327 END |
310 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(512)) == 510 END |
311 | |
312 | #endif |
313 | |
314 | #if BOOST_PP_LIMIT_MAG == 1024 |
315 | |
316 | BEGIN BOOST_PP_DEC(1025) == 1024 END |
317 | BEGIN BOOST_PP_DEC(770) == 769 END |
318 | BEGIN BOOST_PP_DEC(1024) == 1023 END |
319 | |
320 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(1025)) == 1023 END |
321 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(959)) == 957 END |
322 | BEGIN BOOST_PP_DEC(BOOST_PP_DEC(1024)) == 1022 END |
323 | |
324 | #endif |
325 | |