BucketTest.java revision f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1
1668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar/*
2668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * Copyright (C) 2014 The Android Open Source Project
3668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar *
4668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
5668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * you may not use this file except in compliance with the License.
6668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * You may obtain a copy of the License at
7668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar *
8668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
9668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar *
10668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * Unless required by applicable law or agreed to in writing, software
11668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
12668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * See the License for the specific language governing permissions and
14668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar * limitations under the License.
15668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar */
16668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
17668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarpackage android.support.v7.widget;
18668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
19668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport android.test.AndroidTestCase;
20f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyarimport android.test.suitebuilder.annotation.SmallTest;
21668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
22668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.ArrayList;
23668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Collections;
24668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.HashSet;
25668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Set;
26668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
27f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyar@SmallTest
28668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarpublic class BucketTest extends AndroidTestCase {
29668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
30668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ChildHelper.Bucket mBucket;
31668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
32668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ArrayList<Integer> mArr;
33668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
34668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    Set<Integer> mSet;
35668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
36668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    int max = 0;
37668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
38668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    @Override
39668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void setUp() throws Exception {
40668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        super.setUp();
41668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mBucket = new ChildHelper.Bucket();
42668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mArr = new ArrayList<Integer>();
43668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        Collections.addAll(mArr, 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 21, 22, 122, 14, 44, 29, 205, 19);
44668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 1; i < 4; i++) {
45668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD - 1));
46668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD));
47668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD + 1));
48668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD - 1);
49668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD);
50668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD + 1);
51668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
52668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
53668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mSet = new HashSet<Integer>();
54668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        max = 0;
55668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = mArr.size() - 1; i >= 0; i--) {
56668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            if (!mSet.add(mArr.get(i))) {
57668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mArr.remove(i);
58668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
59668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(max, i);
60668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
61668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
62668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
63668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
64668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testSetClear() {
65668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
66668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
67668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertTrue(mBucket.get(i));
68668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
69668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
70668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(mBucket.get(i), mSet.contains(i));
71668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
72668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
73668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
74668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.clear(i);
75668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
76668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
77668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
78668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
79668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
80668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
81668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
82668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
83668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
84668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testRemove() {
85668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
86668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.reset();
87668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
88668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.set(j);
89668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
90668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.remove(i);
91668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
92668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (i == j) {
93668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    continue;
94668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
95668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
96668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertTrue(mBucket.get(j));
97668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                } else {
98668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertEquals(mSet.contains(j + 1), mBucket.get(j));
99668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
100668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
101668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
102668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
103668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
104668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testInsert() {
105668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
106668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (boolean val : new boolean[]{true, false}) {
107668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.reset();
108668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
109668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    mBucket.set(j);
110668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
111668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.insert(i, val);
112668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                assertEquals(mBucket.get(i), val);
113668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
114668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    if (j < i) {
115668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j));
116668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else if (j == i) {
117668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mBucket.get(j), val);
118668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else {
119668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mSet.contains(j - 1), mBucket.get(j));
120668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j + 1));
121668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    }
122668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
123668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
124668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
125668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
126668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
127668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
128668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testCountOnesBefore() {
129668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
130668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
131668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
132668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(i, max);
133668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
134668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
135668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 200; i++) {
136668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            int count = 0;
137668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
138668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
139668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    count++;
140668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
141668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
142668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(count, mBucket.countOnesBefore(i));
143668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
144668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
145668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar}
146