aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/operators.c
blob: 9e9ba08dec59c5a7c5d1281001d120d556245337 (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <helpers.h>

int main() {
    // arithmetic operators
    ASSERT_EQ(42, 42);
    ASSERT_EQ(21, 5 + 20 - 4);
    ASSERT_EQ(26, 2 * 3 + 4 * 5);
    ASSERT_EQ(197, (((3 + 5) / 2) + (5 * (9 - 6)) * (5 + 6 * 7)) % 256);
    ASSERT_EQ(30, (-10 + 20 * -3) + 100);

    // comparison operators
    ASSERT_EQ(1, 0 == 0);
    ASSERT_EQ(0, 123 != 123);
    ASSERT_EQ(1, 123 != 456);
    ASSERT_EQ(0, 123 == 124);
    ASSERT_EQ(1, 123 < 567);
    ASSERT_EQ(1, 123 <= 567);
    ASSERT_EQ(1, 123 <= 123);
    ASSERT_EQ(0, 123 < 123);

    // bitwise operators
    ASSERT_EQ(123, 0 | 123);
    ASSERT_EQ(460, 12 | 456);

    ASSERT_EQ(8, 1 << 3);
    ASSERT_EQ(336, 21 << 4);
    ASSERT_EQ(13, 111 >> 3);
    ASSERT_EQ(0, 15 >> 14);

    int a = 5;
    int b = 3;
    ASSERT_EQ(1, a & b);
    ASSERT_EQ(7, a | b);
    ASSERT_EQ(6, a ^ b);
    ASSERT_EQ(4, 2 + 3 & 4);

    int c = 1 + 2 & 3;
    int d = 4 & 5 ^ 6;
    int e = 1 ^ 2 | 3;
    int f = 0 | 1 & 2;
    ASSERT_EQ(3, c);
    ASSERT_EQ(2, d);
    ASSERT_EQ(3, e);
    ASSERT_EQ(0, f);

    ASSERT_EQ(-1, ~0);
    ASSERT_EQ(-2, ~1);
    ASSERT_EQ(-6, ~5);
    ASSERT_EQ(0, ~(-1));
    ASSERT_EQ(5, ~(-6));

    int x = 10;
    ASSERT_EQ(-11, ~x);
    ASSERT_EQ(-1, ~(x & 0));
    ASSERT_EQ(-16, ~(x | 5));

    // assignment operators
    int i = 0;
    for (; i < 5; i += 1) {
    }
    ASSERT_EQ(5, i);

    for (i = 5; i >= 0; i -= 1)
        ;
    ASSERT_EQ(-1, i);

    x = 123;
    x *= 456;
    ASSERT_EQ(56088, x);

    int y = 120;
    y /= 5;
    ASSERT_EQ(24, y);

    int z = 17;
    z %= 7;
    ASSERT_EQ(3, z);

    a = 0x05;
    a |= 0x0A;
    ASSERT_EQ(0x0F, a);

    b = 0x0F;
    b &= 0x0A;
    ASSERT_EQ(0x0A, b);

    c = 7;
    c |= 8;
    ASSERT_EQ(15, c);

    d = 15;
    d &= 6;
    ASSERT_EQ(6, d);

    e = 0x0F;
    e ^= 0x05;
    ASSERT_EQ(0x0A, e);

    f = 3;
    f <<= 2;
    ASSERT_EQ(12, f);

    int g = 16;
    g >>= 2;
    ASSERT_EQ(4, g);

    int h = -16;
    h >>= 2;
    ASSERT_EQ(-4, h);

    int j = 1;
    j <<= 4;
    ASSERT_EQ(16, j);

    int k = 64;
    k >>= 3;
    ASSERT_EQ(8, k);

    // ternary operator
    ASSERT_EQ(2, 1 ? 2 : 3);
    ASSERT_EQ(5, 0 ? 4 : 5);
}