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