19370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka/* 29370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project 39370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka * 4ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * you may not use this file except in compliance with the License. 6ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * You may obtain a copy of the License at 79370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka * 8ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 99370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka * 109370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * See the License for the specific language governing permissions and 14ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * limitations under the License. 159370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka */ 169370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 17e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasapackage com.android.inputmethod.latin.utils; 189370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 199370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaokaimport android.test.AndroidTestCase; 20b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaokaimport android.test.suitebuilder.annotation.SmallTest; 219370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 2235091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaokaimport java.util.Arrays; 2335091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka 24b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaoka@SmallTest 259370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaokapublic class ResizableIntArrayTests extends AndroidTestCase { 269370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka private static final int DEFAULT_CAPACITY = 48; 279370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 289370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka public void testNewInstance() { 299370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 309370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final int[] array = src.getPrimitiveArray(); 31c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("new instance length", 0, src.getLength()); 32c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertNotNull("new instance array", array); 33c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("new instance array length", DEFAULT_CAPACITY, array.length); 349370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 359370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 369370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka public void testAdd() { 379370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 38c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array = src.getPrimitiveArray(); 39c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka int[] array2 = null, array3 = null; 40c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int limit = DEFAULT_CAPACITY * 2 + 10; 419370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < limit; i++) { 429370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka src.add(i); 439370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertEquals("length after add " + i, i + 1, src.getLength()); 447abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka if (i == DEFAULT_CAPACITY) { 457abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka array2 = src.getPrimitiveArray(); 467abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 477abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka if (i == DEFAULT_CAPACITY * 2) { 487abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka array3 = src.getPrimitiveArray(); 497abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 50c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka if (i < DEFAULT_CAPACITY) { 51c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after add " + i, array, src.getPrimitiveArray()); 52c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } else if (i < DEFAULT_CAPACITY * 2) { 53c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after add " + i, array2, src.getPrimitiveArray()); 54c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } else if (i < DEFAULT_CAPACITY * 3) { 55c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after add " + i, array3, src.getPrimitiveArray()); 56c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 579370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 589370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < limit; i++) { 59c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("value at " + i, i, src.get(i)); 609370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 619370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 629370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 639370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka public void testAddAt() { 649370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 65c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int limit = DEFAULT_CAPACITY * 10, step = DEFAULT_CAPACITY * 2; 669370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < limit; i += step) { 679370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka src.add(i, i); 689370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertEquals("length after add at " + i, i + 1, src.getLength()); 699370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 709370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < limit; i += step) { 71c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("value at " + i, i, src.get(i)); 72c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 73c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 74c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 75c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka public void testGet() { 76c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 77c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka try { 78c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int value = src.get(0); 79c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka fail("get(0) shouldn't succeed"); 80c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } catch (ArrayIndexOutOfBoundsException e) { 81c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka // success 82c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 83c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka try { 84c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int value = src.get(DEFAULT_CAPACITY); 85c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka fail("get(DEFAULT_CAPACITY) shouldn't succeed"); 86c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } catch (ArrayIndexOutOfBoundsException e) { 87c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka // success 88c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 89c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 90c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int index = DEFAULT_CAPACITY / 2; 91c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.add(index, 100); 92c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("legth after add at " + index, index + 1, src.getLength()); 93c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("value after add at " + index, 100, src.get(index)); 94c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("value after add at 0", 0, src.get(0)); 95c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka try { 96c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int value = src.get(src.getLength()); 97c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka fail("get(length) shouldn't succeed"); 98c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } catch (ArrayIndexOutOfBoundsException e) { 99c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka // success 100c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 101c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 102c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 103c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka public void testReset() { 104c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 105c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array = src.getPrimitiveArray(); 106c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka for (int i = 0; i < DEFAULT_CAPACITY; i++) { 107c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.add(i); 108c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after add " + i, i + 1, src.getLength()); 109c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 110c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 111c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int smallerLength = DEFAULT_CAPACITY / 2; 112c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.reset(smallerLength); 113c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array2 = src.getPrimitiveArray(); 114c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after reset", 0, src.getLength()); 115c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertNotSame("array after reset", array, array2); 116c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 117c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka int[] array3 = null; 118c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka for (int i = 0; i < DEFAULT_CAPACITY; i++) { 119c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.add(i); 120c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after add " + i, i + 1, src.getLength()); 1217abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka if (i == smallerLength) { 1227abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka array3 = src.getPrimitiveArray(); 1237abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 124c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka if (i < smallerLength) { 125c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after add " + i, array2, src.getPrimitiveArray()); 126c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } else if (i < smallerLength * 2) { 127c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after add " + i, array3, src.getPrimitiveArray()); 128c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 129c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 130c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 131c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 132c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka public void testSetLength() { 133c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 134c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array = src.getPrimitiveArray(); 135c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka for (int i = 0; i < DEFAULT_CAPACITY; i++) { 136c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.add(i); 137c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after add " + i, i + 1, src.getLength()); 138c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 139c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 140c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int largerLength = DEFAULT_CAPACITY * 2; 141c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.setLength(largerLength); 142c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array2 = src.getPrimitiveArray(); 143c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after larger setLength", largerLength, src.getLength()); 144c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertNotSame("array after larger setLength", array, array2); 145c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("array length after larger setLength", largerLength, array2.length); 1467abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka for (int i = 0; i < largerLength; i++) { 1477abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int v = src.get(i); 1487abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka if (i < DEFAULT_CAPACITY) { 1497abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("value at " + i, i, v); 1507abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } else { 1517abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("value at " + i, 0, v); 1527abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 153c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka } 154c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 155c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int smallerLength = DEFAULT_CAPACITY / 2; 156c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.setLength(smallerLength); 157c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array3 = src.getPrimitiveArray(); 158c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after smaller setLength", smallerLength, src.getLength()); 159c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after smaller setLength", array2, array3); 160c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("array length after smaller setLength", largerLength, array3.length); 161c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka for (int i = 0; i < smallerLength; i++) { 162c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("value at " + i, i, src.get(i)); 1639370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 1649370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 1659370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 1669370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka public void testSet() { 1679370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 168c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int limit = DEFAULT_CAPACITY * 2 + 10; 1699370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < limit; i++) { 1709370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka src.add(i); 1719370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 172c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 1739370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray dst = new ResizableIntArray(DEFAULT_CAPACITY); 1749370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dst.set(src); 1759370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertEquals("length after set", dst.getLength(), src.getLength()); 1769370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertSame("array after set", dst.getPrimitiveArray(), src.getPrimitiveArray()); 1779370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 1789370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 1799370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka public void testCopy() { 1809370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 181c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka for (int i = 0; i < DEFAULT_CAPACITY; i++) { 1829370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka src.add(i); 1839370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 184c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 1859370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray dst = new ResizableIntArray(DEFAULT_CAPACITY); 186c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array = dst.getPrimitiveArray(); 1879370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dst.copy(src); 1889370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertEquals("length after copy", dst.getLength(), src.getLength()); 189c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after copy", array, dst.getPrimitiveArray()); 1909370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertNotSame("array after copy", dst.getPrimitiveArray(), src.getPrimitiveArray()); 19135091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("values after copy", 192c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka dst.getPrimitiveArray(), 0, src.getPrimitiveArray(), 0, dst.getLength()); 193c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 194c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int smallerLength = DEFAULT_CAPACITY / 2; 195c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka dst.reset(smallerLength); 196c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array2 = dst.getPrimitiveArray(); 197c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka dst.copy(src); 198c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array3 = dst.getPrimitiveArray(); 199c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after copy to smaller", dst.getLength(), src.getLength()); 200c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertNotSame("array after copy to smaller", array2, array3); 201c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertNotSame("array after copy to smaller", array3, src.getPrimitiveArray()); 20235091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("values after copy to smaller", 203c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka dst.getPrimitiveArray(), 0, src.getPrimitiveArray(), 0, dst.getLength()); 2049370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 2059370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 2069370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka public void testAppend() { 207c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int srcLen = DEFAULT_CAPACITY; 208c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(srcLen); 2099370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < srcLen; i++) { 2109370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka src.add(i); 2119370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 212c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final ResizableIntArray dst = new ResizableIntArray(DEFAULT_CAPACITY * 2); 213c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int[] array = dst.getPrimitiveArray(); 214c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka final int dstLen = DEFAULT_CAPACITY / 2; 2159370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < dstLen; i++) { 2169370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final int value = -i - 1; 2179370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dst.add(value); 2189370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 2199370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka final ResizableIntArray dstCopy = new ResizableIntArray(dst.getLength()); 2209370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dstCopy.copy(dst); 2219370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 2229370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dst.append(src, 0, 0); 2239370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertEquals("length after append zero", dstLen, dst.getLength()); 224c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after append zero", array, dst.getPrimitiveArray()); 22535091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("values after append zero", 2269370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dstCopy.getPrimitiveArray(), 0, dst.getPrimitiveArray(), 0, dstLen); 2279370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 2289370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dst.append(src, 0, srcLen); 2299370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertEquals("length after append", dstLen + srcLen, dst.getLength()); 230c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertSame("array after append", array, dst.getPrimitiveArray()); 2319370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka assertTrue("primitive length after append", 2329370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dst.getPrimitiveArray().length >= dstLen + srcLen); 23335091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("original values after append", 2349370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka dstCopy.getPrimitiveArray(), 0, dst.getPrimitiveArray(), 0, dstLen); 23535091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("appended values after append", 2369370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka src.getPrimitiveArray(), 0, dst.getPrimitiveArray(), dstLen, srcLen); 237c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka 238c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka dst.append(src, 0, srcLen); 239c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertEquals("length after 2nd append", dstLen + srcLen * 2, dst.getLength()); 240c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertNotSame("array after 2nd append", array, dst.getPrimitiveArray()); 241c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka assertTrue("primitive length after 2nd append", 242c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka dst.getPrimitiveArray().length >= dstLen + srcLen * 2); 24335091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("original values after 2nd append", 244c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka dstCopy.getPrimitiveArray(), 0, dst.getPrimitiveArray(), 0, dstLen); 24535091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("appended values after 2nd append", 246c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.getPrimitiveArray(), 0, dst.getPrimitiveArray(), dstLen, srcLen); 24735091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertIntArrayEquals("appended values after 2nd append", 248c49c85f835ecd14d09abb6d88c85a3303c566741Tadashi G. Takaoka src.getPrimitiveArray(), 0, dst.getPrimitiveArray(), dstLen + srcLen, srcLen); 2499370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 2509370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka 2517abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka public void testFill() { 2527abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int srcLen = DEFAULT_CAPACITY; 2537abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final ResizableIntArray src = new ResizableIntArray(srcLen); 2547abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka for (int i = 0; i < srcLen; i++) { 2557abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka src.add(i); 2567abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 2577abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int[] array = src.getPrimitiveArray(); 2587abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka 2597abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int startPos = srcLen / 3; 2607abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int length = srcLen / 3; 2617abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int endPos = startPos + length; 2627abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertTrue(startPos >= 1); 2637abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int value = 123; 2647abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka try { 2657abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka src.fill(value, -1, length); 2667abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka fail("fill from -1 shouldn't succeed"); 2677abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } catch (IllegalArgumentException e) { 2687abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka // success 2697abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 2707abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka try { 2717abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka src.fill(value, startPos, -1); 2727abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka fail("fill negative length shouldn't succeed"); 2737abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } catch (IllegalArgumentException e) { 2747abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka // success 2757abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 2767abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka 2777abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka src.fill(value, startPos, length); 2787abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("length after fill", srcLen, src.getLength()); 2797abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertSame("array after fill", array, src.getPrimitiveArray()); 2807abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka for (int i = 0; i < srcLen; i++) { 2817abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int v = src.get(i); 2827abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka if (i >= startPos && i < endPos) { 2837abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("new values after fill at " + i, value, v); 2847abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } else { 2857abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("unmodified values after fill at " + i, i, v); 2867abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 2877abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 2887abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka 2897abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int length2 = srcLen * 2 - startPos; 2907abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int largeEnd = startPos + length2; 2917abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertTrue(largeEnd > srcLen); 2927abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int value2 = 456; 2937abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka src.fill(value2, startPos, length2); 2947abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("length after large fill", largeEnd, src.getLength()); 2957abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertNotSame("array after large fill", array, src.getPrimitiveArray()); 2967abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka for (int i = 0; i < largeEnd; i++) { 2977abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int v = src.get(i); 2987abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka if (i >= startPos && i < largeEnd) { 2997abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("new values after large fill at " + i, value2, v); 3007abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } else { 3017abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("unmodified values after large fill at " + i, i, v); 3027abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 3037abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 3047abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka 3057abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int startPos2 = largeEnd + length2; 3067abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int endPos2 = startPos2 + length2; 3077abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int value3 = 789; 3087abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka src.fill(value3, startPos2, length2); 3097abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("length after disjoint fill", endPos2, src.getLength()); 3107abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka for (int i = 0; i < endPos2; i++) { 3117abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka final int v = src.get(i); 3127abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka if (i >= startPos2 && i < endPos2) { 3137abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("new values after disjoint fill at " + i, value3, v); 3147abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } else if (i >= startPos && i < largeEnd) { 3157abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("unmodified values after disjoint fill at " + i, value2, v); 3167abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } else if (i < startPos) { 3177abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("unmodified values after disjoint fill at " + i, i, v); 3187abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } else { 3197abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka assertEquals("gap values after disjoint fill at " + i, 0, v); 3207abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 3217abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 3227abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka } 3237abdcf1ed3113d3c121f6ff1b87a7464f079e141Tadashi G. Takaoka 32435091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka private static void assertIntArrayEquals(final String message, final int[] expecteds, 32535091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka final int expectedPos, final int[] actuals, final int actualPos, final int length) { 32635091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka if (expecteds == actuals) { 3279370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka return; 3289370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 3299370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka if (expecteds == null || actuals == null) { 33035091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertEquals(message, Arrays.toString(expecteds), Arrays.toString(actuals)); 33135091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka return; 33235091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka } 33335091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka if (expecteds.length < expectedPos + length || actuals.length < actualPos + length) { 33435091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka fail(message + ": insufficient length: expecteds=" + Arrays.toString(expecteds) 33535091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka + " actuals=" + Arrays.toString(actuals)); 33635091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka return; 3379370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 3389370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka for (int i = 0; i < length; i++) { 33935091716e781c7ddb618bb4c251c5f43b6643f3eTadashi G. Takaoka assertEquals(message + " [" + i + "]", 3409370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka expecteds[i + expectedPos], actuals[i + actualPos]); 3419370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 3429370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka } 343e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi 344e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi public void testShift() { 345e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi final ResizableIntArray src = new ResizableIntArray(DEFAULT_CAPACITY); 346e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi final int limit = DEFAULT_CAPACITY * 10; 347e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi final int shiftAmount = 20; 348e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi for (int i = 0; i < limit; ++i) { 349e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi src.add(i, i); 350e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi assertEquals("length after add at " + i, i + 1, src.getLength()); 351e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi } 352e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi src.shift(shiftAmount); 353e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi for (int i = 0; i < limit - shiftAmount; ++i) { 354e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi assertEquals("value at " + i, i + shiftAmount, src.get(i)); 355e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi } 356e8754aba1c8f217e7ca828de25e0506ac58daa99Keisuke Kuroyanagi } 3579370ab9adad3b4bc3af8bde52b6422b8d2b873e7Tadashi G. Takaoka} 358