/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.text; import junit.framework.TestCase; /** * PackedIntVectorTest tests the features of android.util.PackedIntVector. */ public class PackedIntVectorTest extends TestCase { public void testBasic() throws Exception { for (int width = 0; width < 10; width++) { PackedIntVector p = new PackedIntVector(width); int[] ins = new int[width]; for (int height = width * 2; height < width * 4; height++) { assertEquals(p.width(), width); // Test adding rows. for (int i = 0; i < height; i++) { int at; if (i % 2 == 0) { at = i; } else { at = p.size() - i; } for (int j = 0; j < width; j++) { ins[j] = i + j; } if (i == height / 2) { p.insertAt(at, null); } else { p.insertAt(at, ins); } assertEquals(p.size(), i + 1); for (int j = 0; j < width; j++) { if (i == height / 2) { assertEquals(0, p.getValue(at, j)); } else { assertEquals(p.getValue(at, j), i + j); } } } // Test setting values. for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { p.setValue(i, j, i * j); assertEquals(p.getValue(i, j), i * j); } } // Test offsetting values. for (int j = 0; j < width; j++) { p.adjustValuesBelow(j * 2, j, j + 27); } for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { int expect = i * j; if (i >= j * 2) { expect += j + 27; } assertEquals(p.getValue(i, j), expect); } } for (int j = 0; j < width; j++) { p.adjustValuesBelow(j, j, j * j + 14); } for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { int expect = i * j; if (i >= j * 2) { expect += j + 27; } if (i >= j) { expect += j * j + 14; } assertEquals(p.getValue(i, j), expect); } } // Test undoing offsets. for (int j = 0; j < width; j++) { p.adjustValuesBelow(j * 2, j, -(j + 27)); p.adjustValuesBelow(j, j, -(j * j + 14)); } for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { assertEquals(p.getValue(i, j), i * j); } } // Test deleting rows. while (p.size() > 0) { int osize = p.size(); int del = osize / 3; if (del == 0) { del = 1; } int at = (osize - del) / 2; p.deleteAt(at, del); assertEquals(p.size(), osize - del); for (int i = 0; i < at; i++) { for (int j = 0; j < width; j++) { assertEquals(p.getValue(i, j), i * j); } } for (int i = at; i < p.size(); i++) { for (int j = 0; j < width; j++) { assertEquals(p.getValue(i, j), (i + height - p.size()) * j); } } } assertEquals(0, p.size()); } } } }