1#include <stdio.h>
2
3typedef unsigned int  		uint32_t;
4typedef int           		int32_t;
5
6const char *boolstring(int val) {
7  return val ? "true" : "false";
8}
9
10int i32_eq(int32_t a, int32_t b) {
11  return (a == b);
12}
13
14int i32_neq(int32_t a, int32_t b) {
15  return (a != b);
16}
17
18int32_t i32_eq_select(int32_t a, int32_t b, int32_t c, int32_t d) {
19  return ((a == b) ? c : d);
20}
21
22int32_t i32_neq_select(int32_t a, int32_t b, int32_t c, int32_t d) {
23  return ((a != b) ? c : d);
24}
25
26struct pred_s {
27  const char *name;
28  int (*predfunc)(int32_t, int32_t);
29  int (*selfunc)(int32_t, int32_t, int32_t, int32_t);
30};
31
32struct pred_s preds[] = {
33  { "eq",  i32_eq,  i32_eq_select },
34  { "neq", i32_neq, i32_neq_select }
35};
36
37int main(void) {
38  int i;
39  int32_t a = 1234567890;
40  int32_t b =  345678901;
41  int32_t c = 1234500000;
42  int32_t d =      10001;
43  int32_t e =      10000;
44
45  printf("a = %12d (0x%08x)\n", a, a);
46  printf("b = %12d (0x%08x)\n", b, b);
47  printf("c = %12d (0x%08x)\n", c, c);
48  printf("d = %12d (0x%08x)\n", d, d);
49  printf("e = %12d (0x%08x)\n", e, e);
50  printf("----------------------------------------\n");
51
52  for (i = 0; i < sizeof(preds)/sizeof(preds[0]); ++i) {
53    printf("a %s a = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, a)));
54    printf("a %s a = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, a)));
55    printf("a %s b = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, b)));
56    printf("a %s c = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(a, c)));
57    printf("d %s e = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(d, e)));
58    printf("e %s e = %s\n", preds[i].name, boolstring((*preds[i].predfunc)(e, e)));
59
60    printf("a %s a ? c : d = %d\n", preds[i].name, (*preds[i].selfunc)(a, a, c, d));
61    printf("a %s a ? c : d == c (%s)\n", preds[i].name, boolstring((*preds[i].selfunc)(a, a, c, d) == c));
62    printf("a %s b ? c : d = %d\n", preds[i].name, (*preds[i].selfunc)(a, b, c, d));
63    printf("a %s b ? c : d == d (%s)\n", preds[i].name, boolstring((*preds[i].selfunc)(a, b, c, d) == d));
64
65    printf("----------------------------------------\n");
66  }
67
68  return 0;
69}
70