513 lines
11 KiB
Kotlin
513 lines
11 KiB
Kotlin
/*
|
|
* Copyright 2023 dorkbox, llc
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package dorkbox.collections
|
|
|
|
import org.junit.Assert.assertTrue
|
|
import org.junit.Test
|
|
|
|
class IntTests {
|
|
private fun map(): IntMap<String?> {
|
|
val map = IntMap<String?>()
|
|
map[1] = "1"
|
|
map[2] = "2"
|
|
map[3] = null
|
|
|
|
return map
|
|
}
|
|
|
|
private fun map2(): IntIntMap {
|
|
val map = IntIntMap()
|
|
map[1] = 1
|
|
map[2] = 2
|
|
map[3] = 3
|
|
|
|
return map
|
|
}
|
|
|
|
private fun map3(): LockFreeIntMap<String?> {
|
|
val map = LockFreeIntMap<String?>()
|
|
map[1] = "1"
|
|
map[2] = "2"
|
|
map[3] = null
|
|
|
|
return map
|
|
}
|
|
|
|
private fun set(): IntSet {
|
|
val set = IntSet()
|
|
set.add(1)
|
|
set.add(2)
|
|
set.add(3)
|
|
|
|
return set
|
|
}
|
|
|
|
@Test
|
|
fun testIntMap() {
|
|
val map = map()
|
|
assertTrue(map.size == 3)
|
|
|
|
assertTrue(map.size == 3)
|
|
|
|
assertTrue(map[2] == "2")
|
|
map.remove(2)
|
|
assertTrue(map.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
map.entries.retainAll { it.key == 1}
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
|
|
map.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntMapKeys() {
|
|
val map = map()
|
|
assertTrue(map.size == 3)
|
|
|
|
val keys = map.keys()
|
|
assertTrue(keys.size == 3)
|
|
|
|
assertTrue(map[2] == "2")
|
|
keys.remove(2)
|
|
assertTrue(map.size == 2)
|
|
assertTrue(keys.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keep = listOf(1)
|
|
keys.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
keys.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(keys.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(keys.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntMapValues() {
|
|
val map = map()
|
|
assertTrue(map.size == 3)
|
|
|
|
val values = map.values()
|
|
assertTrue(values.size == 3)
|
|
|
|
values.remove("2")
|
|
assertTrue(map.size == 2)
|
|
assertTrue(values.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keep = listOf("1")
|
|
values.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
values.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(values.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(values.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntMapEntries() {
|
|
val map = map()
|
|
assertTrue(map.size == 3)
|
|
|
|
val entries = map.entries()
|
|
assertTrue(entries.size == 3)
|
|
|
|
var toRemove: IntMap.Entry<String?>? = null
|
|
val iter = entries.iterator()
|
|
while (iter.hasNext()) {
|
|
val entry = iter.next()
|
|
if (entry.key == 2) {
|
|
toRemove = entry
|
|
break
|
|
}
|
|
}
|
|
|
|
|
|
assertTrue(toRemove?.key == 2)
|
|
entries.remove(toRemove)
|
|
assertTrue(map.size == 2)
|
|
assertTrue(entries.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keepEntry = entries.iterator().next()
|
|
|
|
val keep = listOf(keepEntry)
|
|
entries.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
entries.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(entries.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(entries.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntMapEntries2() {
|
|
val map = map()
|
|
assertTrue(map.size == 3)
|
|
|
|
val entries = map.entries()
|
|
val keepEntry = IntMap.Entry<String?>(map)
|
|
keepEntry.key = 1
|
|
keepEntry.value = "1"
|
|
|
|
val keep = listOf(keepEntry)
|
|
entries.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
entries.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(entries.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(entries.size == 0)
|
|
}
|
|
|
|
|
|
@Test
|
|
fun testIntIntMap() {
|
|
val map = map2()
|
|
assertTrue(map.size == 3)
|
|
|
|
assertTrue(map.size == 3)
|
|
|
|
assertTrue(map[2] == 2)
|
|
map.remove(2)
|
|
assertTrue(map.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
map.entries.retainAll { it.key == 1}
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == 1)
|
|
|
|
|
|
map.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntIntMapKeys() {
|
|
val map = map2()
|
|
assertTrue(map.size == 3)
|
|
|
|
val keys = map.keys()
|
|
assertTrue(keys.size == 3)
|
|
|
|
assertTrue(map[2] == 2)
|
|
keys.remove(2)
|
|
assertTrue(map.size == 2)
|
|
assertTrue(keys.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keep = listOf(1)
|
|
keys.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == 1)
|
|
|
|
keys.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(keys.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(keys.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntIntMapValues() {
|
|
val map = map2()
|
|
assertTrue(map.size == 3)
|
|
|
|
val values = map.values()
|
|
assertTrue(values.size == 3)
|
|
|
|
values.remove(2)
|
|
assertTrue(map.size == 2)
|
|
assertTrue(values.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keep = listOf(1)
|
|
values.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == 1)
|
|
|
|
values.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(values.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(values.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntIntMapEntries() {
|
|
val map = map2()
|
|
assertTrue(map.size == 3)
|
|
|
|
val entries = map.entries()
|
|
assertTrue(entries.size == 3)
|
|
|
|
var toRemove: IntIntMap.Entry? = null
|
|
val iter = entries.iterator()
|
|
while (iter.hasNext()) {
|
|
val entry = iter.next()
|
|
if (entry.key == 2) {
|
|
toRemove = entry
|
|
break
|
|
}
|
|
}
|
|
|
|
|
|
assertTrue(toRemove?.key == 2)
|
|
entries.remove(toRemove)
|
|
assertTrue(map.size == 2)
|
|
assertTrue(entries.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keepEntry = entries.iterator().next()
|
|
|
|
val keep = listOf(keepEntry)
|
|
entries.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == 1)
|
|
|
|
entries.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(entries.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(entries.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntIntMapEntries2() {
|
|
val map = map2()
|
|
assertTrue(map.size == 3)
|
|
|
|
val entries = map.entries()
|
|
val keepEntry = IntIntMap.Entry(map)
|
|
keepEntry.key = 1
|
|
keepEntry.value = 1
|
|
|
|
val keep = listOf(keepEntry)
|
|
entries.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == 1)
|
|
|
|
entries.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(entries.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(entries.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testLFIntMap() {
|
|
val map = map3()
|
|
assertTrue(map.size == 3)
|
|
|
|
assertTrue(map.size == 3)
|
|
|
|
assertTrue(map[2] == "2")
|
|
map.remove(2)
|
|
assertTrue(map.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
map.entries.retainAll { it.key == 1}
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
|
|
map.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testLFIntMapKeys() {
|
|
val map = map3()
|
|
assertTrue(map.size == 3)
|
|
|
|
val keys = map.keys
|
|
assertTrue(keys.size == 3)
|
|
|
|
assertTrue(map[2] == "2")
|
|
keys.remove(2)
|
|
assertTrue(map.size == 2)
|
|
assertTrue(keys.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keep = listOf(1)
|
|
keys.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
keys.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(keys.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(keys.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testLFIntMapValues() {
|
|
val map = map3()
|
|
assertTrue(map.size == 3)
|
|
|
|
val values = map.values
|
|
assertTrue(values.size == 3)
|
|
|
|
values.remove("2")
|
|
assertTrue(map.size == 2)
|
|
assertTrue(values.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keep = listOf("1")
|
|
values.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
values.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(values.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(values.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testLFIntMapEntries() {
|
|
val map = map3()
|
|
assertTrue(map.size == 3)
|
|
|
|
val entries = map.entries
|
|
assertTrue(entries.size == 3)
|
|
|
|
var toRemove: MutableMap.MutableEntry<Int, String?>? = null
|
|
val iter = entries.iterator()
|
|
while (iter.hasNext()) {
|
|
val entry = iter.next()
|
|
if (entry.key == 2) {
|
|
toRemove = entry
|
|
break
|
|
}
|
|
}
|
|
|
|
|
|
assertTrue(toRemove?.key == 2)
|
|
entries.remove(toRemove)
|
|
assertTrue(map.size == 2)
|
|
assertTrue(entries.size == 2)
|
|
|
|
assertTrue(map[2] == null)
|
|
|
|
val keepEntry = entries.iterator().next()
|
|
|
|
val keep = listOf(keepEntry)
|
|
entries.retainAll(keep)
|
|
assertTrue(map.size == 1)
|
|
assertTrue(map[1] == "1")
|
|
|
|
entries.clear()
|
|
|
|
assertTrue(map.isEmpty())
|
|
assertTrue(entries.isEmpty())
|
|
assertTrue(map.size == 0)
|
|
assertTrue(entries.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntSet() {
|
|
val set = set()
|
|
assertTrue(set.size == 3)
|
|
|
|
assertTrue(set.size == 3)
|
|
|
|
assertTrue(set[2] == 2)
|
|
set.remove(2)
|
|
assertTrue(set.size == 2)
|
|
|
|
assertTrue(set[2] == null)
|
|
|
|
set.retainAll { it == 1 }
|
|
assertTrue(set.size == 1)
|
|
assertTrue(set[1] == 1)
|
|
|
|
set.clear()
|
|
|
|
assertTrue(set.isEmpty())
|
|
assertTrue(set.size == 0)
|
|
}
|
|
|
|
@Test
|
|
fun testIntSet2() {
|
|
val set = set()
|
|
assertTrue(set.size == 3)
|
|
|
|
assertTrue(set.size == 3)
|
|
|
|
assertTrue(set[2] == 2)
|
|
set.remove(2)
|
|
assertTrue(set.size == 2)
|
|
|
|
assertTrue(set[2] == null)
|
|
|
|
val keep = listOf(1)
|
|
set.retainAll(keep)
|
|
assertTrue(set.size == 1)
|
|
assertTrue(set[1] == 1)
|
|
|
|
set.clear()
|
|
|
|
assertTrue(set.isEmpty())
|
|
assertTrue(set.size == 0)
|
|
}
|
|
}
|