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 # /* Revised by Edward Diener (2011,2020) */ 11 # 12 # /* See http://www.boost.org for most recent version. */ 13 # 14 # include <boost/preprocessor/config/limits.hpp> 15 # include <boost/preprocessor/arithmetic/add.hpp> 16 # include <boost/preprocessor/arithmetic/dec.hpp> 17 # include <boost/preprocessor/arithmetic/div.hpp> 18 # include <boost/preprocessor/arithmetic/inc.hpp> 19 # include <boost/preprocessor/arithmetic/mod.hpp> 20 # include <boost/preprocessor/arithmetic/sub.hpp> 21 # include <boost/preprocessor/cat.hpp> 22 # include <boost/preprocessor/comparison/equal.hpp> 23 # include <boost/preprocessor/comparison/less.hpp> 24 # include <boost/preprocessor/control/iif.hpp> 25 # include <boost/preprocessor/control/expr_iif.hpp> 26 # include <boost/preprocessor/facilities/is_empty.hpp> 27 # include <boost/preprocessor/logical/bitor.hpp> 28 # include <boost/preprocessor/logical/not.hpp> 29 # include <boost/preprocessor/seq.hpp> 30 # include <boost/preprocessor/array/elem.hpp> 31 # include <boost/preprocessor/array/size.hpp> 32 # include <boost/preprocessor/tuple/elem.hpp> 33 # include <boost/preprocessor/tuple/size.hpp> 34 # include <boost/preprocessor/list/at.hpp> 35 # include <boost/preprocessor/list/size.hpp> 36 # include <boost/preprocessor/variadic/elem.hpp> 37 # include <boost/preprocessor/variadic/size.hpp> 38 # include <boost/preprocessor/variadic/has_opt.hpp> 39 # include <libs/preprocessor/test/test.h> 40 41 # define SEQ_NONE () 42 # define SEQ (4)(1)(5)(2) 43 44 # define SEQ_100 \ 45 (1)(2)(3)(4)(5)(6)(7)(8)(9) \ 46 (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ 47 (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ 48 (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ 49 (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ 50 (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ 51 (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ 52 (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ 53 (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ 54 (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ 55 (100) 56 57 # define SEQ_255 \ 58 (1)(2)(3)(4)(5)(6)(7)(8)(9) \ 59 (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ 60 (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ 61 (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ 62 (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ 63 (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ 64 (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ 65 (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ 66 (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ 67 (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ 68 (100)(101)(102)(103)(104)(105)(106)(107)(108)(109) \ 69 (110)(111)(112)(113)(114)(115)(116)(117)(118)(119) \ 70 (120)(121)(122)(123)(124)(125)(126)(127)(128)(129) \ 71 (130)(131)(132)(133)(134)(135)(136)(137)(138)(139) \ 72 (140)(141)(142)(143)(144)(145)(146)(147)(148)(149) \ 73 (150)(151)(152)(153)(154)(155)(156)(157)(158)(159) \ 74 (160)(161)(162)(163)(164)(165)(166)(167)(168)(169) \ 75 (170)(171)(172)(173)(174)(175)(176)(177)(178)(179) \ 76 (180)(181)(182)(183)(184)(185)(186)(187)(188)(189) \ 77 (190)(191)(192)(193)(194)(195)(196)(197)(198)(199) \ 78 (200)(201)(202)(203)(204)(205)(206)(207)(208)(209) \ 79 (210)(211)(212)(213)(214)(215)(216)(217)(218)(219) \ 80 (220)(221)(222)(223)(224)(225)(226)(227)(228)(229) \ 81 (230)(231)(232)(233)(234)(235)(236)(237)(238)(239) \ 82 (240)(241)(242)(243)(244)(245)(246)(247)(248)(249) \ 83 (250)(251)(252)(253)(254)(255) 84 85 # define SEQ_256 SEQ_255(256) 86 87 # if BOOST_PP_LIMIT_SEQ == 512 88 89 # define SEQ_511 \ 90 (1)(2)(3)(4)(5)(6)(7)(8)(9) \ 91 (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ 92 (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ 93 (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ 94 (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ 95 (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ 96 (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ 97 (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ 98 (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ 99 (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ 100 (100)(101)(102)(103)(104)(105)(106)(107)(108)(109) \ 101 (110)(111)(112)(113)(114)(115)(116)(117)(118)(119) \ 102 (120)(121)(122)(123)(124)(125)(126)(127)(128)(129) \ 103 (130)(131)(132)(133)(134)(135)(136)(137)(138)(139) \ 104 (140)(141)(142)(143)(144)(145)(146)(147)(148)(149) \ 105 (150)(151)(152)(153)(154)(155)(156)(157)(158)(159) \ 106 (160)(161)(162)(163)(164)(165)(166)(167)(168)(169) \ 107 (170)(171)(172)(173)(174)(175)(176)(177)(178)(179) \ 108 (180)(181)(182)(183)(184)(185)(186)(187)(188)(189) \ 109 (190)(191)(192)(193)(194)(195)(196)(197)(198)(199) \ 110 (200)(201)(202)(203)(204)(205)(206)(207)(208)(209) \ 111 (210)(211)(212)(213)(214)(215)(216)(217)(218)(219) \ 112 (220)(221)(222)(223)(224)(225)(226)(227)(228)(229) \ 113 (230)(231)(232)(233)(234)(235)(236)(237)(238)(239) \ 114 (240)(241)(242)(243)(244)(245)(246)(247)(248)(249) \ 115 (250)(251)(252)(253)(254)(255)(256)(257)(258)(259) \ 116 (260)(261)(262)(263)(264)(265)(266)(267)(268)(269) \ 117 (270)(271)(272)(273)(274)(275)(276)(277)(278)(279) \ 118 (280)(281)(282)(283)(284)(285)(286)(287)(288)(289) \ 119 (290)(291)(292)(293)(294)(295)(296)(297)(298)(299) \ 120 (300)(301)(302)(303)(304)(305)(306)(307)(308)(309) \ 121 (310)(311)(312)(313)(314)(315)(316)(317)(318)(319) \ 122 (320)(321)(322)(323)(324)(325)(326)(327)(328)(329) \ 123 (330)(331)(332)(333)(334)(335)(336)(337)(338)(339) \ 124 (340)(341)(342)(343)(344)(345)(346)(347)(348)(349) \ 125 (350)(351)(352)(353)(354)(355)(356)(357)(358)(359) \ 126 (360)(361)(362)(363)(364)(365)(366)(367)(368)(369) \ 127 (370)(371)(372)(373)(374)(375)(376)(377)(378)(379) \ 128 (380)(381)(382)(383)(384)(385)(386)(387)(388)(389) \ 129 (390)(391)(392)(393)(394)(395)(396)(397)(398)(399) \ 130 (400)(401)(402)(403)(404)(405)(406)(407)(408)(409) \ 131 (410)(411)(412)(413)(414)(415)(416)(417)(418)(419) \ 132 (420)(421)(422)(423)(424)(425)(426)(427)(428)(429) \ 133 (430)(431)(432)(433)(434)(435)(436)(437)(438)(439) \ 134 (440)(441)(442)(443)(444)(445)(446)(447)(448)(449) \ 135 (450)(451)(452)(453)(454)(455)(456)(457)(458)(459) \ 136 (460)(461)(462)(463)(464)(465)(466)(467)(468)(469) \ 137 (470)(471)(472)(473)(474)(475)(476)(477)(478)(479) \ 138 (480)(481)(482)(483)(484)(485)(486)(487)(488)(489) \ 139 (490)(491)(492)(493)(494)(495)(496)(497)(498)(499) \ 140 (500)(501)(502)(503)(504)(505)(506)(507)(508)(509) \ 141 (510)(511) 142 143 # define SEQ_512 SEQ_511(512) 144 145 # endif 146 147 # if BOOST_PP_LIMIT_SEQ == 1024 148 149 # define SEQ_1023 \ 150 (1)(2)(3)(4)(5)(6)(7)(8)(9) \ 151 (10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \ 152 (20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \ 153 (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \ 154 (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \ 155 (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \ 156 (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \ 157 (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \ 158 (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \ 159 (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \ 160 (100)(101)(102)(103)(104)(105)(106)(107)(108)(109) \ 161 (110)(111)(112)(113)(114)(115)(116)(117)(118)(119) \ 162 (120)(121)(122)(123)(124)(125)(126)(127)(128)(129) \ 163 (130)(131)(132)(133)(134)(135)(136)(137)(138)(139) \ 164 (140)(141)(142)(143)(144)(145)(146)(147)(148)(149) \ 165 (150)(151)(152)(153)(154)(155)(156)(157)(158)(159) \ 166 (160)(161)(162)(163)(164)(165)(166)(167)(168)(169) \ 167 (170)(171)(172)(173)(174)(175)(176)(177)(178)(179) \ 168 (180)(181)(182)(183)(184)(185)(186)(187)(188)(189) \ 169 (190)(191)(192)(193)(194)(195)(196)(197)(198)(199) \ 170 (200)(201)(202)(203)(204)(205)(206)(207)(208)(209) \ 171 (210)(211)(212)(213)(214)(215)(216)(217)(218)(219) \ 172 (220)(221)(222)(223)(224)(225)(226)(227)(228)(229) \ 173 (230)(231)(232)(233)(234)(235)(236)(237)(238)(239) \ 174 (240)(241)(242)(243)(244)(245)(246)(247)(248)(249) \ 175 (250)(251)(252)(253)(254)(255)(256)(257)(258)(259) \ 176 (260)(261)(262)(263)(264)(265)(266)(267)(268)(269) \ 177 (270)(271)(272)(273)(274)(275)(276)(277)(278)(279) \ 178 (280)(281)(282)(283)(284)(285)(286)(287)(288)(289) \ 179 (290)(291)(292)(293)(294)(295)(296)(297)(298)(299) \ 180 (300)(301)(302)(303)(304)(305)(306)(307)(308)(309) \ 181 (310)(311)(312)(313)(314)(315)(316)(317)(318)(319) \ 182 (320)(321)(322)(323)(324)(325)(326)(327)(328)(329) \ 183 (330)(331)(332)(333)(334)(335)(336)(337)(338)(339) \ 184 (340)(341)(342)(343)(344)(345)(346)(347)(348)(349) \ 185 (350)(351)(352)(353)(354)(355)(356)(357)(358)(359) \ 186 (360)(361)(362)(363)(364)(365)(366)(367)(368)(369) \ 187 (370)(371)(372)(373)(374)(375)(376)(377)(378)(379) \ 188 (380)(381)(382)(383)(384)(385)(386)(387)(388)(389) \ 189 (390)(391)(392)(393)(394)(395)(396)(397)(398)(399) \ 190 (400)(401)(402)(403)(404)(405)(406)(407)(408)(409) \ 191 (410)(411)(412)(413)(414)(415)(416)(417)(418)(419) \ 192 (420)(421)(422)(423)(424)(425)(426)(427)(428)(429) \ 193 (430)(431)(432)(433)(434)(435)(436)(437)(438)(439) \ 194 (440)(441)(442)(443)(444)(445)(446)(447)(448)(449) \ 195 (450)(451)(452)(453)(454)(455)(456)(457)(458)(459) \ 196 (460)(461)(462)(463)(464)(465)(466)(467)(468)(469) \ 197 (470)(471)(472)(473)(474)(475)(476)(477)(478)(479) \ 198 (480)(481)(482)(483)(484)(485)(486)(487)(488)(489) \ 199 (490)(491)(492)(493)(494)(495)(496)(497)(498)(499) \ 200 (500)(501)(502)(503)(504)(505)(506)(507)(508)(509) \ 201 (510)(511)(512) \ 202 (513)(514)(515)(516)(517)(518)(519)(520)(521) \ 203 (522)(523)(524)(525)(526)(527)(528)(529)(530)(531) \ 204 (532)(533)(534)(535)(536)(537)(538)(539)(540)(541) \ 205 (542)(543)(544)(545)(546)(547)(548)(549)(550)(551) \ 206 (552)(553)(554)(555)(556)(557)(558)(559)(560)(561) \ 207 (562)(563)(564)(565)(566)(567)(568)(569)(570)(571) \ 208 (572)(573)(574)(575)(576)(577)(578)(579)(580)(581) \ 209 (582)(583)(584)(585)(586)(587)(588)(589)(590)(591) \ 210 (592)(593)(594)(595)(596)(597)(598)(599)(600)(601) \ 211 (602)(603)(604)(605)(606)(607)(608)(609)(610)(611) \ 212 (612)(613)(614)(615)(616)(617)(618)(619)(620)(621) \ 213 (622)(623)(624)(625)(626)(627)(628)(629)(630)(631) \ 214 (632)(633)(634)(635)(636)(637)(638)(639)(640)(641) \ 215 (642)(643)(644)(645)(646)(647)(648)(649)(650)(651) \ 216 (652)(653)(654)(655)(656)(657)(658)(659)(660)(661) \ 217 (662)(663)(664)(665)(666)(667)(668)(669)(670)(671) \ 218 (672)(673)(674)(675)(676)(677)(678)(679)(680)(681) \ 219 (682)(683)(684)(685)(686)(687)(688)(689)(690)(691) \ 220 (692)(693)(694)(695)(696)(697)(698)(699)(700)(701) \ 221 (702)(703)(704)(705)(706)(707)(708)(709)(710)(711) \ 222 (712)(713)(714)(715)(716)(717)(718)(719)(720)(721) \ 223 (722)(723)(724)(725)(726)(727)(728)(729)(730)(731) \ 224 (732)(733)(734)(735)(736)(737)(738)(739)(740)(741) \ 225 (742)(743)(744)(745)(746)(747)(748)(749)(750)(751) \ 226 (752)(753)(754)(755)(756)(757)(758)(759)(760)(761) \ 227 (762)(763)(764)(765)(766)(767)(768)(769)(770)(771) \ 228 (772)(773)(774)(775)(776)(777)(778)(779)(780)(781) \ 229 (782)(783)(784)(785)(786)(787)(788)(789)(790)(791) \ 230 (792)(793)(794)(795)(796)(797)(798)(799)(800)(801) \ 231 (802)(803)(804)(805)(806)(807)(808)(809)(810)(811) \ 232 (812)(813)(814)(815)(816)(817)(818)(819)(820)(821) \ 233 (822)(823)(824)(825)(826)(827)(828)(829)(830)(831) \ 234 (832)(833)(834)(835)(836)(837)(838)(839)(840)(841) \ 235 (842)(843)(844)(845)(846)(847)(848)(849)(850)(851) \ 236 (852)(853)(854)(855)(856)(857)(858)(859)(860)(861) \ 237 (862)(863)(864)(865)(866)(867)(868)(869)(870)(871) \ 238 (872)(873)(874)(875)(876)(877)(878)(879)(880)(881) \ 239 (882)(883)(884)(885)(886)(887)(888)(889)(890)(891) \ 240 (892)(893)(894)(895)(896)(897)(898)(899)(900)(901) \ 241 (902)(903)(904)(905)(906)(907)(908)(909)(910)(911) \ 242 (912)(913)(914)(915)(916)(917)(918)(919)(920)(921) \ 243 (922)(923)(924)(925)(926)(927)(928)(929)(930)(931) \ 244 (932)(933)(934)(935)(936)(937)(938)(939)(940)(941) \ 245 (942)(943)(944)(945)(946)(947)(948)(949)(950)(951) \ 246 (952)(953)(954)(955)(956)(957)(958)(959)(960)(961) \ 247 (962)(963)(964)(965)(966)(967)(968)(969)(970)(971) \ 248 (972)(973)(974)(975)(976)(977)(978)(979)(980)(981) \ 249 (982)(983)(984)(985)(986)(987)(988)(989)(990)(991) \ 250 (992)(993)(994)(995)(996)(997)(998)(999)(1000)(1001) \ 251 (1002)(1003)(1004)(1005)(1006)(1007)(1008)(1009)(1010)(1011) \ 252 (1012)(1013)(1014)(1015)(1016)(1017)(1018)(1019)(1020)(1021) \ 253 (1022)(1023) 254 255 # define SEQ_1024 SEQ_1023(1024) 256 257 # endif 258 259 # define SEQVAR (4,5,8,3,61)(1,0)(5,22,43)(2)(17,45,33) 260 261 # define REVERSAL(s, x, y) BOOST_PP_SUB(y, x) 262 # define SUB_S(s, x, y) BOOST_PP_SUB(x, y) 263 # define ADD_S(s, x, y) BOOST_PP_ADD(x, y) 264 # define CAT_S(s, x, y) BOOST_PP_CAT(x, BOOST_PP_IS_EMPTY(y)) 265 266 BEGIN BOOST_PP_IS_EMPTY(BOOST_PP_SEQ_HEAD(SEQ_NONE)) == 1 END 267 BEGIN BOOST_PP_SEQ_HEAD(SEQ) == 4 END 268 BEGIN BOOST_PP_SEQ_HEAD(SEQ_255) == 1 END 269 BEGIN BOOST_PP_SEQ_HEAD(SEQ_256) == 1 END 270 271 # if BOOST_PP_LIMIT_SEQ == 512 272 273 BEGIN BOOST_PP_SEQ_HEAD(SEQ_511) == 1 END 274 BEGIN BOOST_PP_SEQ_HEAD(SEQ_512) == 1 END 275 276 # endif 277 278 # if BOOST_PP_LIMIT_SEQ == 1024 279 280 BEGIN BOOST_PP_SEQ_HEAD(SEQ_1023) == 1 END 281 BEGIN BOOST_PP_SEQ_HEAD(SEQ_1024) == 1 END 282 283 # endif 284 285 BEGIN BOOST_PP_SEQ_FOLD_LEFT(CAT_S, 1, SEQ_NONE) == 11 END 286 BEGIN BOOST_PP_SEQ_FOLD_LEFT(SUB_S, 22, SEQ) == 10 END 287 BEGIN BOOST_PP_SEQ_FOLD_RIGHT(CAT_S, 2, SEQ_NONE) == 21 END 288 BEGIN BOOST_PP_SEQ_FOLD_RIGHT(ADD_S, 0, SEQ) == 12 END 289 BEGIN BOOST_PP_SEQ_FOLD_RIGHT(REVERSAL, 0, SEQ) == 4 END 290 291 BEGIN BOOST_PP_IS_EMPTY(BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REVERSE(SEQ_NONE))) == 1 END 292 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REVERSE(SEQ)) == 2514 END 293 294 # if BOOST_PP_LIMIT_SEQ == 512 295 296 BEGIN BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(SEQ_512)) == 512 END 297 298 #endif 299 300 # if BOOST_PP_LIMIT_SEQ == 1024 301 302 BEGIN BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REVERSE(SEQ_1024)) == 1024 END 303 304 #endif 305 306 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REST_N(2, SEQ)) == 52 END 307 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REST_N(99, SEQ_100)) == 100 END 308 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REST_N(255, SEQ_256)) == 256 END 309 310 # if BOOST_PP_LIMIT_SEQ == 512 311 312 BEGIN BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REST_N(509, SEQ_511)) == 510 END 313 314 #endif 315 316 # if BOOST_PP_LIMIT_SEQ == 1024 317 318 BEGIN BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REST_N(1020, SEQ_1023)) == 1021 END 319 320 #endif 321 322 BEGIN BOOST_PP_IS_EMPTY(BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FIRST_N(1, SEQ_NONE))) == 1 END 323 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FIRST_N(2, SEQ)) == 41 END 324 BEGIN BOOST_PP_SEQ_ELEM(50,BOOST_PP_SEQ_FIRST_N(100, SEQ_100)) == 51 END 325 BEGIN BOOST_PP_SEQ_ELEM(100,BOOST_PP_SEQ_FIRST_N(255, SEQ_255)) == 101 END 326 BEGIN BOOST_PP_SEQ_ELEM(200,BOOST_PP_SEQ_FIRST_N(256, SEQ_256)) == 201 END 327 328 # if BOOST_PP_LIMIT_SEQ == 512 329 330 BEGIN BOOST_PP_SEQ_ELEM(7,BOOST_PP_SEQ_FIRST_N(15, SEQ_512)) == 8 END 331 332 #endif 333 334 # if BOOST_PP_LIMIT_SEQ == 1024 335 336 BEGIN BOOST_PP_SEQ_ELEM(14,BOOST_PP_SEQ_FIRST_N(25, SEQ_1024)) == 15 END 337 338 #endif 339 340 BEGIN BOOST_PP_IS_EMPTY(BOOST_PP_SEQ_ELEM(0, SEQ_NONE)) == 1 END 341 BEGIN BOOST_PP_SEQ_SIZE(SEQ_NONE) == 1 END 342 BEGIN BOOST_PP_SEQ_ELEM(2, SEQ) == 5 END 343 BEGIN BOOST_PP_SEQ_ELEM(20, SEQ_255) == 21 END 344 BEGIN BOOST_PP_SEQ_ELEM(254, SEQ_255) == 255 END 345 BEGIN BOOST_PP_SEQ_ELEM(220, SEQ_256) == 221 END 346 BEGIN BOOST_PP_SEQ_ELEM(255, SEQ_256) == 256 END 347 BEGIN BOOST_PP_SEQ_SIZE(SEQ) == 4 END 348 349 # if BOOST_PP_LIMIT_SEQ == 512 350 351 BEGIN BOOST_PP_SEQ_SIZE(SEQ_511) == 511 END 352 BEGIN BOOST_PP_SEQ_ELEM(476, SEQ_512) == 477 END 353 354 #endif 355 356 # if BOOST_PP_LIMIT_SEQ == 1024 357 358 BEGIN BOOST_PP_SEQ_SIZE(SEQ_1023) == 1023 END 359 BEGIN BOOST_PP_SEQ_ELEM(934, SEQ_1024) == 935 END 360 361 #endif 362 363 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TRANSFORM(CAT_S, 13, SEQ_NONE)) == 131 END 364 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TRANSFORM(ADD_S, 2, SEQ)) == 6374 END 365 366 # if BOOST_PP_LIMIT_SEQ == 512 367 368 #define STRANS_512(s,data,elem) BOOST_PP_ADD(elem,data) 369 370 BEGIN BOOST_PP_SEQ_ELEM(383, BOOST_PP_SEQ_TRANSFORM(STRANS_512,2,SEQ_512)) == 386 END 371 372 #endif 373 374 # if BOOST_PP_LIMIT_SEQ == 1024 375 376 #define STRANS_1024(s,data,elem) BOOST_PP_ADD(elem,data) 377 378 BEGIN BOOST_PP_SEQ_ELEM(728, BOOST_PP_SEQ_TRANSFORM(STRANS_1024,1,SEQ_1024)) == 730 END 379 380 #endif 381 382 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(SEQ) SEQ) == 1524152 END 383 384 # if BOOST_PP_LIMIT_SEQ == 512 385 386 BEGIN BOOST_PP_SEQ_ELEM(459, BOOST_PP_SEQ_TAIL(SEQ_511)) == 461 END 387 388 #endif 389 390 # if BOOST_PP_LIMIT_SEQ == 1024 391 392 BEGIN BOOST_PP_SEQ_ELEM(624, BOOST_PP_SEQ_TAIL(SEQ_1023)) == 626 END 393 394 #endif 395 396 # define F1(r, state, x) + x + state 397 # define FI2(r, state, i, x) BOOST_PP_IIF(BOOST_PP_EQUAL(i,2),+ x + x + state,+ x + state) 398 BEGIN BOOST_PP_SEQ_FOR_EACH(F1, 1, SEQ) == 16 END 399 BEGIN BOOST_PP_SEQ_FOR_EACH_I(FI2, 1, SEQ) == 21 END 400 401 # if BOOST_PP_LIMIT_SEQ == 512 && BOOST_PP_LIMIT_FOR == 512 402 403 # define FE5I2(r, state, i, x) BOOST_PP_EXPR_IIF(BOOST_PP_LESS(i,5),+ x - state) 404 405 BEGIN BOOST_PP_SEQ_FOR_EACH_I(FE5I2, 1, SEQ_512) == 10 END 406 407 #endif 408 409 # if BOOST_PP_LIMIT_SEQ == 1024 && BOOST_PP_LIMIT_FOR == 1024 410 411 # define FE1024(r, state, i, x) BOOST_PP_EXPR_IIF(BOOST_PP_LESS(i,6),+ x - state) 412 413 BEGIN BOOST_PP_SEQ_FOR_EACH_I(FE1024, 2, SEQ_1024) == 9 END 414 415 #endif 416 417 BEGIN BOOST_PP_TUPLE_ELEM(4, 3, BOOST_PP_SEQ_TO_TUPLE(SEQ)) == 2 END 418 BEGIN BOOST_PP_IS_EMPTY(BOOST_PP_TUPLE_ELEM(1, 0, BOOST_PP_SEQ_TO_TUPLE(SEQ_NONE))) == 1 END 419 BEGIN BOOST_PP_TUPLE_SIZE(BOOST_PP_SEQ_TO_TUPLE(SEQ_NONE)) == 1 END 420 BEGIN BOOST_PP_ARRAY_ELEM(3, BOOST_PP_SEQ_TO_ARRAY(SEQ)) == 2 END 421 422 BEGIN BOOST_PP_IS_EMPTY(BOOST_PP_ARRAY_ELEM(0, BOOST_PP_SEQ_TO_ARRAY(SEQ_NONE))) == 1 END 423 BEGIN BOOST_PP_ARRAY_SIZE(BOOST_PP_SEQ_TO_ARRAY(SEQ_NONE)) == 1 END 424 425 # define LESS_S(s, x, y) BOOST_PP_LESS(x, y) 426 # define FILTER_MOD_S(s, data, elem) BOOST_PP_NOT(BOOST_PP_MOD(elem,data)) 427 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_FILTER(LESS_S, 3, SEQ)) == 45 END 428 BEGIN BOOST_PP_SEQ_ELEM(4,BOOST_PP_SEQ_FILTER(FILTER_MOD_S, 20, SEQ_100)) == 100 END 429 BEGIN BOOST_PP_SEQ_ELEM(2,BOOST_PP_SEQ_FILTER(FILTER_MOD_S, 30, SEQ_100)) == 90 END 430 431 # if BOOST_PP_LIMIT_SEQ == 512 432 433 # define FILTER_EQ_512_S(s, data, elem) \ 434 BOOST_PP_BITOR \ 435 ( \ 436 BOOST_PP_EQUAL(BOOST_PP_DEC(data),elem), \ 437 BOOST_PP_EQUAL(BOOST_PP_INC(data),elem) \ 438 ) \ 439 /* */ 440 441 BEGIN BOOST_PP_SEQ_ELEM(1,BOOST_PP_SEQ_FILTER(FILTER_EQ_512_S, 20, SEQ_512)) == 21 END 442 443 #endif 444 445 # if BOOST_PP_LIMIT_SEQ == 1024 446 447 # define FILTER_EQ_1024_S(s, data, elem) \ 448 BOOST_PP_BITOR \ 449 ( \ 450 BOOST_PP_EQUAL(BOOST_PP_DEC(data),elem), \ 451 BOOST_PP_EQUAL(BOOST_PP_INC(data),elem) \ 452 ) \ 453 /* */ 454 455 BEGIN BOOST_PP_SEQ_ELEM(0,BOOST_PP_SEQ_FILTER(FILTER_EQ_1024_S, 100, SEQ_1024)) == 99 END 456 457 #endif 458 459 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ_NONE, 0, 7)) == 7 END 460 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 0, 3)) == 34152 END 461 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 2, 3)) == 41352 END 462 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_INSERT(SEQ, 4, 3)) == 41523 END 463 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_INSERT(SEQ_255, 0, 100)) == 256 END 464 BEGIN BOOST_PP_SEQ_ELEM(255,BOOST_PP_SEQ_INSERT(SEQ_255, 0, 100)) == 255 END 465 BEGIN BOOST_PP_SEQ_ELEM(0,BOOST_PP_SEQ_INSERT(SEQ_255, 0, 113)) == 113 END 466 467 # if BOOST_PP_LIMIT_SEQ == 512 468 469 BEGIN BOOST_PP_SEQ_ELEM(511,BOOST_PP_SEQ_INSERT(SEQ_511, 0, 0)) == 511 END 470 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_INSERT(SEQ_511, 510, 431)) == 512 END 471 472 #endif 473 474 # if BOOST_PP_LIMIT_SEQ == 1024 475 476 BEGIN BOOST_PP_SEQ_ELEM(1023,BOOST_PP_SEQ_INSERT(SEQ_1023, 0, 0)) == 1023 END 477 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_INSERT(SEQ_1023, 742, 29)) == 1024 END 478 479 #endif 480 481 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_BACK(SEQ)) == 415 END 482 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_POP_BACK(SEQ_256)) == 255 END 483 BEGIN BOOST_PP_SEQ_ELEM(254,BOOST_PP_SEQ_POP_BACK(SEQ_256)) == 255 END 484 BEGIN BOOST_PP_SEQ_ELEM(100,BOOST_PP_SEQ_POP_BACK(SEQ_256)) == 101 END 485 486 # if BOOST_PP_LIMIT_SEQ == 512 487 488 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_POP_BACK(SEQ_512)) == 511 END 489 BEGIN BOOST_PP_SEQ_ELEM(437,BOOST_PP_SEQ_POP_BACK(SEQ_511)) == 438 END 490 491 #endif 492 493 # if BOOST_PP_LIMIT_SEQ == 1024 494 495 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_POP_BACK(SEQ_1024)) == 1023 END 496 BEGIN BOOST_PP_SEQ_ELEM(632,BOOST_PP_SEQ_POP_BACK(SEQ_1023)) == 633 END 497 498 #endif 499 500 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_POP_FRONT(SEQ)) == 152 END 501 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_POP_FRONT(SEQ_256)) == 255 END 502 BEGIN BOOST_PP_SEQ_ELEM(0,BOOST_PP_SEQ_POP_FRONT(SEQ_256)) == 2 END 503 BEGIN BOOST_PP_SEQ_ELEM(254,BOOST_PP_SEQ_POP_FRONT(SEQ_256)) == 256 END 504 505 # if BOOST_PP_LIMIT_SEQ == 512 506 507 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_POP_FRONT(SEQ_512)) == 511 END 508 BEGIN BOOST_PP_SEQ_ELEM(347,BOOST_PP_SEQ_POP_FRONT(SEQ_512)) == 349 END 509 510 #endif 511 512 # if BOOST_PP_LIMIT_SEQ == 1024 513 514 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_POP_FRONT(SEQ_1024)) == 1023 END 515 BEGIN BOOST_PP_SEQ_ELEM(875,BOOST_PP_SEQ_POP_FRONT(SEQ_1024)) == 877 END 516 517 #endif 518 519 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_FRONT(SEQ_NONE, 145)) == 145 END 520 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_FRONT(SEQ, 3)) == 34152 END 521 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_PUSH_FRONT(SEQ_255, 57)) == 256 END 522 BEGIN BOOST_PP_SEQ_ELEM(0,BOOST_PP_SEQ_PUSH_FRONT(SEQ_255, 222)) == 222 END 523 BEGIN BOOST_PP_SEQ_ELEM(255,BOOST_PP_SEQ_PUSH_FRONT(SEQ_255, 111)) == 255 END 524 525 # if BOOST_PP_LIMIT_SEQ == 512 526 527 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_PUSH_FRONT(SEQ_511, 0)) == 512 END 528 BEGIN BOOST_PP_SEQ_ELEM(391,BOOST_PP_SEQ_PUSH_FRONT(SEQ_511, 435)) == 391 END 529 530 #endif 531 532 # if BOOST_PP_LIMIT_SEQ == 1024 533 534 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_PUSH_FRONT(SEQ_1023, 0)) == 1024 END 535 BEGIN BOOST_PP_SEQ_ELEM(961,BOOST_PP_SEQ_PUSH_FRONT(SEQ_1023, 435)) == 961 END 536 537 #endif 538 539 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_BACK(SEQ_NONE, 79)) == 79 END 540 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_PUSH_BACK(SEQ, 3)) == 41523 END 541 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_PUSH_BACK(SEQ_255, 199)) == 256 END 542 BEGIN BOOST_PP_SEQ_ELEM(254,BOOST_PP_SEQ_PUSH_BACK(SEQ_255, 99)) == 255 END 543 BEGIN BOOST_PP_SEQ_ELEM(255,BOOST_PP_SEQ_PUSH_BACK(SEQ_255, 99)) == 99 END 544 545 # if BOOST_PP_LIMIT_SEQ == 512 546 547 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_PUSH_BACK(SEQ_511, 275)) == 512 END 548 BEGIN BOOST_PP_SEQ_ELEM(473,BOOST_PP_SEQ_PUSH_BACK(SEQ_511, 78)) == 474 END 549 BEGIN BOOST_PP_SEQ_ELEM(511,BOOST_PP_SEQ_PUSH_BACK(SEQ_511, 78)) == 78 END 550 551 #endif 552 553 # if BOOST_PP_LIMIT_SEQ == 1024 554 555 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_PUSH_BACK(SEQ_1023, 275)) == 1024 END 556 BEGIN BOOST_PP_SEQ_ELEM(846,BOOST_PP_SEQ_PUSH_BACK(SEQ_1023, 720)) == 847 END 557 BEGIN BOOST_PP_SEQ_ELEM(1023,BOOST_PP_SEQ_PUSH_BACK(SEQ_1023, 311)) == 311 END 558 559 #endif 560 561 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 0)) == 152 END 562 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 2)) == 412 END 563 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REMOVE(SEQ, 3)) == 415 END 564 565 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_REMOVE(SEQ_255, 254)) == 254 END 566 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_REMOVE(SEQ_256, 255)) == 255 END 567 568 # if BOOST_PP_LIMIT_SEQ == 512 569 570 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_REMOVE(SEQ_511, 429)) == 510 END 571 BEGIN BOOST_PP_SEQ_ELEM(462,BOOST_PP_SEQ_REMOVE(SEQ_512, 374)) == 464 END 572 573 #endif 574 575 # if BOOST_PP_LIMIT_SEQ == 1024 576 577 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_REMOVE(SEQ_1023, 989)) == 1022 END 578 BEGIN BOOST_PP_SEQ_ELEM(731,BOOST_PP_SEQ_REMOVE(SEQ_1024, 555)) == 733 END 579 580 #endif 581 582 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ_NONE, 0, 22)) == 22 END 583 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 0, 3)) == 3152 END 584 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 1, 3)) == 4352 END 585 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_REPLACE(SEQ, 3, 3)) == 4153 END 586 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_REPLACE(SEQ_256, 255, 22)) == 256 END 587 BEGIN BOOST_PP_SEQ_ELEM(233,BOOST_PP_SEQ_REPLACE(SEQ_256, 255, 22)) == 234 END 588 BEGIN BOOST_PP_SEQ_ELEM(255,BOOST_PP_SEQ_REPLACE(SEQ_256, 255, 22)) == 22 END 589 590 # if BOOST_PP_LIMIT_SEQ == 512 591 592 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_REPLACE(SEQ_511, 509, 350)) == 511 END 593 BEGIN BOOST_PP_SEQ_ELEM(482,BOOST_PP_SEQ_REPLACE(SEQ_512, 436, 33)) == 483 END 594 BEGIN BOOST_PP_SEQ_ELEM(436,BOOST_PP_SEQ_REPLACE(SEQ_512, 436, 33)) == 33 END 595 596 #endif 597 598 # if BOOST_PP_LIMIT_SEQ == 1024 599 600 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_REPLACE(SEQ_1023, 846, 25)) == 1023 END 601 BEGIN BOOST_PP_SEQ_ELEM(984,BOOST_PP_SEQ_REPLACE(SEQ_1024, 841, 670)) == 985 END 602 BEGIN BOOST_PP_SEQ_ELEM(841,BOOST_PP_SEQ_REPLACE(SEQ_1024, 841, 670)) == 670 END 603 604 #endif 605 606 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 4)) == 4152 END 607 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 0, 2)) == 41 END 608 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 1, 2)) == 15 END 609 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_SUBSEQ(SEQ, 2, 2)) == 52 END 610 611 # if BOOST_PP_LIMIT_SEQ == 512 612 613 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_SUBSEQ(SEQ_511, 372, 5)) == 5 END 614 BEGIN BOOST_PP_SEQ_ELEM(14,BOOST_PP_SEQ_SUBSEQ(SEQ_512, 293, 17)) == 308 END 615 616 #endif 617 618 # if BOOST_PP_LIMIT_SEQ == 1024 619 620 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_SUBSEQ(SEQ_1023, 846, 5)) == 5 END 621 BEGIN BOOST_PP_SEQ_ELEM(16,BOOST_PP_SEQ_SUBSEQ(SEQ_1024, 843, 19)) == 860 END 622 623 #endif 624 625 # define F2(r, x) + BOOST_PP_SEQ_ELEM(0, x) + 2 - BOOST_PP_SEQ_ELEM(1, x) 626 627 #define ADD_NIL(x) x(nil) 628 629 BEGIN BOOST_PP_SEQ_FOR_EACH_PRODUCT(F2, ((1)(0)) ((2)(3))) == 0 END 630 631 # define L1 (0)(x) 632 # define L2 (a)(1)(b)(2) 633 # define L3 (c)(3)(d) 634 635 # define LL (L1)(L2)(L3) 636 637 #define SEQ_APPEND(s, state, elem) state elem 638 BEGIN BOOST_PP_SEQ_CAT(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 0x0a1b2c3d END 639 BEGIN BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_FOLD_LEFT(SEQ_APPEND, (~), LL))) == 9 END 640 641 BEGIN BOOST_PP_LIST_AT(BOOST_PP_SEQ_TO_LIST(SEQ), 2) == 5 END 642 BEGIN BOOST_PP_IS_EMPTY(BOOST_PP_LIST_AT(BOOST_PP_SEQ_TO_LIST(SEQ_NONE),0)) == 1 END 643 BEGIN BOOST_PP_LIST_SIZE(BOOST_PP_SEQ_TO_LIST(SEQ_NONE)) == 1 END 644 645 # if BOOST_PP_VARIADIC_HAS_OPT() 646 647 BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_SEQ_ENUM(SEQ_NONE)) == 0 END 648 649 # else 650 651 BEGIN BOOST_PP_VARIADIC_SIZE(BOOST_PP_SEQ_ENUM(SEQ_NONE)) == 1 END 652 653 # endif 654 655 BEGIN BOOST_PP_VARIADIC_ELEM(0,BOOST_PP_SEQ_ENUM(SEQ)) == 4 END 656 BEGIN BOOST_PP_TUPLE_ELEM(2,BOOST_PP_SEQ_ELEM(0,BOOST_PP_VARIADIC_SEQ_TO_SEQ(SEQVAR))) == 8 END 657