aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/bitwise_operators.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bitwise_operators.sh')
-rw-r--r--tests/bitwise_operators.sh40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/bitwise_operators.sh b/tests/bitwise_operators.sh
new file mode 100644
index 0000000..f683099
--- /dev/null
+++ b/tests/bitwise_operators.sh
@@ -0,0 +1,40 @@
+test_exit_code 0 <<'EOF'
+#include "../../helpers.h"
+
+int main() {
+ 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));
+}
+EOF