diff --git a/README.md b/README.md index 9973779a..b6f955ce 100644 --- a/README.md +++ b/README.md @@ -5446,6 +5446,11 @@ x and y shall be within [0..M\_MAX\_NB\_ARGUMENT]. Return 1 if x == y, 0 otherwise (resolution is performed at preprocessing time). x and y shall be within [0..M\_MAX\_NB\_ARGUMENT]. +##### M\_LESS\_THAN\_P(x, y) + +Return 1 if x < y, 0 otherwise (resolution is performed at preprocessing time). +x and y shall be within [0..M\_MAX\_NB\_ARGUMENT].x + ##### M\_COMMA\_P(arglist) Return 1 if there is a comma inside the argument list, 0 otherwise. diff --git a/m-core.h b/m-core.h index ecca701b..f97700bf 100644 --- a/m-core.h +++ b/m-core.h @@ -443,14 +443,17 @@ M_BEGIN_PROTECTED_CODE #define M_INC_50 51 #define M_INC_51 52 #define M_INC_52 53 -#define M_INC_53 M_INC_overflow_detected +#define M_INC_53 OVERFLOW +#define M_INC_OVERFLOW OVERFLOW + /* Decrement the number given in argument (from [0..52[) Generated by: for i in $(seq 1 52) ; do printf "#define M_DEC_%d %d\n" $i $(($i - 1)) ; done */ #define M_DEC(x) M_C(M_DEC_, x) -#define M_DEC_0 M_DEC_underflow_detected +#define M_DEC_UNDERFLOW UNDERFLOW +#define M_DEC_0 UNDERFLOW #define M_DEC_1 0 #define M_DEC_2 1 #define M_DEC_3 2 @@ -1100,6 +1103,8 @@ M_BEGIN_PROTECTED_CODE #define M_PATTERN_TYPE_TYPE , #define M_PATTERN_SUBTYPE_SUBTYPE , #define M_PATTERN_IT_TYPE_IT_TYPE , +#define M_PATTERN_UNDERFLOW_UNDERFLOW , +#define M_PATTERN_OVERFLOW_OVERFLOW , /* Necessary macros to handle recursivity, @@ -1732,6 +1737,10 @@ M_BEGIN_PROTECTED_CODE */ #define M_EQUAL(x,y) M_INV(M_NOTEQUAL(x,y)) +/* Return 1 if a < b, 0 otherwise + a and b shall be in [0..M_MAX_NB_ARGUMENT] */ +#define M_LESS_THAN_P(a, b) M_KEYWORD_P(UNDERFLOW, M_SUB(a, b)) + /* Revert the list given as parameter Example: M_REVERSE(a,b,c) --> (c,b,a) */ /* Generated by: diff --git a/tests/test-mcore.c b/tests/test-mcore.c index a82d2c7a..13847307 100644 --- a/tests/test-mcore.c +++ b/tests/test-mcore.c @@ -112,6 +112,29 @@ static void test_incdec(void) assert( M_ADD(2,5) == M_SUB(10,3)); assert( M_ADD(5,15) == M_SUB(25,5)); + + assert(M_EQUAL(2, 2)); + assert(!M_EQUAL(1, 2)); + assert(M_EQUAL(52, 52)); + + assert(!M_NOTEQUAL(2, 2)); + assert(M_NOTEQUAL(1, 2)); + assert(!M_NOTEQUAL(52, 52)); + + assert(!M_LESS_THAN_P(4, 2)); + assert(!M_LESS_THAN_P(4, 3)); + assert(!M_LESS_THAN_P(4, 4)); + assert(M_LESS_THAN_P(4, 5)); + assert(M_LESS_THAN_P(4, 6)); + assert(M_LESS_THAN_P(4, 7)); + + assert(!M_KEYWORD_P(UNDERFLOW, M_SUB(1, 1))); + assert(M_KEYWORD_P(UNDERFLOW, M_SUB(1, 2))); + assert(M_KEYWORD_P(UNDERFLOW, M_SUB(1, 6))); + assert(M_KEYWORD_P(UNDERFLOW, M_SUB(1, 5))); + assert(!M_KEYWORD_P(OVERFLOW, M_ADD(M_MAX_NB_ARGUMENT, 1))); + assert(M_KEYWORD_P(OVERFLOW, M_ADD(M_MAX_NB_ARGUMENT, 2))); + assert(M_KEYWORD_P(OVERFLOW, M_ADD(M_MAX_NB_ARGUMENT, 3))); } static void test_return(void)