diff tests/mini/bitops.d @ 341:1bb99290e03a trunk

[svn r362] Started merging the old 'test' dir as well as the newer 'tangotests' dir into 'tests/mini' and 'tests/minicomplex'.
author lindquist
date Sun, 13 Jul 2008 02:51:19 +0200
parents test/bitops.d@d9d5d59873d8
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/mini/bitops.d	Sun Jul 13 02:51:19 2008 +0200
@@ -0,0 +1,78 @@
+
+extern(C) int printf(char*, ...);
+
+void main()
+{
+    printf("Bitwise operations test\n");
+    {   ushort a = 0xFFF0;
+        ushort b = 0x0FFF;
+        assert((a&b) == 0x0FF0);
+        assert((a|b) == 0xFFFF);
+        assert((a^b) == 0xF00F);
+    }
+    {   ubyte a = 0xFF;
+        ulong b = 0xFFFF_FFFF_FFFF_FFF0;
+        assert((a&b) == 0xF0);
+    }
+    {   ushort s = 0xFF;
+        assert((s<<1) == s*2);
+        assert((s>>>1) == s/2);
+    }
+    {   int s = -10;
+        assert((s>>1) == -5);
+        assert((s>>>1) != -5);
+    }
+
+    {   ushort a = 0xFFF0;
+        ushort b = 0x0FFF;
+        auto t = a;
+        t &= b;
+        assert(t == 0x0FF0);
+        t = a;
+        t |= b;
+        assert(t == 0xFFFF);
+        t = a;
+        t ^= b;
+        assert(t == 0xF00F);
+    }
+    {   ubyte a = 0xFF;
+        ulong b = 0xFFFF_FFFF_FFFF_FFF0;
+        a &= b;
+        assert(a == 0xF0);
+    }
+    {   ushort s = 0xFF;
+        auto t = s;
+        t <<= 1;
+        assert(t == (s*2));
+        t = s;
+        t >>>= 1;
+        assert(t == s/2);
+    }
+    {   int s = -10;
+        auto t = s;
+        t >>= 1;
+        assert(t == -5);
+        t = s;
+        t >>>= 1;
+        assert(t != -5);
+    }
+    {   struct S
+        {
+            uint i;
+            ulong l;
+        };
+        S s = S(1,4);
+        auto a = s.i | s.l;
+        assert(a == 5);
+        s.i = 0xFFFF_00FF;
+        s.l = 0xFFFF_FFFF_0000_FF00;
+        s.l ^= s.i;
+        assert(s.l == ulong.max);
+        s.i = 0x__FFFF_FF00;
+        s.l = 0xFF00FF_FF00;
+        s.i &= s.l;
+        assert(s.i == 0x00FF_FF00);
+    }
+
+    printf("  SUCCESS\n");
+}