Adding a smaller variant of fehler044
[libfirm] / ir / be / test / distributive.c
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #define T_(op1, op2, va, vb, vc)       a = va; b = vb; c = vc; \
5         fprintf(stderr, "Test: (%d %s %d) %s (%d %s %d) -> ", a, #op1, c, #op2, b, #op1, c);\
6         fprintf(stderr, "%d\n", ((a op1 c) op2 (b op1 c)));
7
8 #define T(op1, op2)     T_(op1, op2, rand(), rand(), rand()) T_(op1, op2, rand(), rand(), 42)
9
10 #define TU_(op1, op2, va, vb)     a = va; b = vb; \
11         fprintf(stderr, "Test: (%s %d) %s (%s %d) -> ", #op1, a, #op2, #op1, b); \
12         fprintf(stderr, "%d\n", ((op1 a) op2 (op1 b)));
13
14 #define TU(op1, op2) TU_(op1, op2, rand(), rand())
15
16 #define TT(op)  T(&,op); T(|,op); T(^,op); T(&&,op); T(||,op); T(*,op); T(/,op); T(%,op); T(+,op); T(-,op); TU(-,op); TU(!,op);
17
18 #define TS(op)  T(&,op); T(|,op); T(^,op); T(&&,op); T(||,op); T(*,op); T(+,op); T(-,op); TU(-,op);
19
20 int main()
21 {
22         int a, b, c;
23         srand(1234);
24
25         TT(&);
26         TT(|);
27         TT(^);
28         TT(&&);
29         TT(||);
30         TT(*);
31         TS(/);
32         TS(%);
33         TT(+);
34         TT(-);
35
36         return 0;
37 }