1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17package com.android.inputmethod.latin;
18
19import android.test.AndroidTestCase;
20
21import java.util.Arrays;
22
23public class InputPointersTests extends AndroidTestCase {
24    private static final int DEFAULT_CAPACITY = 48;
25
26    public void testNewInstance() {
27        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
28        assertEquals("new instance size", 0, src.getPointerSize());
29        assertNotNull("new instance xCoordinates", src.getXCoordinates());
30        assertNotNull("new instance yCoordinates", src.getYCoordinates());
31        assertNotNull("new instance pointerIds", src.getPointerIds());
32        assertNotNull("new instance times", src.getTimes());
33    }
34
35    public void testReset() {
36        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
37        final int[] xCoordinates = src.getXCoordinates();
38        final int[] yCoordinates = src.getXCoordinates();
39        final int[] pointerIds = src.getXCoordinates();
40        final int[] times = src.getXCoordinates();
41
42        src.reset();
43        assertEquals("size after reset", 0, src.getPointerSize());
44        assertNotSame("xCoordinates after reset", xCoordinates, src.getXCoordinates());
45        assertNotSame("yCoordinates after reset", yCoordinates, src.getYCoordinates());
46        assertNotSame("pointerIds after reset", pointerIds, src.getPointerIds());
47        assertNotSame("times after reset", times, src.getTimes());
48    }
49
50    public void testAdd() {
51        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
52        final int limit = src.getXCoordinates().length * 2 + 10;
53        for (int i = 0; i < limit; i++) {
54            src.addPointer(i, i * 2, i * 3, i * 4);
55            assertEquals("size after add " + i, i + 1, src.getPointerSize());
56        }
57        for (int i = 0; i < limit; i++) {
58            assertEquals("xCoordinates at " + i, i, src.getXCoordinates()[i]);
59            assertEquals("yCoordinates at " + i, i * 2, src.getYCoordinates()[i]);
60            assertEquals("pointerIds at " + i, i * 3, src.getPointerIds()[i]);
61            assertEquals("times at " + i, i * 4, src.getTimes()[i]);
62        }
63    }
64
65    public void testAddAt() {
66        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
67        final int limit = 1000, step = 100;
68        for (int i = 0; i < limit; i += step) {
69            src.addPointer(i, i, i * 2, i * 3, i * 4);
70            assertEquals("size after add at " + i, i + 1, src.getPointerSize());
71        }
72        for (int i = 0; i < limit; i += step) {
73            assertEquals("xCoordinates at " + i, i, src.getXCoordinates()[i]);
74            assertEquals("yCoordinates at " + i, i * 2, src.getYCoordinates()[i]);
75            assertEquals("pointerIds at " + i, i * 3, src.getPointerIds()[i]);
76            assertEquals("times at " + i, i * 4, src.getTimes()[i]);
77        }
78    }
79
80    public void testSet() {
81        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
82        final int limit = src.getXCoordinates().length * 2 + 10;
83        for (int i = 0; i < limit; i++) {
84            src.addPointer(i, i * 2, i * 3, i * 4);
85        }
86        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
87        dst.set(src);
88        assertEquals("size after set", dst.getPointerSize(), src.getPointerSize());
89        assertSame("xCoordinates after set", dst.getXCoordinates(), src.getXCoordinates());
90        assertSame("yCoordinates after set", dst.getYCoordinates(), src.getYCoordinates());
91        assertSame("pointerIds after set", dst.getPointerIds(), src.getPointerIds());
92        assertSame("times after set", dst.getTimes(), src.getTimes());
93    }
94
95    public void testCopy() {
96        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
97        final int limit = 100;
98        for (int i = 0; i < limit; i++) {
99            src.addPointer(i, i * 2, i * 3, i * 4);
100        }
101        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
102        dst.copy(src);
103        assertEquals("size after copy", dst.getPointerSize(), src.getPointerSize());
104        assertNotSame("xCoordinates after copy", dst.getXCoordinates(), src.getXCoordinates());
105        assertNotSame("yCoordinates after copy", dst.getYCoordinates(), src.getYCoordinates());
106        assertNotSame("pointerIds after copy", dst.getPointerIds(), src.getPointerIds());
107        assertNotSame("times after copy", dst.getTimes(), src.getTimes());
108        final int size = dst.getPointerSize();
109        assertArrayEquals("xCoordinates values after copy",
110                dst.getXCoordinates(), 0, src.getXCoordinates(), 0, size);
111        assertArrayEquals("yCoordinates values after copy",
112                dst.getYCoordinates(), 0, src.getYCoordinates(), 0, size);
113        assertArrayEquals("pointerIds values after copy",
114                dst.getPointerIds(), 0, src.getPointerIds(), 0, size);
115        assertArrayEquals("times values after copy",
116                dst.getTimes(), 0, src.getTimes(), 0, size);
117    }
118
119    public void testAppend() {
120        final InputPointers src = new InputPointers(DEFAULT_CAPACITY);
121        final int srcLen = 100;
122        for (int i = 0; i < srcLen; i++) {
123            src.addPointer(i, i * 2, i * 3, i * 4);
124        }
125        final int dstLen = 50;
126        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
127        for (int i = 0; i < dstLen; i++) {
128            final int value = -i - 1;
129            dst.addPointer(value * 4, value * 3, value * 2, value);
130        }
131        final InputPointers dstCopy = new InputPointers(DEFAULT_CAPACITY);
132        dstCopy.copy(dst);
133
134        dst.append(src, 0, 0);
135        assertEquals("size after append zero", dstLen, dst.getPointerSize());
136        assertArrayEquals("xCoordinates after append zero",
137                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
138        assertArrayEquals("yCoordinates after append zero",
139                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
140        assertArrayEquals("pointerIds after append zero",
141                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
142        assertArrayEquals("times after append zero",
143                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
144
145        dst.append(src, 0, srcLen);
146        assertEquals("size after append", dstLen + srcLen, dst.getPointerSize());
147        assertTrue("primitive length after append",
148                dst.getPointerIds().length >= dstLen + srcLen);
149        assertArrayEquals("original xCoordinates values after append",
150                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
151        assertArrayEquals("original yCoordinates values after append",
152                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
153        assertArrayEquals("original pointerIds values after append",
154                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
155        assertArrayEquals("original times values after append",
156                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
157        assertArrayEquals("appended xCoordinates values after append",
158                src.getXCoordinates(), 0, dst.getXCoordinates(), dstLen, srcLen);
159        assertArrayEquals("appended yCoordinates values after append",
160                src.getYCoordinates(), 0, dst.getYCoordinates(), dstLen, srcLen);
161        assertArrayEquals("appended pointerIds values after append",
162                src.getPointerIds(), 0, dst.getPointerIds(), dstLen, srcLen);
163        assertArrayEquals("appended times values after append",
164                src.getTimes(), 0, dst.getTimes(), dstLen, srcLen);
165    }
166
167    public void testAppendResizableIntArray() {
168        final int srcLen = 100;
169        final int srcPointerId = 1;
170        final int[] srcPointerIds = new int[srcLen];
171        Arrays.fill(srcPointerIds, srcPointerId);
172        final ResizableIntArray srcTimes = new ResizableIntArray(DEFAULT_CAPACITY);
173        final ResizableIntArray srcXCoords = new ResizableIntArray(DEFAULT_CAPACITY);
174        final ResizableIntArray srcYCoords= new ResizableIntArray(DEFAULT_CAPACITY);
175        for (int i = 0; i < srcLen; i++) {
176            srcTimes.add(i * 2);
177            srcXCoords.add(i * 3);
178            srcYCoords.add(i * 4);
179        }
180        final int dstLen = 50;
181        final InputPointers dst = new InputPointers(DEFAULT_CAPACITY);
182        for (int i = 0; i < dstLen; i++) {
183            final int value = -i - 1;
184            dst.addPointer(value * 4, value * 3, value * 2, value);
185        }
186        final InputPointers dstCopy = new InputPointers(DEFAULT_CAPACITY);
187        dstCopy.copy(dst);
188
189        dst.append(srcPointerId, srcTimes, srcXCoords, srcYCoords, 0, 0);
190        assertEquals("size after append zero", dstLen, dst.getPointerSize());
191        assertArrayEquals("xCoordinates after append zero",
192                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
193        assertArrayEquals("yCoordinates after append zero",
194                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
195        assertArrayEquals("pointerIds after append zero",
196                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
197        assertArrayEquals("times after append zero",
198                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
199
200        dst.append(srcPointerId, srcTimes, srcXCoords, srcYCoords, 0, srcLen);
201        assertEquals("size after append", dstLen + srcLen, dst.getPointerSize());
202        assertTrue("primitive length after append",
203                dst.getPointerIds().length >= dstLen + srcLen);
204        assertArrayEquals("original xCoordinates values after append",
205                dstCopy.getXCoordinates(), 0, dst.getXCoordinates(), 0, dstLen);
206        assertArrayEquals("original yCoordinates values after append",
207                dstCopy.getYCoordinates(), 0, dst.getYCoordinates(), 0, dstLen);
208        assertArrayEquals("original pointerIds values after append",
209                dstCopy.getPointerIds(), 0, dst.getPointerIds(), 0, dstLen);
210        assertArrayEquals("original times values after append",
211                dstCopy.getTimes(), 0, dst.getTimes(), 0, dstLen);
212        assertArrayEquals("appended xCoordinates values after append",
213                srcXCoords.getPrimitiveArray(), 0, dst.getXCoordinates(), dstLen, srcLen);
214        assertArrayEquals("appended yCoordinates values after append",
215                srcYCoords.getPrimitiveArray(), 0, dst.getYCoordinates(), dstLen, srcLen);
216        assertArrayEquals("appended pointerIds values after append",
217                srcPointerIds, 0, dst.getPointerIds(), dstLen, srcLen);
218        assertArrayEquals("appended times values after append",
219                srcTimes.getPrimitiveArray(), 0, dst.getTimes(), dstLen, srcLen);
220    }
221
222    private static void assertArrayEquals(String message, int[] expecteds, int expectedPos,
223            int[] actuals, int actualPos, int length) {
224        if (expecteds == null && actuals == null) {
225            return;
226        }
227        if (expecteds == null || actuals == null) {
228            fail(message + ": expecteds=" + expecteds + " actuals=" + actuals);
229        }
230        for (int i = 0; i < length; i++) {
231            assertEquals(message + ": element at " + i,
232                    expecteds[i + expectedPos], actuals[i + actualPos]);
233        }
234    }
235}
236