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