12ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka/*
22ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project
32ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka *
42ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); you may not
52ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * use this file except in compliance with the License. You may obtain a copy of
62ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * the License at
72ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka *
82ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0
92ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka *
102ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
112ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
122ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
132ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * License for the specific language governing permissions and limitations under
142ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka * the License.
152ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka */
162ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
172ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaokapackage com.android.inputmethod.latin;
182ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
192ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaokaimport android.test.AndroidTestCase;
202ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
2164a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaokaimport java.util.Arrays;
2264a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka
232ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaokapublic class InputPointersTests extends AndroidTestCase {
2457f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka    private static final int DEFAULT_CAPACITY = 48;
2557f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka
262ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    public void testNewInstance() {
2757f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
28f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertEquals("new instance size", 0, src.getPointerSize());
292ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        assertNotNull("new instance xCoordinates", src.getXCoordinates());
302ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        assertNotNull("new instance yCoordinates", src.getYCoordinates());
312ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        assertNotNull("new instance pointerIds", src.getPointerIds());
322ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        assertNotNull("new instance times", src.getTimes());
332ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
342ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
352ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    public void testReset() {
3657f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
372ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int[] xCoordinates = src.getXCoordinates();
382ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int[] yCoordinates = src.getXCoordinates();
392ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int[] pointerIds = src.getXCoordinates();
402ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int[] times = src.getXCoordinates();
412ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
422ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        src.reset();
43f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertEquals("size after reset", 0, src.getPointerSize());
44f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("xCoordinates after reset", xCoordinates, src.getXCoordinates());
45f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("yCoordinates after reset", yCoordinates, src.getYCoordinates());
46f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("pointerIds after reset", pointerIds, src.getPointerIds());
47f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("times after reset", times, src.getTimes());
482ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
492ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
502ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    public void testAdd() {
5157f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
522ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int limit = src.getXCoordinates().length * 2 + 10;
532ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        for (int i = 0; i < limit; i++) {
542ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            src.addPointer(i, i * 2, i * 3, i * 4);
55f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka            assertEquals("size after add " + i, i + 1, src.getPointerSize());
562ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
572ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        for (int i = 0; i < limit; i++) {
582ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("xCoordinates at " + i, i, src.getXCoordinates()[i]);
592ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("yCoordinates at " + i, i * 2, src.getYCoordinates()[i]);
602ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("pointerIds at " + i, i * 3, src.getPointerIds()[i]);
612ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("times at " + i, i * 4, src.getTimes()[i]);
622ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
632ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
642ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
652ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    public void testAddAt() {
6657f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
672ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int limit = 1000, step = 100;
682ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        for (int i = 0; i < limit; i += step) {
692ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            src.addPointer(i, i, i * 2, i * 3, i * 4);
70f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka            assertEquals("size after add at " + i, i + 1, src.getPointerSize());
712ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
722ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        for (int i = 0; i < limit; i += step) {
732ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("xCoordinates at " + i, i, src.getXCoordinates()[i]);
742ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("yCoordinates at " + i, i * 2, src.getYCoordinates()[i]);
752ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("pointerIds at " + i, i * 3, src.getPointerIds()[i]);
762ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals("times at " + i, i * 4, src.getTimes()[i]);
772ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
782ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
792ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
802ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    public void testSet() {
8157f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
822ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int limit = src.getXCoordinates().length * 2 + 10;
832ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        for (int i = 0; i < limit; i++) {
842ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            src.addPointer(i, i * 2, i * 3, i * 4);
852ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
8657f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
872ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        dst.set(src);
88f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertEquals("size after set", dst.getPointerSize(), src.getPointerSize());
89f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertSame("xCoordinates after set", dst.getXCoordinates(), src.getXCoordinates());
90f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertSame("yCoordinates after set", dst.getYCoordinates(), src.getYCoordinates());
91f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertSame("pointerIds after set", dst.getPointerIds(), src.getPointerIds());
92f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertSame("times after set", dst.getTimes(), src.getTimes());
932ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
942ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
952ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    public void testCopy() {
9657f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
972ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int limit = 100;
982ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        for (int i = 0; i < limit; i++) {
992ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            src.addPointer(i, i * 2, i * 3, i * 4);
1002ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
10157f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
1022ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        dst.copy(src);
103f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertEquals("size after copy", dst.getPointerSize(), src.getPointerSize());
104f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("xCoordinates after copy", dst.getXCoordinates(), src.getXCoordinates());
105f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("yCoordinates after copy", dst.getYCoordinates(), src.getYCoordinates());
106f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("pointerIds after copy", dst.getPointerIds(), src.getPointerIds());
107f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertNotSame("times after copy", dst.getTimes(), src.getTimes());
1082ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        final int size = dst.getPointerSize();
109f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("xCoordinates values after copy",
1102ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka                dst.getXCoordinates(), 0, src.getXCoordinates(), 0, size);
111f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("yCoordinates values after copy",
1122ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka                dst.getYCoordinates(), 0, src.getYCoordinates(), 0, size);
113f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("pointerIds values after copy",
1142ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka                dst.getPointerIds(), 0, src.getPointerIds(), 0, size);
115f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("times values after copy",
1162ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka                dst.getTimes(), 0, src.getTimes(), 0, size);
1172ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
1182ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
1192ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    public void testAppend() {
12057f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
1217247bff6d6d488640ac752127148e7746c43469dTadashi G. Takaoka        final int srcLen = 100;
1227247bff6d6d488640ac752127148e7746c43469dTadashi G. Takaoka        for (int i = 0; i < srcLen; i++) {
1232ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            src.addPointer(i, i * 2, i * 3, i * 4);
1242ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
1257247bff6d6d488640ac752127148e7746c43469dTadashi G. Takaoka        final int dstLen = 50;
12657f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
1277247bff6d6d488640ac752127148e7746c43469dTadashi G. Takaoka        for (int i = 0; i < dstLen; i++) {
1287247bff6d6d488640ac752127148e7746c43469dTadashi G. Takaoka            final int value = -i - 1;
1292ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            dst.addPointer(value * 4, value * 3, value * 2, value);
1302ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
13157f7de0ba664187e13bcea5adff7f5f65eddd823Tadashi G. Takaoka        final InputPointers dstCopy = new InputPointers(DEFAULT_CAPACITY);
1322ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        dstCopy.copy(dst);
1332ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
1342ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        dst.append(src, 0, 0);
135f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertEquals("size after append zero", dstLen, dst.getPointerSize());
136f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("xCoordinates after append zero",
137f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
138f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("yCoordinates after append zero",
139f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
140f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("pointerIds after append zero",
141f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
142f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("times after append zero",
143f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
1442ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
1457247bff6d6d488640ac752127148e7746c43469dTadashi G. Takaoka        dst.append(src, 0, srcLen);
146f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertEquals("size after append", dstLen + srcLen, dst.getPointerSize());
147f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertTrue("primitive length after append",
1487247bff6d6d488640ac752127148e7746c43469dTadashi G. Takaoka                dst.getPointerIds().length >= dstLen + srcLen);
149f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("original xCoordinates values after append",
150f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
151f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("original yCoordinates values after append",
152f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
153f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("original pointerIds values after append",
154f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
155f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("original times values after append",
156f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
157f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("appended xCoordinates values after append",
158f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                src.getXCoordinates(), 0, dst.getXCoordinates(), dstLen, srcLen);
159f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("appended yCoordinates values after append",
160f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                src.getYCoordinates(), 0, dst.getYCoordinates(), dstLen, srcLen);
161f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("appended pointerIds values after append",
162f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                src.getPointerIds(), 0, dst.getPointerIds(), dstLen, srcLen);
163f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka        assertArrayEquals("appended times values after append",
164f5830988878e8b8fba1916fa4c8e8c2d589f2500Tadashi G. Takaoka                src.getTimes(), 0, dst.getTimes(), dstLen, srcLen);
1652ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
1662ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka
16764a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka    public void testAppendResizableIntArray() {
16864a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final int srcLen = 100;
16964a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final int srcPointerId = 1;
17064a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final int[] srcPointerIds = new int[srcLen];
17164a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        Arrays.fill(srcPointerIds, srcPointerId);
17264a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final ResizableIntArray srcTimes = new ResizableIntArray(DEFAULT_CAPACITY);
17364a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final ResizableIntArray srcXCoords = new ResizableIntArray(DEFAULT_CAPACITY);
17464a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final ResizableIntArray srcYCoords= new ResizableIntArray(DEFAULT_CAPACITY);
17564a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        for (int i = 0; i < srcLen; i++) {
17664a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka            srcTimes.add(i * 2);
17764a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka            srcXCoords.add(i * 3);
17864a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka            srcYCoords.add(i * 4);
17964a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        }
18064a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final int dstLen = 50;
18164a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
18264a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        for (int i = 0; i < dstLen; i++) {
18364a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka            final int value = -i - 1;
18464a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka            dst.addPointer(value * 4, value * 3, value * 2, value);
18564a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        }
18664a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        final InputPointers dstCopy = new InputPointers(DEFAULT_CAPACITY);
18764a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        dstCopy.copy(dst);
18864a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka
18964a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        dst.append(srcPointerId, srcTimes, srcXCoords, srcYCoords, 0, 0);
19064a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertEquals("size after append zero", dstLen, dst.getPointerSize());
19164a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("xCoordinates after append zero",
19264a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
19364a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("yCoordinates after append zero",
19464a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
19564a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("pointerIds after append zero",
19664a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
19764a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("times after append zero",
19864a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
19964a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka
20064a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        dst.append(srcPointerId, srcTimes, srcXCoords, srcYCoords, 0, srcLen);
20164a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertEquals("size after append", dstLen + srcLen, dst.getPointerSize());
20264a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertTrue("primitive length after append",
20364a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dst.getPointerIds().length >= dstLen + srcLen);
20464a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("original xCoordinates values after append",
20564a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
20664a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("original yCoordinates values after append",
20764a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
20864a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("original pointerIds values after append",
20964a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
21064a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("original times values after append",
21164a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
21264a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("appended xCoordinates values after append",
21364a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                srcXCoords.getPrimitiveArray(), 0, dst.getXCoordinates(), dstLen, srcLen);
21464a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("appended yCoordinates values after append",
21564a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                srcYCoords.getPrimitiveArray(), 0, dst.getYCoordinates(), dstLen, srcLen);
21664a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("appended pointerIds values after append",
21764a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                srcPointerIds, 0, dst.getPointerIds(), dstLen, srcLen);
21864a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka        assertArrayEquals("appended times values after append",
21964a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka                srcTimes.getPrimitiveArray(), 0, dst.getTimes(), dstLen, srcLen);
22064a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka    }
22164a26b4389abb273afff7699a8c86596defd85bfTadashi G. Takaoka
2222ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    private static void assertArrayEquals(String message, int[] expecteds, int expectedPos,
2232ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            int[] actuals, int actualPos, int length) {
2242ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        if (expecteds == null && actuals == null) {
2252ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            return;
2262ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
2272ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        if (expecteds == null || actuals == null) {
2282ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            fail(message + ": expecteds=" + expecteds + " actuals=" + actuals);
2292ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
2302ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        for (int i = 0; i < length; i++) {
2312ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka            assertEquals(message + ": element at " + i,
2322ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka                    expecteds[i + expectedPos], actuals[i + actualPos]);
2332ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka        }
2342ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka    }
2352ad6d12a30cc9f8189936431651dc543db726cfeTadashi G. Takaoka}
236