BucketTest.java revision f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1
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; 20f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyarimport android.test.suitebuilder.annotation.SmallTest; 21668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 22668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.ArrayList; 23668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Collections; 24668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.HashSet; 25668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarimport java.util.Set; 26668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 27f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyar@SmallTest 28668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyarpublic class BucketTest extends AndroidTestCase { 29668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 30668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar ChildHelper.Bucket mBucket; 31668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 32668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar ArrayList<Integer> mArr; 33668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 34668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar Set<Integer> mSet; 35668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 36668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar int max = 0; 37668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 38668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar @Override 39668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar public void setUp() throws Exception { 40668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar super.setUp(); 41668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket = new ChildHelper.Bucket(); 42668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr = new ArrayList<Integer>(); 43668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar Collections.addAll(mArr, 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 21, 22, 122, 14, 44, 29, 205, 19); 44668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i = 1; i < 4; i++) { 45668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD - 1)); 46668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD)); 47668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr.add(i * (ChildHelper.Bucket.BITS_PER_WORD + 1)); 48668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD - 1); 49668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD); 50668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr.add(i * ChildHelper.Bucket.BITS_PER_WORD + 1); 51668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 52668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 53668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mSet = new HashSet<Integer>(); 54668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar max = 0; 55668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i = mArr.size() - 1; i >= 0; i--) { 56668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar if (!mSet.add(mArr.get(i))) { 57668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mArr.remove(i); 58668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 59668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar max = Math.max(max, i); 60668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 61668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 62668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 63668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 64668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar public void testSetClear() { 65668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i : mArr) { 66668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.set(i); 67668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertTrue(mBucket.get(i)); 68668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 69668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i = 0; i < max + 100; i++) { 70668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(mBucket.get(i), mSet.contains(i)); 71668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 72668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 73668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i : mArr) { 74668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.clear(i); 75668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertFalse(mBucket.get(i)); 76668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 77668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 78668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i = 0; i < max + 100; i++) { 79668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertFalse(mBucket.get(i)); 80668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 81668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 82668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 83668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 84668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar public void testRemove() { 85668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i : mArr) { 86668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.reset(); 87668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int j : mArr) { 88668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.set(j); 89668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 90668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.remove(i); 91668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int j : mArr) { 92668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar if (i == j) { 93668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar continue; 94668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 95668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar if (j < i) { 96668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertTrue(mBucket.get(j)); 97668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } else { 98668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(mSet.contains(j + 1), mBucket.get(j)); 99668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 100668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 101668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 102668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 103668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 104668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar public void testInsert() { 105668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i : mArr) { 106668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (boolean val : new boolean[]{true, false}) { 107668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.reset(); 108668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int j : mArr) { 109668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.set(j); 110668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 111668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.insert(i, val); 112668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(mBucket.get(i), val); 113668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int j : mArr) { 114668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar if (j < i) { 115668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertTrue(mBucket.get(j)); 116668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } else if (j == i) { 117668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(mBucket.get(j), val); 118668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } else { 119668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(mSet.contains(j - 1), mBucket.get(j)); 120668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertTrue(mBucket.get(j + 1)); 121668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 122668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 123668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 124668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 125668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 126668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 127668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar 128668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar public void testCountOnesBefore() { 129668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(mBucket.countOnesBefore(0), 0); 130668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i : mArr) { 131668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar mBucket.set(i); 132668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar max = Math.max(i, max); 133668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 134668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(mBucket.countOnesBefore(0), 0); 135668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int i = 0; i < max + 200; i++) { 136668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar int count = 0; 137668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar for (int j : mArr) { 138668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar if (j < i) { 139668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar count++; 140668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 141668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 142668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar assertEquals(count, mBucket.countOnesBefore(i)); 143668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 144668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar } 145668e774379c036a5d53d07ec69ed9ebee13a1fd9Yigit Boyar} 146