aboutsummaryrefslogtreecommitdiff
path: root/src/test/kotlin/util/math/GChainReconciliationTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/kotlin/util/math/GChainReconciliationTest.kt')
-rw-r--r--src/test/kotlin/util/math/GChainReconciliationTest.kt75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/test/kotlin/util/math/GChainReconciliationTest.kt b/src/test/kotlin/util/math/GChainReconciliationTest.kt
new file mode 100644
index 0000000..502bd9e
--- /dev/null
+++ b/src/test/kotlin/util/math/GChainReconciliationTest.kt
@@ -0,0 +1,75 @@
+package moe.nea.firmament.test.util.math
+
+import io.kotest.core.spec.style.AnnotationSpec
+import org.junit.jupiter.api.Assertions
+import org.junit.jupiter.api.Assertions.*
+import moe.nea.firmament.util.math.GChainReconciliation
+import moe.nea.firmament.util.math.GChainReconciliation.rotated
+
+class GChainReconciliationTest : AnnotationSpec() {
+
+ fun <T> assertEqualCycles(
+ expected: List<T>,
+ actual: List<T>
+ ) {
+ for (offset in expected.indices) {
+ val rotated = expected.rotated(offset)
+ val matchesAtRotation = run {
+ for ((i, v) in actual.withIndex()) {
+ if (rotated[i % rotated.size] != v)
+ return@run false
+ }
+ true
+ }
+ if (matchesAtRotation)
+ return
+ }
+ assertEquals(expected, actual, "Expected arrays to be cycle equivalent")
+ }
+
+ @Test
+ fun testUnfixableCycleNotBeingModified() {
+ assertEquals(
+ listOf(1, 2, 3, 4, 6, 1, 2, 3, 4, 6),
+ GChainReconciliation.reconcileCycles(
+ listOf(1, 2, 3, 4, 6, 1, 2, 3, 4, 6),
+ listOf(2, 3, 4, 5, 1, 2, 3, 4, 5, 1)
+ )
+ )
+ }
+
+ @Test
+ fun testMultipleIndependentHoles() {
+ assertEqualCycles(
+ listOf(1, 2, 3, 4, 5, 6),
+ GChainReconciliation.reconcileCycles(
+ listOf(1, 3, 4, 5, 6, 1, 3, 4, 5, 6),
+ listOf(2, 3, 4, 5, 1, 2, 3, 4, 5, 1)
+ )
+ )
+
+ }
+
+ @Test
+ fun testBigHole() {
+ assertEqualCycles(
+ listOf(1, 2, 3, 4, 5, 6),
+ GChainReconciliation.reconcileCycles(
+ listOf(1, 4, 5, 6, 1, 4, 5, 6),
+ listOf(2, 3, 4, 5, 1, 2, 3, 4, 5, 1)
+ )
+ )
+
+ }
+
+ @Test
+ fun testOneMissingBeingDetected() {
+ assertEqualCycles(
+ listOf(1, 2, 3, 4, 5, 6),
+ GChainReconciliation.reconcileCycles(
+ listOf(1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6),
+ listOf(2, 3, 4, 5, 1, 2, 3, 4, 5, 1)
+ )
+ )
+ }
+}