Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2017 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 androidx.core.util
     18 
     19 import android.util.SparseIntArray
     20 import androidx.testutils.fail
     21 import com.google.common.truth.Truth.assertThat
     22 import org.junit.Assert.assertEquals
     23 import org.junit.Assert.assertFalse
     24 import org.junit.Assert.assertTrue
     25 import org.junit.Test
     26 
     27 class SparseIntArrayTest {
     28     @Test fun sizeProperty() {
     29         val array = SparseIntArray()
     30         assertEquals(0, array.size)
     31         array.put(1, 11)
     32         assertEquals(1, array.size)
     33     }
     34 
     35     @Test fun containsOperator() {
     36         val array = SparseIntArray()
     37         assertFalse(1 in array)
     38         array.put(1, 11)
     39         assertTrue(1 in array)
     40     }
     41 
     42     @Test fun containsOperatorWithValue() {
     43         val array = SparseIntArray()
     44 
     45         array.put(1, 11)
     46         assertFalse(2 in array)
     47 
     48         array.put(2, 22)
     49         assertTrue(2 in array)
     50     }
     51 
     52     @Test fun setOperator() {
     53         val array = SparseIntArray()
     54         array[1] = 11
     55         assertEquals(11, array.get(1))
     56     }
     57 
     58     @Test fun plusOperator() {
     59         val first = SparseIntArray().apply { put(1, 11) }
     60         val second = SparseIntArray().apply { put(2, 22) }
     61         val combined = first + second
     62         assertEquals(2, combined.size())
     63         assertEquals(1, combined.keyAt(0))
     64         assertEquals(11, combined.valueAt(0))
     65         assertEquals(2, combined.keyAt(1))
     66         assertEquals(22, combined.valueAt(1))
     67     }
     68 
     69     @Test fun containsKey() {
     70         val array = SparseIntArray()
     71         assertFalse(array.containsKey(1))
     72         array.put(1, 11)
     73         assertTrue(array.containsKey(1))
     74     }
     75 
     76     @Test fun containsKeyWithValue() {
     77         val array = SparseIntArray()
     78 
     79         array.put(1, 11)
     80         assertFalse(array.containsKey(2))
     81 
     82         array.put(2, 22)
     83         assertTrue(array.containsKey(2))
     84     }
     85 
     86     @Test fun containsValue() {
     87         val array = SparseIntArray()
     88         assertFalse(array.containsValue(11))
     89         array.put(1, 11)
     90         assertTrue(array.containsValue(11))
     91     }
     92 
     93     @Test fun getOrDefault() {
     94         val array = SparseIntArray()
     95         assertEquals(22, array.getOrDefault(1, 22))
     96         array.put(1, 11)
     97         assertEquals(11, array.getOrDefault(1, 22))
     98     }
     99 
    100     @Test fun getOrElse() {
    101         val array = SparseIntArray()
    102         assertEquals(22, array.getOrElse(1) { 22 })
    103         array.put(1, 11)
    104         assertEquals(11, array.getOrElse(1) { fail() })
    105     }
    106 
    107     @Test fun isEmpty() {
    108         val array = SparseIntArray()
    109         assertTrue(array.isEmpty())
    110         array.put(1, 11)
    111         assertFalse(array.isEmpty())
    112     }
    113 
    114     @Test fun isNotEmpty() {
    115         val array = SparseIntArray()
    116         assertFalse(array.isNotEmpty())
    117         array.put(1, 11)
    118         assertTrue(array.isNotEmpty())
    119     }
    120 
    121     @Test fun removeValue() {
    122         val array = SparseIntArray()
    123         array.put(1, 11)
    124         assertFalse(array.remove(0, 11))
    125         assertEquals(1, array.size())
    126         assertFalse(array.remove(1, 22))
    127         assertEquals(1, array.size())
    128         assertTrue(array.remove(1, 11))
    129         assertEquals(0, array.size())
    130     }
    131 
    132     @Test fun putAll() {
    133         val dest = SparseIntArray()
    134         val source = SparseIntArray()
    135         source.put(1, 11)
    136 
    137         assertEquals(0, dest.size())
    138         dest.putAll(source)
    139         assertEquals(1, dest.size())
    140     }
    141 
    142     @Test fun forEach() {
    143         val array = SparseIntArray()
    144         array.forEach { _, _ -> fail() }
    145 
    146         array.put(1, 11)
    147         array.put(2, 22)
    148         array.put(6, 66)
    149 
    150         val keys = mutableListOf<Int>()
    151         val values = mutableListOf<Int>()
    152         array.forEach { key, value ->
    153             keys.add(key)
    154             values.add(value)
    155         }
    156         assertThat(keys).containsExactly(1, 2, 6)
    157         assertThat(values).containsExactly(11, 22, 66)
    158     }
    159 
    160     @Test fun keyIterator() {
    161         val array = SparseIntArray()
    162         assertFalse(array.keyIterator().hasNext())
    163 
    164         array.put(1, 11)
    165         array.put(2, 22)
    166         array.put(6, 66)
    167 
    168         val iterator = array.keyIterator()
    169         assertTrue(iterator.hasNext())
    170         assertEquals(1, iterator.nextInt())
    171         assertTrue(iterator.hasNext())
    172         assertEquals(2, iterator.nextInt())
    173         assertTrue(iterator.hasNext())
    174         assertEquals(6, iterator.nextInt())
    175         assertFalse(iterator.hasNext())
    176     }
    177 
    178     @Test fun valueIterator() {
    179         val array = SparseIntArray()
    180         assertFalse(array.valueIterator().hasNext())
    181 
    182         array.put(1, 11)
    183         array.put(2, 22)
    184         array.put(6, 66)
    185 
    186         val iterator = array.valueIterator()
    187         assertTrue(iterator.hasNext())
    188         assertEquals(11, iterator.nextInt())
    189         assertTrue(iterator.hasNext())
    190         assertEquals(22, iterator.nextInt())
    191         assertTrue(iterator.hasNext())
    192         assertEquals(66, iterator.nextInt())
    193         assertFalse(iterator.hasNext())
    194     }
    195 }
    196