From c79626225b5522aac252c840f1b7e465a9fa2f96 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Wed, 20 Sep 2017 23:40:22 +0200 Subject: [PATCH] Rewrite M_REDUCE to be much faster. Rewrite M_SEQ to be much faster. Change interface of M_SEQ as we can easily apply M_MAP / M_MAP2 to further apply macro. --- m-core.h | 445 +++++++++++++++++++++++++++++++++++++++++++-- tests/test-mcore.c | 4 +- 2 files changed, 428 insertions(+), 21 deletions(-) diff --git a/m-core.h b/m-core.h index daddb798..88081221 100644 --- a/m-core.h +++ b/m-core.h @@ -278,6 +278,9 @@ M_APPLY_FUNC(func, z) #define M_MAP(f, ...) M_MAPI_0(f, __VA_ARGS__, , , , , , , , , , , , , , , , , , , , , , , , , , ) +// TODO: M_MAP_C(f, a, b, c) ==> f(a), f(b), f(c) +// TODO: M_MAP2_C(f, d, a, b, c) ==> f(d, a), f(d, b), f(d, c) + /* Map a macro to all given arguments with one additional fixed data (non recursive version) */ /* Example: M_MAP2(f, data, a, b, c) ==> f(data,a) f(data,b) f(data,c) */ #define M_MAP2I_0(func, data, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, ...) \ @@ -292,9 +295,11 @@ M_APPLY_FUNC2(func, data, y) M_APPLY_FUNC2(func, data, z) #define M_MAP2(f, ...) M_MAP2I_0(f, __VA_ARGS__, , , , , , , , , , , , , , , , , , , , , , , , , , , ) + /* Duplicate of macros for GET_METHOD as it may be called in context where a M_MAP2 is in progress. NOTE: Increase number of arguments to 52 due to the number of available methods. NOTE: Rewrite with another approach much more verbose but also much faster for the compiler. + This kind of approach seems ugly, but is in fact the fast one. NOTE: Do not call recursively the macro (example: M_MAP2B_10 expands f(d,e) then call M_MAP2B_9 on what remains to break as soon as possible the macro "chain". Generated by the following command: for i in $(seq 1 52) ; do printf "#define M_MAP2B_%d(f, d" $i ; for j in $(seq 1 $i) ; do printf ", _%d" $j ; done ; printf ") " ; for j in $(seq 1 $i) ; do printf "f(d, _%d) " $j ; done ; printf "\n"; done @@ -363,14 +368,42 @@ #define M_MAP_PAIR_L1(f, a, b, ...) f(a,b) M_DELAY3(M_MAP_PAIR_L0_INDIRECT) () (f, __VA_ARGS__) #define M_MAP_PAIR(f, ...) M_IF_EMPTY(__VA_ARGS__)( /* end */, M_EVAL(M_MAP_PAIR_L0(f, __VA_ARGS__))) + /* Map a macro to all given arguments and reduce all theses computation - with another reduce macro (using recursivity) */ + with another reduce macro */ /* Example: M_REDUCE(f, g, a, b, c) ==> g( f(a), g( f(b), f(c)) */ -#define M_REDUCE_L0_INDIRECT() M_REDUCE_L0 -#define M_REDUCE_L1(f, g, cur, a, ...) M_DELAY3(M_REDUCE_L0_INDIRECT) () (f, g, g(cur, f(a)), __VA_ARGS__) -#define M_REDUCE_L0(f, g, cur, ...) M_IF_NARGS_EQ1(__VA_ARGS__)( g(cur, f(__VA_ARGS__)) , M_REDUCE_L1(f, g, cur, __VA_ARGS__)) -#define M_REDUCE1(f, g, a, ...) M_EVAL(M_REDUCE_L0(f, g, f(a), __VA_ARGS__)) -#define M_REDUCE(f, g, ...) M_IF_NARGS_EQ1(__VA_ARGS__)( f(__VA_ARGS__), M_REDUCE1(f, g, __VA_ARGS__)) +/* Generated by: + for i in $(seq 1 26) ; do printf "#define M_REDUCEI1_%d(f, g" $i ; for j in $(seq 1 $i) ; do printf ", _%d" $j ; done ; printf ") "; for j in $(seq 1 $(( $i - 1 )) ) ; do printf "g(f(_%d), " $j; done ; printf "f(_%d" $i; for j in $(seq 1 $i); do printf ")"; done ; printf "\n"; done +*/ +#define M_REDUCE(f, g, ...) M_REDUCEI1_0(M_C(M_REDUCEI1_, M_NARGS(__VA_ARGS__)), f, g, __VA_ARGS__) +#define M_REDUCEI1_0(F, ...) F(__VA_ARGS__) +#define M_REDUCEI1_1(f, g, _1) f(_1) +#define M_REDUCEI1_2(f, g, _1, _2) g(f(_1), f(_2)) +#define M_REDUCEI1_3(f, g, _1, _2, _3) g(f(_1), g(f(_2), f(_3))) +#define M_REDUCEI1_4(f, g, _1, _2, _3, _4) g(f(_1), g(f(_2), g(f(_3), f(_4)))) +#define M_REDUCEI1_5(f, g, _1, _2, _3, _4, _5) g(f(_1), g(f(_2), g(f(_3), g(f(_4), f(_5))))) +#define M_REDUCEI1_6(f, g, _1, _2, _3, _4, _5, _6) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), f(_6)))))) +#define M_REDUCEI1_7(f, g, _1, _2, _3, _4, _5, _6, _7) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), f(_7))))))) +#define M_REDUCEI1_8(f, g, _1, _2, _3, _4, _5, _6, _7, _8) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), f(_8)))))))) +#define M_REDUCEI1_9(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), f(_9))))))))) +#define M_REDUCEI1_10(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), f(_10)))))))))) +#define M_REDUCEI1_11(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), f(_11))))))))))) +#define M_REDUCEI1_12(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), f(_12)))))))))))) +#define M_REDUCEI1_13(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), f(_13))))))))))))) +#define M_REDUCEI1_14(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), f(_14)))))))))))))) +#define M_REDUCEI1_15(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), f(_15))))))))))))))) +#define M_REDUCEI1_16(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), f(_16)))))))))))))))) +#define M_REDUCEI1_17(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), f(_17))))))))))))))))) +#define M_REDUCEI1_18(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), f(_18)))))))))))))))))) +#define M_REDUCEI1_19(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), f(_19))))))))))))))))))) +#define M_REDUCEI1_20(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), g(f(_19), f(_20)))))))))))))))))))) +#define M_REDUCEI1_21(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), g(f(_19), g(f(_20), f(_21))))))))))))))))))))) +#define M_REDUCEI1_22(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), g(f(_19), g(f(_20), g(f(_21), f(_22)))))))))))))))))))))) +#define M_REDUCEI1_23(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), g(f(_19), g(f(_20), g(f(_21), g(f(_22), f(_23))))))))))))))))))))))) +#define M_REDUCEI1_24(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), g(f(_19), g(f(_20), g(f(_21), g(f(_22), g(f(_23), f(_24)))))))))))))))))))))))) +#define M_REDUCEI1_25(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), g(f(_19), g(f(_20), g(f(_21), g(f(_22), g(f(_23), g(f(_24), f(_25))))))))))))))))))))))))) +#define M_REDUCEI1_26(f, g, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26) g(f(_1), g(f(_2), g(f(_3), g(f(_4), g(f(_5), g(f(_6), g(f(_7), g(f(_8), g(f(_9), g(f(_10), g(f(_11), g(f(_12), g(f(_13), g(f(_14), g(f(_15), g(f(_16), g(f(_17), g(f(_18), g(f(_19), g(f(_20), g(f(_21), g(f(_22), g(f(_23), g(f(_24), g(f(_25), f(_26)))))))))))))))))))))))))) + /* Map a macro to all given arguments and reduce all theses computation with another reduce macro with an argument (non-recursive way - should be way faster): @@ -411,19 +444,393 @@ #define M_REDUCEI_26(f1,g1,d1,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) g1(M_REDUCEI_12(f1,g1,d1,a,b,c,d,e,f,g,h,i,j,k,l,m),M_REDUCEI_12(f1,g1,d1,n,o,p,q,r,s,t,u,v,w,x,y,z)) -/* Sequence of numerical (using recursivity) */ -/* Example: M_SEQ(init,end, macro)==>macro(init), macro(init+1), ...macro(end) */ -#define M_SEQ_L0_INDIRECT() M_SEQ_L0 -#define M_SEQ_L0(current,end,f) M_IF(M_EQUAL(current, end))( f(current) , M_SEQ_L1(current, end, f)) -#define M_SEQ_L1(current,end,f) f(current) , M_DELAY3(M_SEQ_L0_INDIRECT) () (M_INC(current), end, f) -#define M_SEQ(init,end,f) M_EVAL(M_SEQ_L0(init,end,f)) - -/* Sequence of numerical with data (using recursivity) */ -/* Example: M_SEQ2(init, end, macro, data)==>macro(data, init), macro(data, init+1), ...macro(data, end) */ -#define M_SEQ2_L0_INDIRECT() M_SEQ2_L0 -#define M_SEQ2_L0(current,end,f,d) M_IF(M_EQUAL(current, end))( f(d, current) , M_SEQ2_L1(current, end, f, d)) -#define M_SEQ2_L1(current,end,f,d) f(d,current) , M_DELAY3(M_SEQ2_L0_INDIRECT) () (M_INC(current), end, f, d) -#define M_SEQ2(init,end,f,data) M_EVAL(M_SEQ2_L0(init,end,f,data)) +/* Sequence of numerical */ +/* Example: + M_SEQ(init,end)==>init, init+1, ...end + M_MAP(f, M_SEQ(init, end)) ==> f(init) f(init+1) .... f(end) + M_MAP2(f, d, M_SEQ(init, end)) +*/ +/* Generated by: + for i in $(seq 0 26); do for j in $(seq $i 26) ; do printf "#define M_SEQI_%d_%d " $i $j; for k in $(seq $i $(($j - 1))) ; do printf "%d," $k ;done ; printf "%d\n" $j; done ; done */ +#define M_SEQ(first, last) M_C4(M_SEQI_, first, _, last) +#define M_SEQI_0_0 0 +#define M_SEQI_0_1 0,1 +#define M_SEQI_0_2 0,1,2 +#define M_SEQI_0_3 0,1,2,3 +#define M_SEQI_0_4 0,1,2,3,4 +#define M_SEQI_0_5 0,1,2,3,4,5 +#define M_SEQI_0_6 0,1,2,3,4,5,6 +#define M_SEQI_0_7 0,1,2,3,4,5,6,7 +#define M_SEQI_0_8 0,1,2,3,4,5,6,7,8 +#define M_SEQI_0_9 0,1,2,3,4,5,6,7,8,9 +#define M_SEQI_0_10 0,1,2,3,4,5,6,7,8,9,10 +#define M_SEQI_0_11 0,1,2,3,4,5,6,7,8,9,10,11 +#define M_SEQI_0_12 0,1,2,3,4,5,6,7,8,9,10,11,12 +#define M_SEQI_0_13 0,1,2,3,4,5,6,7,8,9,10,11,12,13 +#define M_SEQI_0_14 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 +#define M_SEQI_0_15 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +#define M_SEQI_0_16 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_0_17 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_0_18 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_0_19 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_0_20 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_0_21 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_0_22 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_0_23 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_0_24 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_0_25 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_0_26 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_1_1 1 +#define M_SEQI_1_2 1,2 +#define M_SEQI_1_3 1,2,3 +#define M_SEQI_1_4 1,2,3,4 +#define M_SEQI_1_5 1,2,3,4,5 +#define M_SEQI_1_6 1,2,3,4,5,6 +#define M_SEQI_1_7 1,2,3,4,5,6,7 +#define M_SEQI_1_8 1,2,3,4,5,6,7,8 +#define M_SEQI_1_9 1,2,3,4,5,6,7,8,9 +#define M_SEQI_1_10 1,2,3,4,5,6,7,8,9,10 +#define M_SEQI_1_11 1,2,3,4,5,6,7,8,9,10,11 +#define M_SEQI_1_12 1,2,3,4,5,6,7,8,9,10,11,12 +#define M_SEQI_1_13 1,2,3,4,5,6,7,8,9,10,11,12,13 +#define M_SEQI_1_14 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +#define M_SEQI_1_15 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +#define M_SEQI_1_16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_1_17 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_1_18 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_1_19 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_1_20 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_1_21 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_1_22 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_1_23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_1_24 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_1_25 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_1_26 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_2_2 2 +#define M_SEQI_2_3 2,3 +#define M_SEQI_2_4 2,3,4 +#define M_SEQI_2_5 2,3,4,5 +#define M_SEQI_2_6 2,3,4,5,6 +#define M_SEQI_2_7 2,3,4,5,6,7 +#define M_SEQI_2_8 2,3,4,5,6,7,8 +#define M_SEQI_2_9 2,3,4,5,6,7,8,9 +#define M_SEQI_2_10 2,3,4,5,6,7,8,9,10 +#define M_SEQI_2_11 2,3,4,5,6,7,8,9,10,11 +#define M_SEQI_2_12 2,3,4,5,6,7,8,9,10,11,12 +#define M_SEQI_2_13 2,3,4,5,6,7,8,9,10,11,12,13 +#define M_SEQI_2_14 2,3,4,5,6,7,8,9,10,11,12,13,14 +#define M_SEQI_2_15 2,3,4,5,6,7,8,9,10,11,12,13,14,15 +#define M_SEQI_2_16 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_2_17 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_2_18 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_2_19 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_2_20 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_2_21 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_2_22 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_2_23 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_2_24 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_2_25 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_2_26 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_3_3 3 +#define M_SEQI_3_4 3,4 +#define M_SEQI_3_5 3,4,5 +#define M_SEQI_3_6 3,4,5,6 +#define M_SEQI_3_7 3,4,5,6,7 +#define M_SEQI_3_8 3,4,5,6,7,8 +#define M_SEQI_3_9 3,4,5,6,7,8,9 +#define M_SEQI_3_10 3,4,5,6,7,8,9,10 +#define M_SEQI_3_11 3,4,5,6,7,8,9,10,11 +#define M_SEQI_3_12 3,4,5,6,7,8,9,10,11,12 +#define M_SEQI_3_13 3,4,5,6,7,8,9,10,11,12,13 +#define M_SEQI_3_14 3,4,5,6,7,8,9,10,11,12,13,14 +#define M_SEQI_3_15 3,4,5,6,7,8,9,10,11,12,13,14,15 +#define M_SEQI_3_16 3,4,5,6,7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_3_17 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_3_18 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_3_19 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_3_20 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_3_21 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_3_22 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_3_23 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_3_24 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_3_25 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_3_26 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_4_4 4 +#define M_SEQI_4_5 4,5 +#define M_SEQI_4_6 4,5,6 +#define M_SEQI_4_7 4,5,6,7 +#define M_SEQI_4_8 4,5,6,7,8 +#define M_SEQI_4_9 4,5,6,7,8,9 +#define M_SEQI_4_10 4,5,6,7,8,9,10 +#define M_SEQI_4_11 4,5,6,7,8,9,10,11 +#define M_SEQI_4_12 4,5,6,7,8,9,10,11,12 +#define M_SEQI_4_13 4,5,6,7,8,9,10,11,12,13 +#define M_SEQI_4_14 4,5,6,7,8,9,10,11,12,13,14 +#define M_SEQI_4_15 4,5,6,7,8,9,10,11,12,13,14,15 +#define M_SEQI_4_16 4,5,6,7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_4_17 4,5,6,7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_4_18 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_4_19 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_4_20 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_4_21 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_4_22 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_4_23 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_4_24 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_4_25 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_4_26 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_5_5 5 +#define M_SEQI_5_6 5,6 +#define M_SEQI_5_7 5,6,7 +#define M_SEQI_5_8 5,6,7,8 +#define M_SEQI_5_9 5,6,7,8,9 +#define M_SEQI_5_10 5,6,7,8,9,10 +#define M_SEQI_5_11 5,6,7,8,9,10,11 +#define M_SEQI_5_12 5,6,7,8,9,10,11,12 +#define M_SEQI_5_13 5,6,7,8,9,10,11,12,13 +#define M_SEQI_5_14 5,6,7,8,9,10,11,12,13,14 +#define M_SEQI_5_15 5,6,7,8,9,10,11,12,13,14,15 +#define M_SEQI_5_16 5,6,7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_5_17 5,6,7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_5_18 5,6,7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_5_19 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_5_20 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_5_21 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_5_22 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_5_23 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_5_24 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_5_25 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_5_26 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_6_6 6 +#define M_SEQI_6_7 6,7 +#define M_SEQI_6_8 6,7,8 +#define M_SEQI_6_9 6,7,8,9 +#define M_SEQI_6_10 6,7,8,9,10 +#define M_SEQI_6_11 6,7,8,9,10,11 +#define M_SEQI_6_12 6,7,8,9,10,11,12 +#define M_SEQI_6_13 6,7,8,9,10,11,12,13 +#define M_SEQI_6_14 6,7,8,9,10,11,12,13,14 +#define M_SEQI_6_15 6,7,8,9,10,11,12,13,14,15 +#define M_SEQI_6_16 6,7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_6_17 6,7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_6_18 6,7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_6_19 6,7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_6_20 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_6_21 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_6_22 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_6_23 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_6_24 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_6_25 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_6_26 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_7_7 7 +#define M_SEQI_7_8 7,8 +#define M_SEQI_7_9 7,8,9 +#define M_SEQI_7_10 7,8,9,10 +#define M_SEQI_7_11 7,8,9,10,11 +#define M_SEQI_7_12 7,8,9,10,11,12 +#define M_SEQI_7_13 7,8,9,10,11,12,13 +#define M_SEQI_7_14 7,8,9,10,11,12,13,14 +#define M_SEQI_7_15 7,8,9,10,11,12,13,14,15 +#define M_SEQI_7_16 7,8,9,10,11,12,13,14,15,16 +#define M_SEQI_7_17 7,8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_7_18 7,8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_7_19 7,8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_7_20 7,8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_7_21 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_7_22 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_7_23 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_7_24 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_7_25 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_7_26 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_8_8 8 +#define M_SEQI_8_9 8,9 +#define M_SEQI_8_10 8,9,10 +#define M_SEQI_8_11 8,9,10,11 +#define M_SEQI_8_12 8,9,10,11,12 +#define M_SEQI_8_13 8,9,10,11,12,13 +#define M_SEQI_8_14 8,9,10,11,12,13,14 +#define M_SEQI_8_15 8,9,10,11,12,13,14,15 +#define M_SEQI_8_16 8,9,10,11,12,13,14,15,16 +#define M_SEQI_8_17 8,9,10,11,12,13,14,15,16,17 +#define M_SEQI_8_18 8,9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_8_19 8,9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_8_20 8,9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_8_21 8,9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_8_22 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_8_23 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_8_24 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_8_25 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_8_26 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_9_9 9 +#define M_SEQI_9_10 9,10 +#define M_SEQI_9_11 9,10,11 +#define M_SEQI_9_12 9,10,11,12 +#define M_SEQI_9_13 9,10,11,12,13 +#define M_SEQI_9_14 9,10,11,12,13,14 +#define M_SEQI_9_15 9,10,11,12,13,14,15 +#define M_SEQI_9_16 9,10,11,12,13,14,15,16 +#define M_SEQI_9_17 9,10,11,12,13,14,15,16,17 +#define M_SEQI_9_18 9,10,11,12,13,14,15,16,17,18 +#define M_SEQI_9_19 9,10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_9_20 9,10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_9_21 9,10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_9_22 9,10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_9_23 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_9_24 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_9_25 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_9_26 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_10_10 10 +#define M_SEQI_10_11 10,11 +#define M_SEQI_10_12 10,11,12 +#define M_SEQI_10_13 10,11,12,13 +#define M_SEQI_10_14 10,11,12,13,14 +#define M_SEQI_10_15 10,11,12,13,14,15 +#define M_SEQI_10_16 10,11,12,13,14,15,16 +#define M_SEQI_10_17 10,11,12,13,14,15,16,17 +#define M_SEQI_10_18 10,11,12,13,14,15,16,17,18 +#define M_SEQI_10_19 10,11,12,13,14,15,16,17,18,19 +#define M_SEQI_10_20 10,11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_10_21 10,11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_10_22 10,11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_10_23 10,11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_10_24 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_10_25 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_10_26 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_11_11 11 +#define M_SEQI_11_12 11,12 +#define M_SEQI_11_13 11,12,13 +#define M_SEQI_11_14 11,12,13,14 +#define M_SEQI_11_15 11,12,13,14,15 +#define M_SEQI_11_16 11,12,13,14,15,16 +#define M_SEQI_11_17 11,12,13,14,15,16,17 +#define M_SEQI_11_18 11,12,13,14,15,16,17,18 +#define M_SEQI_11_19 11,12,13,14,15,16,17,18,19 +#define M_SEQI_11_20 11,12,13,14,15,16,17,18,19,20 +#define M_SEQI_11_21 11,12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_11_22 11,12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_11_23 11,12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_11_24 11,12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_11_25 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_11_26 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_12_12 12 +#define M_SEQI_12_13 12,13 +#define M_SEQI_12_14 12,13,14 +#define M_SEQI_12_15 12,13,14,15 +#define M_SEQI_12_16 12,13,14,15,16 +#define M_SEQI_12_17 12,13,14,15,16,17 +#define M_SEQI_12_18 12,13,14,15,16,17,18 +#define M_SEQI_12_19 12,13,14,15,16,17,18,19 +#define M_SEQI_12_20 12,13,14,15,16,17,18,19,20 +#define M_SEQI_12_21 12,13,14,15,16,17,18,19,20,21 +#define M_SEQI_12_22 12,13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_12_23 12,13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_12_24 12,13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_12_25 12,13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_12_26 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_13_13 13 +#define M_SEQI_13_14 13,14 +#define M_SEQI_13_15 13,14,15 +#define M_SEQI_13_16 13,14,15,16 +#define M_SEQI_13_17 13,14,15,16,17 +#define M_SEQI_13_18 13,14,15,16,17,18 +#define M_SEQI_13_19 13,14,15,16,17,18,19 +#define M_SEQI_13_20 13,14,15,16,17,18,19,20 +#define M_SEQI_13_21 13,14,15,16,17,18,19,20,21 +#define M_SEQI_13_22 13,14,15,16,17,18,19,20,21,22 +#define M_SEQI_13_23 13,14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_13_24 13,14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_13_25 13,14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_13_26 13,14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_14_14 14 +#define M_SEQI_14_15 14,15 +#define M_SEQI_14_16 14,15,16 +#define M_SEQI_14_17 14,15,16,17 +#define M_SEQI_14_18 14,15,16,17,18 +#define M_SEQI_14_19 14,15,16,17,18,19 +#define M_SEQI_14_20 14,15,16,17,18,19,20 +#define M_SEQI_14_21 14,15,16,17,18,19,20,21 +#define M_SEQI_14_22 14,15,16,17,18,19,20,21,22 +#define M_SEQI_14_23 14,15,16,17,18,19,20,21,22,23 +#define M_SEQI_14_24 14,15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_14_25 14,15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_14_26 14,15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_15_15 15 +#define M_SEQI_15_16 15,16 +#define M_SEQI_15_17 15,16,17 +#define M_SEQI_15_18 15,16,17,18 +#define M_SEQI_15_19 15,16,17,18,19 +#define M_SEQI_15_20 15,16,17,18,19,20 +#define M_SEQI_15_21 15,16,17,18,19,20,21 +#define M_SEQI_15_22 15,16,17,18,19,20,21,22 +#define M_SEQI_15_23 15,16,17,18,19,20,21,22,23 +#define M_SEQI_15_24 15,16,17,18,19,20,21,22,23,24 +#define M_SEQI_15_25 15,16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_15_26 15,16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_16_16 16 +#define M_SEQI_16_17 16,17 +#define M_SEQI_16_18 16,17,18 +#define M_SEQI_16_19 16,17,18,19 +#define M_SEQI_16_20 16,17,18,19,20 +#define M_SEQI_16_21 16,17,18,19,20,21 +#define M_SEQI_16_22 16,17,18,19,20,21,22 +#define M_SEQI_16_23 16,17,18,19,20,21,22,23 +#define M_SEQI_16_24 16,17,18,19,20,21,22,23,24 +#define M_SEQI_16_25 16,17,18,19,20,21,22,23,24,25 +#define M_SEQI_16_26 16,17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_17_17 17 +#define M_SEQI_17_18 17,18 +#define M_SEQI_17_19 17,18,19 +#define M_SEQI_17_20 17,18,19,20 +#define M_SEQI_17_21 17,18,19,20,21 +#define M_SEQI_17_22 17,18,19,20,21,22 +#define M_SEQI_17_23 17,18,19,20,21,22,23 +#define M_SEQI_17_24 17,18,19,20,21,22,23,24 +#define M_SEQI_17_25 17,18,19,20,21,22,23,24,25 +#define M_SEQI_17_26 17,18,19,20,21,22,23,24,25,26 +#define M_SEQI_18_18 18 +#define M_SEQI_18_19 18,19 +#define M_SEQI_18_20 18,19,20 +#define M_SEQI_18_21 18,19,20,21 +#define M_SEQI_18_22 18,19,20,21,22 +#define M_SEQI_18_23 18,19,20,21,22,23 +#define M_SEQI_18_24 18,19,20,21,22,23,24 +#define M_SEQI_18_25 18,19,20,21,22,23,24,25 +#define M_SEQI_18_26 18,19,20,21,22,23,24,25,26 +#define M_SEQI_19_19 19 +#define M_SEQI_19_20 19,20 +#define M_SEQI_19_21 19,20,21 +#define M_SEQI_19_22 19,20,21,22 +#define M_SEQI_19_23 19,20,21,22,23 +#define M_SEQI_19_24 19,20,21,22,23,24 +#define M_SEQI_19_25 19,20,21,22,23,24,25 +#define M_SEQI_19_26 19,20,21,22,23,24,25,26 +#define M_SEQI_20_20 20 +#define M_SEQI_20_21 20,21 +#define M_SEQI_20_22 20,21,22 +#define M_SEQI_20_23 20,21,22,23 +#define M_SEQI_20_24 20,21,22,23,24 +#define M_SEQI_20_25 20,21,22,23,24,25 +#define M_SEQI_20_26 20,21,22,23,24,25,26 +#define M_SEQI_21_21 21 +#define M_SEQI_21_22 21,22 +#define M_SEQI_21_23 21,22,23 +#define M_SEQI_21_24 21,22,23,24 +#define M_SEQI_21_25 21,22,23,24,25 +#define M_SEQI_21_26 21,22,23,24,25,26 +#define M_SEQI_22_22 22 +#define M_SEQI_22_23 22,23 +#define M_SEQI_22_24 22,23,24 +#define M_SEQI_22_25 22,23,24,25 +#define M_SEQI_22_26 22,23,24,25,26 +#define M_SEQI_23_23 23 +#define M_SEQI_23_24 23,24 +#define M_SEQI_23_25 23,24,25 +#define M_SEQI_23_26 23,24,25,26 +#define M_SEQI_24_24 24 +#define M_SEQI_24_25 24,25 +#define M_SEQI_24_26 24,25,26 +#define M_SEQI_25_25 25 +#define M_SEQI_25_26 25,26 +#define M_SEQI_26_26 26 /* Return the input (delay evaluation) */ #define M_ID(...) __VA_ARGS__ diff --git a/tests/test-mcore.c b/tests/test-mcore.c index 8e9184f4..287973fb 100644 --- a/tests/test-mcore.c +++ b/tests/test-mcore.c @@ -268,8 +268,8 @@ static void test_reduce(void) { #define id(x,a) a #define add(a,b) a + b - assert ( M_REDUCE2(id, add, d, M_SEQ(1, 5, M_ID)) == 5 * 6 /2); - assert ( M_REDUCE2(id, add, d, M_SEQ(1, 10, M_ID)) == 10 * 11 /2); + assert ( M_REDUCE2(id, add, d, M_SEQ(1, 5)) == 5 * 6 /2); + assert ( M_REDUCE2(id, add, d, M_SEQ(1, 10)) == 10 * 11 /2); } int main(void)