forked from openrs2/openrs2
parent
a9aae4ea37
commit
972d3cebc1
@ -0,0 +1,137 @@ |
|||||||
|
package dev.openrs2.util.collect |
||||||
|
|
||||||
|
import kotlin.test.Test |
||||||
|
import kotlin.test.assertEquals |
||||||
|
import kotlin.test.assertNotEquals |
||||||
|
import kotlin.test.assertNull |
||||||
|
|
||||||
|
object ForestDisjointSetTest { |
||||||
|
@Test |
||||||
|
fun testAdd() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
assertEquals(0, set.elements) |
||||||
|
assertEquals(0, set.partitions) |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
assertEquals(1, set.elements) |
||||||
|
assertEquals(1, set.partitions) |
||||||
|
|
||||||
|
assertEquals(set1, set.add(1)) |
||||||
|
assertEquals(1, set.elements) |
||||||
|
assertEquals(1, set.partitions) |
||||||
|
|
||||||
|
set.add(2) |
||||||
|
assertEquals(2, set.elements) |
||||||
|
assertEquals(2, set.partitions) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testUnionEqualRank() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
val set2 = set.add(2) |
||||||
|
set.union(set1, set2) |
||||||
|
|
||||||
|
assertEquals(2, set.elements) |
||||||
|
assertEquals(1, set.partitions) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testUnionSameRoot() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
val set2 = set.add(2) |
||||||
|
set.union(set1, set2) |
||||||
|
set.union(set1, set2) |
||||||
|
|
||||||
|
assertEquals(2, set.elements) |
||||||
|
assertEquals(1, set.partitions) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testUnionXRankGreater() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
val set2 = set.add(2) |
||||||
|
val set3 = set.add(3) |
||||||
|
set.union(set1, set2) |
||||||
|
set.union(set1, set3) |
||||||
|
|
||||||
|
assertEquals(3, set.elements) |
||||||
|
assertEquals(1, set.partitions) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testUnionYRankGreater() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
val set2 = set.add(2) |
||||||
|
val set3 = set.add(3) |
||||||
|
set.union(set1, set2) |
||||||
|
set.union(set3, set1) |
||||||
|
|
||||||
|
assertEquals(3, set.elements) |
||||||
|
assertEquals(1, set.partitions) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testPartitionEquals() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
val set2 = set.add(2) |
||||||
|
assertEquals(set1, set1) |
||||||
|
assertEquals(set2, set2) |
||||||
|
assertNotEquals(set1, set2) |
||||||
|
assertNotEquals(set2, set1) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testPartitionHashCode() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
assertEquals(1.hashCode(), set.add(1).hashCode()) |
||||||
|
assertEquals(2.hashCode(), set.add(2).hashCode()) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testPartitionToString() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
assertEquals("1", set.add(1).toString()) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testPartitionIterator() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
set.union(set1, set.add(2)) |
||||||
|
set.union(set1, set.add(3)) |
||||||
|
|
||||||
|
assertEquals(setOf(1, 2, 3), set1.asSequence().toSet()) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testIterator() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
set.add(1) |
||||||
|
set.union(set.add(2), set.add(3)) |
||||||
|
|
||||||
|
assertEquals(setOf(setOf(1), setOf(2, 3)), set.map { it.toSet() }.toSet()) |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun testGet() { |
||||||
|
val set = ForestDisjointSet<Int>() |
||||||
|
|
||||||
|
val set1 = set.add(1) |
||||||
|
assertEquals(set1, set[1]) |
||||||
|
|
||||||
|
assertNull(set[2]) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue