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