diff --git a/contrib/c-integer-semantics.py b/contrib/c-integer-semantics.py index ffdeecc851e061243ddb8ef4cb813d33197ea7ab..5e05ec6884c3c6b5b6c58d0080c6c0a52b91e2e4 100644 --- a/contrib/c-integer-semantics.py +++ b/contrib/c-integer-semantics.py @@ -19,13 +19,13 @@ int64_t cmod(int64_t a, int64_t b) } #define LOOPY_CALL_WITH_INTEGER_TYPES(MACRO_NAME) \ - MACRO_NAME(short) \ - MACRO_NAME(int) \ - MACRO_NAME(long) \ - MACRO_NAME(int64_t) + MACRO_NAME(int8, char) \ + MACRO_NAME(int16, short) \ + MACRO_NAME(int32, int) \ + MACRO_NAME(int64, long long) -#define LOOPY_DEFINE_FLOOR_DIV(TYPE) \ - TYPE loopy_floor_div_##TYPE(TYPE a, TYPE b) \ +#define LOOPY_DEFINE_FLOOR_DIV(SUFFIX, TYPE) \ + TYPE loopy_floor_div_##SUFFIX(TYPE a, TYPE b) \ { \ if ((a<0) != (b<0)) \ a = a - (b + (b<0) - (b>=0)); \ @@ -35,8 +35,8 @@ int64_t cmod(int64_t a, int64_t b) LOOPY_CALL_WITH_INTEGER_TYPES(LOOPY_DEFINE_FLOOR_DIV) #undef LOOPY_DEFINE_FLOOR_DIV -#define LOOPY_DEFINE_FLOOR_DIV_POS_B(TYPE) \ - TYPE loopy_floor_div_pos_b_##TYPE(TYPE a, TYPE b) \ +#define LOOPY_DEFINE_FLOOR_DIV_POS_B(SUFFIX, TYPE) \ + TYPE loopy_floor_div_pos_b_##SUFFIX(TYPE a, TYPE b) \ { \ if (a<0) \ a = a - (b-1); \ @@ -47,8 +47,8 @@ LOOPY_CALL_WITH_INTEGER_TYPES(LOOPY_DEFINE_FLOOR_DIV_POS_B) #undef LOOPY_DEFINE_FLOOR_DIV_POS_B -#define LOOPY_DEFINE_MOD_POS_B(TYPE) \ - TYPE loopy_mod_pos_b_##TYPE(TYPE a, TYPE b) \ +#define LOOPY_DEFINE_MOD_POS_B(SUFFIX, TYPE) \ + TYPE loopy_mod_pos_b_##SUFFIX(TYPE a, TYPE b) \ { \ TYPE result = a%b; \ if (result < 0) \ @@ -59,8 +59,8 @@ LOOPY_CALL_WITH_INTEGER_TYPES(LOOPY_DEFINE_FLOOR_DIV_POS_B) LOOPY_CALL_WITH_INTEGER_TYPES(LOOPY_DEFINE_MOD_POS_B) #undef LOOPY_DEFINE_MOD_POS_B -#define LOOPY_DEFINE_MOD(TYPE) \ - TYPE loopy_mod_##TYPE(TYPE a, TYPE b) \ +#define LOOPY_DEFINE_MOD(SUFFIX, TYPE) \ + TYPE loopy_mod_##SUFFIX(TYPE a, TYPE b) \ { \ TYPE result = a%b; \ if (result < 0 && b > 0) \ @@ -87,20 +87,20 @@ def main(): for func in [ int_exp.cdiv, int_exp.cmod, - int_exp.loopy_floor_div_int64_t, - int_exp.loopy_floor_div_pos_b_int64_t, - int_exp.loopy_mod_pos_b_int64_t, - int_exp.loopy_mod_int64_t, + int_exp.loopy_floor_div_int64, + int_exp.loopy_floor_div_pos_b_int64, + int_exp.loopy_mod_pos_b_int64, + int_exp.loopy_mod_int64, ]: func.argtypes = [ctypes.c_longlong, ctypes.c_longlong] func.restype = ctypes.c_longlong cdiv = int_exp.cdiv # noqa cmod = int_exp.cmod # noqa - int_floor_div = int_exp.loopy_floor_div_int64_t - int_floor_div_pos_b = int_exp.loopy_floor_div_pos_b_int64_t - int_mod_pos_b = int_exp.loopy_mod_pos_b_int64_t - int_mod = int_exp.loopy_mod_int64_t + int_floor_div = int_exp.loopy_floor_div_int64 + int_floor_div_pos_b = int_exp.loopy_floor_div_pos_b_int64 + int_mod_pos_b = int_exp.loopy_mod_pos_b_int64 + int_mod = int_exp.loopy_mod_int64 m = 50 @@ -140,6 +140,9 @@ def main(): if cresult != presult: print(a, b, cresult, presult) + #print(int_mod(552, -918), 552 % -918) + print(cmod(23, -11), 23 % -11) + if __name__ == "__main__": main()