1
|
1 void main()
|
|
2 {
|
|
3 printf("Bitwise operations test\n");
|
|
4 { ushort a = 0xFFF0;
|
|
5 ushort b = 0x0FFF;
|
|
6 assert((a&b) == 0x0FF0);
|
|
7 assert((a|b) == 0xFFFF);
|
|
8 assert((a^b) == 0xF00F);
|
|
9 }
|
|
10 { ubyte a = 0xFF;
|
|
11 ulong b = 0xFFFF_FFFF_FFFF_FFF0;
|
|
12 assert((a&b) == 0xF0);
|
|
13 }
|
|
14 { ushort s = 0xFF;
|
|
15 assert((s<<1) == s*2);
|
|
16 assert((s>>>1) == s/2);
|
|
17 }
|
|
18 { int s = -10;
|
|
19 assert((s>>1) == -5);
|
|
20 assert((s>>>1) != -5);
|
|
21 }
|
|
22
|
|
23 { ushort a = 0xFFF0;
|
|
24 ushort b = 0x0FFF;
|
|
25 auto t = a;
|
|
26 t &= b;
|
|
27 assert(t == 0x0FF0);
|
|
28 t = a;
|
|
29 t |= b;
|
|
30 assert(t == 0xFFFF);
|
|
31 t = a;
|
|
32 t ^= b;
|
|
33 assert(t == 0xF00F);
|
|
34 }
|
|
35 { ubyte a = 0xFF;
|
|
36 ulong b = 0xFFFF_FFFF_FFFF_FFF0;
|
|
37 a &= b;
|
|
38 assert(a == 0xF0);
|
|
39 }
|
|
40 { ushort s = 0xFF;
|
|
41 auto t = s;
|
|
42 t <<= 1;
|
|
43 assert(t == (s*2));
|
|
44 t = s;
|
|
45 t >>>= 1;
|
|
46 assert(t == s/2);
|
|
47 }
|
|
48 { int s = -10;
|
|
49 auto t = s;
|
|
50 t >>= 1;
|
|
51 assert(t == -5);
|
|
52 t = s;
|
|
53 t >>>= 1;
|
|
54 assert(t != -5);
|
|
55 }
|
|
56 { struct S
|
|
57 {
|
|
58 uint i;
|
|
59 ulong l;
|
|
60 };
|
|
61 S s = S(1,4);
|
|
62 auto a = s.i | s.l;
|
|
63 assert(a == 5);
|
|
64 s.i = 0xFFFF_00FF;
|
|
65 s.l = 0xFFFF_FFFF_0000_FF00;
|
|
66 s.l ^= s.i;
|
|
67 assert(s.l == ulong.max);
|
|
68 s.i = 0x__FFFF_FF00;
|
|
69 s.l = 0xFF00FF_FF00;
|
|
70 s.i &= s.l;
|
|
71 assert(s.i == 0x00FF_FF00);
|
|
72 }
|
|
73
|
|
74 printf(" SUCCESS\n");
|
|
75 }
|