Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2007 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;
     18 
     19 import junit.framework.TestCase;
     20 
     21 import java.util.HashMap;
     22 import java.util.Iterator;
     23 import java.util.Map;
     24 import java.util.Random;
     25 
     26 /**
     27  * Tests for {@link LongSparseLongArray}.
     28  */
     29 public class LongSparseLongArrayTest extends TestCase {
     30     private static final String TAG = "LongSparseLongArrayTest";
     31 
     32     public void testSimplePut() throws Exception {
     33         final LongSparseLongArray array = new LongSparseLongArray(5);
     34         for (int i = 0; i < 48; i++) {
     35             final long value = 1 << i;
     36             array.put(value, value);
     37         }
     38         for (int i = 0; i < 48; i++) {
     39             final long value = 1 << i;
     40             assertEquals(value, array.get(value, -1));
     41             assertEquals(-1, array.get(-value, -1));
     42         }
     43     }
     44 
     45     public void testSimplePutBackwards() throws Exception {
     46         final LongSparseLongArray array = new LongSparseLongArray(5);
     47         for (int i = 47; i >= 0; i--) {
     48             final long value = 1 << i;
     49             array.put(value, value);
     50         }
     51         for (int i = 0; i < 48; i++) {
     52             final long value = 1 << i;
     53             assertEquals(value, array.get(value, -1));
     54             assertEquals(-1, array.get(-value, -1));
     55         }
     56     }
     57 
     58     public void testMiddleInsert() throws Exception {
     59         final LongSparseLongArray array = new LongSparseLongArray(5);
     60         for (int i = 0; i < 48; i++) {
     61             final long value = 1 << i;
     62             array.put(value, value);
     63         }
     64         final long special = (1 << 24) + 5;
     65         array.put(special, 1024);
     66         for (int i = 0; i < 48; i++) {
     67             final long value = 1 << i;
     68             assertEquals(value, array.get(value, -1));
     69             assertEquals(-1, array.get(-value, -1));
     70         }
     71         assertEquals(1024, array.get(special, -1));
     72     }
     73 
     74     public void testFuzz() throws Exception {
     75         final Random r = new Random();
     76 
     77         final HashMap<Long, Long> map = new HashMap<Long, Long>();
     78         final LongSparseLongArray array = new LongSparseLongArray(r.nextInt(128));
     79 
     80         for (int i = 0; i < 10240; i++) {
     81             if (r.nextBoolean()) {
     82                 final long key = r.nextLong();
     83                 final long value = r.nextLong();
     84                 map.put(key, value);
     85                 array.put(key, value);
     86             }
     87             if (r.nextBoolean() && map.size() > 0) {
     88                 final int index = r.nextInt(map.size());
     89                 final long key = getKeyAtIndex(map, index);
     90                 map.remove(key);
     91                 array.delete(key);
     92             }
     93         }
     94 
     95         Log.d(TAG, "verifying a map with " + map.size() + " entries");
     96 
     97         for (Map.Entry<Long, Long> e : map.entrySet()) {
     98             final long key = e.getKey();
     99             final long value = e.getValue();
    100             assertEquals(value, array.get(key));
    101         }
    102     }
    103 
    104     private static <E> E getKeyAtIndex(Map<E, ?> map, int index) {
    105         final Iterator<E> keys = map.keySet().iterator();
    106         for (int i = 0; i < index; i++) {
    107             keys.next();
    108         }
    109         return keys.next();
    110     }
    111 }
    112