diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2018-10-28 16:08:22 +0100 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2019-05-06 18:19:43 +0200 |
| commit | 783a021a1cb6641d0494067b44fdc02f41630493 (patch) | |
| tree | 692e2d0227e910b3139c242a4bb559ef0cfdbec1 /odcsim-engine-omega/src/main | |
| parent | decb8fb5297c7772f5319a47c784d44bf8bdbe9c (diff) | |
test: Create initial test suite for API
This change creates the initial conformance test suite for the API
design and tries to specify most of the requirements and assumptions
made for implementors.
Diffstat (limited to 'odcsim-engine-omega/src/main')
| -rw-r--r-- | odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt b/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt index ffc68d0b..3eaddf51 100644 --- a/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt +++ b/odcsim-engine-omega/src/main/kotlin/com/atlarge/odcsim/engine/omega/OmegaActorSystem.kt @@ -34,7 +34,6 @@ import com.atlarge.odcsim.Instant import com.atlarge.odcsim.PostStop import com.atlarge.odcsim.PreStart import com.atlarge.odcsim.Signal -import mu.KotlinLogging import java.util.PriorityQueue import kotlin.math.max @@ -56,7 +55,7 @@ class OmegaActorSystem<in T : Any>(root: Behavior<T>, override val name: String) /** * The path to the root actor. */ - override val path: ActorPath = ActorPath.Root() + override val path: ActorPath = ActorPath.Root(name = "/user") /** * The event queue to process @@ -70,19 +69,16 @@ class OmegaActorSystem<in T : Any>(root: Behavior<T>, override val name: String) */ private val registry: MutableMap<ActorPath, Actor<*>> = HashMap() - private val logger = KotlinLogging.logger {} - override fun run(until: Duration) { - require(until >= .0) { "The given instant must be a positive number" } + require(until >= .0) { "The given instant must be a non-negative number" } while (true) { val envelope = queue.peek() ?: break val delivery = envelope.time.takeUnless { it > until } ?: break - if (delivery < time) { - // Message out of order - logger.warn { "Message delivered out of order [expected=$delivery, actual=$time]" } - } + // A message should never be delivered out of order in this single-threaded implementation. Assert for + // sanity + assert(delivery >= time) { "Message delivered out of order [expected=$delivery, actual=$time]" } time = delivery queue.poll() @@ -114,7 +110,7 @@ class OmegaActorSystem<in T : Any>(root: Behavior<T>, override val name: String) override val time: Instant get() = this@OmegaActorSystem.time - override fun <U : Any> spawn(name: String, behavior: Behavior<U>): ActorRef<U> { + override fun <U : Any> spawn(behavior: Behavior<U>, name: String): ActorRef<U> { val ref = ActorRefImpl<U>(self.path.child(name)) if (ref.path !in registry) { val actor = Actor(ref, behavior) @@ -125,9 +121,9 @@ class OmegaActorSystem<in T : Any>(root: Behavior<T>, override val name: String) return ref } - override fun <U : Any> stop(child: ActorRef<U>): Boolean { - if (child.path.root != this@OmegaActorSystem.path) { - // This child is not part of the hierarchy. + override fun stop(child: ActorRef<*>): Boolean { + if (child.path.parent != self.path) { + // This is not a child of this actor return false } val ref = registry[child.path] ?: return false |
