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