From dd43edd08e69468cd30b4d41f404548a415cdc87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Henning?= <soeren.henning@email.uni-kiel.de> Date: Sat, 17 Apr 2021 19:38:11 +0200 Subject: [PATCH] Add test for Results class --- .../main/kotlin/theodolite/util/Results.kt | 16 +++--- .../kotlin/theodolite/util/ResultsTest.kt | 50 +++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 theodolite-quarkus/src/test/kotlin/theodolite/util/ResultsTest.kt diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt index 7116d73cf..ab40f3d1f 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt @@ -44,19 +44,21 @@ class Results { * yet, a Resource with the constant value Int.MIN_VALUE is returned. */ fun getMinRequiredInstances(load: LoadDimension?): Resource? { - if (this.results.isEmpty()) return Resource(Int.MIN_VALUE, emptyList()) + if (this.results.isEmpty()) { + return Resource(Int.MIN_VALUE, emptyList()) + } - var requiredInstances: Resource? = Resource(Int.MAX_VALUE, emptyList()) + var minRequiredInstances: Resource? = Resource(Int.MAX_VALUE, emptyList()) for (experiment in results) { + // Get all successful experiments for requested load if (experiment.key.first == load && experiment.value) { - if (requiredInstances == null) { - requiredInstances = experiment.key.second - } else if (experiment.key.second.get() < requiredInstances.get()) { - requiredInstances = experiment.key.second + if (minRequiredInstances == null || experiment.key.second.get() < minRequiredInstances.get()) { + // Found new smallest resources + minRequiredInstances = experiment.key.second } } } - return requiredInstances + return minRequiredInstances } /** diff --git a/theodolite-quarkus/src/test/kotlin/theodolite/util/ResultsTest.kt b/theodolite-quarkus/src/test/kotlin/theodolite/util/ResultsTest.kt new file mode 100644 index 000000000..03d1592ec --- /dev/null +++ b/theodolite-quarkus/src/test/kotlin/theodolite/util/ResultsTest.kt @@ -0,0 +1,50 @@ +package theodolite.util + +import io.quarkus.test.junit.QuarkusTest +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test + +@QuarkusTest +internal class ResultsTest { + + @Test + fun testMinRequiredInstancesWhenSuccessful() { + val results = Results() + results.setResult(10000, 1, true) + results.setResult(20000, 2, true) + results.setResult(10000, 1, false) + results.setResult(20000, 2, true) + + val minRequiredInstances = results.getMinRequiredInstances(LoadDimension(20000, emptyList())) + + assertNotNull(minRequiredInstances) + assertEquals(2, minRequiredInstances!!.get()) + } + + @Test + @Disabled + fun testMinRequiredInstancesWhenNotSuccessful() { + // This test is currently not implemented this way, but might later be the desired behavior. + val results = Results() + results.setResult(10000, 1, true) + results.setResult(20000, 2, true) + results.setResult(10000, 1, false) + results.setResult(20000, 2, false) + + val minRequiredInstances = results.getMinRequiredInstances(LoadDimension(20000, emptyList())) + + assertNotNull(minRequiredInstances) + assertEquals(2, minRequiredInstances!!.get()) + } + + private fun Results.setResult(load: Int, resources: Int, successful: Boolean) { + this.setResult( + Pair( + LoadDimension(load, emptyList()), + Resource(resources, emptyList()) + ), + successful) + } + +} \ No newline at end of file -- GitLab