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
198052423a9ffce385de32ae76fa962e6316f03677Aurimas Liutikasimport static org.junit.Assert.assertEquals;
208052423a9ffce385de32ae76fa962e6316f03677Aurimas Liutikasimport static org.junit.Assert.assertFalse;
218052423a9ffce385de32ae76fa962e6316f03677Aurimas Liutikasimport static org.junit.Assert.assertTrue;
228052423a9ffce385de32ae76fa962e6316f03677Aurimas Liutikas
23754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest;
248052423a9ffce385de32ae76fa962e6316f03677Aurimas Liutikas
250a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.Before;
260a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.Test;
270a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.runner.RunWith;
280a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.runners.JUnit4;
290a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar
30668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.ArrayList;
31668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Collections;
32668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.HashSet;
33668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Set;
34668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
35f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyar@SmallTest
360a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar@RunWith(JUnit4.class)
370a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarpublic class BucketTest {
38668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
39668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ChildHelper.Bucket mBucket;
40668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
41668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ArrayList<Integer> mArr;
42668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
43668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    Set<Integer> mSet;
44668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
45668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    int max = 0;
46668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
470a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Before
48668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void setUp() throws Exception {
49668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mBucket = new ChildHelper.Bucket();
500a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        mArr = new ArrayList<>();
51668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        Collections.addAll(mArr, 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 21, 22, 122, 14, 44, 29, 205, 19);
52668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 1; i < 4; i++) {
53668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD - 1));
54668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD));
55668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD + 1));
56668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD - 1);
57668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD);
58668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD + 1);
59668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
60668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
610a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        mSet = new HashSet<>();
62668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        max = 0;
63668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = mArr.size() - 1; i >= 0; i--) {
64668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            if (!mSet.add(mArr.get(i))) {
65668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mArr.remove(i);
66668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
67668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(max, i);
68668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
69668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
70668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
71668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
720a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
730a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void setClear() {
74668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
75668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
76668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertTrue(mBucket.get(i));
77668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
78668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
79668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(mBucket.get(i), mSet.contains(i));
80668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
81668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
82668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
83668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.clear(i);
84668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
85668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
86668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
87668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
88668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
89668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
90668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
91668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
92668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
930a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
940a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void remove() {
95668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
96668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.reset();
97668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
98668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.set(j);
99668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
100668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.remove(i);
101668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
102668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (i == j) {
103668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    continue;
104668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
105668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
106668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertTrue(mBucket.get(j));
107668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                } else {
108668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertEquals(mSet.contains(j + 1), mBucket.get(j));
109668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
110668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
111668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
112668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
113668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
1140a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
1150a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void insert() {
116668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
117668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (boolean val : new boolean[]{true, false}) {
118668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.reset();
119668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
120668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    mBucket.set(j);
121668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
122668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.insert(i, val);
123668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                assertEquals(mBucket.get(i), val);
124668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
125668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    if (j < i) {
126668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j));
127668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else if (j == i) {
128668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mBucket.get(j), val);
129668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else {
130668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mSet.contains(j - 1), mBucket.get(j));
131668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j + 1));
132668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    }
133668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
134668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
135668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
136668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
137668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
138668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
1390a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
1400a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void countOnesBefore() {
141668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
142668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
143668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
144668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(i, max);
145668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
146668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
147668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 200; i++) {
148668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            int count = 0;
149668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
150668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
151668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    count++;
152668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
153668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
154668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(count, mBucket.countOnesBefore(i));
155668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
156668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
157668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar}
158