1f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn/* 2f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * Copyright (C) 2013 The Android Open Source Project 3f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * 4f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * you may not use this file except in compliance with the License. 6f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * You may obtain a copy of the License at 7f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * 8f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * 10f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * See the License for the specific language governing permissions and 14f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn * limitations under the License. 15f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn */ 16f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 17f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornpackage com.google.android.test.activity; 18f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 19f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport android.util.ArrayMap; 2021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackbornimport android.util.ArraySet; 21f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport android.util.Log; 22f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 23f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.util.Collection; 24f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.util.HashMap; 2521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackbornimport java.util.HashSet; 26f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.util.Iterator; 27f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.util.Map; 28f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornimport java.util.Set; 29f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 30f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackbornpublic class ArrayMapTests { 31f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static final int OP_ADD = 1; 32f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static final int OP_REM = 2; 33f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 34f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static int[] OPS = new int[] { 35f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, 36f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, 37f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, 38f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, 39f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 40f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, 41f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, 42f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 43f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, 44f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, 45f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 46f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, 47f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, 48f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 49f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, 50f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, OP_ADD, 5162d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn OP_ADD, OP_ADD, OP_ADD, 52f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, 5362d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn OP_REM, OP_REM, OP_REM, 54f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, OP_REM, 55f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn }; 56f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 57f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static int[] KEYS = new int[] { 58f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn // General adding and removing. 5962d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn -1, 1900, 600, 200, 1200, 1500, 1800, 100, 1900, 60f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 2100, 300, 800, 600, 1100, 1300, 2000, 1000, 1400, 6162d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn 600, -1, 1900, 600, 300, 2100, 200, 800, 800, 62f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1800, 1500, 1300, 1100, 2000, 1400, 1000, 1200, 1900, 63f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 64f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn // Shrink when removing item from end. 65f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 100, 200, 300, 400, 500, 600, 700, 800, 900, 66f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 900, 800, 700, 600, 500, 400, 300, 200, 100, 67f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 68f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn // Shrink when removing item from middle. 69f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 100, 200, 300, 400, 500, 600, 700, 800, 900, 70f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 900, 800, 700, 600, 500, 400, 200, 300, 100, 71f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 72f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn // Shrink when removing item from front. 73f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 100, 200, 300, 400, 500, 600, 700, 800, 900, 74f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 900, 800, 700, 600, 500, 400, 100, 200, 300, 75f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 76f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn // Test hash collisions. 77f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 105, 106, 108, 104, 102, 102, 107, 5, 205, 78f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 4, 202, 203, 3, 5, 101, 109, 200, 201, 7962d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn 0, -1, 100, 80f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 106, 108, 104, 102, 103, 105, 107, 101, 109, 8162d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn -1, 100, 0, 82f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 4, 5, 3, 5, 200, 203, 202, 201, 205, 83f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn }; 84f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 85f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn static class ControlledHash { 86f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn final int mValue; 87f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 88f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ControlledHash(int value) { 89f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn mValue = value; 90f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 91f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 92f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn @Override 93f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn public final boolean equals(Object o) { 9462d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn if (o == null) { 9562d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn return false; 9662d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn } 97f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return mValue == ((ControlledHash)o).mValue; 98f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 99f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 100f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn @Override 101f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn public final int hashCode() { 102f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return mValue/100; 103f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 104f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 105f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn @Override 106f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn public final String toString() { 107f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return Integer.toString(mValue); 108f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 109f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 110f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 111f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn private static boolean compare(Object v1, Object v2) { 112f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (v1 == null) { 113f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return v2 == null; 114f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 115f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (v2 == null) { 116f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 117f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 118f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return v1.equals(v2); 119f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 120f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 121f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn private static boolean compareMaps(HashMap map, ArrayMap array) { 122f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (map.size() != array.size()) { 123f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", "Bad size: expected " + map.size() + ", got " + array.size()); 124f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 125f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 126f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 127f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Set<Map.Entry> mapSet = map.entrySet(); 128f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (Map.Entry entry : mapSet) { 129f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object expValue = entry.getValue(); 130f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object gotValue = array.get(entry.getKey()); 131f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (!compare(expValue, gotValue)) { 132f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", "Bad value: expected " + expValue + ", got " + gotValue 133f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn + " at key " + entry.getKey()); 134f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 135f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 136f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 137f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 138f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<array.size(); i++) { 139f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object gotValue = array.valueAt(i); 140f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object key = array.keyAt(i); 141f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object expValue = map.get(key); 142f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (!compare(expValue, gotValue)) { 143f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", "Bad value: expected " + expValue + ", got " + gotValue 144f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn + " at key " + key); 145f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 146f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 147f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 148f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 1498b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (map.entrySet().hashCode() != array.entrySet().hashCode()) { 1508b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Entry set hash codes differ: map=0x" 1518b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn + Integer.toHexString(map.entrySet().hashCode()) + " array=0x" 1528b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn + Integer.toHexString(array.entrySet().hashCode())); 1538b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1548b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1558b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1568b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!map.entrySet().equals(array.entrySet())) { 1578b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed calling equals on map entry set against array set"); 1588b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1598b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1608b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1618b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!array.entrySet().equals(map.entrySet())) { 1628b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed calling equals on array entry set against map set"); 1638b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1648b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1658b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1668b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (map.keySet().hashCode() != array.keySet().hashCode()) { 1678b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Key set hash codes differ: map=0x" 1688b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn + Integer.toHexString(map.keySet().hashCode()) + " array=0x" 1698b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn + Integer.toHexString(array.keySet().hashCode())); 1708b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1718b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1728b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1738b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!map.keySet().equals(array.keySet())) { 1748b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed calling equals on map key set against array set"); 1758b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1768b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1778b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1788b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!array.keySet().equals(map.keySet())) { 1798b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed calling equals on array key set against map set"); 1808b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1818b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1828b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1838b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!map.keySet().containsAll(array.keySet())) { 1848b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed map key set contains all of array key set"); 1858b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1868b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1878b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1888b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!array.keySet().containsAll(map.keySet())) { 1898b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed array key set contains all of map key set"); 1908b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1918b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1928b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1938b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!array.containsAll(map.keySet())) { 1948b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed array contains all of map key set"); 1958b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 1968b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 1978b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 1988b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!map.entrySet().containsAll(array.entrySet())) { 1998b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed map entry set contains all of array entry set"); 2008b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 2018b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 2028b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 2038b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn if (!array.entrySet().containsAll(map.entrySet())) { 2048b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn Log.e("test", "Failed array entry set contains all of map entry set"); 2058b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn return false; 2068b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn } 2078b7bc13e217034e0ddd00f9033463190f50dce88Dianne Hackborn 20821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return true; 20921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 21021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 21121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn private static boolean compareSets(HashSet set, ArraySet array) { 21221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (set.size() != array.size()) { 21321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad size: expected " + set.size() + ", got " + array.size()); 21421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return false; 21521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 21621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 21721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn for (Object entry : set) { 21821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!array.contains(entry)) { 21921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad value: expected " + entry + " not found in ArraySet"); 220f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 221f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 222f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 223f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 22421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn for (int i=0; i<array.size(); i++) { 22521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Object entry = array.valueAt(i); 22621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!set.contains(entry)) { 22721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad value: unexpected " + entry + " in ArraySet"); 228f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 229f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 230f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 231f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 23221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn int index = 0; 23321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn for (Object entry : array) { 23421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Object realEntry = array.valueAt(index); 23521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!compare(entry, realEntry)) { 23621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad iterator: expected value " + realEntry + ", got " + entry 237f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn + " at index " + index); 238f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 239f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 240f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn index++; 241f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 242f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 243f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 244f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 245f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 246f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn private static boolean validateArrayMap(ArrayMap array) { 247f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Set<Map.Entry> entrySet = array.entrySet(); 248f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn int index=0; 249f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Iterator<Map.Entry> entryIt = entrySet.iterator(); 250f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn while (entryIt.hasNext()) { 251f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Map.Entry entry = entryIt.next(); 252f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object value = entry.getKey(); 253f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object realValue = array.keyAt(index); 254f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (!compare(realValue, value)) { 25521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad array map entry set: expected key " + realValue 256f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn + ", got " + value + " at index " + index); 257f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 258f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 259f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn value = entry.getValue(); 260f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn realValue = array.valueAt(index); 261f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (!compare(realValue, value)) { 26221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad array map entry set: expected value " + realValue 263f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn + ", got " + value + " at index " + index); 264f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 265f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 266f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn index++; 267f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 268f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 269f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn index = 0; 270f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Set keySet = array.keySet(); 271f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Iterator keyIt = keySet.iterator(); 272f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn while (keyIt.hasNext()) { 273f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object value = keyIt.next(); 274f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object realValue = array.keyAt(index); 275f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (!compare(realValue, value)) { 27621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad array map key set: expected key " + realValue 277f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn + ", got " + value + " at index " + index); 278f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 279f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 280f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn index++; 281f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 282f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 283f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn index = 0; 284f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Collection valueCol = array.values(); 285f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Iterator valueIt = valueCol.iterator(); 286f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn while (valueIt.hasNext()) { 287f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object value = valueIt.next(); 288f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Object realValue = array.valueAt(index); 289f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (!compare(realValue, value)) { 29021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad array map value col: expected value " + realValue 291f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn + ", got " + value + " at index " + index); 292f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return false; 293f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 294f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn index++; 295f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 296f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 297f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return true; 298f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 299f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 30021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn private static void dump(Map map, ArrayMap array) { 301f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", "HashMap of " + map.size() + " entries:"); 302f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Set<Map.Entry> mapSet = map.entrySet(); 303f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (Map.Entry entry : mapSet) { 304f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", " " + entry.getKey() + " -> " + entry.getValue()); 305f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 306f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", "ArrayMap of " + array.size() + " entries:"); 307f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<array.size(); i++) { 308f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", " " + array.keyAt(i) + " -> " + array.valueAt(i)); 309f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 310f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 311f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 31221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn private static void dump(Set set, ArraySet array) { 31321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "HashSet of " + set.size() + " entries:"); 31421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn for (Object entry : set) { 31521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", " " + entry); 31621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 31721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "ArraySet of " + array.size() + " entries:"); 31821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn for (int i=0; i<array.size(); i++) { 31921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", " " + array.valueAt(i)); 32021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 32121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 32221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 323f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase private static void dump(ArrayMap map1, ArrayMap map2) { 324f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", "ArrayMap of " + map1.size() + " entries:"); 325f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Set<Map.Entry> mapSet = map1.entrySet(); 326f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase for (int i=0; i<map2.size(); i++) { 327f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", " " + map1.keyAt(i) + " -> " + map1.valueAt(i)); 328f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 329f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", "ArrayMap of " + map2.size() + " entries:"); 330f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase for (int i=0; i<map2.size(); i++) { 331f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", " " + map2.keyAt(i) + " -> " + map2.valueAt(i)); 332f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 333f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 334f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 335f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn public static void run() { 33621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn HashMap<ControlledHash, Integer> hashMap = new HashMap<ControlledHash, Integer>(); 33721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn ArrayMap<ControlledHash, Integer> arrayMap = new ArrayMap<ControlledHash, Integer>(); 33821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn HashSet<ControlledHash> hashSet = new HashSet<ControlledHash>(); 33921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn ArraySet<ControlledHash> arraySet = new ArraySet<ControlledHash>(); 340f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 341f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn for (int i=0; i<OPS.length; i++) { 34221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Integer oldHash; 343f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Integer oldArray; 34421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn boolean hashChanged; 34521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn boolean arrayChanged; 34662d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn ControlledHash key = KEYS[i] < 0 ? null : new ControlledHash(KEYS[i]); 347f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn switch (OPS[i]) { 348f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn case OP_ADD: 349f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.i("test", "Adding key: " + KEYS[i]); 35062d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn oldHash = hashMap.put(key, i); 35162d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn oldArray = arrayMap.put(key, i); 35262d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn hashChanged = hashSet.add(key); 35362d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn arrayChanged = arraySet.add(key); 354f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn break; 355f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn case OP_REM: 356f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.i("test", "Removing key: " + KEYS[i]); 35762d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn oldHash = hashMap.remove(key); 35862d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn oldArray = arrayMap.remove(key); 35962d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn hashChanged = hashSet.remove(key); 36062d708f4dd8e2a8554df4967837df9896efeff7cDianne Hackborn arrayChanged = arraySet.remove(key); 361f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn break; 362f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn default: 363f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", "Bad operation " + OPS[i] + " @ " + i); 364f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return; 365f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 36621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!compare(oldHash, oldArray)) { 36721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad result: expected " + oldHash + ", got " + oldArray); 36821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashMap, arrayMap); 36921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return; 37021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 37121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (hashChanged != arrayChanged) { 37221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad change: expected " + hashChanged + ", got " + arrayChanged); 37321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashSet, arraySet); 374f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return; 375f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 37621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!validateArrayMap(arrayMap)) { 37721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashMap, arrayMap); 378f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return; 379f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 38021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!compareMaps(hashMap, arrayMap)) { 38121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashMap, arrayMap); 38221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return; 38321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 38421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!compareSets(hashSet, arraySet)) { 38521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashSet, arraySet); 386f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn return; 387f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 388f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 389f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 39021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn arrayMap.put(new ControlledHash(50000), 100); 391f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn ControlledHash lookup = new ControlledHash(50000); 39221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Iterator<ControlledHash> it = arrayMap.keySet().iterator(); 39321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn while (it.hasNext()) { 39421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (it.next().equals(lookup)) { 39521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn it.remove(); 39621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 39721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 39821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (arrayMap.containsKey(lookup)) { 39921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad map iterator: didn't remove test key"); 40021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashMap, arrayMap); 40121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 40221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 40321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn arraySet.add(new ControlledHash(50000)); 40421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn it = arraySet.iterator(); 405f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn while (it.hasNext()) { 406f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn if (it.next().equals(lookup)) { 407f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn it.remove(); 408f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 409f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 41021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (arraySet.contains(lookup)) { 41121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Bad set iterator: didn't remove test key"); 41221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashSet, arraySet); 41321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 41421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 41521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!equalsMapTest()) { 41621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return; 417f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 418f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn 41921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!equalsSetTest()) { 420f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase return; 421f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 422f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 42321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn // map copy constructor test 424f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase ArrayMap newMap = new ArrayMap<Integer, String>(); 425f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase for (int i = 0; i < 10; ++i) { 426f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase newMap.put(i, String.valueOf(i)); 427f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 428f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase ArrayMap mapCopy = new ArrayMap(newMap); 429f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase if (!compare(mapCopy, newMap)) { 430f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", "ArrayMap copy constructor failure: expected " + 431f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase newMap + ", got " + mapCopy); 43221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(newMap, mapCopy); 43321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return; 43421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 43521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 43621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn // set copy constructor test 43721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn ArraySet newSet = new ArraySet<Integer>(); 43821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn for (int i = 0; i < 10; ++i) { 43921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn newSet.add(i); 44021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 44121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn ArraySet setCopy = new ArraySet(newSet); 44221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!compare(setCopy, newSet)) { 44321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "ArraySet copy constructor failure: expected " + 44421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn newSet + ", got " + setCopy); 44521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(newSet, setCopy); 446f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase return; 447f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 448f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 449f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn Log.e("test", "Test successful; printing final map."); 45021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashMap, arrayMap); 45121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 45221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "Test successful; printing final set."); 45321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn dump(hashSet, arraySet); 454f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn } 455f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 45621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn private static boolean equalsMapTest() { 457f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase ArrayMap<Integer, String> map1 = new ArrayMap<Integer, String>(); 458f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase ArrayMap<Integer, String> map2 = new ArrayMap<Integer, String>(); 459f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase HashMap<Integer, String> map3 = new HashMap<Integer, String>(); 460f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase if (!compare(map1, map2) || !compare(map1, map3) || !compare(map3, map2)) { 461f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", "ArrayMap equals failure for empty maps " + map1 + ", " + 462f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map2 + ", " + map3); 463f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase return false; 464f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 465f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 466f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase for (int i = 0; i < 10; ++i) { 467f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase String value = String.valueOf(i); 468f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map1.put(i, value); 469f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map2.put(i, value); 470f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map3.put(i, value); 471f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 472f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase if (!compare(map1, map2) || !compare(map1, map3) || !compare(map3, map2)) { 473f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", "ArrayMap equals failure for populated maps " + map1 + ", " + 474f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map2 + ", " + map3); 475f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase return false; 476f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 477f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 478f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map1.remove(0); 479f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase if (compare(map1, map2) || compare(map1, map3) || compare(map3, map1)) { 480f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", "ArrayMap equals failure for map size " + map1 + ", " + 481f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map2 + ", " + map3); 482f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase return false; 483f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 484f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 485f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map1.put(0, "-1"); 486f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase if (compare(map1, map2) || compare(map1, map3) || compare(map3, map1)) { 487f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase Log.e("test", "ArrayMap equals failure for map contents " + map1 + ", " + 488f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase map2 + ", " + map3); 489f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase return false; 490f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 491f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase 492f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase return true; 493f4130cf35fa128e36f96e55955d4f5db86197e4aChet Haase } 49421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 49521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn private static boolean equalsSetTest() { 49621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn ArraySet<Integer> set1 = new ArraySet<Integer>(); 49721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn ArraySet<Integer> set2 = new ArraySet<Integer>(); 49821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn HashSet<Integer> set3 = new HashSet<Integer>(); 49921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!compare(set1, set2) || !compare(set1, set3) || !compare(set3, set2)) { 50021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "ArraySet equals failure for empty sets " + set1 + ", " + 50121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set2 + ", " + set3); 50221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return false; 50321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 50421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 50521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn for (int i = 0; i < 10; ++i) { 50621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set1.add(i); 50721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set2.add(i); 50821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set3.add(i); 50921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 51021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (!compare(set1, set2) || !compare(set1, set3) || !compare(set3, set2)) { 51121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "ArraySet equals failure for populated sets " + set1 + ", " + 51221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set2 + ", " + set3); 51321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return false; 51421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 51521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 51621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set1.remove(0); 51721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (compare(set1, set2) || compare(set1, set3) || compare(set3, set1)) { 51821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "ArraSet equals failure for set size " + set1 + ", " + 51921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set2 + ", " + set3); 52021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return false; 52121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 52221ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 52321ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set1.add(-1); 52421ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn if (compare(set1, set2) || compare(set1, set3) || compare(set3, set1)) { 52521ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn Log.e("test", "ArraySet equals failure for set contents " + set1 + ", " + 52621ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn set2 + ", " + set3); 52721ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return false; 52821ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 52921ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn 53021ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn return true; 53121ab6f49910a6f319bc7b9d3964086cb1ffe09d0Dianne Hackborn } 532f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn} 533