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
190a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.Before;
200a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.Test;
210a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.runner.RunWith;
220a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport org.junit.runners.JUnit4;
230a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar
240a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport android.support.test.runner.AndroidJUnit4;
25668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport android.test.AndroidTestCase;
26f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyarimport android.test.suitebuilder.annotation.SmallTest;
27668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
28668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.ArrayList;
29668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Collections;
30668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.HashSet;
31668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Set;
320a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport static org.junit.Assert.*;
33668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
34f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyar@SmallTest
350a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar@RunWith(JUnit4.class)
360a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarpublic class BucketTest {
37668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
38668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ChildHelper.Bucket mBucket;
39668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
40668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    ArrayList<Integer> mArr;
41668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
42668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    Set<Integer> mSet;
43668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
44668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    int max = 0;
45668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
460a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Before
47668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    public void setUp() throws Exception {
48668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        mBucket = new ChildHelper.Bucket();
490a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        mArr = new ArrayList<>();
50668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        Collections.addAll(mArr, 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 21, 22, 122, 14, 44, 29, 205, 19);
51668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 1; i < 4; i++) {
52668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD - 1));
53668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD));
54668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD + 1));
55668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD - 1);
56668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD);
57668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD + 1);
58668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
59668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
600a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        mSet = new HashSet<>();
61668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        max = 0;
62668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = mArr.size() - 1; i >= 0; i--) {
63668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            if (!mSet.add(mArr.get(i))) {
64668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mArr.remove(i);
65668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
66668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(max, i);
67668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
68668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
69668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
70668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
710a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
720a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void setClear() {
73668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
74668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
75668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertTrue(mBucket.get(i));
76668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
77668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
78668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(mBucket.get(i), mSet.contains(i));
79668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
80668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
81668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
82668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.clear(i);
83668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
84668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
85668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
86668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 100; i++) {
87668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertFalse(mBucket.get(i));
88668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
89668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
90668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
91668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
920a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
930a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void remove() {
94668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
95668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.reset();
96668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
97668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.set(j);
98668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
99668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.remove(i);
100668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
101668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (i == j) {
102668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    continue;
103668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
104668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
105668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertTrue(mBucket.get(j));
106668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                } else {
107668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    assertEquals(mSet.contains(j + 1), mBucket.get(j));
108668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
109668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
110668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
111668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
112668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
1130a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
1140a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void insert() {
115668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
116668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (boolean val : new boolean[]{true, false}) {
117668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.reset();
118668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
119668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    mBucket.set(j);
120668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
121668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                mBucket.insert(i, val);
122668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                assertEquals(mBucket.get(i), val);
123668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                for (int j : mArr) {
124668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    if (j < i) {
125668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j));
126668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else if (j == i) {
127668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mBucket.get(j), val);
128668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    } else {
129668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertEquals(mSet.contains(j - 1), mBucket.get(j));
130668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                        assertTrue(mBucket.get(j + 1));
131668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    }
132668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
133668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
134668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
135668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
136668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
137668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar
1380a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
1390a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void countOnesBefore() {
140668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
141668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i : mArr) {
142668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            mBucket.set(i);
143668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            max = Math.max(i, max);
144668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
145668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        assertEquals(mBucket.countOnesBefore(0), 0);
146668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        for (int i = 0; i < max + 200; i++) {
147668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            int count = 0;
148668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            for (int j : mArr) {
149668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                if (j < i) {
150668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                    count++;
151668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar                }
152668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            }
153668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar            assertEquals(count, mBucket.countOnesBefore(i));
154668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar        }
155668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar    }
156668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar}
157