Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of 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,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.util.cts;
     18 
     19 import static org.junit.Assert.assertEquals;
     20 import static org.junit.Assert.assertFalse;
     21 
     22 import android.support.test.filters.SmallTest;
     23 import android.support.test.runner.AndroidJUnit4;
     24 import android.util.SparseIntArray;
     25 
     26 import org.junit.Test;
     27 import org.junit.runner.RunWith;
     28 
     29 @SmallTest
     30 @RunWith(AndroidJUnit4.class)
     31 public class SparseIntArrayTest {
     32     private static final int[] KEYS   = {12, 23, 4, 6, 8, 1, 3, -12, 0, -3, 11, 14, -23};
     33     private static final int[] VALUES = {0,  1,  2, 3, 4, 5, 6, 7,   8,  9, 10, 11,  12};
     34     private static final int   NON_EXISTED_KEY = 123;
     35     private static final int   VALUE_FOR_NON_EXISTED_KEY = -1;
     36 
     37     @Test
     38     public void testSparseIntArrayWithDefaultCapacity() {
     39         SparseIntArray sparseIntArray = new SparseIntArray();
     40         assertEquals(0, sparseIntArray.size());
     41 
     42         int length = VALUES.length;
     43         for (int i = 0; i < length; i++) {
     44             sparseIntArray.put(KEYS[i], VALUES[i]);
     45             assertEquals(i + 1, sparseIntArray.size());
     46         }
     47         for (int i = 0; i < length; i++) {
     48             assertEquals(VALUES[i], sparseIntArray.get(KEYS[i]));
     49         }
     50         for (int i = 0; i < length; i++) {
     51             assertEquals(sparseIntArray.indexOfValue(VALUES[i]),
     52                     sparseIntArray.indexOfKey(KEYS[i]));
     53         }
     54 
     55         // for key already exist, old value will be replaced
     56         int existKey = KEYS[0];
     57         int oldValue = VALUES[0]; // 0
     58         int newValue = 23;
     59         assertEquals(oldValue, sparseIntArray.get(existKey));
     60         assertEquals(13, sparseIntArray.size());
     61         sparseIntArray.put(existKey, newValue);
     62         assertEquals(newValue, sparseIntArray.get(existKey));
     63         assertEquals(13, sparseIntArray.size());
     64 
     65         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
     66                      sparseIntArray.get(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY));
     67         assertEquals(0, sparseIntArray.get(NON_EXISTED_KEY)); // the default value is 0
     68 
     69         int size = sparseIntArray.size();
     70         sparseIntArray.append(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY);
     71         assertEquals(size + 1, sparseIntArray.size());
     72         assertEquals(size, sparseIntArray.indexOfKey(NON_EXISTED_KEY));
     73         assertEquals(size, sparseIntArray.indexOfValue(VALUE_FOR_NON_EXISTED_KEY));
     74         assertEquals(NON_EXISTED_KEY, sparseIntArray.keyAt(size));
     75         assertEquals(VALUE_FOR_NON_EXISTED_KEY, sparseIntArray.valueAt(size));
     76 
     77         assertEquals(VALUES[1], sparseIntArray.get(KEYS[1]));
     78         assertFalse(VALUE_FOR_NON_EXISTED_KEY == VALUES[1]);
     79         sparseIntArray.delete(KEYS[1]);
     80         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
     81                 sparseIntArray.get(KEYS[1], VALUE_FOR_NON_EXISTED_KEY));
     82 
     83         sparseIntArray.clear();
     84         assertEquals(0, sparseIntArray.size());
     85     }
     86 
     87     @Test
     88     public void testSparseIntArrayWithSpecifiedCapacity() {
     89         SparseIntArray sparseIntArray = new SparseIntArray(5);
     90         assertEquals(0, sparseIntArray.size());
     91 
     92         int length = VALUES.length;
     93         for (int i = 0; i < length; i++) {
     94             sparseIntArray.put(KEYS[i], VALUES[i]);
     95             assertEquals(i + 1, sparseIntArray.size());
     96         }
     97         for (int i = 0; i < length; i++) {
     98             assertEquals(VALUES[i], sparseIntArray.get(KEYS[i]));
     99         }
    100         for (int i = 0; i < length; i++) {
    101             assertEquals(sparseIntArray.indexOfValue(VALUES[i]), sparseIntArray.indexOfKey(KEYS[i]));
    102         }
    103 
    104         // for key already exist, old value will be replaced
    105         int existKey = KEYS[0];
    106         int oldValue = VALUES[0]; // 0
    107         int newValue = 23;
    108         assertEquals(oldValue, sparseIntArray.get(existKey));
    109         assertEquals(13, sparseIntArray.size());
    110         sparseIntArray.put(existKey, newValue);
    111         assertEquals(newValue, sparseIntArray.get(existKey));
    112         assertEquals(13, sparseIntArray.size());
    113 
    114         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
    115                      sparseIntArray.get(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY));
    116         assertEquals(0, sparseIntArray.get(NON_EXISTED_KEY)); // the default value is 0
    117 
    118         int size = sparseIntArray.size();
    119         sparseIntArray.append(NON_EXISTED_KEY, VALUE_FOR_NON_EXISTED_KEY);
    120         assertEquals(size + 1, sparseIntArray.size());
    121         assertEquals(size, sparseIntArray.indexOfKey(NON_EXISTED_KEY));
    122         assertEquals(size, sparseIntArray.indexOfValue(VALUE_FOR_NON_EXISTED_KEY));
    123         assertEquals(NON_EXISTED_KEY, sparseIntArray.keyAt(size));
    124         assertEquals(VALUE_FOR_NON_EXISTED_KEY, sparseIntArray.valueAt(size));
    125 
    126         assertEquals(VALUES[1], sparseIntArray.get(KEYS[1]));
    127         assertFalse(VALUE_FOR_NON_EXISTED_KEY == VALUES[1]);
    128         sparseIntArray.delete(KEYS[1]);
    129         assertEquals(VALUE_FOR_NON_EXISTED_KEY,
    130                 sparseIntArray.get(KEYS[1], VALUE_FOR_NON_EXISTED_KEY));
    131 
    132         sparseIntArray.clear();
    133         assertEquals(0, sparseIntArray.size());
    134     }
    135 
    136     @Test
    137     public void testSparseIntArrayRemoveAt() {
    138         final int[] testData = {
    139             13, 42, 85932, 885932, -6, Integer.MAX_VALUE, 0, Integer.MIN_VALUE };
    140 
    141         // test removal of one key/value pair, varying the index
    142         for (int i = 0; i < testData.length; i++) {
    143             SparseIntArray sia = new SparseIntArray();
    144             for (int value : testData) {
    145                 sia.put(value, value);
    146             }
    147             int size = testData.length;
    148             assertEquals(size, sia.size());
    149             int key = sia.keyAt(i);
    150             assertEquals(key, sia.get(key));
    151             sia.removeAt(i);
    152             assertEquals(21, sia.get(key, 21));
    153             assertEquals(size-1, sia.size());
    154         }
    155 
    156         // remove the 0th pair repeatedly until the array is empty
    157         SparseIntArray sia = new SparseIntArray();
    158         for (int value : testData) {
    159             sia.put(value, value);
    160         }
    161         for (int i = 0; i < testData.length; i++) {
    162             sia.removeAt(0);
    163         }
    164         assertEquals(0, sia.size());
    165         // make sure all pairs have been removed
    166         for (int value : testData) {
    167             assertEquals(21, sia.get(value, 21));
    168         }
    169 
    170         // test removal of a pair from an empty array
    171         try {
    172             new SparseIntArray().removeAt(0);
    173         } catch (ArrayIndexOutOfBoundsException ignored) {
    174             // expected
    175         }
    176     }
    177 
    178     @Test
    179     public void testIterationOrder() {
    180         SparseIntArray sparseArray = new SparseIntArray();
    181         // No matter in which order they are inserted.
    182         sparseArray.put(1, 2);
    183         sparseArray.put(10, 20);
    184         sparseArray.put(5, 40);
    185         sparseArray.put(Integer.MAX_VALUE, Integer.MIN_VALUE);
    186         // The keys are returned in order.
    187         assertEquals(1, sparseArray.keyAt(0));
    188         assertEquals(5, sparseArray.keyAt(1));
    189         assertEquals(10, sparseArray.keyAt(2));
    190         assertEquals(Integer.MAX_VALUE, sparseArray.keyAt(3));
    191         // The values are returned in the order of the corresponding keys.
    192         assertEquals(2, sparseArray.valueAt(0));
    193         assertEquals(40, sparseArray.valueAt(1));
    194         assertEquals(20, sparseArray.valueAt(2));
    195         assertEquals(Integer.MIN_VALUE, sparseArray.valueAt(3));
    196     }
    197 
    198 }
    199 
    200