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;
20668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
21668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.ArrayList;
22668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Collections;
23668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.HashSet;
24668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Set;
25668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
26668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarpublic class BucketTest extends AndroidTestCase {
27668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
28668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ChildHelper.Bucket mBucket;
29668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
30668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ArrayList<Integer> mArr;
31668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
32668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    Set<Integer> mSet;
33668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
34668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    int max = 0;
35668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
36668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    @Override
37668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void setUp() throws Exception {
38668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        super.setUp();
39668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mBucket = new ChildHelper.Bucket();
40668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mArr = new ArrayList<Integer>();
41668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        Collections.addAll(mArr, 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 21, 22, 122, 14, 44, 29, 205, 19);
42668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 1; i < 4; i++) {
43668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD - 1));
44668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD));
45668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD + 1));
46668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD - 1);
47668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD);
48668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD + 1);
49668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
50668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
51668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mSet = new HashSet<Integer>();
52668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        max = 0;
53668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = mArr.size() - 1; i >= 0; i--) {
54668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            if (!mSet.add(mArr.get(i))) {
55668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mArr.remove(i);
56668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
57668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(max, i);
58668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
59668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
60668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
61668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
62668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testSetClear() {
63668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
64668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
65668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertTrue(mBucket.get(i));
66668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
67668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
68668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(mBucket.get(i), mSet.contains(i));
69668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
70668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
71668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
72668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.clear(i);
73668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
74668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
75668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
76668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
77668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
78668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
79668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
80668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
81668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
82668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testRemove() {
83668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
84668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.reset();
85668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
86668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.set(j);
87668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
88668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.remove(i);
89668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
90668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (i == j) {
91668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    continue;
92668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
93668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
94668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertTrue(mBucket.get(j));
95668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                } else {
96668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertEquals(mSet.contains(j + 1), mBucket.get(j));
97668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
98668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
99668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
100668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
101668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
102668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testInsert() {
103668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
104668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (boolean val : new boolean[]{true, false}) {
105668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.reset();
106668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
107668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    mBucket.set(j);
108668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
109668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.insert(i, val);
110668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                assertEquals(mBucket.get(i), val);
111668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
112668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    if (j < i) {
113668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j));
114668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else if (j == i) {
115668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mBucket.get(j), val);
116668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else {
117668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mSet.contains(j - 1), mBucket.get(j));
118668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j + 1));
119668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    }
120668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
121668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
122668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
123668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
124668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
125668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
126668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void testCountOnesBefore() {
127668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
128668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
129668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
130668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(i, max);
131668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
132668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
133668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 200; i++) {
134668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            int count = 0;
135668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
136668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
137668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    count++;
138668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
139668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
140668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(count, mBucket.countOnesBefore(i));
141668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
142668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
143668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar}
144