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