1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
174cd7b39876bcec03bb1d0c2afa61cbdb7d119ebaJesse Wilsonpackage com.android.dx.util;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
214cd7b39876bcec03bb1d0c2afa61cbdb7d119ebaJesse Wilsonpublic final class BitsTest extends TestCase {
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_makeBitSet() {
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(label(0), 0, Bits.makeBitSet(0).length);
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 1; i <= 32; i++) {
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), 1, Bits.makeBitSet(i).length);
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 33; i <= 64; i++) {
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), 2, Bits.makeBitSet(i).length);
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 65; i < 4000; i += 101) {
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int expect = i >> 5;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ((expect * 32) < i) {
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                expect++;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), expect, Bits.makeBitSet(i).length);
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_getMax() {
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 4000; i += 59) {
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int expect = i >> 5;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ((expect * 32) < i) {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                expect++;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), expect * 32,
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                         Bits.getMax(new int[expect]));
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test1_get() {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = Bits.makeBitSet(100);
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(label(i), Bits.get(bits, i));
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test2_get() {
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = Bits.makeBitSet(100);
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < bits.length; i++) {
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bits[i] = -1;
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.get(bits, i));
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test3_get() {
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = Bits.makeBitSet(100);
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Bits.set(bits, i, (i % 5) == 0);
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean expect = (i % 5) == 0;
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.get(bits, i) == expect);
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test1_set1() {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = Bits.makeBitSet(50);
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bits[1] = -1;
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 0, true);
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 3, true);
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 6, true);
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 3, false);
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 35, false);
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 38, false);
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 42, false);
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Bits.set(bits, 38, true);
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(label(1), 0x41, bits[0]);
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(label(2), 0xfffffbf7, bits[1]);
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test2_set1() {
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = Bits.makeBitSet(100);
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ((i % 3) == 0) {
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Bits.set(bits, i, true);
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ((i % 5) == 0) {
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Bits.set(bits, i, false);
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ((i % 7) == 0) {
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Bits.set(bits, i, true);
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean expect = ((i % 7) == 0) ||
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (((i % 3) == 0) && ((i % 5) != 0));
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.get(bits, i) == expect);
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_set2() {
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = Bits.makeBitSet(100);
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ((i % 11) == 0) {
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Bits.set(bits, i);
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean expect = (i % 11) == 0;
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.get(bits, i) == expect);
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_clear() {
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = Bits.makeBitSet(100);
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < bits.length; i++) {
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bits[i] = -1;
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if ((i % 5) == 0) {
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Bits.clear(bits, i);
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            boolean expect = (i % 5) != 0;
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.get(bits, i) == expect);
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test1_isEmpty() {
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 10; i++) {
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.isEmpty(new int[i]));
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test2_isEmpty() {
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 1; i < 1000; i += 11) {
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int[] bits = Bits.makeBitSet(i);
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int j = i % 11; j >= 0; j--) {
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                int x = i - 1 - (j * 13);
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (x >= 0) {
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Bits.set(bits, x);
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(label(i), Bits.isEmpty(bits));
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test1_bitCount() {
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 10; i++) {
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), 0, Bits.bitCount(new int[i]));
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test2_bitCount() {
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 1; i < 1000; i += 13) {
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int[] bits = Bits.makeBitSet(i);
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int count = 0;
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int j = 0; j < i; j += 20) {
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Bits.set(bits, j);
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                count++;
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int j = 7; j < i; j += 11) {
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (!Bits.get(bits, j)) {
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Bits.set(bits, j);
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    count++;
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int j = 3; j < i; j += 17) {
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (!Bits.get(bits, j)) {
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Bits.set(bits, j);
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    count++;
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), count, Bits.bitCount(bits));
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test1_anyInRange() {
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i += 11) {
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(label(i), Bits.anyInRange(bits, 0, i));
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test2_anyInRange() {
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i += 11) {
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(label(i), Bits.anyInRange(bits, i, 100));
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test3_anyInRange() {
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 50; i += 7) {
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(label(i), Bits.anyInRange(bits, i, 100 - i));
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test4_anyInRange() {
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < bits.length; i++) {
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bits[i] = -1;
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 1; i < 100; i += 11) {
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.anyInRange(bits, 0, i));
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test5_anyInRange() {
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < bits.length; i++) {
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bits[i] = -1;
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 1; i < 100; i += 11) {
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.anyInRange(bits, i, 100));
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test6_anyInRange() {
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < bits.length; i++) {
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bits[i] = -1;
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 50; i += 7) {
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(label(i), Bits.anyInRange(bits, i, 100 - i));
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test1_findFirst1() {
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), -1, Bits.findFirst(bits, i));
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test2_findFirst1() {
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < bits.length; i++) {
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bits[i] = -1;
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 100; i++) {
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), i, Bits.findFirst(bits, i));
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test3_findFirst1() {
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] bits = new int[100];
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 25; i < 80; i++) {
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            for (int j = 0; j < bits.length; j++) {
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                bits[j] = 0;
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Bits.set(bits, i - 5);
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Bits.set(bits, i + 5);
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Bits.set(bits, i + 10);
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Bits.set(bits, i + 20);
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), i + 5, Bits.findFirst(bits, i));
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test1_findFirst2() {
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 32; i++) {
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), -1, Bits.findFirst(0, i));
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test2_findFirst2() {
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 32; i++) {
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), i, Bits.findFirst(-1, i));
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test3_findFirst2() {
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 32; i++) {
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), -1, Bits.findFirst((1 << i) >>> 1, i));
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test4_findFirst2() {
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 32; i++) {
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), i, Bits.findFirst(1 << i, i));
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test5_findFirst2() {
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 31; i++) {
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), i + 1, Bits.findFirst(1 << (i + 1), i));
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test6_findFirst2() {
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < 32; i++) {
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            int value = (1 << i);
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            value |= (value >>> 1);
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(label(i), i, Bits.findFirst(value, i));
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static String label(int n) {
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return "(" + n + ")";
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
346