1 // PERMUTE_ARGS:
2
3 import core.stdc.stdio;
4 import core.bitop;
5
6 /*****************************************************/
7
test1()8 void test1()
9 {
10 size_t array[2];
11 uint x;
12 version (D_LP64)
13 size_t bitToUse = 67;
14 else
15 size_t bitToUse = 35;
16
17 array[0] = 2;
18 array[1] = 0x100;
19 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
20
21 x = btc(array.ptr, bitToUse);
22 printf("btc(array, %d) = %d\n", bitToUse, x);
23 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
24 assert(x == 0);
25 assert(array[0] == 0x2 && array[1] == 0x108);
26
27 x = btc(array.ptr, bitToUse);
28 printf("btc(array, %d) = %d\n", bitToUse, x);
29 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
30 assert(x != 0);
31 assert(array[0] == 2 && array[1] == 0x100);
32
33 x = bts(array.ptr, bitToUse);
34 printf("bts(array, %d) = %d\n", bitToUse, x);
35 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
36 assert(x == 0);
37 assert(array[0] == 2 && array[1] == 0x108);
38
39 x = btr(array.ptr, bitToUse);
40 printf("btr(array, %d) = %d\n", bitToUse, x);
41 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
42 assert(x != 0);
43 assert(array[0] == 2 && array[1] == 0x100);
44
45 x = bt(array.ptr, 1);
46 printf("bt(array, 1) = %d\n", x);
47 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
48 assert(x != 0);
49 assert(array[0] == 2 && array[1] == 0x100);
50 }
51
52 /*****************************************************/
53
test2()54 void test2()
55 {
56 uint v;
57 int x;
58
59 v = 0x21;
60 x = bsf(v);
61 printf("bsf(x%x) = %d\n", v, x);
62 assert(x == 0);
63
64 x = bsr(v);
65 printf("bsr(x%x) = %d\n", v, x);
66 assert(x == 5);
67 }
68
69 /*****************************************************/
70
version(DigitalMars)71 version (DigitalMars)
72 void test3()
73 { uint v;
74 int b;
75
76 b = inp(b);
77 b = inpw(b);
78 b = inpl(b);
79
80 b = outp(v, cast(ubyte)b);
81 b = outpw(v, cast(ushort)b);
82 b = outpl(v, b);
83 }
84
85 /*****************************************************/
86
test4()87 void test4()
88 {
89 uint i = 0x12_34_56_78;
90 i = bswap(i);
91 assert(i == 0x78_56_34_12);
92 }
93
94 /*****************************************************/
95
test5()96 void test5()
97 {
98 size_t array[2];
99
100 array[0] = 2;
101 array[1] = 0x100;
102
103 printf("btc(array, 35) = %d\n", btc(array.ptr, 35));
104 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
105
106 printf("btc(array, 35) = %d\n", btc(array.ptr, 35));
107 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
108
109 printf("bts(array, 35) = %d\n", bts(array.ptr, 35));
110 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
111
112 printf("btr(array, 35) = %d\n", btr(array.ptr, 35));
113 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
114
115 printf("bt(array, 1) = %d\n", bt(array.ptr, 1));
116 printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
117 }
118
119
120 /*****************************************************/
121
122 class Node {
123 uint leaf = 0;
124
m()125 int m() {
126 return leaf ? 0 : bsf(leaf);
127 }
128 }
129
test6()130 void test6()
131 {
132 Node n = new Node();
133 }
134
135 /*****************************************************/
136
main()137 int main()
138 {
139 test1();
140 test2();
141 //test3();
142 test4();
143 test5();
144 test6();
145
146 printf("Success\n");
147 return 0;
148 }
149