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