blob: 66767afe677bab280272cdc332f0ffcef583a812 (
plain)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/* Test ast_constant_folding() in SDCCast.c
*/
#include <testfwk.h>
volatile unsigned i;
unsigned
foo_aa (void)
{
return i + 5 + i - i + 12;
}
unsigned
foo_asr (void)
{
return i - 5 + i + i + 12;
}
unsigned
foo_asl (void)
{
return 5 - i + i + 12;
}
unsigned
foo_ssr (void)
{
return i - 5 - i - i - 12;
}
unsigned
foo_ssl (void)
{
return 5 - i - i - 12;
}
unsigned
foo_sa (void)
{
return i + 5 - i - i - 12;
}
unsigned
foo_mul (void)
{
return 5 * i * i * 12;
}
unsigned
foo_div (void)
{
return 33971u / i / 5 / i / i / 12;
}
unsigned
foo_or (void)
{
return 5 | i | i | 12;
}
unsigned
foo_and (void)
{
return 5 & i & i & 12;
}
void
test_ast_cf(void)
{
i = 30; ASSERT(foo_aa () == 47);
ASSERT(foo_asr() == 97);
ASSERT(foo_asl() == 17);
ASSERT(foo_ssr() == -47);
ASSERT(foo_ssl() == -67);
ASSERT(foo_sa () == -37);
ASSERT(foo_mul() == 54000);
i = 3; ASSERT(foo_div() == 20);
i = 3; ASSERT(foo_or () == 15);
i = 7; ASSERT(foo_and() == 4);
}
|