Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / ast_constant_folding.c
1 /* Test ast_constant_folding() in SDCCast.c
2  */
3 #include <testfwk.h>
4
5 volatile unsigned i;
6
7 unsigned
8 foo_aa (void)
9 {
10   return i + 5 + i - i + 12;
11 }
12
13 unsigned
14 foo_asr (void)
15 {
16   return i - 5 + i + i + 12;
17 }
18
19 unsigned
20 foo_asl (void)
21 {
22   return 5 - i + i + 12;
23 }
24
25 unsigned
26 foo_ssr (void)
27 {
28   return i - 5 - i - i - 12;
29 }
30
31 unsigned
32 foo_ssl (void)
33 {
34   return 5 - i - i - 12;
35 }
36 unsigned
37 foo_sa (void)
38 {
39   return i + 5 - i - i - 12;
40 }
41
42 unsigned
43 foo_mul (void)
44 {
45   return 5 * i * i * 12;
46 }
47
48 unsigned
49 foo_div (void)
50 {
51   return 33971u / i / 5 / i / i / 12;
52 }
53
54 unsigned
55 foo_or (void)
56 {
57   return 5 | i | i | 12;
58 }
59
60 unsigned
61 foo_and (void)
62 {
63   return 5 & i & i & 12;
64 }
65
66 void
67 test_ast_cf(void)
68 {
69   i = 30; ASSERT(foo_aa () ==    47);
70           ASSERT(foo_asr() ==    97);
71           ASSERT(foo_asl() ==    17);
72           ASSERT(foo_ssr() ==   -47);
73           ASSERT(foo_ssl() ==   -67);
74           ASSERT(foo_sa () ==   -37);
75           ASSERT(foo_mul() == 54000);
76   i =  3; ASSERT(foo_div() ==    20);
77   i =  3; ASSERT(foo_or () ==    15);
78   i =  7; ASSERT(foo_and() ==     4);
79 }