summaryrefslogtreecommitdiff
path: root/opendc-simulator/opendc-simulator-network/src
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2022-10-05 14:44:43 +0200
committerGitHub <noreply@github.com>2022-10-05 14:44:43 +0200
commitc2047d09b27b0c05f5c203509dde524e17d3b729 (patch)
tree3903d8aed5e87850c92e1b2dce8379ea99bdfa6d /opendc-simulator/opendc-simulator-network/src
parentec3b5b462c1b8296ba18a3872f56d569fa70e45b (diff)
parentbe176910eb870209576326ffaad8bf21241fccbd (diff)
merge: Extract scheduler from simulation coroutine dispatcher (#106)
This pull request extracts the scheduler from the `SimulationCoroutineDispatcher` into a separate `SimulationScheduler` class which allows users to re-use the scheduler between different coroutine dispatchers. We implement the `SimulationScheduler` in Java, removing the explicit dependency on Kotlin or `kotlinx-coroutines`. The scheduler uses a separate specialized priority queue implementation that eliminates allocation in the hot path of the simulator. ## Implementation Notes :hammer_and_pick: * Add Java-based simulator core * Use SimulationScheduler in coroutine dispatcher * Rename runBlockingSimulation to runSimulation ## External Dependencies :four_leaf_clover: * N/A ## Breaking API Changes :warning: * The Kotlin API for simulation has been moved to `org.opendc.simulator.kotlin`. * `runBlockingSImulation` renamed to `runSimulation`
Diffstat (limited to 'opendc-simulator/opendc-simulator-network/src')
-rw-r--r--opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSinkTest.kt16
-rw-r--r--opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtualTest.kt6
2 files changed, 11 insertions, 11 deletions
diff --git a/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSinkTest.kt b/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSinkTest.kt
index 2e6983c8..944c4d6a 100644
--- a/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSinkTest.kt
+++ b/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSinkTest.kt
@@ -30,16 +30,16 @@ import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertDoesNotThrow
import org.junit.jupiter.api.assertThrows
-import org.opendc.simulator.core.runBlockingSimulation
import org.opendc.simulator.flow.*
import org.opendc.simulator.flow.source.FixedFlowSource
+import org.opendc.simulator.kotlin.runSimulation
/**
* Test suite for the [SimNetworkSink] class.
*/
class SimNetworkSinkTest {
@Test
- fun testInitialState() = runBlockingSimulation {
+ fun testInitialState() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
@@ -49,7 +49,7 @@ class SimNetworkSinkTest {
}
@Test
- fun testDisconnectIdempotent() = runBlockingSimulation {
+ fun testDisconnectIdempotent() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
@@ -58,7 +58,7 @@ class SimNetworkSinkTest {
}
@Test
- fun testConnectCircular() = runBlockingSimulation {
+ fun testConnectCircular() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
@@ -68,7 +68,7 @@ class SimNetworkSinkTest {
}
@Test
- fun testConnectAlreadyConnectedTarget() = runBlockingSimulation {
+ fun testConnectAlreadyConnectedTarget() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
val source = mockk<SimNetworkPort>(relaxUnitFun = true)
@@ -80,7 +80,7 @@ class SimNetworkSinkTest {
}
@Test
- fun testConnectAlreadyConnected() = runBlockingSimulation {
+ fun testConnectAlreadyConnected() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
val source1 = Source(engine)
@@ -96,7 +96,7 @@ class SimNetworkSinkTest {
}
@Test
- fun testConnect() = runBlockingSimulation {
+ fun testConnect() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
val source = spyk(Source(engine))
@@ -112,7 +112,7 @@ class SimNetworkSinkTest {
}
@Test
- fun testDisconnect() = runBlockingSimulation {
+ fun testDisconnect() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
val source = spyk(Source(engine))
diff --git a/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtualTest.kt b/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtualTest.kt
index 62e54ffb..ff6cb66e 100644
--- a/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtualTest.kt
+++ b/opendc-simulator/opendc-simulator-network/src/test/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtualTest.kt
@@ -27,16 +27,16 @@ import io.mockk.verify
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
-import org.opendc.simulator.core.runBlockingSimulation
import org.opendc.simulator.flow.*
import org.opendc.simulator.flow.source.FixedFlowSource
+import org.opendc.simulator.kotlin.runSimulation
/**
* Test suite for the [SimNetworkSwitchVirtual] class.
*/
class SimNetworkSwitchVirtualTest {
@Test
- fun testConnect() = runBlockingSimulation {
+ fun testConnect() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
val source = spyk(Source(engine))
@@ -54,7 +54,7 @@ class SimNetworkSwitchVirtualTest {
}
@Test
- fun testConnectClosedPort() = runBlockingSimulation {
+ fun testConnectClosedPort() = runSimulation {
val engine = FlowEngine(coroutineContext, clock)
val sink = SimNetworkSink(engine, capacity = 100.0)
val switch = SimNetworkSwitchVirtual(engine)