diff --git a/include/boost/preprocessor/arithmetic/div.hpp b/include/boost/preprocessor/arithmetic/div.hpp index 8a8f0f7..4ca78cc 100644 --- a/include/boost/preprocessor/arithmetic/div.hpp +++ b/include/boost/preprocessor/arithmetic/div.hpp @@ -18,12 +18,12 @@ # include # include # include -# include # include +# include # # /* BOOST_PP_DIV */ # -# define BOOST_PP_DIV(x, y) BOOST_PP_IIF(BOOST_PP_IS_1(y),BOOST_PP_IDENTITY_N(x,2),BOOST_PP_DIV_DO)(x,y) +# define BOOST_PP_DIV(x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(y),BOOST_PP_IDENTITY_N(x,2),BOOST_PP_DIV_DO)(x,y) # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() # define BOOST_PP_DIV_DO(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE(x, y)) @@ -34,7 +34,7 @@ # # /* BOOST_PP_DIV_D */ # -# define BOOST_PP_DIV_D(d, x, y) BOOST_PP_IIF(BOOST_PP_IS_1(y),BOOST_PP_IDENTITY_N(x,3),BOOST_PP_DIV_DO_D)(d,x,y) +# define BOOST_PP_DIV_D(d, x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(y),BOOST_PP_IDENTITY_N(x,3),BOOST_PP_DIV_DO_D)(d,x,y) # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() # define BOOST_PP_DIV_DO_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_DIV_BASE_D(d, x, y)) diff --git a/include/boost/preprocessor/arithmetic/mod.hpp b/include/boost/preprocessor/arithmetic/mod.hpp index 54c8924..cc5f39f 100644 --- a/include/boost/preprocessor/arithmetic/mod.hpp +++ b/include/boost/preprocessor/arithmetic/mod.hpp @@ -18,12 +18,12 @@ # include # include # include -# include # include +# include # # /* BOOST_PP_MOD */ # -# define BOOST_PP_MOD(x, y) BOOST_PP_IIF(BOOST_PP_IS_1(y),BOOST_PP_IDENTITY_N(0,2),BOOST_PP_MOD_DO)(x,y) +# define BOOST_PP_MOD(x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(y),BOOST_PP_IDENTITY_N(0,2),BOOST_PP_MOD_DO)(x,y) # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() # define BOOST_PP_MOD_DO(x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE(x, y)) @@ -34,7 +34,7 @@ # # /* BOOST_PP_MOD_D */ # -# define BOOST_PP_MOD_D(d, x, y) BOOST_PP_IIF(BOOST_PP_IS_1(y),BOOST_PP_IDENTITY_N(0,3),BOOST_PP_MOD_DO_D)(d,x,y) +# define BOOST_PP_MOD_D(d, x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(y),BOOST_PP_IDENTITY_N(0,3),BOOST_PP_MOD_DO_D)(d,x,y) # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() # define BOOST_PP_MOD_DO_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 1, BOOST_PP_DIV_BASE_D(d, x, y)) diff --git a/include/boost/preprocessor/arithmetic/mul.hpp b/include/boost/preprocessor/arithmetic/mul.hpp index 9adead5..5cb4b07 100644 --- a/include/boost/preprocessor/arithmetic/mul.hpp +++ b/include/boost/preprocessor/arithmetic/mul.hpp @@ -20,7 +20,6 @@ # include # include # include -# include # include # include # include @@ -29,15 +28,16 @@ # include # include # include +# include # # /* BOOST_PP_MUL */ # # define BOOST_PP_MUL(x, y) \ BOOST_PP_IIF(BOOST_PP_BITOR(BOOST_PP_DETAIL_IS_MINIMUM_NUMBER(x),BOOST_PP_DETAIL_IS_MINIMUM_NUMBER(y)),BOOST_PP_IDENTITY_N(0,2),BOOST_PP_MUL_CHECK_1X)(x,y) # -# define BOOST_PP_MUL_CHECK_1X(x, y) BOOST_PP_IIF(BOOST_PP_IS_1(x),BOOST_PP_IDENTITY_N(y,2),BOOST_PP_MUL_CHECK_1Y)(x,y) +# define BOOST_PP_MUL_CHECK_1X(x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(x),BOOST_PP_IDENTITY_N(y,2),BOOST_PP_MUL_CHECK_1Y)(x,y) # -# define BOOST_PP_MUL_CHECK_1Y(x, y) BOOST_PP_IIF(BOOST_PP_IS_1(y),BOOST_PP_IDENTITY_N(x,2),BOOST_PP_MUL_DO)(x,y) +# define BOOST_PP_MUL_CHECK_1Y(x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(y),BOOST_PP_IDENTITY_N(x,2),BOOST_PP_MUL_DO)(x,y) # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() # define BOOST_PP_MUL_DO(x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y))) @@ -62,9 +62,9 @@ # define BOOST_PP_MUL_D(d, x, y) \ BOOST_PP_IIF(BOOST_PP_BITOR(BOOST_PP_DETAIL_IS_MINIMUM_NUMBER(x),BOOST_PP_DETAIL_IS_MINIMUM_NUMBER(y)),BOOST_PP_IDENTITY_N(0,3),BOOST_PP_MUL_CHECK_1X_D)(d,x,y) # -# define BOOST_PP_MUL_CHECK_1X_D(d, x, y) BOOST_PP_IIF(BOOST_PP_IS_1(x),BOOST_PP_IDENTITY_N(y,3),BOOST_PP_MUL_CHECK_1Y)(d,x,y) +# define BOOST_PP_MUL_CHECK_1X_D(d, x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(x),BOOST_PP_IDENTITY_N(y,3),BOOST_PP_MUL_CHECK_1Y)(d,x,y) # -# define BOOST_PP_MUL_CHECK_1Y_D(d, x, y) BOOST_PP_IIF(BOOST_PP_IS_1(y),BOOST_PP_IDENTITY_N(x,3),BOOST_PP_MUL_DO_D)(d,x,y) +# define BOOST_PP_MUL_CHECK_1Y_D(d, x, y) BOOST_PP_IIF(BOOST_PP_DETAIL_IS_1_NUMBER(y),BOOST_PP_IDENTITY_N(x,3),BOOST_PP_MUL_DO_D)(d,x,y) # # if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() # define BOOST_PP_MUL_DO_D(d, x, y) BOOST_PP_TUPLE_ELEM(3, 0, BOOST_PP_WHILE_ ## d(BOOST_PP_MUL_P, BOOST_PP_MUL_O, (0, x, y))) diff --git a/test/arithmetic.cxx b/test/arithmetic.cxx index 65116fd..b786d86 100644 --- a/test/arithmetic.cxx +++ b/test/arithmetic.cxx @@ -17,6 +17,10 @@ BEGIN BOOST_PP_ADD(2, 3) == 5 END +BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), 2) == 6 END +BEGIN BOOST_PP_ADD(2, BOOST_PP_ADD(1, 4)) == 7 END +BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), BOOST_PP_ADD(2, 2)) == 8 END + #if BOOST_PP_LIMIT_MAG == 256 BEGIN BOOST_PP_ADD(1, 256) == 256 END @@ -28,10 +32,6 @@ BEGIN BOOST_PP_ADD(255, 1) == 256 END #endif -BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), 2) == 6 END -BEGIN BOOST_PP_ADD(2, BOOST_PP_ADD(1, 4)) == 7 END -BEGIN BOOST_PP_ADD(BOOST_PP_ADD(2, 2), BOOST_PP_ADD(2, 2)) == 8 END - #if BOOST_PP_LIMIT_MAG == 512 BEGIN BOOST_PP_ADD(374, 129) == 503 END @@ -94,16 +94,19 @@ BEGIN BOOST_PP_MUL(2, BOOST_PP_MUL(2, 2)) == 8 END BEGIN BOOST_PP_MUL(BOOST_PP_MUL(2, 2), BOOST_PP_MUL(2, 2)) == 16 END BEGIN BOOST_PP_MUL(0, BOOST_PP_LIMIT_MAG) == 0 END +BEGIN BOOST_PP_MUL(1, BOOST_PP_LIMIT_MAG) == BOOST_PP_LIMIT_MAG END BEGIN BOOST_PP_MUL(2, BOOST_PP_LIMIT_MAG) == BOOST_PP_LIMIT_MAG END BEGIN BOOST_PP_MUL(BOOST_PP_LIMIT_MAG, 0) == 0 END +BEGIN BOOST_PP_MUL(BOOST_PP_LIMIT_MAG, 1) == BOOST_PP_LIMIT_MAG END BEGIN BOOST_PP_MUL(BOOST_PP_LIMIT_MAG, 2) == BOOST_PP_LIMIT_MAG END #if BOOST_PP_LIMIT_MAG == 256 -BEGIN BOOST_PP_MUL(2, 255) == 256 END -BEGIN BOOST_PP_MUL(255, 2) == 256 END BEGIN BOOST_PP_MUL(17, 17) == 256 END BEGIN BOOST_PP_MUL(1, 255) == 255 END +BEGIN BOOST_PP_MUL(2, 255) == 256 END +BEGIN BOOST_PP_MUL(255, 1) == 255 END +BEGIN BOOST_PP_MUL(255, 2) == 256 END #endif