diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt index 7116d73cf5b54325c8cfa41b1186d58695628874..ab40f3d1f722bab39c29e81621da86e8920bbf72 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 0000000000000000000000000000000000000000..03d1592ec867d393384c192936c91066a7108e59 --- /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