SparseRectFArrayTest.java revision c2ddd6023688db5ecf6c586e05f55e262b4a802e
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2014 The Android Open Source Project
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * you may not use this file except in compliance with the License.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You may obtain a copy of the License at
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      http://www.apache.org/licenses/LICENSE-2.0
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unless required by applicable law or agreed to in writing, software
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * See the License for the specific language governing permissions and
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * limitations under the License.
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpackage android.os;
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgimport android.graphics.RectF;
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgimport android.test.InstrumentationTestCase;
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgimport android.test.suitebuilder.annotation.SmallTest;
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgimport android.view.inputmethod.SparseRectFArray;
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgimport android.view.inputmethod.SparseRectFArray.SparseRectFArrayBuilder;
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgimport java.util.Objects;
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic class SparseRectFArrayTest extends InstrumentationTestCase {
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // A test data for {@link SparseRectFArray}. null represents the gap of indices.
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    private static final RectF[] MANY_RECTS = new RectF[] {
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            null,
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(102.0f, 202.0f, 302.0f, 402.0f),
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(103.0f, 203.0f, 303.0f, 403.0f),
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(104.0f, 204.0f, 304.0f, 404.0f),
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(105.0f, 205.0f, 305.0f, 405.0f),
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(106.0f, 206.0f, 306.0f, 406.0f),
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            null,
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(108.0f, 208.0f, 308.0f, 408.0f),
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(109.0f, 209.0f, 309.0f, 409.0f),
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(110.0f, 210.0f, 310.0f, 410.0f),
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(111.0f, 211.0f, 311.0f, 411.0f),
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(112.0f, 212.0f, 312.0f, 412.0f),
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(113.0f, 213.0f, 313.0f, 413.0f),
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(114.0f, 214.0f, 314.0f, 414.0f),
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(115.0f, 215.0f, 315.0f, 415.0f),
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(116.0f, 216.0f, 316.0f, 416.0f),
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(117.0f, 217.0f, 317.0f, 417.0f),
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            null,
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            null,
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new RectF(118.0f, 218.0f, 318.0f, 418.0f),
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @SmallTest
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    public void testBuilder() throws Exception {
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        final RectF TEMP_RECT = new RectF(10.0f, 20.0f, 30.0f, 40.0f);
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        final SparseRectFArrayBuilder builder = new SparseRectFArrayBuilder();
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        builder.append(100, TEMP_RECT.left, TEMP_RECT.top, TEMP_RECT.right, TEMP_RECT.bottom);
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNull(builder.build().get(-1));
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNull(builder.build().get(0));
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNull(builder.build().get(99));
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEquals(TEMP_RECT, builder.build().get(100));
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNull(builder.build().get(101));
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Test if {@link SparseRectFArrayBuilder#reset} resets its internal state.
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        builder.reset();
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNull(builder.build().get(100));
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        builder.reset();
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int i = 0; i < MANY_RECTS.length; i++) {
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            final RectF rect = MANY_RECTS[i];
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (rect != null) {
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                builder.append(i, rect.left, rect.top, rect.right, rect.bottom);
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        final SparseRectFArray array = builder.build();
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int i = 0; i < MANY_RECTS.length; i++) {
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            final RectF rect = MANY_RECTS[i];
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            assertEquals(rect, array.get(i));
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Make sure the builder reproduces an equivalent object.
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        final SparseRectFArray array2 = builder.build();
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int i = 0; i < MANY_RECTS.length; i++) {
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            final RectF rect = MANY_RECTS[i];
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            assertEquals(rect, array2.get(i));
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEqualRects(array, array2);
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Make sure the instance can be marshaled via {@link Parcel}.
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        final SparseRectFArray array3 = cloneViaParcel(array);
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (int i = 0; i < MANY_RECTS.length; i++) {
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            final RectF rect = MANY_RECTS[i];
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            assertEquals(rect, array3.get(i));
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEqualRects(array, array3);
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Make sure the builder can be reset.
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        builder.reset();
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNull(builder.build().get(0));
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @SmallTest
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    public void testEquality() throws Exception {
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Empty array should be equal.
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEqualRects(new SparseRectFArrayBuilder().build(),
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder().build());
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEqualRects(
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build());
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder().append(100, 2.0f, 2.0f, 3.0f, 4.0f).build());
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder().append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder().append(101, 1.0f, 2.0f, 3.0f, 4.0f).build());
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEqualRects(
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build());
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f).build(),
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build());
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f).build());
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 1.0f, 0.0f, 0.0f, 0.0f).build());
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 1.0f, 0.0f, 0.0f, 0.0f).build(),
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build());
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(101, 0.0f, 0.0f, 0.0f, 0.0f).build(),
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100, 1.0f, 2.0f, 3.0f, 4.0f)
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(102, 0.0f, 0.0f, 0.0f, 0.0f).build());
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEqualRects(
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .build(),
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .build());
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .build(),
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .build());
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertNotEqualRects(
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1000, 0.0f, 0.0f, 0.0f, 0.0f)
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .build(),
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                new SparseRectFArrayBuilder()
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1, 1.0f, 2.0f, 3.0f, 4.0f)
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(1000, 1.0f, 0.0f, 0.0f, 0.0f)
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .append(100000000, 0.0f, 0.0f, 0.0f, 0.0f)
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        .build());
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    @SmallTest
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    public void testBuilderAppend() throws Exception {
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Key should be appended in ascending order.
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        try {
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new SparseRectFArrayBuilder().append(10, 0, 0, 0, 0).append(0, 1, 2, 3, 4);
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } catch (IllegalArgumentException ex) {
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            assertTrue(true);
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        try {
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new SparseRectFArrayBuilder().append(10, 0, 0, 0, 0).append(10, 1, 2, 3, 4);
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } catch (IllegalArgumentException ex) {
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            assertTrue(true);
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    private static void assertEqualRects(SparseRectFArray a, SparseRectFArray b) {
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertEquals(a, b);
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if (a != null && b != null) {
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            assertEquals(a.hashCode(), b.hashCode());
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    private static void assertNotEqualRects(SparseRectFArray a, SparseRectFArray b) {
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        assertFalse(Objects.equals(a, b));
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    private static SparseRectFArray cloneViaParcel(final SparseRectFArray src) {
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Parcel parcel = null;
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        try {
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            parcel = Parcel.obtain();
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            src.writeToParcel(parcel, 0);
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            parcel.setDataPosition(0);
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return new SparseRectFArray(parcel);
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        } finally {
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (parcel != null) {
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                parcel.recycle();
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org