From fbf70be8a605f36de4af6ee9a7f761f45e18c0c1 Mon Sep 17 00:00:00 2001 From: Pantazis Deligiannis Date: Tue, 25 Oct 2022 13:23:40 -0700 Subject: [PATCH] moved actors to dedicated nuget package (#406) --- Coyote.sln | 7 + History.md | 23 +- .../Raft.Azure/AzureClusterManager.cs | 1 + .../Raft.Mocking/Mocks/MockClusterManager.cs | 1 + .../Mocks/MockClusterManagerWithFailure.cs | 1 + .../Events/AppendLogEntriesRequestEvent.cs | 1 + .../Events/AppendLogEntriesResponseEvent.cs | 1 + .../Raft/Events/ClientRequestEvent.cs | 1 + .../Raft/Events/ClientResponseEvent.cs | 1 + .../Raft/Events/NotifyJoinedServiceEvent.cs | 1 + .../Raft/Events/VoteRequestEvent.cs | 1 + .../Raft/Events/VoteResponseEvent.cs | 1 + Samples/CoffeeMachineActors/MockSensors.cs | 21 +- Samples/CoffeeMachineActors/Program.cs | 11 +- Samples/CoffeeMachineActors/SensorEvents.cs | 44 +- Samples/CoffeeMachineTasks/Program.cs | 19 +- Samples/Common/LogWriter.cs | 15 +- Samples/Common/build.props | 2 + Samples/DrinksServingRobotActors/Program.cs | 13 +- Samples/Monitors/Driver.cs | 3 +- Samples/Monitors/Liveness.cs | 18 +- Samples/Timers/Test.cs | 6 +- Scripts/NuGet/Coyote.Actors.nuspec | 49 + Scripts/NuGet/Coyote.CLI.nuspec | 4 +- Scripts/NuGet/Coyote.Test.nuspec | 8 +- Scripts/NuGet/Coyote.nuspec | 12 +- Scripts/build.ps1 | 17 +- Scripts/gen-docs.ps1 | 18 +- Source/Actors/Actors.csproj | 15 + .../Coverage/ActorActivityCoverageReporter.cs | 244 +++ Source/Actors/Coverage/ActorCoverageInfo.cs | 139 ++ Source/Actors/Coverage/ActorEventCoverage.cs | 101 ++ .../Coverage/ActorRuntimeLogEventCoverage.cs | 141 +- .../Coverage/ActorRuntimeLogGraphBuilder.cs | 629 +------ .../Actors/EventQueues/DequeueStatus.cs | 0 .../Actors/EventQueues/EnqueueStatus.cs | 0 .../Actors/EventQueues/EventQueue.cs | 0 .../Actors/EventQueues/IEventQueue.cs | 0 .../Actors/EventQueues/MockEventQueue.cs | 0 .../Actors/Events/AwaitableEventGroup.cs | 0 .../{Core => }/Actors/Events/DefaultEvent.cs | 2 +- Source/{Core => }/Actors/Events/Event.cs | 5 +- Source/{Core => }/Actors/Events/EventGroup.cs | 0 Source/{Core => }/Actors/Events/EventInfo.cs | 0 .../Actors/Events/EventOriginInfo.cs | 0 .../Actors/Events/GotoStateEvent.cs | 0 Source/{Core => }/Actors/Events/HaltEvent.cs | 0 .../Actors/Events/PushStateEvent.cs | 0 .../Actors/Events/QuiescentEvent.cs | 0 .../{Core => }/Actors/Events/WildcardEvent.cs | 0 .../ActionExceptionFilterException.cs | 0 .../Actors/Exceptions/OnExceptionOutcome.cs | 0 .../Exceptions/UnhandledEventException.cs | 0 .../Handlers/ActionEventHandlerDeclaration.cs | 0 .../Actors/Handlers/CachedDelegate.cs | 0 .../Handlers/DeferEventHandlerDeclaration.cs | 0 .../Handlers/EventHandlerDeclaration.cs | 0 .../Handlers/IgnoreEventHandlerDeclaration.cs | 0 .../Actors/Handlers/OnActorHaltedHandler.cs | 0 .../Actors/Handlers/OnEventDroppedHandler.cs | 0 .../Actors/Logging/ActorLogManager.cs | 0 .../Logging/ActorRuntimeLogTextFormatter.cs | 0 .../Logging/ActorRuntimeLogXmlFormatter.cs | 0 .../Actors/Logging/IActorRuntimeLog.cs | 0 .../Actors/Properties/InternalsVisibleTo.cs | 70 + .../{Core/Actors => Actors/Runtime}/Actor.cs | 25 +- .../Runtime}/ActorExecutionContext.cs | 81 +- .../Runtime}/ActorExecutionStatus.cs | 0 .../Actors => Actors/Runtime}/ActorFactory.cs | 0 .../Actors => Actors/Runtime}/ActorId.cs | 0 .../Runtime}/ActorOperation.cs | 11 +- .../Runtime}/IActorRuntime.cs | 0 .../Actors => Actors/Runtime}/NameResolver.cs | 0 .../Runtime}/RuntimeFactory.cs | 15 +- .../Actors => Actors/Runtime}/SendOptions.cs | 0 .../Actors => Actors/Runtime}/StateMachine.cs | 8 +- .../Events/SharedCounterEvent.cs | 0 .../Events/SharedCounterResponseEvent.cs | 0 .../Events/SharedDictionaryEvent.cs | 0 .../Events/SharedDictionaryResponseEvent.cs | 0 .../Events/SharedRegisterEvent.cs | 0 .../Events/SharedRegisterResponseEvent.cs | 0 .../Actors/SharedObjects/SharedCounter.cs | 0 .../SharedObjects/SharedCounterActor.cs | 0 .../Actors/SharedObjects/SharedDictionary.cs | 0 .../SharedObjects/SharedDictionaryActor.cs | 0 .../Actors/SharedObjects/SharedRegister.cs | 0 .../SharedObjects/SharedRegisterActor.cs | 0 .../StateTransitions/GotoStateTransition.cs | 0 .../StateTransitions/PushStateTransition.cs | 0 Source/{Core => }/Actors/Timers/ActorTimer.cs | 0 .../{Core => }/Actors/Timers/IActorTimer.cs | 0 .../Actors/Timers/MockStateMachineTimer.cs | 0 .../Actors/Timers/TimerElapsedEvent.cs | 0 Source/{Core => }/Actors/Timers/TimerInfo.cs | 0 .../Actors/Timers/TimerSetupEvent.cs | 0 .../Coverage/ActivityCoverageReporter.cs | 318 ---- Source/Core/Actors/Coverage/CoverageInfo.cs | 183 -- Source/Core/Core.csproj | 2 +- .../Core/Coverage/ActivityCoverageReporter.cs | 294 +++ Source/Core/Coverage/CoverageGraph.cs | 584 ++++++ Source/Core/Coverage/CoverageInfo.cs | 187 ++ Source/Core/Coverage/MonitorEventCoverage.cs | 101 ++ Source/Core/Properties/InternalsVisibleTo.cs | 6 + Source/Core/Runtime/CoyoteRuntime.cs | 133 +- .../Extensibility/IRuntimeExtension.cs | 47 + .../Extensibility/NullRuntimeExtension.cs | 53 + Source/Core/Runtime/ICoyoteRuntime.cs | 12 +- Source/Core/Runtime/Logging/IRuntimeLog.cs | 6 +- Source/Core/Runtime/Logging/LogManager.cs | 5 +- .../Logging/RuntimeLogTextFormatter.cs | 5 +- .../Runtime/Logging/RuntimeLogXmlFormatter.cs | 5 +- .../Runtime/Operations/ControlledOperation.cs | 2 +- Source/Core/Runtime/RuntimeProvider.cs | 46 +- .../Specifications/Monitors/CachedDelegate.cs | 44 - .../Core/Specifications/Monitors/Monitor.cs | 234 ++- Source/Core/Specifications/Specification.cs | 2 +- Source/Test/Rewriting/Passes/Pass.cs | 4 +- .../SystematicTesting/Reports/TestReport.cs | 4 +- .../Test/SystematicTesting/TestingEngine.cs | 62 +- Source/Test/Test.csproj | 1 + .../Callbacks/OnEventDequeuedTests.cs | 20 +- .../Callbacks/OnEventDroppedTests.cs | 22 +- .../Callbacks/OnEventHandledTests.cs | 25 +- .../Callbacks/OnExceptionTests.cs | 16 +- .../Coverage/ActivityCoverageTests.cs | 297 ++-- .../Operations/CreateActorWithIdTests.cs | 10 +- .../Runtime/SendAndExecuteTests.cs | 5 +- .../Specifications/CompletenessTests.cs | 18 +- .../IdempotentRegisterMonitorTests.cs | 18 +- .../Specifications/Liveness/HotStateTests.cs | 42 +- .../Specifications/Liveness/Liveness1Tests.cs | 20 +- .../Liveness/Liveness2BugFoundTests.cs | 20 +- .../Liveness/Liveness2LoopMachineTests.cs | 20 +- .../Liveness/UnfairExecutionTests.cs | 4 +- .../Specifications/Liveness/WarmStateTests.cs | 20 +- .../MachineMonitorIntegrationTests.cs | 3 +- .../MonitorStateInheritanceTests.cs | 52 +- .../MonitorWildCardEventTests.cs | 25 +- .../OverloadedEventHandlerTests.cs | 4 +- .../Transitions/StateGroupTests.cs | 12 +- .../Timers/StartStopTimerTests.cs | 12 +- .../Timers/TimerLivenessTests.cs | 10 +- .../Tests.Actors.Performance.csproj | 2 +- .../Tests.Actors/Logging/ActorLoggingTests.cs | 22 +- .../Logging/BaseActorLoggingTests.cs | 28 +- .../Logging/CustomActorRuntimeLog.cs | 5 +- .../CustomActorRuntimeLogTextFormatter.cs | 5 +- .../Tests.Actors/Logging/GraphLoggingTests.cs | 19 +- Tests/Tests.Actors/Logging/RuntimeLogTests.cs | 5 +- .../Logging/RuntimeLogTextFormattingTests.cs | 13 +- .../Operations/CreateActorIdFromNameTests.cs | 36 +- .../Operations/SendAndExecuteTests.cs | 20 +- .../Runtime/OnEventDroppedTests.cs | 40 +- .../Specifications/MonitorSemanticsTests.cs | 2 +- .../TaskLivenessMonitorTests.cs | 2 +- .../Specifications/TaskSafetyMonitorTests.cs | 2 +- Tests/Tests.Common/BaseTest.cs | 10 +- Tests/Tests.Common/Events/MonitorUnitEvent.cs | 26 + Tests/Tests.Common/Events/UnitEvent.cs | 2 + Tests/compare-rewriting-diff-logs.ps1 | 4 +- .../CoverageReportMerger.csproj | 1 + Tools/CoverageReportMerger/Program.cs | 1 + docs/concepts/actors/overview.md | 17 +- docs/concepts/specifications.md | 12 +- docs/get-started/upgrade-from-psharp.md | 2 + ...crosoft.Coyote.Actors.CoverageNamespace.md | 10 +- .../SharedCounter.md | 4 +- .../SharedCounter/Add.md | 4 +- .../SharedCounter/CompareExchange.md | 4 +- .../SharedCounter/Create.md | 4 +- .../SharedCounter/Decrement.md | 4 +- .../SharedCounter/Exchange.md | 4 +- .../SharedCounter/GetValue.md | 4 +- .../SharedCounter/Increment.md | 4 +- .../SharedDictionary-2.md | 4 +- .../SharedDictionary-2/Count.md | 4 +- .../SharedDictionary-2/Item.md | 4 +- .../SharedDictionary-2/TryAdd.md | 4 +- .../SharedDictionary-2/TryGetValue.md | 4 +- .../SharedDictionary-2/TryRemove.md | 4 +- .../SharedDictionary-2/TryUpdate.md | 4 +- .../SharedDictionary.md | 4 +- .../SharedDictionary/Create.md | 6 +- .../SharedRegister-1.md | 4 +- .../SharedRegister-1/GetValue.md | 4 +- .../SharedRegister-1/SetValue.md | 4 +- .../SharedRegister-1/Update.md | 4 +- .../SharedRegister.md | 4 +- .../SharedRegister/Create.md | 4 +- ...ft.Coyote.Actors.SharedObjectsNamespace.md | 2 +- .../TimerElapsedEvent.md | 6 +- .../TimerElapsedEvent/Info.md | 4 +- .../TimerElapsedEvent/TimerElapsedEvent.md | 4 +- .../TimerInfo.md | 4 +- .../TimerInfo/CustomEvent.md | 4 +- .../TimerInfo/DueTime.md | 4 +- .../TimerInfo/Equals.md | 6 +- .../TimerInfo/GetHashCode.md | 4 +- .../TimerInfo/OwnerId.md | 4 +- .../TimerInfo/Period.md | 4 +- .../TimerInfo/ToString.md | 4 +- ...Microsoft.Coyote.Actors.TimersNamespace.md | 2 +- docs/ref/Microsoft.Coyote.Actors.md | 52 + .../Actor.OnEventDoActionAttribute.md | 4 +- .../OnEventDoActionAttribute.md | 4 +- docs/ref/Microsoft.Coyote.Actors/Actor.md | 20 +- .../Microsoft.Coyote.Actors/Actor/Actor.md | 4 +- .../Microsoft.Coyote.Actors/Actor/Assert.md | 22 +- .../Actor/CreateActor.md | 20 +- .../Actor/CurrentEventGroup.md | 4 +- .../Microsoft.Coyote.Actors/Actor/Equals.md | 4 +- .../Actor/GetHashCode.md | 4 +- .../Actor/HashedState.md | 4 +- docs/ref/Microsoft.Coyote.Actors/Actor/Id.md | 4 +- .../Microsoft.Coyote.Actors/Actor/Logger.md | 5 +- .../Microsoft.Coyote.Actors/Actor/Monitor.md | 16 +- .../Actor/OnEventDeferred.md | 6 +- .../Actor/OnEventDequeuedAsync.md | 6 +- .../Actor/OnEventHandledAsync.md | 6 +- .../Actor/OnEventIgnored.md | 6 +- .../Actor/OnEventUnhandledAsync.md | 6 +- .../Actor/OnException.md | 6 +- .../Actor/OnExceptionHandledAsync.md | 6 +- .../Actor/OnHaltAsync.md | 6 +- .../Actor/OnInitializeAsync.md | 6 +- .../Actor/RaiseHaltEvent.md | 4 +- .../Actor/RandomBoolean.md | 6 +- .../Actor/RandomInteger.md | 6 +- .../Actor/ReceiveEventAsync.md | 20 +- .../Actor/SendEvent.md | 8 +- .../Actor/StartPeriodicTimer.md | 4 +- .../Actor/StartTimer.md | 4 +- .../Actor/StopTimer.md | 4 +- .../Microsoft.Coyote.Actors/Actor/ToString.md | 4 +- .../ActorExecutionStatus.md | 4 +- docs/ref/Microsoft.Coyote.Actors/ActorId.md | 4 +- .../ActorId/CompareTo.md | 4 +- .../Microsoft.Coyote.Actors/ActorId/Equals.md | 6 +- .../ActorId/GetHashCode.md | 4 +- .../ActorId/IsNameUsedForHashing.md | 4 +- .../Microsoft.Coyote.Actors/ActorId/Name.md | 4 +- .../ActorId/NameValue.md | 4 +- .../ActorId/Runtime.md | 4 +- .../ActorId/ToString.md | 4 +- .../Microsoft.Coyote.Actors/ActorId/Type.md | 4 +- .../Microsoft.Coyote.Actors/ActorId/Value.md | 4 +- .../ActorRuntimeLogTextFormatter.md | 5 +- .../ActorRuntimeLogTextFormatter.md | 4 +- .../OnCreateActor.md | 4 +- .../OnCreateStateMachine.md | 4 +- .../OnCreateTimer.md | 4 +- .../OnDefaultEventHandler.md | 4 +- .../OnDequeueEvent.md | 6 +- .../OnEnqueueEvent.md | 6 +- .../OnEventHandlerTerminated.md | 4 +- .../OnExceptionHandled.md | 4 +- .../OnExceptionThrown.md | 4 +- .../OnExecuteAction.md | 4 +- .../OnGotoState.md | 4 +- .../ActorRuntimeLogTextFormatter/OnHalt.md | 4 +- .../OnHandleRaisedEvent.md | 6 +- .../OnPopState.md | 4 +- .../OnPopStateUnhandledEvent.md | 6 +- .../OnPushState.md | 4 +- .../OnRaiseEvent.md | 6 +- .../OnReceiveEvent.md | 6 +- .../OnSendEvent.md | 6 +- .../OnStateTransition.md | 4 +- .../OnStopTimer.md | 4 +- .../OnWaitEvent.md | 6 +- .../AwaitableEventGroup-1.md | 4 +- .../AwaitableEventGroup.md | 4 +- .../AwaitableEventGroup-1/GetAwaiter.md | 4 +- .../AwaitableEventGroup-1/IsCanceled.md | 4 +- .../AwaitableEventGroup-1/IsCompleted.md | 4 +- .../AwaitableEventGroup-1/IsFaulted.md | 4 +- .../AwaitableEventGroup-1/SetCancelled.md | 4 +- .../AwaitableEventGroup-1/SetException.md | 4 +- .../AwaitableEventGroup-1/SetResult.md | 4 +- .../AwaitableEventGroup-1/Task.md | 4 +- .../AwaitableEventGroup-1/TrySetCanceled.md | 4 +- .../AwaitableEventGroup-1/TrySetException.md | 4 +- .../AwaitableEventGroup-1/TrySetResult.md | 4 +- .../Microsoft.Coyote.Actors/DefaultEvent.md | 8 +- .../DefaultEvent/Instance.md | 6 +- .../Microsoft.Coyote.Actors/DequeueStatus.md | 4 +- docs/ref/Microsoft.Coyote.Actors/Event.md | 20 + .../Microsoft.Coyote.Actors/Event/Event.md | 15 + .../ref/Microsoft.Coyote.Actors/EventGroup.md | 4 +- .../EventGroup/EventGroup.md | 4 +- .../Microsoft.Coyote.Actors/EventGroup/Id.md | 4 +- .../EventGroup/Name.md | 4 +- .../EventGroup/Null.md | 4 +- docs/ref/Microsoft.Coyote.Actors/HaltEvent.md | 6 +- .../HaltEvent/Instance.md | 4 +- .../Microsoft.Coyote.Actors/IActorRuntime.md | 9 +- .../IActorRuntime/CreateActor.md | 20 +- .../IActorRuntime/CreateActorId.md | 4 +- .../IActorRuntime/CreateActorIdFromName.md | 4 +- .../IActorRuntime/GetActorExecutionStatus.md | 4 +- .../IActorRuntime/GetCurrentActorCount.md | 4 +- .../IActorRuntime/GetCurrentActorIds.md | 4 +- .../IActorRuntime/GetCurrentActorTypes.md | 4 +- .../IActorRuntime/GetCurrentEventGroup.md | 4 +- .../IActorRuntime/OnActorHalted.md | 4 +- .../IActorRuntime/OnEventDropped.md | 4 +- .../IActorRuntime/SendEvent.md | 8 +- .../IActorRuntimeLog.md | 5 +- .../IActorRuntimeLog/OnCreateActor.md | 4 +- .../IActorRuntimeLog/OnCreateStateMachine.md | 4 +- .../IActorRuntimeLog/OnCreateTimer.md | 4 +- .../IActorRuntimeLog/OnDefaultEventHandler.md | 4 +- .../IActorRuntimeLog/OnDequeueEvent.md | 6 +- .../IActorRuntimeLog/OnEnqueueEvent.md | 6 +- .../OnEventHandlerTerminated.md | 4 +- .../IActorRuntimeLog/OnExceptionHandled.md | 4 +- .../IActorRuntimeLog/OnExceptionThrown.md | 4 +- .../IActorRuntimeLog/OnExecuteAction.md | 4 +- .../IActorRuntimeLog/OnGotoState.md | 4 +- .../IActorRuntimeLog/OnHalt.md | 4 +- .../IActorRuntimeLog/OnHandleRaisedEvent.md | 6 +- .../IActorRuntimeLog/OnPopState.md | 4 +- .../OnPopStateUnhandledEvent.md | 6 +- .../IActorRuntimeLog/OnPushState.md | 4 +- .../IActorRuntimeLog/OnRaiseEvent.md | 6 +- .../IActorRuntimeLog/OnReceiveEvent.md | 6 +- .../IActorRuntimeLog/OnSendEvent.md | 6 +- .../IActorRuntimeLog/OnStateTransition.md | 4 +- .../IActorRuntimeLog/OnStopTimer.md | 4 +- .../IActorRuntimeLog/OnWaitEvent.md | 6 +- .../OnActorHaltedHandler.md | 4 +- .../OnEventDroppedHandler.md | 6 +- .../OnExceptionOutcome.md | 4 +- .../Microsoft.Coyote.Actors/RuntimeFactory.md | 6 +- .../RuntimeFactory/Create.md | 9 +- .../Microsoft.Coyote.Actors/SendOptions.md | 4 +- .../SendOptions/Assert.md | 4 +- .../SendOptions/Default.md | 4 +- .../SendOptions/HashedState.md | 4 +- .../SendOptions/MustHandle.md | 4 +- .../SendOptions/SendOptions.md | 4 +- .../SendOptions/ToString.md | 4 +- ...StateMachine.State.DeferEventsAttribute.md | 4 +- .../DeferEventsAttribute.md | 4 +- ...tateMachine.State.IgnoreEventsAttribute.md | 4 +- .../IgnoreEventsAttribute.md | 4 +- .../StateMachine.State.OnEntryAttribute.md | 4 +- .../OnEntryAttribute.md | 4 +- ...eMachine.State.OnEventDoActionAttribute.md | 4 +- .../OnEventDoActionAttribute.md | 4 +- ...Machine.State.OnEventGotoStateAttribute.md | 4 +- .../OnEventGotoStateAttribute.md | 6 +- ...Machine.State.OnEventPushStateAttribute.md | 4 +- .../OnEventPushStateAttribute.md | 4 +- .../StateMachine.State.OnExitAttribute.md | 4 +- .../OnExitAttribute.md | 4 +- .../StateMachine.State.StartAttribute.md | 4 +- .../StartAttribute.md | 4 +- .../StateMachine.State.md | 4 +- .../StateMachine.State/State.md | 4 +- .../StateMachine.StateGroup.md | 4 +- .../StateMachine.StateGroup/StateGroup.md | 4 +- .../Microsoft.Coyote.Actors/StateMachine.md | 6 +- .../StateMachine/CurrentState.md | 4 +- .../StateMachine/OnEventHandledAsync.md | 6 +- .../StateMachine/RaiseEvent.md | 8 +- .../StateMachine/RaiseGotoStateEvent.md | 6 +- .../StateMachine/RaiseHaltEvent.md | 4 +- .../StateMachine/RaisePopStateEvent.md | 4 +- .../StateMachine/RaisePushStateEvent.md | 6 +- .../StateMachine/StateMachine.md | 4 +- .../UnhandledEventException.md | 5 +- .../CurrentStateName.md | 4 +- .../UnhandledEventException/UnhandledEvent.md | 6 +- .../Microsoft.Coyote.Actors/WildCardEvent.md | 6 +- .../WildCardEvent/WildCardEvent.md | 4 +- docs/ref/Microsoft.Coyote.ActorsNamespace.md | 3 +- .../ref/Microsoft.Coyote.CoverageNamespace.md | 9 + .../ICoyoteRuntime.md | 6 +- .../ICoyoteRuntime/Monitor.md | 4 +- .../ICoyoteRuntime/RandomBoolean.md | 2 +- .../ICoyoteRuntime/RandomInteger.md | 2 +- .../IRuntimeExtension.md | 24 + .../IRuntimeExtension/BuildCoverageInfo.md | 20 + .../IRuntimeExtension/GetCoverageGraph.md | 16 + .../IRuntimeExtension/GetCoverageInfo.md | 16 + .../IRuntimeExtension/RunTest.md | 24 + .../WaitUntilQuiescenceAsync.md | 15 + .../IRuntimeLog/OnMonitorProcessEvent.md | 2 +- .../IRuntimeLog/OnMonitorRaiseEvent.md | 2 +- .../OnMonitorProcessEvent.md | 2 +- .../OnMonitorRaiseEvent.md | 2 +- .../RuntimeProvider.md | 2 - .../RuntimeProvider/Create.md | 54 - docs/ref/Microsoft.Coyote.RuntimeNamespace.md | 1 + .../Monitor.Event.md | 21 + .../Monitor.Event}/Event.md | 6 +- .../Monitor.WildCardEvent.md | 22 + .../Monitor.WildCardEvent/WildCardEvent.md | 15 + .../Monitor.md | 4 +- .../Monitor/RaiseEvent.md | 4 +- .../Specification/Monitor.md | 2 +- .../TestReport/CoverageInfo.md | 2 +- docs/ref/Microsoft.Coyote.md | 54 +- docs/ref/Microsoft.Coyote/Event.md | 20 - docs/ref/Microsoft.CoyoteNamespace.md | 1 - docs/ref/toc.yml | 1577 +++++++++-------- docs/tutorials/actors/hello-world.md | 2 +- mkdocs.yml | 560 +++--- 410 files changed, 5010 insertions(+), 3692 deletions(-) create mode 100644 Scripts/NuGet/Coyote.Actors.nuspec create mode 100644 Source/Actors/Actors.csproj create mode 100644 Source/Actors/Coverage/ActorActivityCoverageReporter.cs create mode 100644 Source/Actors/Coverage/ActorCoverageInfo.cs create mode 100644 Source/Actors/Coverage/ActorEventCoverage.cs rename Source/{Core => }/Actors/Coverage/ActorRuntimeLogEventCoverage.cs (58%) rename Source/{Core => }/Actors/Coverage/ActorRuntimeLogGraphBuilder.cs (53%) rename Source/{Core => }/Actors/EventQueues/DequeueStatus.cs (100%) rename Source/{Core => }/Actors/EventQueues/EnqueueStatus.cs (100%) rename Source/{Core => }/Actors/EventQueues/EventQueue.cs (100%) rename Source/{Core => }/Actors/EventQueues/IEventQueue.cs (100%) rename Source/{Core => }/Actors/EventQueues/MockEventQueue.cs (100%) rename Source/{Core => }/Actors/Events/AwaitableEventGroup.cs (100%) rename Source/{Core => }/Actors/Events/DefaultEvent.cs (91%) rename Source/{Core => }/Actors/Events/Event.cs (57%) rename Source/{Core => }/Actors/Events/EventGroup.cs (100%) rename Source/{Core => }/Actors/Events/EventInfo.cs (100%) rename Source/{Core => }/Actors/Events/EventOriginInfo.cs (100%) rename Source/{Core => }/Actors/Events/GotoStateEvent.cs (100%) rename Source/{Core => }/Actors/Events/HaltEvent.cs (100%) rename Source/{Core => }/Actors/Events/PushStateEvent.cs (100%) rename Source/{Core => }/Actors/Events/QuiescentEvent.cs (100%) rename Source/{Core => }/Actors/Events/WildcardEvent.cs (100%) rename Source/{Core => }/Actors/Exceptions/ActionExceptionFilterException.cs (100%) rename Source/{Core => }/Actors/Exceptions/OnExceptionOutcome.cs (100%) rename Source/{Core => }/Actors/Exceptions/UnhandledEventException.cs (100%) rename Source/{Core => }/Actors/Handlers/ActionEventHandlerDeclaration.cs (100%) rename Source/{Core => }/Actors/Handlers/CachedDelegate.cs (100%) rename Source/{Core => }/Actors/Handlers/DeferEventHandlerDeclaration.cs (100%) rename Source/{Core => }/Actors/Handlers/EventHandlerDeclaration.cs (100%) rename Source/{Core => }/Actors/Handlers/IgnoreEventHandlerDeclaration.cs (100%) rename Source/{Core => }/Actors/Handlers/OnActorHaltedHandler.cs (100%) rename Source/{Core => }/Actors/Handlers/OnEventDroppedHandler.cs (100%) rename Source/{Core => }/Actors/Logging/ActorLogManager.cs (100%) rename Source/{Core => }/Actors/Logging/ActorRuntimeLogTextFormatter.cs (100%) rename Source/{Core => }/Actors/Logging/ActorRuntimeLogXmlFormatter.cs (100%) rename Source/{Core => }/Actors/Logging/IActorRuntimeLog.cs (100%) create mode 100644 Source/Actors/Properties/InternalsVisibleTo.cs rename Source/{Core/Actors => Actors/Runtime}/Actor.cs (98%) rename Source/{Core/Actors => Actors/Runtime}/ActorExecutionContext.cs (96%) rename Source/{Core/Actors => Actors/Runtime}/ActorExecutionStatus.cs (100%) rename Source/{Core/Actors => Actors/Runtime}/ActorFactory.cs (100%) rename Source/{Core/Actors => Actors/Runtime}/ActorId.cs (100%) rename Source/{Core/Actors => Actors/Runtime}/ActorOperation.cs (76%) rename Source/{Core/Actors => Actors/Runtime}/IActorRuntime.cs (100%) rename Source/{Core/Actors => Actors/Runtime}/NameResolver.cs (100%) rename Source/{Core/Actors => Actors/Runtime}/RuntimeFactory.cs (67%) rename Source/{Core/Actors => Actors/Runtime}/SendOptions.cs (100%) rename Source/{Core/Actors => Actors/Runtime}/StateMachine.cs (99%) rename Source/{Core => }/Actors/SharedObjects/Events/SharedCounterEvent.cs (100%) rename Source/{Core => }/Actors/SharedObjects/Events/SharedCounterResponseEvent.cs (100%) rename Source/{Core => }/Actors/SharedObjects/Events/SharedDictionaryEvent.cs (100%) rename Source/{Core => }/Actors/SharedObjects/Events/SharedDictionaryResponseEvent.cs (100%) rename Source/{Core => }/Actors/SharedObjects/Events/SharedRegisterEvent.cs (100%) rename Source/{Core => }/Actors/SharedObjects/Events/SharedRegisterResponseEvent.cs (100%) rename Source/{Core => }/Actors/SharedObjects/SharedCounter.cs (100%) rename Source/{Core => }/Actors/SharedObjects/SharedCounterActor.cs (100%) rename Source/{Core => }/Actors/SharedObjects/SharedDictionary.cs (100%) rename Source/{Core => }/Actors/SharedObjects/SharedDictionaryActor.cs (100%) rename Source/{Core => }/Actors/SharedObjects/SharedRegister.cs (100%) rename Source/{Core => }/Actors/SharedObjects/SharedRegisterActor.cs (100%) rename Source/{Core => }/Actors/StateTransitions/GotoStateTransition.cs (100%) rename Source/{Core => }/Actors/StateTransitions/PushStateTransition.cs (100%) rename Source/{Core => }/Actors/Timers/ActorTimer.cs (100%) rename Source/{Core => }/Actors/Timers/IActorTimer.cs (100%) rename Source/{Core => }/Actors/Timers/MockStateMachineTimer.cs (100%) rename Source/{Core => }/Actors/Timers/TimerElapsedEvent.cs (100%) rename Source/{Core => }/Actors/Timers/TimerInfo.cs (100%) rename Source/{Core => }/Actors/Timers/TimerSetupEvent.cs (100%) delete mode 100644 Source/Core/Actors/Coverage/ActivityCoverageReporter.cs delete mode 100644 Source/Core/Actors/Coverage/CoverageInfo.cs create mode 100644 Source/Core/Coverage/ActivityCoverageReporter.cs create mode 100644 Source/Core/Coverage/CoverageGraph.cs create mode 100644 Source/Core/Coverage/CoverageInfo.cs create mode 100644 Source/Core/Coverage/MonitorEventCoverage.cs create mode 100644 Source/Core/Runtime/Extensibility/IRuntimeExtension.cs create mode 100644 Source/Core/Runtime/Extensibility/NullRuntimeExtension.cs delete mode 100644 Source/Core/Specifications/Monitors/CachedDelegate.cs create mode 100644 Tests/Tests.Common/Events/MonitorUnitEvent.cs create mode 100644 docs/ref/Microsoft.Coyote.Actors.md create mode 100644 docs/ref/Microsoft.Coyote.Actors/Event.md create mode 100644 docs/ref/Microsoft.Coyote.Actors/Event/Event.md create mode 100644 docs/ref/Microsoft.Coyote.CoverageNamespace.md create mode 100644 docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension.md create mode 100644 docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/BuildCoverageInfo.md create mode 100644 docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageGraph.md create mode 100644 docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageInfo.md create mode 100644 docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/RunTest.md create mode 100644 docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/WaitUntilQuiescenceAsync.md delete mode 100644 docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider/Create.md create mode 100644 docs/ref/Microsoft.Coyote.Specifications/Monitor.Event.md rename docs/ref/{Microsoft.Coyote/Event => Microsoft.Coyote.Specifications/Monitor.Event}/Event.md (60%) create mode 100644 docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent.md create mode 100644 docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent/WildCardEvent.md delete mode 100644 docs/ref/Microsoft.Coyote/Event.md diff --git a/Coyote.sln b/Coyote.sln index 51b49caf8..ca6fa9648 100644 --- a/Coyote.sln +++ b/Coyote.sln @@ -18,6 +18,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test", "Source\Test\Test.cs EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core", "Source\Core\Core.csproj", "{E75DB9C9-7842-4AE4-A29D-624F6B49F607}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Actors", "Source\Actors\Actors.csproj", "{8548010B-B99D-44FD-95BD-F716C1D707B7}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{2012300C-6E5D-47A0-9D57-B3F0A73AA1D4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.Actors", "Tests\Tests.Actors\Tests.Actors.csproj", "{911F1779-3558-4590-836C-C75112D65FD8}" @@ -56,6 +58,10 @@ Global {4B03C121-C1C9-4C08-A673-BFD5FC821983}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B03C121-C1C9-4C08-A673-BFD5FC821983}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B03C121-C1C9-4C08-A673-BFD5FC821983}.Release|Any CPU.Build.0 = Release|Any CPU + {8548010B-B99D-44FD-95BD-F716C1D707B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8548010B-B99D-44FD-95BD-F716C1D707B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8548010B-B99D-44FD-95BD-F716C1D707B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8548010B-B99D-44FD-95BD-F716C1D707B7}.Release|Any CPU.Build.0 = Release|Any CPU {E75DB9C9-7842-4AE4-A29D-624F6B49F607}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E75DB9C9-7842-4AE4-A29D-624F6B49F607}.Debug|Any CPU.Build.0 = Debug|Any CPU {E75DB9C9-7842-4AE4-A29D-624F6B49F607}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -114,6 +120,7 @@ Global EndGlobalSection GlobalSection(NestedProjects) = preSolution {4B03C121-C1C9-4C08-A673-BFD5FC821983} = {83369B7E-5C21-4D49-A14C-E8A6A4892807} + {8548010B-B99D-44FD-95BD-F716C1D707B7} = {83369B7E-5C21-4D49-A14C-E8A6A4892807} {E75DB9C9-7842-4AE4-A29D-624F6B49F607} = {83369B7E-5C21-4D49-A14C-E8A6A4892807} {911F1779-3558-4590-836C-C75112D65FD8} = {2012300C-6E5D-47A0-9D57-B3F0A73AA1D4} {DABC68C1-79D3-4324-A750-7CF72E0A0ACF} = {2012300C-6E5D-47A0-9D57-B3F0A73AA1D4} diff --git a/History.md b/History.md index 062982469..9ce549cf7 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,12 @@ +## v1.6.3 +- Refactored the NuGet packages and moved `Microsoft.Coyote.Actors` to its own dedicated package. +- Moved the actor `Event` type under the `Microsoft.Coyote.Actors` namespace. +- Introduced a `Monitor.Event` type (nested in the `Microsoft.Coyote.Specifications.Monitor` class), + which must now be used for declaring specification monitor events. +- Enhanced and streamlined the logging API, which is now available in the `Microsoft.Coyote.Logging` + namespace, instead of `Microsoft.Coyote.IO`. +- Removed support for the end-of-life `net5.0` target framework. + ## v1.6.2 - Exposed new `IActorRuntime.GetCurrentActorIds()` API that returns the `ActorId` for each active actor managed by the runtime, as well as an `IActorRuntime.GetCurrentActorTypes()` API that @@ -87,7 +96,7 @@ concurrent operations. - Various other runtime improvements and fixes. ## v1.4.3 -- Added support for the `netstandard2.0` target. +- Added support for the `netstandard2.0` target framework. - Added support for rewriting the non-generic `TaskCompletionSource` type. - Added support for rewriting the `ValueTask` type (but `IValueTaskSource` is not supported). - Improvements to systematic fuzzing, especially for actor-based programs. @@ -95,7 +104,7 @@ concurrent operations. - Tests now report the degree of concurrency and number of controlled operations. ## v1.4.2 -- Added support for the `net6.0` target. +- Added support for the `net6.0` target framework. - The `TestingEngine` is now giving a warning if the DLL being tested has not been rewritten. - The number of controlled operations are now reported as part of test statistics. - Improvements, optimizations and bug-fixes in binary rewriting. @@ -128,8 +137,8 @@ concurrent operations. - Improved the binary rewriting engine and fixed various rewriting bugs. - Removed the deprecated `Microsoft.Coyote.Tasks` namespace. Testing task-based code should now only be done via binary rewriting, instead of using a custom task type. -- Removed the `net48` target, can instead just use the `net462` target for legacy .NET Framework - projects. +- Removed the `net48` target framework, can instead just use the `net462` target framework for + legacy .NET Framework projects. ## v1.2.8 - Improved the strategies used for systematic fuzzing. @@ -147,7 +156,7 @@ concurrent operations. - Added an experimental rewriting pass that adds assertion checks to find data races in uses of the `System.Collections.Generic.List` and `System.Collections.Generic.Dictionary` collections. -- Added support for the `net462` target. +- Added support for the `net462` target framework. ## v1.2.5 - Added the `SchedulingPoint` static class that exposes methods for adding manual scheduling points @@ -177,8 +186,8 @@ concurrent operations. - Added the `Configuration.WithTestingTimeout` API for specifying a systematic testing timeout instead of iterations. - Optimized state space exploration in programs using `Task.Delay`. -- Added support for the `net5.0` target. -- Removed the `net47` target. +- Added support for the `net5.0` target framework. +- Removed the `net47` target framework. ## v1.2.1 - Added the `OnEventIgnored` and `OnEventDeferred` callbacks in the `Actor` type. diff --git a/Samples/CloudMessaging/Raft.Azure/AzureClusterManager.cs b/Samples/CloudMessaging/Raft.Azure/AzureClusterManager.cs index 6db4d9bad..fa496e30a 100644 --- a/Samples/CloudMessaging/Raft.Azure/AzureClusterManager.cs +++ b/Samples/CloudMessaging/Raft.Azure/AzureClusterManager.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Microsoft.Azure.ServiceBus; +using Microsoft.Coyote.Actors; using Newtonsoft.Json; namespace Microsoft.Coyote.Samples.CloudMessaging diff --git a/Samples/CloudMessaging/Raft.Mocking/Mocks/MockClusterManager.cs b/Samples/CloudMessaging/Raft.Mocking/Mocks/MockClusterManager.cs index e3ef4cae9..be25b350d 100644 --- a/Samples/CloudMessaging/Raft.Mocking/Mocks/MockClusterManager.cs +++ b/Samples/CloudMessaging/Raft.Mocking/Mocks/MockClusterManager.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Threading.Tasks; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CloudMessaging/Raft.Nondeterminism/Mocks/MockClusterManagerWithFailure.cs b/Samples/CloudMessaging/Raft.Nondeterminism/Mocks/MockClusterManagerWithFailure.cs index 53f07049c..19a398c05 100644 --- a/Samples/CloudMessaging/Raft.Nondeterminism/Mocks/MockClusterManagerWithFailure.cs +++ b/Samples/CloudMessaging/Raft.Nondeterminism/Mocks/MockClusterManagerWithFailure.cs @@ -3,6 +3,7 @@ using System; using System.Threading.Tasks; +using Microsoft.Coyote.Actors; using Microsoft.Coyote.Runtime; namespace Microsoft.Coyote.Samples.CloudMessaging diff --git a/Samples/CloudMessaging/Raft/Events/AppendLogEntriesRequestEvent.cs b/Samples/CloudMessaging/Raft/Events/AppendLogEntriesRequestEvent.cs index 13f6df86a..f98236401 100644 --- a/Samples/CloudMessaging/Raft/Events/AppendLogEntriesRequestEvent.cs +++ b/Samples/CloudMessaging/Raft/Events/AppendLogEntriesRequestEvent.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Runtime.Serialization; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CloudMessaging/Raft/Events/AppendLogEntriesResponseEvent.cs b/Samples/CloudMessaging/Raft/Events/AppendLogEntriesResponseEvent.cs index a2f62fa31..db4192fae 100644 --- a/Samples/CloudMessaging/Raft/Events/AppendLogEntriesResponseEvent.cs +++ b/Samples/CloudMessaging/Raft/Events/AppendLogEntriesResponseEvent.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Runtime.Serialization; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CloudMessaging/Raft/Events/ClientRequestEvent.cs b/Samples/CloudMessaging/Raft/Events/ClientRequestEvent.cs index 885e89a28..079855c2d 100644 --- a/Samples/CloudMessaging/Raft/Events/ClientRequestEvent.cs +++ b/Samples/CloudMessaging/Raft/Events/ClientRequestEvent.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Runtime.Serialization; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CloudMessaging/Raft/Events/ClientResponseEvent.cs b/Samples/CloudMessaging/Raft/Events/ClientResponseEvent.cs index cdad144df..f2c748577 100644 --- a/Samples/CloudMessaging/Raft/Events/ClientResponseEvent.cs +++ b/Samples/CloudMessaging/Raft/Events/ClientResponseEvent.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Runtime.Serialization; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CloudMessaging/Raft/Events/NotifyJoinedServiceEvent.cs b/Samples/CloudMessaging/Raft/Events/NotifyJoinedServiceEvent.cs index 5fbae29f1..011a8f4cd 100644 --- a/Samples/CloudMessaging/Raft/Events/NotifyJoinedServiceEvent.cs +++ b/Samples/CloudMessaging/Raft/Events/NotifyJoinedServiceEvent.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Runtime.Serialization; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CloudMessaging/Raft/Events/VoteRequestEvent.cs b/Samples/CloudMessaging/Raft/Events/VoteRequestEvent.cs index eb3b1eddf..092b36cb9 100644 --- a/Samples/CloudMessaging/Raft/Events/VoteRequestEvent.cs +++ b/Samples/CloudMessaging/Raft/Events/VoteRequestEvent.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Runtime.Serialization; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CloudMessaging/Raft/Events/VoteResponseEvent.cs b/Samples/CloudMessaging/Raft/Events/VoteResponseEvent.cs index c97988b1f..69ae18507 100644 --- a/Samples/CloudMessaging/Raft/Events/VoteResponseEvent.cs +++ b/Samples/CloudMessaging/Raft/Events/VoteResponseEvent.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System.Runtime.Serialization; +using Microsoft.Coyote.Actors; namespace Microsoft.Coyote.Samples.CloudMessaging { diff --git a/Samples/CoffeeMachineActors/MockSensors.cs b/Samples/CoffeeMachineActors/MockSensors.cs index 1a76bf3c0..ae8f61cc8 100644 --- a/Samples/CoffeeMachineActors/MockSensors.cs +++ b/Samples/CoffeeMachineActors/MockSensors.cs @@ -11,13 +11,20 @@ namespace Microsoft.Coyote.Samples.CoffeeMachineActors { - public class BusyEvent : Event { } - /// /// This safety monitor ensure nothing bad happens while a door is open on the coffee machine. /// internal class DoorSafetyMonitor : Monitor { + internal class DoorOpenEvent : Event + { + internal bool Open; + + internal DoorOpenEvent(bool value) { this.Open = value; } + } + + internal class BusyEvent : Event { } + [Start] [OnEventGotoState(typeof(DoorOpenEvent), typeof(Error))] [IgnoreEvents(typeof(BusyEvent))] @@ -51,7 +58,7 @@ protected override Task OnInitializeAsync(Event initialEvent) this.DoorOpen = this.RandomInteger(5) is 0; if (this.DoorOpen) { - this.Monitor(new DoorOpenEvent(this.DoorOpen)); + this.Monitor(new DoorSafetyMonitor.DoorOpenEvent(this.DoorOpen)); } return base.OnInitializeAsync(initialEvent); @@ -161,7 +168,7 @@ private void OnWaterHeaterButton(Event e) if (this.WaterHeaterButton) { - this.Monitor(new BusyEvent()); + this.Monitor(new DoorSafetyMonitor.BusyEvent()); this.WaterHeaterTimer = this.StartPeriodicTimer(TimeSpan.FromSeconds(0.1), TimeSpan.FromSeconds(0.1), new HeaterTimerEvent()); } else if (this.WaterHeaterTimer != null) @@ -221,7 +228,7 @@ private void OnPumpWater(Event e) if (this.WaterPump) { - this.Monitor(new BusyEvent()); + this.Monitor(new DoorSafetyMonitor.BusyEvent()); // Should never turn on the make shots button when there is no water. if (this.WaterLevel <= 0) { @@ -340,7 +347,7 @@ private void OnGrinderButtonChanged() { if (this.GrinderButton) { - this.Monitor(new BusyEvent()); + this.Monitor(new DoorSafetyMonitor.BusyEvent()); // Should never turn on the grinder when there is no coffee to grind. if (this.HopperLevel <= 0) { @@ -426,7 +433,7 @@ private void OnDumpGrindsButton(Event e) var evt = e as DumpGrindsButtonEvent; if (evt.PowerOn) { - this.Monitor(new BusyEvent()); + this.Monitor(new DoorSafetyMonitor.BusyEvent()); // This is a toggle button, in no time grinds are dumped (just for simplicity). this.PortaFilterCoffeeLevel = 0; } diff --git a/Samples/CoffeeMachineActors/Program.cs b/Samples/CoffeeMachineActors/Program.cs index 342a65ee9..395b0e5ef 100644 --- a/Samples/CoffeeMachineActors/Program.cs +++ b/Samples/CoffeeMachineActors/Program.cs @@ -13,8 +13,13 @@ public static class Program public static void Main() { + // Optional: increases verbosity level to see the Coyote runtime log and sets it to output to the console. + // var configuration = Configuration.Create(); + var configuration = Configuration.Create().WithVerbosityEnabled().WithConsoleLoggingEnabled(); RunForever = true; - IActorRuntime runtime = RuntimeFactory.Create(); + + IActorRuntime runtime = RuntimeFactory.Create(configuration); + runtime.OnFailure += OnRuntimeFailure; Execute(runtime); Console.ReadLine(); Console.WriteLine("User cancelled the test by pressing ENTER"); @@ -28,9 +33,7 @@ private static void OnRuntimeFailure(Exception ex) [Microsoft.Coyote.SystematicTesting.Test] public static void Execute(IActorRuntime runtime) { - LogWriter.Initialize(runtime.Logger, RunForever); - - runtime.OnFailure += OnRuntimeFailure; + LogWriter.Initialize(runtime.Logger); runtime.RegisterMonitor(); runtime.RegisterMonitor(); ActorId driver = runtime.CreateActor(typeof(FailoverDriver), new ConfigEvent(RunForever)); diff --git a/Samples/CoffeeMachineActors/SensorEvents.cs b/Samples/CoffeeMachineActors/SensorEvents.cs index 90e3adb78..744f7f3d6 100644 --- a/Samples/CoffeeMachineActors/SensorEvents.cs +++ b/Samples/CoffeeMachineActors/SensorEvents.cs @@ -15,9 +15,9 @@ namespace Microsoft.Coyote.Samples.CoffeeMachineActors /// internal class ConfigEvent : Event { - public bool RunSlowly; + internal bool RunSlowly; - public ConfigEvent(bool runSlowly) + internal ConfigEvent(bool runSlowly) { this.RunSlowly = runSlowly; } @@ -28,9 +28,9 @@ public ConfigEvent(bool runSlowly) /// internal class RegisterClientEvent : Event { - public ActorId Caller; + internal ActorId Caller; - public RegisterClientEvent(ActorId caller) { this.Caller = caller; } + internal RegisterClientEvent(ActorId caller) { this.Caller = caller; } } /// @@ -39,9 +39,9 @@ internal class RegisterClientEvent : Event internal class WaterLevelEvent : Event { // Starts at 100% full and drops when shot button is on. - public double WaterLevel; + internal double WaterLevel; - public WaterLevelEvent(double value) { this.WaterLevel = value; } + internal WaterLevelEvent(double value) { this.WaterLevel = value; } } /// @@ -55,9 +55,9 @@ internal class ReadWaterLevelEvent : Event { } internal class HopperLevelEvent : Event { // Starts at 100% full of beans, and drops when grinder is on. - public double HopperLevel; + internal double HopperLevel; - public HopperLevelEvent(double value) { this.HopperLevel = value; } + internal HopperLevelEvent(double value) { this.HopperLevel = value; } } /// @@ -71,9 +71,9 @@ internal class ReadHopperLevelEvent : Event { } internal class WaterTemperatureEvent : Event { // Starts at room temp, heats up to 100 when water heater is on. - public double WaterTemperature; + internal double WaterTemperature; - public WaterTemperatureEvent(double value) { this.WaterTemperature = value; } + internal WaterTemperatureEvent(double value) { this.WaterTemperature = value; } } /// @@ -87,9 +87,9 @@ internal class ReadWaterTemperatureEvent : Event { } internal class PortaFilterCoffeeLevelEvent : Event { // Starts out empty=0, it gets filled to 100% with ground coffee while grinder is on. - public double CoffeeLevel; + internal double CoffeeLevel; - public PortaFilterCoffeeLevelEvent(double value) { this.CoffeeLevel = value; } + internal PortaFilterCoffeeLevelEvent(double value) { this.CoffeeLevel = value; } } /// @@ -103,9 +103,9 @@ internal class ReadPortaFilterCoffeeLevelEvent : Event { } internal class DoorOpenEvent : Event { // True if open, a safety check to make sure machine is buttoned up properly before use. - public bool Open; + internal bool Open; - public DoorOpenEvent(bool value) { this.Open = value; } + internal DoorOpenEvent(bool value) { this.Open = value; } } internal class ReadDoorOpenEvent : Event { } @@ -116,9 +116,9 @@ internal class ReadDoorOpenEvent : Event { } internal class WaterHeaterButtonEvent : Event { // True means the power is on. - public bool PowerOn; + internal bool PowerOn; - public WaterHeaterButtonEvent(bool value) { this.PowerOn = value; } + internal WaterHeaterButtonEvent(bool value) { this.PowerOn = value; } } /// @@ -127,9 +127,9 @@ internal class WaterHeaterButtonEvent : Event internal class GrinderButtonEvent : Event { // True means the power is on. - public bool PowerOn; + internal bool PowerOn; - public GrinderButtonEvent(bool value) { this.PowerOn = value; } + internal GrinderButtonEvent(bool value) { this.PowerOn = value; } } internal class HopperEmptyEvent : Event @@ -148,16 +148,16 @@ internal class PumpWaterEvent : Event { // True means the power is on, shot button produces 1 shot of espresso and turns off automatically, // raising a ShowCompleteEvent press it multiple times to get multiple shots. - public bool PowerOn; + internal bool PowerOn; - public PumpWaterEvent(bool value) { this.PowerOn = value; } + internal PumpWaterEvent(bool value) { this.PowerOn = value; } } internal class DumpGrindsButtonEvent : Event { // True means the power is on, empties the PortaFilter and turns off automatically. - public bool PowerOn; + internal bool PowerOn; - public DumpGrindsButtonEvent(bool value) { this.PowerOn = value; } + internal DumpGrindsButtonEvent(bool value) { this.PowerOn = value; } } } diff --git a/Samples/CoffeeMachineTasks/Program.cs b/Samples/CoffeeMachineTasks/Program.cs index 39fff2d55..907a5bc60 100644 --- a/Samples/CoffeeMachineTasks/Program.cs +++ b/Samples/CoffeeMachineTasks/Program.cs @@ -16,23 +16,24 @@ public static class Program public static void Main() { RunForever = true; - ICoyoteRuntime runtime = RuntimeProvider.Create(); - _ = Execute(runtime); + + LogWriter.Initialize(); + _ = RunTest(); + Console.ReadLine(); Console.WriteLine("User cancelled the test by pressing ENTER"); } - private static void OnRuntimeFailure(Exception ex) - { - Console.WriteLine("### Failure: " + ex.Message); - } - [Microsoft.Coyote.SystematicTesting.Test] public static async Task Execute(ICoyoteRuntime runtime) { - LogWriter.Initialize(runtime.Logger, RunForever); - runtime.OnFailure += OnRuntimeFailure; + LogWriter.Initialize(runtime.Logger); Specification.RegisterMonitor(); + await RunTest(); + } + + private static async Task RunTest() + { IFailoverDriver driver = new FailoverDriver(RunForever); await driver.RunTest(); } diff --git a/Samples/Common/LogWriter.cs b/Samples/Common/LogWriter.cs index 520827454..93a17a04b 100644 --- a/Samples/Common/LogWriter.cs +++ b/Samples/Common/LogWriter.cs @@ -19,14 +19,19 @@ private LogWriter(ILogger log, bool echo) public static LogWriter Instance; - public static void Initialize(ILogger log, bool echo) + public static void Initialize() { - Instance = new LogWriter(log, echo); + Instance = new LogWriter(null, true); + } + + public static void Initialize(ILogger log) + { + Instance = new LogWriter(log, false); } public void WriteLine(string format, params object[] args) { - this.Log.WriteLine(format, args); + this.Log?.WriteLine(format, args); if (this.Echo) { Console.WriteLine(format, args); @@ -36,7 +41,7 @@ public void WriteLine(string format, params object[] args) public void WriteWarning(string format, params object[] args) { var msg = string.Format(format, args); - this.Log.WriteLine(LogSeverity.Warning, msg); + this.Log?.WriteLine(LogSeverity.Warning, msg); if (this.Echo) { try @@ -54,7 +59,7 @@ public void WriteWarning(string format, params object[] args) internal void WriteError(string format, params object[] args) { var msg = string.Format(format, args); - this.Log.WriteLine(LogSeverity.Error, msg); + this.Log?.WriteLine(LogSeverity.Error, msg); if (this.Echo) { try diff --git a/Samples/Common/build.props b/Samples/Common/build.props index 6038439a2..9e8d2d9d0 100644 --- a/Samples/Common/build.props +++ b/Samples/Common/build.props @@ -32,10 +32,12 @@ + + diff --git a/Samples/DrinksServingRobotActors/Program.cs b/Samples/DrinksServingRobotActors/Program.cs index fc51d5de3..fefb0f01c 100644 --- a/Samples/DrinksServingRobotActors/Program.cs +++ b/Samples/DrinksServingRobotActors/Program.cs @@ -13,11 +13,12 @@ public static class Program public static void Main() { - var conf = null as Configuration; - // var conf = Configuration.Create().WithVerbosityEnabled(); - + // Optional: increases verbosity level to see the Coyote runtime log and sets it to output to the console. + // var configuration = Configuration.Create(); + var configuration = Configuration.Create().WithVerbosityEnabled().WithConsoleLoggingEnabled(); RunForever = true; - IActorRuntime runtime = Actors.RuntimeFactory.Create(conf); + + IActorRuntime runtime = Actors.RuntimeFactory.Create(configuration); runtime.OnFailure += OnRuntimeFailure; Execute(runtime); Console.ReadLine(); @@ -26,9 +27,9 @@ public static void Main() [Microsoft.Coyote.SystematicTesting.Test] public static void Execute(IActorRuntime runtime) { - LogWriter.Initialize(runtime.Logger, RunForever); + LogWriter.Initialize(runtime.Logger); runtime.RegisterMonitor(); - ActorId driver = runtime.CreateActor(typeof(FailoverDriver), new FailoverDriver.ConfigEvent(RunForever)); + runtime.CreateActor(typeof(FailoverDriver), new FailoverDriver.ConfigEvent(RunForever)); } private static void OnRuntimeFailure(Exception ex) diff --git a/Samples/Monitors/Driver.cs b/Samples/Monitors/Driver.cs index 94b273241..d27144978 100644 --- a/Samples/Monitors/Driver.cs +++ b/Samples/Monitors/Driver.cs @@ -97,7 +97,8 @@ private void InjectFailuresOnEntry() /// private void NodeFailedAction(Event e) { - this.Monitor(e); + var node = (e as FailureDetector.NodeFailed).Node; + this.Monitor(new Liveness.NodeFailed(node)); } } } diff --git a/Samples/Monitors/Liveness.cs b/Samples/Monitors/Liveness.cs index 7f6877d8c..65866679f 100644 --- a/Samples/Monitors/Liveness.cs +++ b/Samples/Monitors/Liveness.cs @@ -33,14 +33,24 @@ internal class Liveness : Monitor { internal class RegisterNodes : Event { - public HashSet Nodes; + internal HashSet Nodes; - public RegisterNodes(HashSet nodes) + internal RegisterNodes(HashSet nodes) { this.Nodes = nodes; } } + internal class NodeFailed : Event + { + internal ActorId Node; + + internal NodeFailed(ActorId node) + { + this.Node = node; + } + } + private HashSet Nodes; [Start] @@ -59,12 +69,12 @@ private void RegisterNodesAction(Event e) /// currently satisfied. /// [Hot] - [OnEventDoAction(typeof(FailureDetector.NodeFailed), nameof(NodeDownAction))] + [OnEventDoAction(typeof(NodeFailed), nameof(NodeDownAction))] private class Wait : State { } private void NodeDownAction(Event e) { - var node = (e as FailureDetector.NodeFailed).Node; + var node = (e as NodeFailed).Node; this.Nodes.Remove(node); if (this.Nodes.Count == 0) { diff --git a/Samples/Timers/Test.cs b/Samples/Timers/Test.cs index 5cbbdf173..000b8c39b 100644 --- a/Samples/Timers/Test.cs +++ b/Samples/Timers/Test.cs @@ -12,9 +12,9 @@ public static class Program { public static void Main() { - // Optional: increases verbosity level to see the Coyote runtime log. + // Optional: increases verbosity level to see the Coyote runtime log and sets it to output to the console. // var configuration = Configuration.Create(); - var configuration = Configuration.Create().WithVerbosityEnabled(); + var configuration = Configuration.Create().WithVerbosityEnabled().WithConsoleLoggingEnabled(); // Creates a new Coyote runtime instance, and passes an optional configuration. var runtime = RuntimeFactory.Create(configuration); @@ -30,7 +30,7 @@ public static void Main() [Microsoft.Coyote.SystematicTesting.Test] public static void Execute(IActorRuntime runtime) { - LogWriter.Initialize(runtime.Logger, false); + LogWriter.Initialize(runtime.Logger); runtime.CreateActor(typeof(TimerSample)); } } diff --git a/Scripts/NuGet/Coyote.Actors.nuspec b/Scripts/NuGet/Coyote.Actors.nuspec new file mode 100644 index 000000000..dd422b00b --- /dev/null +++ b/Scripts/NuGet/Coyote.Actors.nuspec @@ -0,0 +1,49 @@ + + + + Microsoft.Coyote.Actors + $version$ + Microsoft + The Coyote actor runtime and library. + https://microsoft.github.io/coyote/ + + MIT + false + © Microsoft Corporation. All rights reserved. + images\icon.png + docs\readme.md + actors state-machines asynchronous reactive systematic-testing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Scripts/NuGet/Coyote.CLI.nuspec b/Scripts/NuGet/Coyote.CLI.nuspec index 215856230..f22cabd71 100644 --- a/Scripts/NuGet/Coyote.CLI.nuspec +++ b/Scripts/NuGet/Coyote.CLI.nuspec @@ -4,7 +4,7 @@ Microsoft.Coyote.CLI $version$ Microsoft - The Coyote command line tool. + The Coyote systematic testing command line tool. https://microsoft.github.io/coyote/ MIT @@ -12,7 +12,7 @@ © Microsoft Corporation. All rights reserved. images\icon.png docs\readme.md - asynchrony reliability tasks actors state-machines specifications testing + systematic-testing specifications concurrency dotnet csharp diff --git a/Scripts/NuGet/Coyote.Test.nuspec b/Scripts/NuGet/Coyote.Test.nuspec index a80b49cac..c0cfa400d 100644 --- a/Scripts/NuGet/Coyote.Test.nuspec +++ b/Scripts/NuGet/Coyote.Test.nuspec @@ -4,7 +4,7 @@ Microsoft.Coyote.Test $version$ Microsoft - The Coyote systematic testing library and tools. + The Coyote systematic testing library and tool. https://microsoft.github.io/coyote/ MIT @@ -12,10 +12,11 @@ © Microsoft Corporation. All rights reserved. images\icon.png docs\readme.md - asynchrony reliability tasks actors state-machines specifications testing + systematic-testing specifications concurrency dotnet csharp + @@ -23,6 +24,7 @@ + @@ -31,6 +33,7 @@ + @@ -38,6 +41,7 @@ + diff --git a/Scripts/NuGet/Coyote.nuspec b/Scripts/NuGet/Coyote.nuspec index 27e5acb19..44dc4c82a 100644 --- a/Scripts/NuGet/Coyote.nuspec +++ b/Scripts/NuGet/Coyote.nuspec @@ -4,7 +4,7 @@ Microsoft.Coyote $version$ Microsoft - Coyote is a library for building reliable asynchronous software. + Coyote is a library and tool for testing concurrent C# code and deterministically reproducing bugs. https://microsoft.github.io/coyote/ MIT @@ -12,7 +12,7 @@ © Microsoft Corporation. All rights reserved. images\icon.png docs\readme.md - asynchrony reliability tasks actors state-machines specifications testing + systematic-testing specifications concurrency dotnet csharp @@ -23,10 +23,6 @@ - - - - @@ -42,10 +38,6 @@ - - - - diff --git a/Scripts/build.ps1 b/Scripts/build.ps1 index 456964cad..7a25cf477 100644 --- a/Scripts/build.ps1 +++ b/Scripts/build.ps1 @@ -85,19 +85,24 @@ if ($nuget.IsPresent -and $ci.IsPresent) { $cmd_options = "$cmd_options -Suffix $version_suffix" } - Write-Comment -text "Creating the 'Microsoft.Coyote' package." -color "magenta" + Write-Comment -text "Building the 'Microsoft.Coyote' package." -color "magenta" $command = "pack $PSScriptRoot/NuGet/Coyote.nuspec $cmd_options" - $error_msg = "Failed to build the Coyote NuGet package" + $error_msg = "Failed to build the 'Microsoft.Coyote' package" Invoke-ToolCommand -tool $nuget_cli -cmd $command -error_msg $error_msg - Write-Comment -text "Creating the 'Microsoft.Coyote.Test' package." -color "magenta" + Write-Comment -text "Building the 'Microsoft.Coyote.Actors' package." -color "magenta" + $command = "pack $PSScriptRoot/NuGet/Coyote.Actors.nuspec $cmd_options" + $error_msg = "Failed to build the 'Microsoft.Coyote.Actors' package" + Invoke-ToolCommand -tool $nuget_cli -cmd $command -error_msg $error_msg + + Write-Comment -text "Building the 'Microsoft.Coyote.Test' package." -color "magenta" $command = "pack $PSScriptRoot/NuGet/Coyote.Test.nuspec $cmd_options" - $error_msg = "Failed to build the Coyote Test NuGet package" + $error_msg = "Failed to build the 'Microsoft.Coyote.Test' package" Invoke-ToolCommand -tool $nuget_cli -cmd $command -error_msg $error_msg - Write-Comment -text "Creating the 'Microsoft.Coyote.CLI' package." -color "magenta" + Write-Comment -text "Building the 'Microsoft.Coyote.CLI' package." -color "magenta" $command = "pack $PSScriptRoot/NuGet/Coyote.CLI.nuspec $cmd_options -Tool" - $error_msg = "Failed to build the Coyote CLI NuGet package" + $error_msg = "Failed to build the 'Microsoft.Coyote.CLI' package" Invoke-ToolCommand -tool $nuget_cli -cmd $command -error_msg $error_msg } else { Write-Comment -text "Building the Coyote NuGet packages supports only Windows." -color "yellow" diff --git a/Scripts/gen-docs.ps1 b/Scripts/gen-docs.ps1 index 612e6f449..2335eb5f6 100644 --- a/Scripts/gen-docs.ps1 +++ b/Scripts/gen-docs.ps1 @@ -51,14 +51,20 @@ Write-Host "Generating new markdown under $target" & $gendoc gen "$root_dir\bin\$framework\Microsoft.Coyote.dll" -o $target --namespace Microsoft.Coyote $coyotetoc = Get-Content -Path "$target\toc.yml" +& $gendoc gen "$root_dir\bin\$framework\Microsoft.Coyote.Actors.dll" -o $target --namespace Microsoft.Coyote.Actors +$actorstoc = Get-Content -Path "$target\toc.yml" +$actorstoc = [System.Collections.ArrayList]$actorstoc +$actorstoc.RemoveRange(0, 1); # remove -toc and assembly header +$actorstoc.InsertRange(0, $coyotetoc) + & $gendoc gen "$root_dir\bin\$framework\Microsoft.Coyote.Test.dll" -o $target --namespace Microsoft.Coyote.Test -$newtoc = Get-Content -Path "$target\toc.yml" -$newtoc = [System.Collections.ArrayList]$newtoc -$newtoc.RemoveRange(0, 1); # remove -toc and assembly header -$newtoc.InsertRange(0, $coyotetoc) +$mergedtoc = Get-Content -Path "$target\toc.yml" +$mergedtoc = [System.Collections.ArrayList]$mergedtoc +$mergedtoc.RemoveRange(0, 1); # remove -toc and assembly header +$mergedtoc.InsertRange(0, $actorstoc) -# Save the merged toc containing both the contents of Microsoft.Coyote.dll and Microsoft.Coyote.Test.dll. -Set-Content -Path "$target\toc.yml" -Value $newtoc +# Save the merged toc containing the contents of all assemblies. +Set-Content -Path "$target\toc.yml" -Value $mergedtoc Write-Host "Merging $toc..." # Now merge the new toc. diff --git a/Source/Actors/Actors.csproj b/Source/Actors/Actors.csproj new file mode 100644 index 000000000..822725e41 --- /dev/null +++ b/Source/Actors/Actors.csproj @@ -0,0 +1,15 @@ + + + The Coyote actor runtime and library. + Microsoft.Coyote.Actors + Microsoft.Coyote.Actors + actors;state-machines;asynchronous;reactive;systematic-testing + ..\..\bin\ + false + + + + + + + \ No newline at end of file diff --git a/Source/Actors/Coverage/ActorActivityCoverageReporter.cs b/Source/Actors/Coverage/ActorActivityCoverageReporter.cs new file mode 100644 index 000000000..c8c140b1b --- /dev/null +++ b/Source/Actors/Coverage/ActorActivityCoverageReporter.cs @@ -0,0 +1,244 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Microsoft.Coyote.Coverage; + +namespace Microsoft.Coyote.Actors.Coverage +{ + /// + /// Reports actor activity coverage. + /// + internal class ActorActivityCoverageReporter : ActivityCoverageReporter + { + /// + /// Data structure containing information regarding testing coverage. + /// + private readonly ActorCoverageInfo CoverageInfo; + + /// + /// Set of built in events which we hide in the coverage report. + /// + private readonly HashSet BuiltInEvents = new HashSet(); + + /// + /// Initializes a new instance of the class. + /// + public ActorActivityCoverageReporter(ActorCoverageInfo coverageInfo) + : base(coverageInfo) + { + this.CoverageInfo = coverageInfo; + this.BuiltInEvents.Add(typeof(GotoStateEvent).FullName); + this.BuiltInEvents.Add(typeof(PushStateEvent).FullName); + this.BuiltInEvents.Add(typeof(DefaultEvent).FullName); + } + + /// + internal override void WriteCoverageText(TextWriter writer) + { + var machines = new List(this.CoverageInfo.Machines); + machines.Sort(StringComparer.Ordinal); + + var machineTypes = new Dictionary(); + foreach (var node in this.CoverageInfo.CoverageGraph.Nodes) + { + if (machines.Contains(node.Id)) + { + machineTypes[node.Id] = node.Category ?? ActorRuntimeLogGraphBuilder.StateMachineCategory; + } + } + + // machines + "." + states => registered events + var uncoveredEvents = new Dictionary>(); + foreach (var item in this.CoverageInfo.RegisteredActorEvents) + { + uncoveredEvents[item.Key] = new HashSet(item.Value); + } + + int totalEvents = (from h in uncoveredEvents select h.Value.Count).Sum(); + + // Now use the graph to find incoming links to each state and remove those from the list of uncovered events. + this.RemoveCoveredEvents(uncoveredEvents); + + int totalUncoveredEvents = (from h in uncoveredEvents select h.Value.Count).Sum(); + string eventCoverage = totalEvents is 0 ? "100.0" : ((totalEvents - totalUncoveredEvents) * 100.0 / totalEvents).ToString("F1"); + + if (machines.Count > 0) + { + WriteHeader(writer, string.Format("Total actor coverage: {0}%", eventCoverage)); + foreach (var machine in machines) + { + machineTypes.TryGetValue(machine, out string machineType); + WriteHeader(writer, string.Format("{0}: {1}", machineType, machine)); + + // Find all possible events for this machine. + var uncoveredMachineEvents = new Dictionary>(); + var allMachineEvents = new Dictionary>(); + foreach (var item in this.CoverageInfo.RegisteredActorEvents) + { + var id = GetActorId(item.Key); + if (id == machine) + { + uncoveredMachineEvents[item.Key] = new HashSet(item.Value); + allMachineEvents[item.Key] = new HashSet(item.Value); + } + } + + // Now use the graph to find incoming links to each state in this machine and remove those from the list of uncovered events. + this.RemoveCoveredEvents(uncoveredMachineEvents); + + int totalMachineEvents = (from h in allMachineEvents select h.Value.Count).Sum(); + var totalUncoveredMachineEvents = (from h in uncoveredMachineEvents select h.Value.Count).Sum(); + + eventCoverage = totalMachineEvents is 0 ? "100.0" : ((totalMachineEvents - totalUncoveredMachineEvents) * 100.0 / totalMachineEvents).ToString("F1"); + writer.WriteLine("Event coverage: {0}%", eventCoverage); + foreach (var state in this.CoverageInfo.MachinesToStates[machine]) + { + var key = machine + "." + state; + int totalStateEvents = (from h in allMachineEvents where h.Key == key select h.Value.Count).Sum(); + int uncoveredStateEvents = (from h in uncoveredMachineEvents where h.Key == key select h.Value.Count).Sum(); + + writer.WriteLine(); + writer.WriteLine("\tState: {0}{1}", state, totalStateEvents > 0 && totalStateEvents == uncoveredStateEvents ? " is uncovered" : string.Empty); + if (totalStateEvents is 0) + { + writer.WriteLine("\t\tState has no expected events, so coverage is 100%"); + } + else if (totalStateEvents != uncoveredStateEvents) + { + eventCoverage = totalStateEvents is 0 ? "100.0" : ((totalStateEvents - uncoveredStateEvents) * 100.0 / totalStateEvents).ToString("F1"); + writer.WriteLine("\t\tState event coverage: {0}%", eventCoverage); + } + + // Now use the graph to find incoming links to each state in this machine + HashSet stateIncomingStates = new HashSet(); + HashSet stateOutgoingStates = new HashSet(); + foreach (var link in this.CoverageInfo.CoverageGraph.Links) + { + if (link.Category != "Contains") + { + string srcId = link.Source.Id; + string srcMachine = GetActorId(srcId); + string targetId = link.Target.Id; + string targetMachine = GetActorId(targetId); + bool intraMachineTransition = targetMachine == machine && srcMachine == machine; + if (intraMachineTransition) + { + foreach (string id in GetEventIds(link)) + { + if (targetId == key) + { + // we want to show incoming/outgoing states within the current machine only. + stateIncomingStates.Add(GetStateName(srcId)); + } + + if (srcId == key) + { + // we want to show incoming/outgoing states within the current machine only. + stateOutgoingStates.Add(GetStateName(targetId)); + } + } + } + } + } + + HashSet received = new HashSet(this.CoverageInfo.ActorEventInfo.GetEventsReceived(key)); + this.RemoveBuiltInEvents(received); + if (received.Count > 0) + { + writer.WriteLine("\t\tEvents received: {0}", string.Join(", ", SortHashSet(received))); + } + + HashSet sent = new HashSet(this.CoverageInfo.ActorEventInfo.GetEventsSent(key)); + this.RemoveBuiltInEvents(sent); + if (sent.Count > 0) + { + writer.WriteLine("\t\tEvents sent: {0}", string.Join(", ", SortHashSet(sent))); + } + + var stateUncoveredEvents = (from h in uncoveredMachineEvents where h.Key == key select h.Value).FirstOrDefault(); + if (stateUncoveredEvents != null && stateUncoveredEvents.Count > 0) + { + writer.WriteLine("\t\tEvents not covered: {0}", string.Join(", ", SortHashSet(stateUncoveredEvents))); + } + + if (stateIncomingStates.Count > 0) + { + writer.WriteLine("\t\tPrevious states: {0}", string.Join(", ", SortHashSet(stateIncomingStates))); + } + + if (stateOutgoingStates.Count > 0) + { + writer.WriteLine("\t\tNext states: {0}", string.Join(", ", SortHashSet(stateOutgoingStates))); + } + } + + writer.WriteLine(); + } + + // Check if a non-actor event sender exists. + if (this.CoverageInfo.CoverageGraph.Links.Any(link => link.Source.Id == ActorRuntimeLogGraphBuilder.ExternalCodeName)) + { + WriteHeader(writer, ActorRuntimeLogGraphBuilder.ExternalCodeName); + + HashSet sent = new HashSet(this.CoverageInfo.ActorEventInfo.GetEventsSent( + $"{ActorRuntimeLogGraphBuilder.ExternalCodeName}.{ActorRuntimeLogGraphBuilder.ExternalStateName}")); + this.RemoveBuiltInEvents(sent); + if (sent.Count > 0) + { + writer.WriteLine("Events sent: {0}", string.Join(", ", SortHashSet(sent))); + } + } + } + else + { + WriteHeader(writer, "Total actor coverage: N/A"); + } + + base.WriteCoverageText(writer); + } + + private void RemoveBuiltInEvents(HashSet eventList) + { + foreach (var name in eventList.ToArray()) + { + if (this.BuiltInEvents.Contains(name)) + { + eventList.Remove(name); + } + } + } + + /// + /// Remove all events from expectedEvent that are found in the graph. + /// + /// The list of all expected events organized by unique state Id. + private void RemoveCoveredEvents(Dictionary> expectedEvents) + { + foreach (var pair in expectedEvents) + { + string stateId = pair.Key; + var eventSet = pair.Value; + + foreach (var e in this.CoverageInfo.ActorEventInfo.GetEventsReceived(stateId)) + { + eventSet.Remove(e); + } + } + } + + private static string GetActorId(string nodeId) + { + int i = nodeId.LastIndexOf("."); + if (i > 0) + { + return nodeId.Substring(0, i); + } + + return nodeId; + } + } +} diff --git a/Source/Actors/Coverage/ActorCoverageInfo.cs b/Source/Actors/Coverage/ActorCoverageInfo.cs new file mode 100644 index 000000000..a3c087e3c --- /dev/null +++ b/Source/Actors/Coverage/ActorCoverageInfo.cs @@ -0,0 +1,139 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.Runtime.Serialization; +using Microsoft.Coyote.Coverage; + +namespace Microsoft.Coyote.Actors.Coverage +{ + /// + /// Class for storing actor coverage-specific data across multiple testing iterations. + /// + [DataContract] + public class ActorCoverageInfo : CoverageInfo + { + /// + /// Set of known machines. + /// + [DataMember] + public HashSet Machines { get; private set; } + + /// + /// Map from machines to set of all states states defined in that machine. + /// + [DataMember] + public Dictionary> MachinesToStates { get; private set; } + + /// + /// Set of (machine + "." + state => registered events). So all events that can + /// get us into each state. + /// + [DataMember] + public Dictionary> RegisteredActorEvents { get; private set; } + + /// + /// Information about events sent and received. + /// + [DataMember] + public ActorEventCoverage ActorEventInfo { get; set; } + + /// + /// Initializes a new instance of the class. + /// + public ActorCoverageInfo() + : base() + { + this.Machines = new HashSet(); + this.MachinesToStates = new Dictionary>(); + this.RegisteredActorEvents = new Dictionary>(); + } + + /// + /// Checks if the machine type has already been registered for coverage. + /// + public bool IsMachineDeclared(string machineName) => this.MachinesToStates.ContainsKey(machineName); + + /// + /// Declares a machine state. + /// + public void DeclareMachineState(string machine, string state) => this.AddMachineState(machine, state); + + /// + /// Declares a registered machine state-event pair. + /// + public void DeclareMachineStateEventPair(string machine, string state, string eventName) + { + this.AddMachineState(machine, state); + + string key = machine + "." + state; + this.AddActorEvent(key, eventName); + } + + /// + /// Adds a new machine state. + /// + private void AddMachineState(string machineName, string stateName) + { + this.Machines.Add(machineName); + if (!this.MachinesToStates.ContainsKey(machineName)) + { + this.MachinesToStates.Add(machineName, new HashSet()); + } + + this.MachinesToStates[machineName].Add(stateName); + } + + /// + /// Adds a new actor state. + /// + private void AddActorEvent(string key, string eventName) + { + if (!this.RegisteredActorEvents.ContainsKey(key)) + { + this.RegisteredActorEvents.Add(key, new HashSet()); + } + + this.RegisteredActorEvents[key].Add(eventName); + } + + /// + public override void Merge(CoverageInfo coverageInfo) + { + if (coverageInfo is ActorCoverageInfo actorCoverageInfo) + { + foreach (var machine in actorCoverageInfo.Machines) + { + this.Machines.Add(machine); + } + + foreach (var machine in actorCoverageInfo.MachinesToStates) + { + foreach (var state in machine.Value) + { + this.DeclareMachineState(machine.Key, state); + } + } + + foreach (var tup in actorCoverageInfo.RegisteredActorEvents) + { + foreach (var e in tup.Value) + { + this.AddActorEvent(tup.Key, e); + } + } + + if (this.ActorEventInfo is null) + { + this.ActorEventInfo = actorCoverageInfo.ActorEventInfo; + } + else if (actorCoverageInfo.ActorEventInfo != null && this.ActorEventInfo != actorCoverageInfo.ActorEventInfo) + { + this.ActorEventInfo.Merge(actorCoverageInfo.ActorEventInfo); + } + } + + base.Merge(coverageInfo); + } + } +} diff --git a/Source/Actors/Coverage/ActorEventCoverage.cs b/Source/Actors/Coverage/ActorEventCoverage.cs new file mode 100644 index 000000000..170118dc7 --- /dev/null +++ b/Source/Actors/Coverage/ActorEventCoverage.cs @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Microsoft.Coyote.Actors.Coverage +{ + /// + /// This class maintains information about events received and sent from each state of each actor. + /// + [DataContract] + public class ActorEventCoverage + { + /// + /// Map from states to the list of events received by that state. The state id is fully qualified by + /// the actor id it belongs to. + /// + [DataMember] + private readonly Dictionary> EventsReceived = new Dictionary>(); + + /// + /// Map from states to the list of events sent by that state. The state id is fully qualified by + /// the actor id it belongs to. + /// + [DataMember] + private readonly Dictionary> EventsSent = new Dictionary>(); + + internal void AddEventReceived(string stateId, string eventId) + { + if (!this.EventsReceived.TryGetValue(stateId, out HashSet set)) + { + set = new HashSet(); + this.EventsReceived[stateId] = set; + } + + set.Add(eventId); + } + + /// + /// Get list of events received by the given fully qualified state. + /// + /// The actor qualified state name. + public IEnumerable GetEventsReceived(string stateId) + { + if (this.EventsReceived.TryGetValue(stateId, out HashSet set)) + { + return set; + } + + return Array.Empty(); + } + + internal void AddEventSent(string stateId, string eventId) + { + if (!this.EventsSent.TryGetValue(stateId, out HashSet set)) + { + set = new HashSet(); + this.EventsSent[stateId] = set; + } + + set.Add(eventId); + } + + /// + /// Get list of events sent by the given state. + /// + /// The actor qualified state name. + public IEnumerable GetEventsSent(string stateId) + { + if (this.EventsSent.TryGetValue(stateId, out HashSet set)) + { + return set; + } + + return Array.Empty(); + } + + internal void Merge(ActorEventCoverage other) + { + MergeHashSets(this.EventsReceived, other.EventsReceived); + MergeHashSets(this.EventsSent, other.EventsSent); + } + + private static void MergeHashSets(Dictionary> ours, Dictionary> theirs) + { + foreach (var pair in theirs) + { + var stateId = pair.Key; + if (!ours.TryGetValue(stateId, out HashSet eventSet)) + { + eventSet = new HashSet(); + ours[stateId] = eventSet; + } + + eventSet.UnionWith(pair.Value); + } + } + } +} diff --git a/Source/Core/Actors/Coverage/ActorRuntimeLogEventCoverage.cs b/Source/Actors/Coverage/ActorRuntimeLogEventCoverage.cs similarity index 58% rename from Source/Core/Actors/Coverage/ActorRuntimeLogEventCoverage.cs rename to Source/Actors/Coverage/ActorRuntimeLogEventCoverage.cs index 65fd92e1a..cf5e4671e 100644 --- a/Source/Core/Actors/Coverage/ActorRuntimeLogEventCoverage.cs +++ b/Source/Actors/Coverage/ActorRuntimeLogEventCoverage.cs @@ -2,115 +2,24 @@ // Licensed under the MIT License. using System; -using System.Collections.Generic; -using System.Runtime.Serialization; using Microsoft.Coyote.Actors.Timers; +using Microsoft.Coyote.Coverage; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.Coverage { - /// - /// This class maintains information about events received and sent from each state of each actor. - /// - [DataContract] - public class EventCoverage - { - /// - /// Map from states to the list of events received by that state. The state id is fully qualified by - /// the actor id it belongs to. - /// - [DataMember] - private readonly Dictionary> EventsReceived = new Dictionary>(); - - /// - /// Map from states to the list of events sent by that state. The state id is fully qualified by - /// the actor id it belongs to. - /// - [DataMember] - private readonly Dictionary> EventsSent = new Dictionary>(); - - internal void AddEventReceived(string stateId, string eventId) - { - if (!this.EventsReceived.TryGetValue(stateId, out HashSet set)) - { - set = new HashSet(); - this.EventsReceived[stateId] = set; - } - - set.Add(eventId); - } - - /// - /// Get list of events received by the given fully qualified state. - /// - /// The actor qualified state name. - public IEnumerable GetEventsReceived(string stateId) - { - if (this.EventsReceived.TryGetValue(stateId, out HashSet set)) - { - return set; - } - - return Array.Empty(); - } - - internal void AddEventSent(string stateId, string eventId) - { - if (!this.EventsSent.TryGetValue(stateId, out HashSet set)) - { - set = new HashSet(); - this.EventsSent[stateId] = set; - } - - set.Add(eventId); - } - - /// - /// Get list of events sent by the given state. - /// - /// The actor qualified state name. - public IEnumerable GetEventsSent(string stateId) - { - if (this.EventsSent.TryGetValue(stateId, out HashSet set)) - { - return set; - } - - return Array.Empty(); - } - - internal void Merge(EventCoverage other) - { - MergeHashSets(this.EventsReceived, other.EventsReceived); - MergeHashSets(this.EventsSent, other.EventsSent); - } - - private static void MergeHashSets(Dictionary> ours, Dictionary> theirs) - { - foreach (var pair in theirs) - { - var stateId = pair.Key; - if (!ours.TryGetValue(stateId, out HashSet eventSet)) - { - eventSet = new HashSet(); - ours[stateId] = eventSet; - } - - eventSet.UnionWith(pair.Value); - } - } - } - internal class ActorRuntimeLogEventCoverage : IActorRuntimeLog { - private readonly EventCoverage InternalEventCoverage = new EventCoverage(); private Event Dequeued; + public ActorEventCoverage ActorEventCoverage { get; } = new ActorEventCoverage(); + + public MonitorEventCoverage MonitorEventCoverage { get; } = new MonitorEventCoverage(); + public ActorRuntimeLogEventCoverage() { } - public EventCoverage EventCoverage => this.InternalEventCoverage; - public void OnAssertionFailure(string error) { } @@ -163,21 +72,12 @@ public void OnExceptionThrown(ActorId id, string stateName, string actionName, E public void OnExecuteAction(ActorId id, string handlingStateName, string currentStateName, string actionName) { - this.OnEventHandled(id, handlingStateName); - } - - private void OnEventHandled(ActorId id, string stateName) - { - if (this.Dequeued != null) - { - this.EventCoverage.AddEventReceived(GetStateId(id.Type, stateName), this.Dequeued.GetType().FullName); - this.Dequeued = null; - } + this.OnActorEventHandled(id, handlingStateName); } public void OnGotoState(ActorId id, string currentStateName, string newStateName) { - this.OnEventHandled(id, currentStateName); + this.OnActorEventHandled(id, currentStateName); } public void OnHalt(ActorId id, int inboxSize) @@ -189,16 +89,16 @@ public void OnMonitorExecuteAction(string monitorType, string stateName, string } public void OnMonitorProcessEvent(string monitorType, string stateName, string senderName, - string senderType, string senderStateName, Event e) + string senderType, string senderStateName, MonitorEvent e) { string eventName = e.GetType().FullName; - this.EventCoverage.AddEventReceived(GetStateId(monitorType, stateName), eventName); + this.MonitorEventCoverage.AddEventProcessed(GetStateId(monitorType, stateName), eventName); } - public void OnMonitorRaiseEvent(string monitorType, string stateName, Event e) + public void OnMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e) { string eventName = e.GetType().FullName; - this.EventCoverage.AddEventSent(GetStateId(monitorType, stateName), eventName); + this.MonitorEventCoverage.AddEventRaised(GetStateId(monitorType, stateName), eventName); } public void OnMonitorStateTransition(string monitorType, string stateName, bool isEntry, bool? isInHotState) @@ -227,13 +127,13 @@ public void OnPopStateUnhandledEvent(ActorId id, string stateName, Event e) public void OnPushState(ActorId id, string currentStateName, string newStateName) { - this.OnEventHandled(id, currentStateName); + this.OnActorEventHandled(id, currentStateName); } public void OnRaiseEvent(ActorId id, string stateName, Event e) { string eventName = e.GetType().FullName; - this.EventCoverage.AddEventSent(GetStateId(id.Type, stateName), eventName); + this.ActorEventCoverage.AddEventSent(GetStateId(id.Type, stateName), eventName); } public void OnHandleRaisedEvent(ActorId id, string stateName, Event e) @@ -244,14 +144,14 @@ public void OnHandleRaisedEvent(ActorId id, string stateName, Event e) public void OnReceiveEvent(ActorId id, string stateName, Event e, bool wasBlocked) { string eventName = e.GetType().FullName; - this.EventCoverage.AddEventReceived(GetStateId(id.Type, stateName), eventName); + this.ActorEventCoverage.AddEventReceived(GetStateId(id.Type, stateName), eventName); } public void OnSendEvent(ActorId targetActorId, string senderName, string senderType, string senderStateName, Event e, Guid eventGroupId, bool isTargetHalted) { string eventName = e.GetType().FullName; - this.EventCoverage.AddEventSent(GetStateId(senderType, senderStateName), eventName); + this.ActorEventCoverage.AddEventSent(GetStateId(senderType, senderStateName), eventName); } public void OnStateTransition(ActorId id, string stateName, bool isEntry) @@ -270,6 +170,15 @@ public void OnWaitEvent(ActorId id, string stateName, params Type[] eventTypes) { } + private void OnActorEventHandled(ActorId id, string stateName) + { + if (this.Dequeued != null) + { + this.ActorEventCoverage.AddEventReceived(GetStateId(id.Type, stateName), this.Dequeued.GetType().FullName); + this.Dequeued = null; + } + } + private static string GetStateId(string actorType, string stateName) { string id = ResolveActorTypeName(actorType); diff --git a/Source/Core/Actors/Coverage/ActorRuntimeLogGraphBuilder.cs b/Source/Actors/Coverage/ActorRuntimeLogGraphBuilder.cs similarity index 53% rename from Source/Core/Actors/Coverage/ActorRuntimeLogGraphBuilder.cs rename to Source/Actors/Coverage/ActorRuntimeLogGraphBuilder.cs index 924be7740..db2b30440 100644 --- a/Source/Core/Actors/Coverage/ActorRuntimeLogGraphBuilder.cs +++ b/Source/Actors/Coverage/ActorRuntimeLogGraphBuilder.cs @@ -4,11 +4,10 @@ using System; using System.Collections.Generic; using System.IO; -using System.Runtime.Serialization; -using System.Text; -using System.Xml.Linq; using Microsoft.Coyote.Actors.Timers; using Microsoft.Coyote.Actors.Timers.Mocks; +using Microsoft.Coyote.Coverage; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.Coverage { @@ -18,16 +17,16 @@ namespace Microsoft.Coyote.Actors.Coverage /// internal class ActorRuntimeLogGraphBuilder : IActorRuntimeLog { - private const string ExternalCodeName = "ExternalCode"; - private const string ExternalStateName = "ExternalState"; - private const string StateMachineCategory = "StateMachine"; private const string ActorCategory = "Actor"; + internal const string StateMachineCategory = "StateMachine"; private const string MonitorCategory = "Monitor"; + internal const string ExternalCodeName = "ExternalCode"; + internal const string ExternalStateName = "ExternalState"; /// - /// The currently manipulated graph. + /// The currently manipulated coverage graph. /// - private Graph CurrentGraph; + private CoverageGraph CurrentGraph; /// /// Current dequeued event. @@ -72,20 +71,9 @@ private class EventInfo internal TextWriter Logger { get; set; } /// - /// Get the Graph object built by this logger. + /// Get the object built by this logger. /// - internal Graph Graph - { - get - { - if (this.CurrentGraph is null) - { - this.CurrentGraph = new Graph(); - } - - return this.CurrentGraph; - } - } + internal CoverageGraph Graph => this.CurrentGraph ?? new CoverageGraph(); private class DoActionEvent : Event { @@ -116,7 +104,7 @@ internal ActorRuntimeLogGraphBuilder(bool mergeEventLinks, bool collapseInstance { this.MergeEventLinks = mergeEventLinks; this.CollapseInstances = collapseInstances; - this.CurrentGraph = new Graph(); + this.CurrentGraph = new CoverageGraph(); } /// @@ -125,13 +113,13 @@ public void OnCreateActor(ActorId id, string creatorName, string creatorType) lock (this.Inbox) { var resolvedId = this.GetResolveActorId(id?.Name, id?.Type); - GraphNode node = this.Graph.GetOrCreateNode(resolvedId); + CoverageGraph.Node node = this.Graph.GetOrCreateNode(resolvedId); node.Category = ActorCategory; if (!string.IsNullOrEmpty(creatorName)) { var creatorId = this.GetResolveActorId(creatorName, creatorType); - GraphNode creator = this.Graph.GetOrCreateNode(creatorId); + CoverageGraph.Node creator = this.Graph.GetOrCreateNode(creatorId); this.GetOrCreateEventLink(creator, node, new EventInfo() { Event = "CreateActor" }); } } @@ -143,13 +131,13 @@ public void OnCreateStateMachine(ActorId id, string creatorName, string creatorT lock (this.Inbox) { var resolvedId = this.GetResolveActorId(id?.Name, id?.Type); - GraphNode node = this.Graph.GetOrCreateNode(resolvedId); + CoverageGraph.Node node = this.Graph.GetOrCreateNode(resolvedId); node.Category = StateMachineCategory; if (!string.IsNullOrEmpty(creatorName)) { var creatorId = this.GetResolveActorId(creatorName, creatorType); - GraphNode creator = this.Graph.GetOrCreateNode(creatorId); + CoverageGraph.Node creator = this.Graph.GetOrCreateNode(creatorId); this.GetOrCreateEventLink(creator, node, new EventInfo() { Event = "CreateActor" }); } } @@ -331,7 +319,7 @@ public void OnHalt(ActorId id, int inboxSize) } } - private int? GetLinkIndex(GraphNode source, GraphNode target, string id) + private int? GetLinkIndex(CoverageGraph.Node source, CoverageGraph.Node target, string id) { if (this.MergeEventLinks) { @@ -396,7 +384,7 @@ public void OnCreateMonitor(string monitorType) { lock (this.Inbox) { - GraphNode node = this.Graph.GetOrCreateNode(monitorType, monitorType); + CoverageGraph.Node node = this.Graph.GetOrCreateNode(monitorType, monitorType); node.Category = MonitorCategory; } } @@ -421,7 +409,7 @@ public void OnMonitorExecuteAction(string monitorType, string stateName, string /// public void OnMonitorProcessEvent(string monitorType, string stateName, string senderName, string senderType, - string senderStateName, Event e) + string senderStateName, MonitorEvent e) { lock (this.Inbox) { @@ -439,7 +427,7 @@ public void OnMonitorProcessEvent(string monitorType, string stateName, string s } /// - public void OnMonitorRaiseEvent(string monitorType, string stateName, Event e) + public void OnMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e) { // Raising event to self. string eventName = e.GetType().FullName; @@ -515,9 +503,9 @@ public void OnCompleted() /// /// Set to true will reset the graph for the next iteration. /// The graph. - internal Graph SnapshotGraph(bool reset) + internal CoverageGraph SnapshotGraph(bool reset) { - Graph result = this.CurrentGraph; + CoverageGraph result = this.CurrentGraph; if (reset) { // Reset the graph to start fresh. @@ -606,9 +594,9 @@ private void LinkTransition(Type transitionType, ActorId id, string handlingStat } } - private GraphNode GetOrCreateChild(string name, string type, string stateName, string label = null) + private CoverageGraph.Node GetOrCreateChild(string name, string type, string stateName, string label = null) { - GraphNode child = null; + CoverageGraph.Node child = null; lock (this.Inbox) { this.AddNamespace(type); @@ -619,7 +607,7 @@ private GraphNode GetOrCreateChild(string name, string type, string stateName, s stateName = this.GetLabel(name, type, stateName); string id = this.GetResolveActorId(name, type); - GraphNode parent = this.Graph.GetOrCreateNode(id); + CoverageGraph.Node parent = this.Graph.GetOrCreateNode(id); parent.AddAttribute("Group", "Expanded"); if (string.IsNullOrEmpty(label)) @@ -639,9 +627,9 @@ private GraphNode GetOrCreateChild(string name, string type, string stateName, s return child; } - private GraphLink GetOrCreateEventLink(GraphNode source, GraphNode target, EventInfo e) + private CoverageGraph.Link GetOrCreateEventLink(CoverageGraph.Node source, CoverageGraph.Node target, EventInfo e) { - GraphLink link = null; + CoverageGraph.Link link = null; lock (this.Inbox) { string label = this.GetEventLabel(e.Event); @@ -743,571 +731,4 @@ private static string GetEventCategory(string fullyQualifiedName) return null; } } - - /// - /// A directed graph made up of Nodes and Links. - /// - [DataContract] - public class Graph - { - internal const string DgmlNamespace = "http://schemas.microsoft.com/vs/2009/dgml"; - - // These [DataMember] fields are here so we can serialize the Graph across parallel or distributed - // test processes without losing any information. There is more information here than in the serialized - // DGML which is we we can't just use Save/LoadDgml to do the same. - - [DataMember] - private readonly Dictionary InternalNodes = new Dictionary(); - [DataMember] - private readonly Dictionary InternalLinks = new Dictionary(); - // last used index for simple link key "a->b". - [DataMember] - private readonly Dictionary InternalNextLinkIndex = new Dictionary(); - // maps augmented link key to the index that has been allocated for that link id "a->b(goto)" => 0 - [DataMember] - private readonly Dictionary InternalAllocatedLinkIndexes = new Dictionary(); - [DataMember] - private readonly Dictionary InternalAllocatedLinkIds = new Dictionary(); - - /// - /// Return the current list of nodes (in no particular order). - /// - public IEnumerable Nodes - { - get { return this.InternalNodes.Values; } - } - - /// - /// Return the current list of links (in no particular order). - /// - public IEnumerable Links - { - get - { - if (this.InternalLinks is null) - { - return Array.Empty(); - } - - return this.InternalLinks.Values; - } - } - - /// - /// Get existing node or null. - /// - /// The id of the node. - public GraphNode GetNode(string id) - { - this.InternalNodes.TryGetValue(id, out GraphNode node); - return node; - } - - /// - /// Get existing node or create a new one with the given id and label. - /// - /// Returns the new node or the existing node if it was already defined. - public GraphNode GetOrCreateNode(string id, string label = null, string category = null) - { - if (!this.InternalNodes.TryGetValue(id, out GraphNode node)) - { - node = new GraphNode(id, label, category); - this.InternalNodes.Add(id, node); - } - - return node; - } - - /// - /// Get existing node or create a new one with the given id and label. - /// - /// Returns the new node or the existing node if it was already defined. - private GraphNode GetOrCreateNode(GraphNode newNode) - { - if (!this.InternalNodes.ContainsKey(newNode.Id)) - { - this.InternalNodes.Add(newNode.Id, newNode); - } - - return newNode; - } - - /// - /// Get existing link or create a new one connecting the given source and target nodes. - /// - /// The new link or the existing link if it was already defined. - public GraphLink GetOrCreateLink(GraphNode source, GraphNode target, int? index = null, string linkLabel = null, string category = null) - { - string key = source.Id + "->" + target.Id; - if (index.HasValue) - { - key += string.Format("({0})", index.Value); - } - - if (!this.InternalLinks.TryGetValue(key, out GraphLink link)) - { - link = new GraphLink(source, target, linkLabel, category); - if (index.HasValue) - { - link.Index = index.Value; - } - - this.InternalLinks.Add(key, link); - } - - return link; - } - - internal int GetUniqueLinkIndex(GraphNode source, GraphNode target, string id) - { - // augmented key - string key = string.Format("{0}->{1}({2})", source.Id, target.Id, id); - if (this.InternalAllocatedLinkIndexes.TryGetValue(key, out int index)) - { - return index; - } - - // allocate a new index for the simple key - var simpleKey = string.Format("{0}->{1}", source.Id, target.Id); - if (this.InternalNextLinkIndex.TryGetValue(simpleKey, out index)) - { - index++; - } - - this.InternalNextLinkIndex[simpleKey] = index; - - // remember this index has been allocated for this link id. - this.InternalAllocatedLinkIndexes[key] = index; - - // remember the original id associated with this link index. - key = string.Format("{0}->{1}({2})", source.Id, target.Id, index); - this.InternalAllocatedLinkIds[key] = id; - - return index; - } - - /// - /// Serialize the graph to a DGML string. - /// - public override string ToString() - { - using var writer = new StringWriter(); - this.WriteDgml(writer, false); - return writer.ToString(); - } - - internal void SaveDgml(string graphFilePath, bool includeDefaultStyles) - { - using StreamWriter writer = new StreamWriter(graphFilePath, false, Encoding.UTF8); - this.WriteDgml(writer, includeDefaultStyles); - } - - /// - /// Serialize the graph to DGML. - /// - public void WriteDgml(TextWriter writer, bool includeDefaultStyles) - { - writer.WriteLine("", DgmlNamespace); - writer.WriteLine(" "); - - if (this.InternalNodes != null) - { - List nodes = new List(this.InternalNodes.Keys); - nodes.Sort(StringComparer.Ordinal); - foreach (var id in nodes) - { - GraphNode node = this.InternalNodes[id]; - writer.Write(" "); - } - } - - writer.WriteLine(" "); - writer.WriteLine(" "); - - if (this.InternalLinks != null) - { - List links = new List(this.InternalLinks.Keys); - links.Sort(StringComparer.Ordinal); - foreach (var id in links) - { - GraphLink link = this.InternalLinks[id]; - writer.Write(" "); - } - } - - writer.WriteLine(" "); - if (includeDefaultStyles) - { - writer.WriteLine( -@" - - - - - - - "); - } - - writer.WriteLine(""); - } - - /// - /// Load a DGML file into a new Graph object. - /// - /// Full path to the DGML file. - /// The loaded Graph object. - public static Graph LoadDgml(string graphFilePath) - { - XDocument doc = XDocument.Load(graphFilePath); - Graph result = new Graph(); - var ns = doc.Root.Name.Namespace; - if (ns != DgmlNamespace) - { - throw new InvalidOperationException(string.Format( - "File '{0}' does not contain the DGML namespace", graphFilePath)); - } - - foreach (var e in doc.Root.Element(ns + "Nodes").Elements(ns + "Node")) - { - var id = (string)e.Attribute("Id"); - var label = (string)e.Attribute("Label"); - var category = (string)e.Attribute("Category"); - - GraphNode node = new GraphNode(id, label, category); - node.AddDgmlProperties(e); - result.GetOrCreateNode(node); - } - - foreach (var e in doc.Root.Element(ns + "Links").Elements(ns + "Link")) - { - var srcId = (string)e.Attribute("Source"); - var targetId = (string)e.Attribute("Target"); - var label = (string)e.Attribute("Label"); - var category = (string)e.Attribute("Category"); - var srcNode = result.GetOrCreateNode(srcId); - var targetNode = result.GetOrCreateNode(targetId); - XAttribute indexAttr = e.Attribute("index"); - int? index = null; - if (indexAttr != null) - { - index = (int)indexAttr; - } - - var link = result.GetOrCreateLink(srcNode, targetNode, index, label, category); - link.AddDgmlProperties(e); - } - - return result; - } - - /// - /// Merge the given graph so that this graph becomes a superset of both graphs. - /// - /// The new graph to merge into this graph. - public void Merge(Graph other) - { - foreach (var node in other.InternalNodes.Values) - { - var newNode = this.GetOrCreateNode(node.Id, node.Label, node.Category); - newNode.Merge(node); - } - - foreach (var link in other.InternalLinks.Values) - { - var source = this.GetOrCreateNode(link.Source.Id, link.Source.Label, link.Source.Category); - var target = this.GetOrCreateNode(link.Target.Id, link.Target.Label, link.Target.Category); - int? index = null; - if (link.Index.HasValue) - { - // ouch, link indexes cannot be compared across Graph instances, we need to assign a new index here. - string key = string.Format("{0}->{1}({2})", source.Id, target.Id, link.Index.Value); - string linkId = other.InternalAllocatedLinkIds[key]; - index = this.GetUniqueLinkIndex(source, target, linkId); - } - - var newLink = this.GetOrCreateLink(source, target, index, link.Label, link.Category); - newLink.Merge(link); - } - } - } - - /// - /// A Node of a Graph. - /// - [DataContract] - public class GraphObject - { - /// - /// Optional list of attributes for the node. - /// - [DataMember] - public Dictionary Attributes { get; internal set; } - - /// - /// Optional list of attributes that have a multi-part value. - /// - [DataMember] - public Dictionary> AttributeLists { get; internal set; } - - /// - /// Add an attribute to the node. - /// - public void AddAttribute(string name, string value) - { - if (this.Attributes is null) - { - this.Attributes = new Dictionary(); - } - - this.Attributes[name] = value; - } - - /// - /// Creates a compound attribute value containing a merged list of unique values. - /// - /// The attribute name. - /// The new value to add to the unique list. - public int AddListAttribute(string key, string value) - { - if (this.AttributeLists is null) - { - this.AttributeLists = new Dictionary>(); - } - - if (!this.AttributeLists.TryGetValue(key, out HashSet list)) - { - list = new HashSet(); - this.AttributeLists[key] = list; - } - - list.Add(value); - return list.Count; - } - - internal void WriteAttributes(TextWriter writer) - { - if (this.Attributes != null) - { - List names = new List(this.Attributes.Keys); - names.Sort(StringComparer.Ordinal); // creates a more stable output file (can be handy for expected output during testing). - foreach (string name in names) - { - var value = this.Attributes[name]; - writer.Write(" {0}='{1}'", name, value); - } - } - - if (this.AttributeLists != null) - { - List names = new List(this.AttributeLists.Keys); - names.Sort(StringComparer.Ordinal); // creates a more stable output file (can be handy for expected output during testing). - foreach (string name in names) - { - var value = this.AttributeLists[name]; - writer.Write(" {0}='{1}'", name, string.Join(",", value)); - } - } - } - - internal void Merge(GraphObject other) - { - if (other.Attributes != null) - { - foreach (var key in other.Attributes.Keys) - { - this.AddAttribute(key, other.Attributes[key]); - } - } - - if (other.AttributeLists != null) - { - foreach (var key in other.AttributeLists.Keys) - { - foreach (var value in other.AttributeLists[key]) - { - this.AddListAttribute(key, value); - } - } - } - } - } - - /// - /// A Node of a Graph. - /// - [DataContract] - public class GraphNode : GraphObject - { - /// - /// The unique Id of the Node within the Graph. - /// - [DataMember] - public string Id { get; internal set; } - - /// - /// An optional display label for the node (does not need to be unique). - /// - [DataMember] - public string Label { get; internal set; } - - /// - /// An optional category for the node. - /// - [DataMember] - public string Category { get; internal set; } - - /// - /// Initializes a new instance of the class. - /// - public GraphNode(string id, string label, string category) - { - this.Id = id; - this.Label = label; - this.Category = category; - } - - /// - /// Add additional properties from XML element. - /// - /// An XML element representing the graph node in DGML format. - public void AddDgmlProperties(XElement e) - { - foreach (XAttribute a in e.Attributes()) - { - switch (a.Name.LocalName) - { - case "Id": - case "Label": - case "Category": - break; - default: - this.AddAttribute(a.Name.LocalName, a.Value); - break; - } - } - } - } - - /// - /// A Link represents a directed graph connection between two Nodes. - /// - [DataContract] - public class GraphLink : GraphObject - { - /// - /// An optional display label for the link. - /// - [DataMember] - public string Label { get; internal set; } - - /// - /// An optional category for the link. - /// The special category "Contains" is reserved for building groups. - /// - [DataMember] - public string Category { get; internal set; } - - /// - /// The source end of the link. - /// - [DataMember] - public GraphNode Source { get; internal set; } - - /// - /// The target end of the link. - /// - [DataMember] - public GraphNode Target { get; internal set; } - - /// - /// The optional link index. - /// - [DataMember] - public int? Index { get; internal set; } - - /// - /// Initializes a new instance of the class. - /// - public GraphLink(GraphNode source, GraphNode target, string label, string category) - { - this.Source = source; - this.Target = target; - this.Label = label; - this.Category = category; - } - - /// - /// Add additional properties from XML element. - /// - /// An XML element representing the graph node in DGML format. - public void AddDgmlProperties(XElement e) - { - foreach (XAttribute a in e.Attributes()) - { - switch (a.Name.LocalName) - { - case "Source": - case "Target": - case "Label": - case "Category": - break; - default: - this.AddAttribute(a.Name.LocalName, a.Value); - break; - } - } - } - } } diff --git a/Source/Core/Actors/EventQueues/DequeueStatus.cs b/Source/Actors/EventQueues/DequeueStatus.cs similarity index 100% rename from Source/Core/Actors/EventQueues/DequeueStatus.cs rename to Source/Actors/EventQueues/DequeueStatus.cs diff --git a/Source/Core/Actors/EventQueues/EnqueueStatus.cs b/Source/Actors/EventQueues/EnqueueStatus.cs similarity index 100% rename from Source/Core/Actors/EventQueues/EnqueueStatus.cs rename to Source/Actors/EventQueues/EnqueueStatus.cs diff --git a/Source/Core/Actors/EventQueues/EventQueue.cs b/Source/Actors/EventQueues/EventQueue.cs similarity index 100% rename from Source/Core/Actors/EventQueues/EventQueue.cs rename to Source/Actors/EventQueues/EventQueue.cs diff --git a/Source/Core/Actors/EventQueues/IEventQueue.cs b/Source/Actors/EventQueues/IEventQueue.cs similarity index 100% rename from Source/Core/Actors/EventQueues/IEventQueue.cs rename to Source/Actors/EventQueues/IEventQueue.cs diff --git a/Source/Core/Actors/EventQueues/MockEventQueue.cs b/Source/Actors/EventQueues/MockEventQueue.cs similarity index 100% rename from Source/Core/Actors/EventQueues/MockEventQueue.cs rename to Source/Actors/EventQueues/MockEventQueue.cs diff --git a/Source/Core/Actors/Events/AwaitableEventGroup.cs b/Source/Actors/Events/AwaitableEventGroup.cs similarity index 100% rename from Source/Core/Actors/Events/AwaitableEventGroup.cs rename to Source/Actors/Events/AwaitableEventGroup.cs diff --git a/Source/Core/Actors/Events/DefaultEvent.cs b/Source/Actors/Events/DefaultEvent.cs similarity index 91% rename from Source/Core/Actors/Events/DefaultEvent.cs rename to Source/Actors/Events/DefaultEvent.cs index bdf16029c..613fcf1da 100644 --- a/Source/Core/Actors/Events/DefaultEvent.cs +++ b/Source/Actors/Events/DefaultEvent.cs @@ -13,7 +13,7 @@ namespace Microsoft.Coyote.Actors public sealed class DefaultEvent : Event { /// - /// Gets a instance. + /// Gets a cached instance. /// public static DefaultEvent Instance { get; } = new DefaultEvent(); diff --git a/Source/Core/Actors/Events/Event.cs b/Source/Actors/Events/Event.cs similarity index 57% rename from Source/Core/Actors/Events/Event.cs rename to Source/Actors/Events/Event.cs index bc0d014ae..f12184925 100644 --- a/Source/Core/Actors/Events/Event.cs +++ b/Source/Actors/Events/Event.cs @@ -3,10 +3,11 @@ using System.Runtime.Serialization; -namespace Microsoft.Coyote +namespace Microsoft.Coyote.Actors { /// - /// Abstract class representing an event. + /// Abstract class representing an event that can be send to + /// an or . /// [DataContract] public abstract class Event diff --git a/Source/Core/Actors/Events/EventGroup.cs b/Source/Actors/Events/EventGroup.cs similarity index 100% rename from Source/Core/Actors/Events/EventGroup.cs rename to Source/Actors/Events/EventGroup.cs diff --git a/Source/Core/Actors/Events/EventInfo.cs b/Source/Actors/Events/EventInfo.cs similarity index 100% rename from Source/Core/Actors/Events/EventInfo.cs rename to Source/Actors/Events/EventInfo.cs diff --git a/Source/Core/Actors/Events/EventOriginInfo.cs b/Source/Actors/Events/EventOriginInfo.cs similarity index 100% rename from Source/Core/Actors/Events/EventOriginInfo.cs rename to Source/Actors/Events/EventOriginInfo.cs diff --git a/Source/Core/Actors/Events/GotoStateEvent.cs b/Source/Actors/Events/GotoStateEvent.cs similarity index 100% rename from Source/Core/Actors/Events/GotoStateEvent.cs rename to Source/Actors/Events/GotoStateEvent.cs diff --git a/Source/Core/Actors/Events/HaltEvent.cs b/Source/Actors/Events/HaltEvent.cs similarity index 100% rename from Source/Core/Actors/Events/HaltEvent.cs rename to Source/Actors/Events/HaltEvent.cs diff --git a/Source/Core/Actors/Events/PushStateEvent.cs b/Source/Actors/Events/PushStateEvent.cs similarity index 100% rename from Source/Core/Actors/Events/PushStateEvent.cs rename to Source/Actors/Events/PushStateEvent.cs diff --git a/Source/Core/Actors/Events/QuiescentEvent.cs b/Source/Actors/Events/QuiescentEvent.cs similarity index 100% rename from Source/Core/Actors/Events/QuiescentEvent.cs rename to Source/Actors/Events/QuiescentEvent.cs diff --git a/Source/Core/Actors/Events/WildcardEvent.cs b/Source/Actors/Events/WildcardEvent.cs similarity index 100% rename from Source/Core/Actors/Events/WildcardEvent.cs rename to Source/Actors/Events/WildcardEvent.cs diff --git a/Source/Core/Actors/Exceptions/ActionExceptionFilterException.cs b/Source/Actors/Exceptions/ActionExceptionFilterException.cs similarity index 100% rename from Source/Core/Actors/Exceptions/ActionExceptionFilterException.cs rename to Source/Actors/Exceptions/ActionExceptionFilterException.cs diff --git a/Source/Core/Actors/Exceptions/OnExceptionOutcome.cs b/Source/Actors/Exceptions/OnExceptionOutcome.cs similarity index 100% rename from Source/Core/Actors/Exceptions/OnExceptionOutcome.cs rename to Source/Actors/Exceptions/OnExceptionOutcome.cs diff --git a/Source/Core/Actors/Exceptions/UnhandledEventException.cs b/Source/Actors/Exceptions/UnhandledEventException.cs similarity index 100% rename from Source/Core/Actors/Exceptions/UnhandledEventException.cs rename to Source/Actors/Exceptions/UnhandledEventException.cs diff --git a/Source/Core/Actors/Handlers/ActionEventHandlerDeclaration.cs b/Source/Actors/Handlers/ActionEventHandlerDeclaration.cs similarity index 100% rename from Source/Core/Actors/Handlers/ActionEventHandlerDeclaration.cs rename to Source/Actors/Handlers/ActionEventHandlerDeclaration.cs diff --git a/Source/Core/Actors/Handlers/CachedDelegate.cs b/Source/Actors/Handlers/CachedDelegate.cs similarity index 100% rename from Source/Core/Actors/Handlers/CachedDelegate.cs rename to Source/Actors/Handlers/CachedDelegate.cs diff --git a/Source/Core/Actors/Handlers/DeferEventHandlerDeclaration.cs b/Source/Actors/Handlers/DeferEventHandlerDeclaration.cs similarity index 100% rename from Source/Core/Actors/Handlers/DeferEventHandlerDeclaration.cs rename to Source/Actors/Handlers/DeferEventHandlerDeclaration.cs diff --git a/Source/Core/Actors/Handlers/EventHandlerDeclaration.cs b/Source/Actors/Handlers/EventHandlerDeclaration.cs similarity index 100% rename from Source/Core/Actors/Handlers/EventHandlerDeclaration.cs rename to Source/Actors/Handlers/EventHandlerDeclaration.cs diff --git a/Source/Core/Actors/Handlers/IgnoreEventHandlerDeclaration.cs b/Source/Actors/Handlers/IgnoreEventHandlerDeclaration.cs similarity index 100% rename from Source/Core/Actors/Handlers/IgnoreEventHandlerDeclaration.cs rename to Source/Actors/Handlers/IgnoreEventHandlerDeclaration.cs diff --git a/Source/Core/Actors/Handlers/OnActorHaltedHandler.cs b/Source/Actors/Handlers/OnActorHaltedHandler.cs similarity index 100% rename from Source/Core/Actors/Handlers/OnActorHaltedHandler.cs rename to Source/Actors/Handlers/OnActorHaltedHandler.cs diff --git a/Source/Core/Actors/Handlers/OnEventDroppedHandler.cs b/Source/Actors/Handlers/OnEventDroppedHandler.cs similarity index 100% rename from Source/Core/Actors/Handlers/OnEventDroppedHandler.cs rename to Source/Actors/Handlers/OnEventDroppedHandler.cs diff --git a/Source/Core/Actors/Logging/ActorLogManager.cs b/Source/Actors/Logging/ActorLogManager.cs similarity index 100% rename from Source/Core/Actors/Logging/ActorLogManager.cs rename to Source/Actors/Logging/ActorLogManager.cs diff --git a/Source/Core/Actors/Logging/ActorRuntimeLogTextFormatter.cs b/Source/Actors/Logging/ActorRuntimeLogTextFormatter.cs similarity index 100% rename from Source/Core/Actors/Logging/ActorRuntimeLogTextFormatter.cs rename to Source/Actors/Logging/ActorRuntimeLogTextFormatter.cs diff --git a/Source/Core/Actors/Logging/ActorRuntimeLogXmlFormatter.cs b/Source/Actors/Logging/ActorRuntimeLogXmlFormatter.cs similarity index 100% rename from Source/Core/Actors/Logging/ActorRuntimeLogXmlFormatter.cs rename to Source/Actors/Logging/ActorRuntimeLogXmlFormatter.cs diff --git a/Source/Core/Actors/Logging/IActorRuntimeLog.cs b/Source/Actors/Logging/IActorRuntimeLog.cs similarity index 100% rename from Source/Core/Actors/Logging/IActorRuntimeLog.cs rename to Source/Actors/Logging/IActorRuntimeLog.cs diff --git a/Source/Actors/Properties/InternalsVisibleTo.cs b/Source/Actors/Properties/InternalsVisibleTo.cs new file mode 100644 index 000000000..2c788b637 --- /dev/null +++ b/Source/Actors/Properties/InternalsVisibleTo.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System.Runtime.CompilerServices; + +// Libraries +[assembly: InternalsVisibleTo("Microsoft.Coyote.Test,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] + +// Tools +[assembly: InternalsVisibleTo("Coyote,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] +[assembly: InternalsVisibleTo("CoyoteCoverageReportMerger,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] + +// Tests +[assembly: InternalsVisibleTo("Microsoft.Coyote.Tests.Common,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] +[assembly: InternalsVisibleTo("Microsoft.Coyote.Tests.Runtime,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] +[assembly: InternalsVisibleTo("Microsoft.Coyote.Tests.Rewriting,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] +[assembly: InternalsVisibleTo("Microsoft.Coyote.Tests.BugFinding,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] +[assembly: InternalsVisibleTo("Microsoft.Coyote.Tests.Actors,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] +[assembly: InternalsVisibleTo("Microsoft.Coyote.Tests.Actors.BugFinding,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] +[assembly: InternalsVisibleTo("Tests.Performance,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] diff --git a/Source/Core/Actors/Actor.cs b/Source/Actors/Runtime/Actor.cs similarity index 98% rename from Source/Core/Actors/Actor.cs rename to Source/Actors/Runtime/Actor.cs index 365bf35d4..f1bc9f508 100644 --- a/Source/Core/Actors/Actor.cs +++ b/Source/Actors/Runtime/Actor.cs @@ -14,6 +14,7 @@ using Microsoft.Coyote.Actors.Timers; using Microsoft.Coyote.Logging; using Microsoft.Coyote.Runtime; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors { @@ -342,16 +343,14 @@ protected void StopTimer(TimerInfo info) } /// - /// Returns a nondeterministic boolean choice, that can be - /// controlled during analysis or testing. + /// Returns a nondeterministic boolean choice, that can be controlled during testing. /// /// The controlled nondeterministic choice. protected bool RandomBoolean() => this.Context.GetNondeterministicBooleanChoice(this.Id.Name, this.Id.Type); /// - /// Returns a nondeterministic integer, that can be controlled during - /// analysis or testing. The value is used to generate an integer in - /// the range [0..maxValue). + /// Returns a nondeterministic integer, that can be controlled during testing. The value + /// is used to generate an integer in the range [0..maxValue). /// /// The max value. /// The controlled nondeterministic integer. @@ -359,18 +358,18 @@ protected int RandomInteger(int maxValue) => this.Context.GetNondeterministicIntegerChoice(maxValue, this.Id.Name, this.Id.Type); /// - /// Invokes the specified monitor with the specified . + /// Invokes the specified monitor with the specified . /// /// Type of the monitor. - /// Event to send to the monitor. - protected void Monitor(Event e) => this.Monitor(typeof(T), e); + /// The to send to the monitor. + protected void Monitor(MonitorEvent e) => this.Monitor(typeof(T), e); /// - /// Invokes the specified monitor with the specified event. + /// Invokes the specified monitor with the specified . /// /// Type of the monitor. - /// The event to send. - protected void Monitor(Type type, Event e) + /// The to send to the monitor. + protected void Monitor(Type type, MonitorEvent e) { this.Assert(e != null, "{0} is sending a null event.", this.Id); this.Context.InvokeMonitor(type, e, this.Id.Name, this.Id.Type, this.CurrentStateName); @@ -930,7 +929,7 @@ private protected MethodInfo GetActionWithName(string actionName) /// /// Reports the activity coverage of this actor. /// - internal virtual void ReportActivityCoverage(CoverageInfo coverageInfo) + internal virtual void ReportActivityCoverage(ActorCoverageInfo coverageInfo) { var name = this.GetType().FullName; if (coverageInfo.IsMachineDeclared(name)) @@ -944,7 +943,7 @@ internal virtual void ReportActivityCoverage(CoverageInfo coverageInfo) var registeredEvents = new HashSet(from key in this.ActionMap.Keys select key.FullName); foreach (var eventId in registeredEvents) { - coverageInfo.DeclareStateEvent(name, fakeStateName, eventId); + coverageInfo.DeclareMachineStateEventPair(name, fakeStateName, eventId); } } diff --git a/Source/Core/Actors/ActorExecutionContext.cs b/Source/Actors/Runtime/ActorExecutionContext.cs similarity index 96% rename from Source/Core/Actors/ActorExecutionContext.cs rename to Source/Actors/Runtime/ActorExecutionContext.cs index 6a05dc224..218861ddd 100644 --- a/Source/Core/Actors/ActorExecutionContext.cs +++ b/Source/Actors/Runtime/ActorExecutionContext.cs @@ -15,6 +15,7 @@ using Microsoft.Coyote.Actors.Mocks; using Microsoft.Coyote.Actors.Timers; using Microsoft.Coyote.Actors.Timers.Mocks; +using Microsoft.Coyote.Coverage; using Microsoft.Coyote.Logging; using Microsoft.Coyote.Runtime; using Microsoft.Coyote.Specifications; @@ -24,7 +25,7 @@ namespace Microsoft.Coyote.Actors /// /// The execution context of an actor program. /// - internal class ActorExecutionContext : IActorRuntime + internal class ActorExecutionContext : IActorRuntime, IRuntimeExtension { /// /// Object used to synchronize access to the runtime event handlers. @@ -39,7 +40,7 @@ internal class ActorExecutionContext : IActorRuntime /// /// The runtime associated with this context. /// - internal readonly CoyoteRuntime Runtime; + internal CoyoteRuntime Runtime { get; private set; } /// /// Map from unique actor ids to actors. @@ -54,7 +55,7 @@ internal class ActorExecutionContext : IActorRuntime /// /// Data structure containing information regarding testing coverage. /// - internal readonly CoverageInfo CoverageInfo; + internal readonly ActorCoverageInfo CoverageInfo; /// /// Responsible for writing to the installed . @@ -127,19 +128,52 @@ public event OnFailureHandler OnFailure /// /// Initializes a new instance of the class. /// - internal ActorExecutionContext(Configuration configuration, CoyoteRuntime runtime, ActorLogManager logManager) + internal ActorExecutionContext(Configuration configuration, ActorLogManager logManager) { this.Configuration = configuration; - this.Runtime = runtime; this.ActorMap = new ConcurrentDictionary(); this.EnabledActors = new HashSet(); - this.CoverageInfo = new CoverageInfo(); + this.CoverageInfo = new ActorCoverageInfo(); this.LogManager = logManager; this.QuiescenceCompletionSource = new TaskCompletionSource(); this.IsActorQuiescenceAwaited = false; this.QuiescenceSyncObject = new object(); } + /// + /// Installs the specified . Only one runtime can be installed + /// at a time, and this method can only be called once. + /// + internal ActorExecutionContext WithRuntime(CoyoteRuntime runtime) + { + if (this.Runtime != null) + { + throw new InvalidOperationException("A runtime is already installed."); + } + + this.Runtime = runtime; + return this; + } + + /// + bool IRuntimeExtension.RunTest(Delegate test, out Task task) + { + if (test is Action actionWithRuntime) + { + actionWithRuntime(this); + task = Task.CompletedTask; + return true; + } + else if (test is Func functionWithRuntime) + { + task = functionWithRuntime(this); + return true; + } + + task = Task.CompletedTask; + return false; + } + /// public ActorId CreateActorId(Type type, string name = null) => new ActorId(type, this.GetNextOperationId(), name, this); @@ -656,11 +690,8 @@ internal void LogInvokedOnExitAction(StateMachine stateMachine, MethodInfo actio this.LogManager.LogExecuteAction(stateMachine.Id, stateMachine.CurrentStateName, stateMachine.CurrentStateName, action.Name); - /// - /// Builds the coverage graph information, if any. This information is only available - /// when is enabled. - /// - internal CoverageInfo BuildCoverageInfo() + /// + CoverageInfo IRuntimeExtension.BuildCoverageInfo() { var result = this.CoverageInfo; if (result != null) @@ -675,19 +706,21 @@ internal CoverageInfo BuildCoverageInfo() var eventCoverage = this.LogManager.GetLogsOfType().FirstOrDefault(); if (eventCoverage != null) { - result.EventInfo = eventCoverage.EventCoverage; + result.ActorEventInfo = eventCoverage.ActorEventCoverage; + result.MonitorEventInfo = eventCoverage.MonitorEventCoverage; } } return result; } - /// - /// Returns the DGML graph of the current execution, if there is any. - /// - internal Graph GetExecutionGraph() + /// + CoverageInfo IRuntimeExtension.GetCoverageInfo() => this.CoverageInfo; + + /// + CoverageGraph IRuntimeExtension.GetCoverageGraph() { - Graph result = null; + CoverageGraph result = null; var builder = this.LogManager.GetLogsOfType() .FirstOrDefault(builder => !builder.CollapseInstances); if (builder != null) @@ -710,14 +743,14 @@ public void RegisterMonitor() this.Runtime.RegisterMonitor(); /// - public void Monitor(Event e) + public void Monitor(Monitor.Event e) where T : Monitor => this.Runtime.Monitor(e); /// /// Invokes the specified with the specified . /// - internal void InvokeMonitor(Type type, Event e, string senderName, string senderType, string senderStateName) => + internal void InvokeMonitor(Type type, Monitor.Event e, string senderName, string senderType, string senderStateName) => this.Runtime.InvokeMonitor(type, e, senderName, senderType, senderStateName); /// @@ -779,10 +812,8 @@ internal void WrapAndThrowException(Exception exception, string s, params object /// public void RemoveLog(IRuntimeLog log) => this.LogManager.RemoveLog(log); - /// - /// Returns a task that completes once all actors reach quiescence. - /// - internal Task WaitUntilQuiescenceAsync() + /// + Task IRuntimeExtension.WaitUntilQuiescenceAsync() { lock (this.QuiescenceSyncObject) { @@ -849,8 +880,8 @@ internal sealed class Mock : ActorExecutionContext /// /// Initializes a new instance of the class. /// - internal Mock(Configuration configuration, CoyoteRuntime runtime, ActorLogManager logManager) - : base(configuration, runtime, logManager) + internal Mock(Configuration configuration, ActorLogManager logManager) + : base(configuration, logManager) { this.ActorIds = new ConcurrentDictionary(); this.NameValueToActorId = new ConcurrentDictionary(); diff --git a/Source/Core/Actors/ActorExecutionStatus.cs b/Source/Actors/Runtime/ActorExecutionStatus.cs similarity index 100% rename from Source/Core/Actors/ActorExecutionStatus.cs rename to Source/Actors/Runtime/ActorExecutionStatus.cs diff --git a/Source/Core/Actors/ActorFactory.cs b/Source/Actors/Runtime/ActorFactory.cs similarity index 100% rename from Source/Core/Actors/ActorFactory.cs rename to Source/Actors/Runtime/ActorFactory.cs diff --git a/Source/Core/Actors/ActorId.cs b/Source/Actors/Runtime/ActorId.cs similarity index 100% rename from Source/Core/Actors/ActorId.cs rename to Source/Actors/Runtime/ActorId.cs diff --git a/Source/Core/Actors/ActorOperation.cs b/Source/Actors/Runtime/ActorOperation.cs similarity index 76% rename from Source/Core/Actors/ActorOperation.cs rename to Source/Actors/Runtime/ActorOperation.cs index 09410c95c..1a2dd0e61 100644 --- a/Source/Core/Actors/ActorOperation.cs +++ b/Source/Actors/Runtime/ActorOperation.cs @@ -25,6 +25,15 @@ internal ActorOperation(ulong operationId, string name, Actor actor, CoyoteRunti } /// - internal override int GetHashedState(SchedulingPolicy policy) => this.Actor.GetHashedState(policy); + internal override int GetHashedState(SchedulingPolicy policy) + { + unchecked + { + var hash = 19; + hash = (hash * 31) + this.Actor.GetHashedState(policy); + hash = (hash * 31) + base.GetHashedState(policy); + return hash; + } + } } } diff --git a/Source/Core/Actors/IActorRuntime.cs b/Source/Actors/Runtime/IActorRuntime.cs similarity index 100% rename from Source/Core/Actors/IActorRuntime.cs rename to Source/Actors/Runtime/IActorRuntime.cs diff --git a/Source/Core/Actors/NameResolver.cs b/Source/Actors/Runtime/NameResolver.cs similarity index 100% rename from Source/Core/Actors/NameResolver.cs rename to Source/Actors/Runtime/NameResolver.cs diff --git a/Source/Core/Actors/RuntimeFactory.cs b/Source/Actors/Runtime/RuntimeFactory.cs similarity index 67% rename from Source/Core/Actors/RuntimeFactory.cs rename to Source/Actors/Runtime/RuntimeFactory.cs index 0960ce027..18bdd8d12 100644 --- a/Source/Core/Actors/RuntimeFactory.cs +++ b/Source/Actors/Runtime/RuntimeFactory.cs @@ -35,13 +35,24 @@ public static IActorRuntime Create(Configuration configuration) configuration ??= Configuration.Create(); var logWriter = new LogWriter(configuration); var logManager = CreateLogManager(logWriter); - return Runtime.RuntimeProvider.CreateAndInstall(configuration, logWriter, logManager).DefaultActorExecutionContext; + + var actorRuntime = new ActorExecutionContext(configuration, logManager); + var runtime = Runtime.RuntimeProvider.CreateAndInstall(configuration, logWriter, logManager, actorRuntime); + return actorRuntime.WithRuntime(runtime); } + /// + /// Creates a new actor runtime with the specified for the specified . + /// + internal static ActorExecutionContext Create(Configuration configuration, ActorLogManager logManager, SchedulingPolicy schedulingPolicy) => + schedulingPolicy is SchedulingPolicy.Interleaving ? + new ActorExecutionContext.Mock(configuration, logManager) : + new ActorExecutionContext(configuration, logManager); + /// /// Creates a new runtime log manager that writes to the specified log writer. /// - internal static LogManager CreateLogManager(LogWriter logWriter) + internal static ActorLogManager CreateLogManager(LogWriter logWriter) { var logManager = new ActorLogManager(); logManager.RegisterLog(new ActorRuntimeLogTextFormatter(), logWriter); diff --git a/Source/Core/Actors/SendOptions.cs b/Source/Actors/Runtime/SendOptions.cs similarity index 100% rename from Source/Core/Actors/SendOptions.cs rename to Source/Actors/Runtime/SendOptions.cs diff --git a/Source/Core/Actors/StateMachine.cs b/Source/Actors/Runtime/StateMachine.cs similarity index 99% rename from Source/Core/Actors/StateMachine.cs rename to Source/Actors/Runtime/StateMachine.cs index 61b126f18..d67d04c94 100644 --- a/Source/Core/Actors/StateMachine.cs +++ b/Source/Actors/Runtime/StateMachine.cs @@ -990,7 +990,7 @@ private void ExtractStateTypes(Type type) } /// - internal override void ReportActivityCoverage(CoverageInfo coverageInfo) + internal override void ReportActivityCoverage(ActorCoverageInfo coverageInfo) { var name = this.GetType().FullName; if (coverageInfo.IsMachineDeclared(name)) @@ -1000,7 +1000,7 @@ internal override void ReportActivityCoverage(CoverageInfo coverageInfo) this.Assert(StateInstanceCache.ContainsKey(this.GetType()), "{0} has not populated its states yet.", this.Id); - // Fetch states. + // Fetch the machine states. var states = new HashSet(); foreach (var state in StateInstanceCache[this.GetType()]) { @@ -1012,7 +1012,7 @@ internal override void ReportActivityCoverage(CoverageInfo coverageInfo) coverageInfo.DeclareMachineState(name, state); } - // Fetch registered events. + // Fetch the registered events. var pairs = new HashSet>(); foreach (var state in StateInstanceCache[this.GetType()]) { @@ -1026,7 +1026,7 @@ where IncludeInCoverage(b.Value) foreach (var tup in pairs) { - coverageInfo.DeclareStateEvent(name, tup.Item1, tup.Item2); + coverageInfo.DeclareMachineStateEventPair(name, tup.Item1, tup.Item2); } } diff --git a/Source/Core/Actors/SharedObjects/Events/SharedCounterEvent.cs b/Source/Actors/SharedObjects/Events/SharedCounterEvent.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/Events/SharedCounterEvent.cs rename to Source/Actors/SharedObjects/Events/SharedCounterEvent.cs diff --git a/Source/Core/Actors/SharedObjects/Events/SharedCounterResponseEvent.cs b/Source/Actors/SharedObjects/Events/SharedCounterResponseEvent.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/Events/SharedCounterResponseEvent.cs rename to Source/Actors/SharedObjects/Events/SharedCounterResponseEvent.cs diff --git a/Source/Core/Actors/SharedObjects/Events/SharedDictionaryEvent.cs b/Source/Actors/SharedObjects/Events/SharedDictionaryEvent.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/Events/SharedDictionaryEvent.cs rename to Source/Actors/SharedObjects/Events/SharedDictionaryEvent.cs diff --git a/Source/Core/Actors/SharedObjects/Events/SharedDictionaryResponseEvent.cs b/Source/Actors/SharedObjects/Events/SharedDictionaryResponseEvent.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/Events/SharedDictionaryResponseEvent.cs rename to Source/Actors/SharedObjects/Events/SharedDictionaryResponseEvent.cs diff --git a/Source/Core/Actors/SharedObjects/Events/SharedRegisterEvent.cs b/Source/Actors/SharedObjects/Events/SharedRegisterEvent.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/Events/SharedRegisterEvent.cs rename to Source/Actors/SharedObjects/Events/SharedRegisterEvent.cs diff --git a/Source/Core/Actors/SharedObjects/Events/SharedRegisterResponseEvent.cs b/Source/Actors/SharedObjects/Events/SharedRegisterResponseEvent.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/Events/SharedRegisterResponseEvent.cs rename to Source/Actors/SharedObjects/Events/SharedRegisterResponseEvent.cs diff --git a/Source/Core/Actors/SharedObjects/SharedCounter.cs b/Source/Actors/SharedObjects/SharedCounter.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/SharedCounter.cs rename to Source/Actors/SharedObjects/SharedCounter.cs diff --git a/Source/Core/Actors/SharedObjects/SharedCounterActor.cs b/Source/Actors/SharedObjects/SharedCounterActor.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/SharedCounterActor.cs rename to Source/Actors/SharedObjects/SharedCounterActor.cs diff --git a/Source/Core/Actors/SharedObjects/SharedDictionary.cs b/Source/Actors/SharedObjects/SharedDictionary.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/SharedDictionary.cs rename to Source/Actors/SharedObjects/SharedDictionary.cs diff --git a/Source/Core/Actors/SharedObjects/SharedDictionaryActor.cs b/Source/Actors/SharedObjects/SharedDictionaryActor.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/SharedDictionaryActor.cs rename to Source/Actors/SharedObjects/SharedDictionaryActor.cs diff --git a/Source/Core/Actors/SharedObjects/SharedRegister.cs b/Source/Actors/SharedObjects/SharedRegister.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/SharedRegister.cs rename to Source/Actors/SharedObjects/SharedRegister.cs diff --git a/Source/Core/Actors/SharedObjects/SharedRegisterActor.cs b/Source/Actors/SharedObjects/SharedRegisterActor.cs similarity index 100% rename from Source/Core/Actors/SharedObjects/SharedRegisterActor.cs rename to Source/Actors/SharedObjects/SharedRegisterActor.cs diff --git a/Source/Core/Actors/StateTransitions/GotoStateTransition.cs b/Source/Actors/StateTransitions/GotoStateTransition.cs similarity index 100% rename from Source/Core/Actors/StateTransitions/GotoStateTransition.cs rename to Source/Actors/StateTransitions/GotoStateTransition.cs diff --git a/Source/Core/Actors/StateTransitions/PushStateTransition.cs b/Source/Actors/StateTransitions/PushStateTransition.cs similarity index 100% rename from Source/Core/Actors/StateTransitions/PushStateTransition.cs rename to Source/Actors/StateTransitions/PushStateTransition.cs diff --git a/Source/Core/Actors/Timers/ActorTimer.cs b/Source/Actors/Timers/ActorTimer.cs similarity index 100% rename from Source/Core/Actors/Timers/ActorTimer.cs rename to Source/Actors/Timers/ActorTimer.cs diff --git a/Source/Core/Actors/Timers/IActorTimer.cs b/Source/Actors/Timers/IActorTimer.cs similarity index 100% rename from Source/Core/Actors/Timers/IActorTimer.cs rename to Source/Actors/Timers/IActorTimer.cs diff --git a/Source/Core/Actors/Timers/MockStateMachineTimer.cs b/Source/Actors/Timers/MockStateMachineTimer.cs similarity index 100% rename from Source/Core/Actors/Timers/MockStateMachineTimer.cs rename to Source/Actors/Timers/MockStateMachineTimer.cs diff --git a/Source/Core/Actors/Timers/TimerElapsedEvent.cs b/Source/Actors/Timers/TimerElapsedEvent.cs similarity index 100% rename from Source/Core/Actors/Timers/TimerElapsedEvent.cs rename to Source/Actors/Timers/TimerElapsedEvent.cs diff --git a/Source/Core/Actors/Timers/TimerInfo.cs b/Source/Actors/Timers/TimerInfo.cs similarity index 100% rename from Source/Core/Actors/Timers/TimerInfo.cs rename to Source/Actors/Timers/TimerInfo.cs diff --git a/Source/Core/Actors/Timers/TimerSetupEvent.cs b/Source/Actors/Timers/TimerSetupEvent.cs similarity index 100% rename from Source/Core/Actors/Timers/TimerSetupEvent.cs rename to Source/Actors/Timers/TimerSetupEvent.cs diff --git a/Source/Core/Actors/Coverage/ActivityCoverageReporter.cs b/Source/Core/Actors/Coverage/ActivityCoverageReporter.cs deleted file mode 100644 index 100c69bf1..000000000 --- a/Source/Core/Actors/Coverage/ActivityCoverageReporter.cs +++ /dev/null @@ -1,318 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace Microsoft.Coyote.Actors.Coverage -{ - /// - /// Reports actor activity coverage. - /// - internal class ActivityCoverageReporter - { - /// - /// Data structure containing information - /// regarding testing coverage. - /// - private readonly CoverageInfo CoverageInfo; - - /// - /// Set of built in events which we hide in the coverage report. - /// - private readonly HashSet BuiltInEvents = new HashSet(); - - /// - /// Initializes a new instance of the class. - /// - public ActivityCoverageReporter(CoverageInfo coverageInfo) - { - this.CoverageInfo = coverageInfo; - this.BuiltInEvents.Add(typeof(GotoStateEvent).FullName); - this.BuiltInEvents.Add(typeof(PushStateEvent).FullName); - this.BuiltInEvents.Add(typeof(DefaultEvent).FullName); - } - - /// - /// Emits the visualization graph. - /// - public void EmitVisualizationGraph(string graphFile) - { - if (this.CoverageInfo.CoverageGraph != null) - { - this.CoverageInfo.CoverageGraph.SaveDgml(graphFile, true); - } - } - - /// - /// Emits the code coverage report. - /// - public void EmitCoverageReport(string coverageFile) - { - using var writer = new StreamWriter(coverageFile); - this.WriteCoverageText(writer); - } - - /// - /// Return all events represented by this link. - /// - private static IEnumerable GetEventIds(GraphLink link) - { - if (link.AttributeLists != null) - { - // a collapsed edge graph - if (link.AttributeLists.TryGetValue("EventIds", out HashSet idList)) - { - return idList; - } - } - - // a fully expanded edge graph has individual links for each event. - if (link.Attributes.TryGetValue("EventId", out string eventId)) - { - return new string[] { eventId }; - } - - return Array.Empty(); - } - - /// - /// Writes the visualization text. - /// - internal void WriteCoverageText(TextWriter writer) - { - var machines = new List(this.CoverageInfo.Machines); - machines.Sort(StringComparer.Ordinal); - - var machineTypes = new Dictionary(); - - bool hasExternalSource = false; - string externalSrcId = "ExternalCode"; - - // look for any external source links. - foreach (var link in this.CoverageInfo.CoverageGraph.Links) - { - string srcId = link.Source.Id; - if (srcId == externalSrcId && !hasExternalSource) - { - machines.Add(srcId); - hasExternalSource = true; - } - } - - foreach (var node in this.CoverageInfo.CoverageGraph.Nodes) - { - string id = node.Id; - if (machines.Contains(id)) - { - machineTypes[id] = node.Category ?? "StateMachine"; - } - } - - // (machines + "." + states => registered events - var uncoveredEvents = new Dictionary>(); - foreach (var item in this.CoverageInfo.RegisteredEvents) - { - uncoveredEvents[item.Key] = new HashSet(item.Value); - } - - int totalEvents = (from h in uncoveredEvents select h.Value.Count).Sum(); - - // Now use the graph to find incoming links to each state and remove those from the list of uncovered events. - this.RemoveCoveredEvents(uncoveredEvents); - - int totalUncoveredEvents = (from h in uncoveredEvents select h.Value.Count).Sum(); - - string eventCoverage = totalEvents is 0 ? "100.0" : ((totalEvents - totalUncoveredEvents) * 100.0 / totalEvents).ToString("F1"); - - WriteHeader(writer, string.Format("Total event coverage: {0}%", eventCoverage)); - - // Per-machine data. - foreach (var machine in machines) - { - machineTypes.TryGetValue(machine, out string machineType); - WriteHeader(writer, string.Format("{0}: {1}", machineType, machine)); - - // find all possible events for this machine. - var uncoveredMachineEvents = new Dictionary>(); - var allMachineEvents = new Dictionary>(); - - foreach (var item in this.CoverageInfo.RegisteredEvents) - { - var id = GetMachineId(item.Key); - if (id == machine) - { - uncoveredMachineEvents[item.Key] = new HashSet(item.Value); - allMachineEvents[item.Key] = new HashSet(item.Value); - } - } - - // Now use the graph to find incoming links to each state in this machine and remove those from the list of uncovered events. - this.RemoveCoveredEvents(uncoveredMachineEvents); - - int totalMachineEvents = (from h in allMachineEvents select h.Value.Count).Sum(); - var totalUncoveredMachineEvents = (from h in uncoveredMachineEvents select h.Value.Count).Sum(); - - eventCoverage = totalMachineEvents is 0 ? "100.0" : ((totalMachineEvents - totalUncoveredMachineEvents) * 100.0 / totalMachineEvents).ToString("F1"); - writer.WriteLine("Event coverage: {0}%", eventCoverage); - - if (!this.CoverageInfo.MachinesToStates.ContainsKey(machine)) - { - this.CoverageInfo.MachinesToStates[machine] = new HashSet(new string[] { "ExternalState" }); - } - - // Per-state data. - foreach (var state in this.CoverageInfo.MachinesToStates[machine]) - { - var key = machine + "." + state; - int totalStateEvents = (from h in allMachineEvents where h.Key == key select h.Value.Count).Sum(); - int uncoveredStateEvents = (from h in uncoveredMachineEvents where h.Key == key select h.Value.Count).Sum(); - - writer.WriteLine(); - writer.WriteLine("\tState: {0}{1}", state, totalStateEvents > 0 && totalStateEvents == uncoveredStateEvents ? " is uncovered" : string.Empty); - if (totalStateEvents is 0) - { - writer.WriteLine("\t\tState has no expected events, so coverage is 100%"); - } - else if (totalStateEvents != uncoveredStateEvents) - { - eventCoverage = totalStateEvents is 0 ? "100.0" : ((totalStateEvents - uncoveredStateEvents) * 100.0 / totalStateEvents).ToString("F1"); - writer.WriteLine("\t\tState event coverage: {0}%", eventCoverage); - } - - // Now use the graph to find incoming links to each state in this machine - HashSet stateIncomingStates = new HashSet(); - HashSet stateOutgoingStates = new HashSet(); - foreach (var link in this.CoverageInfo.CoverageGraph.Links) - { - if (link.Category != "Contains") - { - string srcId = link.Source.Id; - string srcMachine = GetMachineId(srcId); - string targetId = link.Target.Id; - string targetMachine = GetMachineId(targetId); - bool intraMachineTransition = targetMachine == machine && srcMachine == machine; - if (intraMachineTransition) - { - foreach (string id in GetEventIds(link)) - { - if (targetId == key) - { - // we want to show incoming/outgoing states within the current machine only. - stateIncomingStates.Add(GetStateName(srcId)); - } - - if (srcId == key) - { - // we want to show incoming/outgoing states within the current machine only. - stateOutgoingStates.Add(GetStateName(targetId)); - } - } - } - } - } - - HashSet received = new HashSet(this.CoverageInfo.EventInfo.GetEventsReceived(key)); - this.RemoveBuiltInEvents(received); - - if (received.Count > 0) - { - writer.WriteLine("\t\tEvents received: {0}", string.Join(", ", SortHashSet(received))); - } - - HashSet sent = new HashSet(this.CoverageInfo.EventInfo.GetEventsSent(key)); - this.RemoveBuiltInEvents(sent); - - if (sent.Count > 0) - { - writer.WriteLine("\t\tEvents sent: {0}", string.Join(", ", SortHashSet(sent))); - } - - var stateUncoveredEvents = (from h in uncoveredMachineEvents where h.Key == key select h.Value).FirstOrDefault(); - if (stateUncoveredEvents != null && stateUncoveredEvents.Count > 0) - { - writer.WriteLine("\t\tEvents not covered: {0}", string.Join(", ", SortHashSet(stateUncoveredEvents))); - } - - if (stateIncomingStates.Count > 0) - { - writer.WriteLine("\t\tPrevious states: {0}", string.Join(", ", SortHashSet(stateIncomingStates))); - } - - if (stateOutgoingStates.Count > 0) - { - writer.WriteLine("\t\tNext states: {0}", string.Join(", ", SortHashSet(stateOutgoingStates))); - } - } - - writer.WriteLine(); - } - } - - private void RemoveBuiltInEvents(HashSet eventList) - { - foreach (var name in eventList.ToArray()) - { - if (this.BuiltInEvents.Contains(name)) - { - eventList.Remove(name); - } - } - } - - /// - /// Remove all events from expectedEvent that are found in the graph. - /// - /// The list of all expected events organized by unique state Id. - private void RemoveCoveredEvents(Dictionary> expectedEvents) - { - foreach (var pair in expectedEvents) - { - string stateId = pair.Key; - var eventSet = pair.Value; - - foreach (var e in this.CoverageInfo.EventInfo.GetEventsReceived(stateId)) - { - eventSet.Remove(e); - } - } - } - - private static List SortHashSet(HashSet items) - { - List sorted = new List(items); - sorted.Sort(StringComparer.Ordinal); - return sorted; - } - - private static string GetStateName(string nodeId) - { - int i = nodeId.LastIndexOf("."); - if (i > 0) - { - return nodeId.Substring(i + 1); - } - - return nodeId; - } - - private static void WriteHeader(TextWriter writer, string header) - { - writer.WriteLine(header); - writer.WriteLine(new string('=', header.Length)); - } - - private static string GetMachineId(string nodeId) - { - int i = nodeId.LastIndexOf("."); - if (i > 0) - { - return nodeId.Substring(0, i); - } - - return nodeId; - } - } -} diff --git a/Source/Core/Actors/Coverage/CoverageInfo.cs b/Source/Core/Actors/Coverage/CoverageInfo.cs deleted file mode 100644 index bc18cf54a..000000000 --- a/Source/Core/Actors/Coverage/CoverageInfo.cs +++ /dev/null @@ -1,183 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -using System.Collections.Generic; -using System.IO; -using System.Runtime.Serialization; -using System.Xml; - -namespace Microsoft.Coyote.Actors.Coverage -{ - /// - /// Class for storing actor coverage-specific data across multiple testing iterations. - /// - [DataContract] - public class CoverageInfo - { - /// - /// Set of known machines. - /// - [DataMember] - public HashSet Machines { get; private set; } - - /// - /// Map from machines to set of all states states defined in that machine. - /// - [DataMember] - public Dictionary> MachinesToStates { get; private set; } - - /// - /// Set of (machine + "." + state => registered events). So all events that can - /// get us into each state. - /// - [DataMember] - public Dictionary> RegisteredEvents { get; private set; } - - /// - /// The coverage graph. - /// - [DataMember] - public Graph CoverageGraph { get; set; } - - /// - /// Information about events sent and received. - /// - [DataMember] - public EventCoverage EventInfo { get; set; } - - /// - /// Initializes a new instance of the class. - /// - public CoverageInfo() - { - this.Machines = new HashSet(); - this.MachinesToStates = new Dictionary>(); - this.RegisteredEvents = new Dictionary>(); - } - - /// - /// Checks if the machine type has already been registered for coverage. - /// - public bool IsMachineDeclared(string machineName) => this.MachinesToStates.ContainsKey(machineName); - - /// - /// Declares a state. - /// - public void DeclareMachineState(string machine, string state) => this.AddState(machine, state); - - /// - /// Declares a registered state, event pair. - /// - public void DeclareStateEvent(string machine, string state, string eventName) - { - this.AddState(machine, state); - - string key = machine + "." + state; - this.InternalAddEvent(key, eventName); - } - - private void InternalAddEvent(string key, string eventName) - { - if (!this.RegisteredEvents.ContainsKey(key)) - { - this.RegisteredEvents.Add(key, new HashSet()); - } - - this.RegisteredEvents[key].Add(eventName); - } - - /// - /// Merges the information from the specified coverage info. This is not thread-safe. - /// - public void Merge(CoverageInfo coverageInfo) - { - foreach (var machine in coverageInfo.Machines) - { - this.Machines.Add(machine); - } - - foreach (var machine in coverageInfo.MachinesToStates) - { - foreach (var state in machine.Value) - { - this.DeclareMachineState(machine.Key, state); - } - } - - foreach (var tup in coverageInfo.RegisteredEvents) - { - foreach (var e in tup.Value) - { - this.InternalAddEvent(tup.Key, e); - } - } - - if (this.CoverageGraph is null) - { - this.CoverageGraph = coverageInfo.CoverageGraph; - } - else if (coverageInfo.CoverageGraph != null && this.CoverageGraph != coverageInfo.CoverageGraph) - { - this.CoverageGraph.Merge(coverageInfo.CoverageGraph); - } - - if (this.EventInfo is null) - { - this.EventInfo = coverageInfo.EventInfo; - } - else if (coverageInfo.EventInfo != null && this.EventInfo != coverageInfo.EventInfo) - { - this.EventInfo.Merge(coverageInfo.EventInfo); - } - } - - /// - /// Adds a new state. - /// - private void AddState(string machineName, string stateName) - { - this.Machines.Add(machineName); - - if (!this.MachinesToStates.ContainsKey(machineName)) - { - this.MachinesToStates.Add(machineName, new HashSet()); - } - - this.MachinesToStates[machineName].Add(stateName); - } - - /// - /// Load the given Coverage info file. - /// - /// Path to the file to load. - /// The deserialized coverage info. - public static CoverageInfo Load(string filename) - { - using var fs = new FileStream(filename, FileMode.Open); - using var reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()); - DataContractSerializerSettings settings = new DataContractSerializerSettings - { - PreserveObjectReferences = true - }; - - var ser = new DataContractSerializer(typeof(CoverageInfo), settings); - return (CoverageInfo)ser.ReadObject(reader, true); - } - - /// - /// Save the coverage info to the given XML file. - /// - /// The path to the file to create. - public void Save(string serFilePath) - { - using var fs = new FileStream(serFilePath, FileMode.Create); - DataContractSerializerSettings settings = new DataContractSerializerSettings - { - PreserveObjectReferences = true - }; - - var ser = new DataContractSerializer(typeof(CoverageInfo), settings); - ser.WriteObject(fs, this); - } - } -} diff --git a/Source/Core/Core.csproj b/Source/Core/Core.csproj index bfa4f59cc..8a85f683a 100644 --- a/Source/Core/Core.csproj +++ b/Source/Core/Core.csproj @@ -3,7 +3,7 @@ The Coyote core libraries and runtime. Microsoft.Coyote Microsoft.Coyote - asynchronous;actors;state-machines;tasks;systematic-testing + systematic-testing;concurrency;tasks;dotnet;csharp ..\..\bin\ false diff --git a/Source/Core/Coverage/ActivityCoverageReporter.cs b/Source/Core/Coverage/ActivityCoverageReporter.cs new file mode 100644 index 000000000..a999f9a86 --- /dev/null +++ b/Source/Core/Coverage/ActivityCoverageReporter.cs @@ -0,0 +1,294 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using SpecMonitor = Microsoft.Coyote.Specifications.Monitor; + +namespace Microsoft.Coyote.Coverage +{ + /// + /// Reports activity coverage. + /// + internal class ActivityCoverageReporter + { + /// + /// Data structure containing information regarding testing coverage. + /// + private readonly CoverageInfo CoverageInfo; + + /// + /// Set of built in events which we hide in the coverage report. + /// + private readonly HashSet BuiltInEvents = new HashSet(); + + /// + /// Initializes a new instance of the class. + /// + public ActivityCoverageReporter(CoverageInfo coverageInfo) + { + this.CoverageInfo = coverageInfo; + this.BuiltInEvents.Add(typeof(SpecMonitor.GotoStateEvent).FullName); + this.BuiltInEvents.Add(typeof(SpecMonitor.DefaultEvent).FullName); + } + + /// + /// Emits the visualization graph. + /// + public void EmitVisualizationGraph(string graphFile) => + this.CoverageInfo.CoverageGraph?.SaveDgml(graphFile, true); + + /// + /// Emits the activity coverage report. + /// + public void EmitCoverageReport(string coverageFile) + { + using var writer = new StreamWriter(coverageFile); + this.WriteCoverageText(writer); + } + + /// + /// Emits the activity coverage report. + /// + internal virtual void WriteCoverageText(TextWriter writer) + { + var monitors = new List(this.CoverageInfo.Monitors); + monitors.Sort(StringComparer.Ordinal); + + var monitorTypes = new Dictionary(); + foreach (var node in this.CoverageInfo.CoverageGraph.Nodes) + { + string id = node.Id; + if (monitors.Contains(id)) + { + monitorTypes[id] = node.Category ?? "Monitor"; + } + } + + // monitors + "." + states => registered monitor events + var uncoveredEvents = new Dictionary>(); + foreach (var item in this.CoverageInfo.RegisteredMonitorEvents) + { + uncoveredEvents[item.Key] = new HashSet(item.Value); + } + + int totalEvents = (from h in uncoveredEvents select h.Value.Count).Sum(); + + // Now use the graph to find incoming links to each state and remove those from the list of uncovered monitor events. + this.RemoveCoveredEvents(uncoveredEvents); + + int totalUncoveredEvents = (from h in uncoveredEvents select h.Value.Count).Sum(); + string eventCoverage = totalEvents is 0 ? "100.0" : ((totalEvents - totalUncoveredEvents) * 100.0 / totalEvents).ToString("F1"); + + if (monitors.Count > 0) + { + WriteHeader(writer, string.Format("Total specification monitor coverage: {0}%", eventCoverage)); + foreach (var monitor in monitors) + { + monitorTypes.TryGetValue(monitor, out string monitorType); + WriteHeader(writer, string.Format("{0}: {1}", monitorType, monitor)); + + // Find all possible events for this specification monitor. + var uncoveredMonitorEvents = new Dictionary>(); + var allMonitorEvents = new Dictionary>(); + foreach (var item in this.CoverageInfo.RegisteredMonitorEvents) + { + var id = GetMonitorId(item.Key); + if (id == monitor) + { + uncoveredMonitorEvents[item.Key] = new HashSet(item.Value); + allMonitorEvents[item.Key] = new HashSet(item.Value); + } + } + + // Now use the graph to find incoming links to each state in this specification monitor + // and remove those from the list of uncovered events. + this.RemoveCoveredEvents(uncoveredMonitorEvents); + + int totalMonitorEvents = (from h in allMonitorEvents select h.Value.Count).Sum(); + var totalUncoveredMonitorEvents = (from h in uncoveredMonitorEvents select h.Value.Count).Sum(); + + eventCoverage = totalMonitorEvents is 0 ? "100.0" : ((totalMonitorEvents - totalUncoveredMonitorEvents) * 100.0 / totalMonitorEvents).ToString("F1"); + writer.WriteLine("Event coverage: {0}%", eventCoverage); + + foreach (var state in this.CoverageInfo.MonitorsToStates[monitor]) + { + var key = monitor + "." + state; + int totalStateEvents = (from h in allMonitorEvents where h.Key == key select h.Value.Count).Sum(); + int uncoveredStateEvents = (from h in uncoveredMonitorEvents where h.Key == key select h.Value.Count).Sum(); + + writer.WriteLine(); + writer.WriteLine("\tState: {0}{1}", state, totalStateEvents > 0 && totalStateEvents == uncoveredStateEvents ? " is uncovered" : string.Empty); + if (totalStateEvents is 0) + { + writer.WriteLine("\t\tState has no expected events, so coverage is 100%"); + } + else if (totalStateEvents != uncoveredStateEvents) + { + eventCoverage = totalStateEvents is 0 ? "100.0" : ((totalStateEvents - uncoveredStateEvents) * 100.0 / totalStateEvents).ToString("F1"); + writer.WriteLine("\t\tState event coverage: {0}%", eventCoverage); + } + + // Now use the graph to find incoming links to each state in this monitor. + HashSet stateIncomingStates = new HashSet(); + HashSet stateOutgoingStates = new HashSet(); + foreach (var link in this.CoverageInfo.CoverageGraph.Links) + { + if (link.Category != "Contains") + { + string srcId = link.Source.Id; + string srcMonitor = GetMonitorId(srcId); + string targetId = link.Target.Id; + string targetMonitor = GetMonitorId(targetId); + bool intraMonitorTransition = targetMonitor == monitor && srcMonitor == monitor; + if (intraMonitorTransition) + { + foreach (string id in GetEventIds(link)) + { + if (targetId == key) + { + // We want to show incoming/outgoing states within the current monitor only. + stateIncomingStates.Add(GetStateName(srcId)); + } + + if (srcId == key) + { + // We want to show incoming/outgoing states within the current monitor only. + stateOutgoingStates.Add(GetStateName(targetId)); + } + } + } + } + } + + HashSet processed = new HashSet(this.CoverageInfo.MonitorEventInfo.GetEventsProcessed(key)); + this.RemoveBuiltInEvents(processed); + if (processed.Count > 0) + { + writer.WriteLine("\t\tEvents processed: {0}", string.Join(", ", SortHashSet(processed))); + } + + HashSet raised = new HashSet(this.CoverageInfo.MonitorEventInfo.GetEventsRaised(key)); + this.RemoveBuiltInEvents(raised); + if (raised.Count > 0) + { + writer.WriteLine("\t\tEvents raised: {0}", string.Join(", ", SortHashSet(raised))); + } + + var stateUncoveredEvents = (from h in uncoveredMonitorEvents where h.Key == key select h.Value).FirstOrDefault(); + if (stateUncoveredEvents != null && stateUncoveredEvents.Count > 0) + { + writer.WriteLine("\t\tEvents not covered: {0}", string.Join(", ", SortHashSet(stateUncoveredEvents))); + } + + if (stateIncomingStates.Count > 0) + { + writer.WriteLine("\t\tPrevious states: {0}", string.Join(", ", SortHashSet(stateIncomingStates))); + } + + if (stateOutgoingStates.Count > 0) + { + writer.WriteLine("\t\tNext states: {0}", string.Join(", ", SortHashSet(stateOutgoingStates))); + } + } + + writer.WriteLine(); + } + } + else + { + WriteHeader(writer, "Total specification monitor coverage: N/A"); + } + } + + private void RemoveBuiltInEvents(HashSet eventList) + { + foreach (var name in eventList.ToArray()) + { + if (this.BuiltInEvents.Contains(name)) + { + eventList.Remove(name); + } + } + } + + /// + /// Remove all events from expectedEvent that are found in the graph. + /// + /// The list of all expected events organized by unique state id. + private void RemoveCoveredEvents(Dictionary> expectedEvents) + { + foreach (var pair in expectedEvents) + { + string stateId = pair.Key; + var eventSet = pair.Value; + + foreach (var e in this.CoverageInfo.MonitorEventInfo.GetEventsProcessed(stateId)) + { + eventSet.Remove(e); + } + } + } + + protected static List SortHashSet(HashSet items) + { + List sorted = new List(items); + sorted.Sort(StringComparer.Ordinal); + return sorted; + } + + protected static string GetStateName(string nodeId) + { + int i = nodeId.LastIndexOf("."); + if (i > 0) + { + return nodeId.Substring(i + 1); + } + + return nodeId; + } + + /// + /// Return all events represented by this link. + /// + protected static IEnumerable GetEventIds(CoverageGraph.Link link) + { + if (link.AttributeLists != null) + { + // A collapsed edge graph + if (link.AttributeLists.TryGetValue("EventIds", out HashSet idList)) + { + return idList; + } + } + + // A fully expanded edge graph has individual links for each event. + if (link.Attributes.TryGetValue("EventId", out string eventId)) + { + return new string[] { eventId }; + } + + return Array.Empty(); + } + + protected static void WriteHeader(TextWriter writer, string header) + { + writer.WriteLine(new string('=', header.Length)); + writer.WriteLine(header); + writer.WriteLine(new string('=', header.Length)); + } + + private static string GetMonitorId(string nodeId) + { + int i = nodeId.LastIndexOf("."); + if (i > 0) + { + return nodeId.Substring(0, i); + } + + return nodeId; + } + } +} diff --git a/Source/Core/Coverage/CoverageGraph.cs b/Source/Core/Coverage/CoverageGraph.cs new file mode 100644 index 000000000..85fe1921d --- /dev/null +++ b/Source/Core/Coverage/CoverageGraph.cs @@ -0,0 +1,584 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Xml.Linq; + +namespace Microsoft.Coyote.Coverage +{ + /// + /// A directed graph made up of and objects. + /// + [DataContract] + public class CoverageGraph + { + internal const string DgmlNamespace = "http://schemas.microsoft.com/vs/2009/dgml"; + + [DataMember] + private readonly Dictionary InternalNodes = new Dictionary(); + + [DataMember] + private readonly Dictionary InternalLinks = new Dictionary(); + + /// + /// Last used index for simple link key "a->b". + /// + [DataMember] + private readonly Dictionary InternalNextLinkIndex = new Dictionary(); + + /// + /// Maps an augmented link key to the index that has been allocated for that link id "a->b(goto)" => 0. + /// + [DataMember] + private readonly Dictionary InternalAllocatedLinkIndexes = new Dictionary(); + + [DataMember] + private readonly Dictionary InternalAllocatedLinkIds = new Dictionary(); + + /// + /// Returns the current list of nodes (in no particular order). + /// + public IEnumerable Nodes + { + get { return this.InternalNodes.Values; } + } + + /// + /// Returns the current list of links (in no particular order). + /// + public IEnumerable Links + { + get + { + if (this.InternalLinks is null) + { + return Array.Empty(); + } + + return this.InternalLinks.Values; + } + } + + /// + /// Gets an existing node or null. + /// + /// The id of the node. + public Node GetNode(string id) + { + this.InternalNodes.TryGetValue(id, out Node node); + return node; + } + + /// + /// Gets an existing node or create a new one with the given id and label. + /// + /// Returns the new node or the existing node if it was already defined. + public Node GetOrCreateNode(string id, string label = null, string category = null) + { + if (!this.InternalNodes.TryGetValue(id, out Node node)) + { + node = new Node(id, label, category); + this.InternalNodes.Add(id, node); + } + + return node; + } + + /// + /// Gets an existing node or create a new one with the given id and label. + /// + /// Returns the new node or the existing node if it was already defined. + private Node GetOrCreateNode(Node newNode) + { + if (!this.InternalNodes.ContainsKey(newNode.Id)) + { + this.InternalNodes.Add(newNode.Id, newNode); + } + + return newNode; + } + + /// + /// Gets an existing link or create a new one connecting the given source and target nodes. + /// + /// The new link or the existing link if it was already defined. + public Link GetOrCreateLink(Node source, Node target, int? index = null, string linkLabel = null, string category = null) + { + string key = source.Id + "->" + target.Id; + if (index.HasValue) + { + key += string.Format("({0})", index.Value); + } + + if (!this.InternalLinks.TryGetValue(key, out Link link)) + { + link = new Link(source, target, linkLabel, category); + if (index.HasValue) + { + link.Index = index.Value; + } + + this.InternalLinks.Add(key, link); + } + + return link; + } + + internal int GetUniqueLinkIndex(Node source, Node target, string id) + { + // The augmented key. + string key = string.Format("{0}->{1}({2})", source.Id, target.Id, id); + if (this.InternalAllocatedLinkIndexes.TryGetValue(key, out int index)) + { + return index; + } + + // Allocate a new index for the simple key. + var simpleKey = string.Format("{0}->{1}", source.Id, target.Id); + if (this.InternalNextLinkIndex.TryGetValue(simpleKey, out index)) + { + index++; + } + + this.InternalNextLinkIndex[simpleKey] = index; + + // Remember this index has been allocated for this link id. + this.InternalAllocatedLinkIndexes[key] = index; + + // Remember the original id associated with this link index. + key = string.Format("{0}->{1}({2})", source.Id, target.Id, index); + this.InternalAllocatedLinkIds[key] = id; + + return index; + } + + internal void SaveDgml(string graphFilePath, bool includeDefaultStyles) + { + using StreamWriter writer = new StreamWriter(graphFilePath, false, Encoding.UTF8); + this.WriteDgml(writer, includeDefaultStyles); + } + + /// + /// Serializes the to DGML format. + /// + public void WriteDgml(TextWriter writer, bool includeDefaultStyles) + { + writer.WriteLine("", DgmlNamespace); + writer.WriteLine(" "); + + if (this.InternalNodes != null) + { + List nodes = new List(this.InternalNodes.Keys); + nodes.Sort(StringComparer.Ordinal); + foreach (var id in nodes) + { + Node node = this.InternalNodes[id]; + writer.Write(" "); + } + } + + writer.WriteLine(" "); + writer.WriteLine(" "); + + if (this.InternalLinks != null) + { + List links = new List(this.InternalLinks.Keys); + links.Sort(StringComparer.Ordinal); + foreach (var id in links) + { + Link link = this.InternalLinks[id]; + writer.Write(" "); + } + } + + writer.WriteLine(" "); + if (includeDefaultStyles) + { + writer.WriteLine( +@" + + + + + + + "); + } + + writer.WriteLine(""); + } + + /// + /// Loads a DGML formatted file into a new object. + /// + /// Full path to the DGML file. + /// The loaded object. + public static CoverageGraph LoadDgml(string graphFilePath) + { + XDocument doc = XDocument.Load(graphFilePath); + CoverageGraph result = new CoverageGraph(); + var ns = doc.Root.Name.Namespace; + if (ns != DgmlNamespace) + { + throw new InvalidOperationException(string.Format( + "File '{0}' does not contain the DGML namespace", graphFilePath)); + } + + foreach (var e in doc.Root.Element(ns + "Nodes").Elements(ns + "Node")) + { + var id = (string)e.Attribute("Id"); + var label = (string)e.Attribute("Label"); + var category = (string)e.Attribute("Category"); + + Node node = new Node(id, label, category); + node.AddDgmlProperties(e); + result.GetOrCreateNode(node); + } + + foreach (var e in doc.Root.Element(ns + "Links").Elements(ns + "Link")) + { + var srcId = (string)e.Attribute("Source"); + var targetId = (string)e.Attribute("Target"); + var label = (string)e.Attribute("Label"); + var category = (string)e.Attribute("Category"); + var srcNode = result.GetOrCreateNode(srcId); + var targetNode = result.GetOrCreateNode(targetId); + XAttribute indexAttr = e.Attribute("index"); + int? index = null; + if (indexAttr != null) + { + index = (int)indexAttr; + } + + var link = result.GetOrCreateLink(srcNode, targetNode, index, label, category); + link.AddDgmlProperties(e); + } + + return result; + } + + /// + /// Merges the given so that this becomes a superset of both graphs. + /// + /// The new to merge into this . + public void Merge(CoverageGraph other) + { + foreach (var node in other.InternalNodes.Values) + { + var newNode = this.GetOrCreateNode(node.Id, node.Label, node.Category); + newNode.Merge(node); + } + + foreach (var link in other.InternalLinks.Values) + { + var source = this.GetOrCreateNode(link.Source.Id, link.Source.Label, link.Source.Category); + var target = this.GetOrCreateNode(link.Target.Id, link.Target.Label, link.Target.Category); + int? index = null; + if (link.Index.HasValue) + { + // ouch, link indexes cannot be compared across graph instances, we need to assign a new index here. + string key = string.Format("{0}->{1}({2})", source.Id, target.Id, link.Index.Value); + string linkId = other.InternalAllocatedLinkIds[key]; + index = this.GetUniqueLinkIndex(source, target, linkId); + } + + var newLink = this.GetOrCreateLink(source, target, index, link.Label, link.Category); + newLink.Merge(link); + } + } + + /// + /// Serialize the to a DGML formatted string. + /// + public override string ToString() + { + using var writer = new StringWriter(); + this.WriteDgml(writer, false); + return writer.ToString(); + } + + /// + /// A object. + /// + [DataContract] + public class Object + { + /// + /// Optional list of attributes for the node. + /// + [DataMember] + public Dictionary Attributes { get; internal set; } + + /// + /// Optional list of attributes that have a multi-part value. + /// + [DataMember] + public Dictionary> AttributeLists { get; internal set; } + + /// + /// Adds an attribute to the node. + /// + public void AddAttribute(string name, string value) + { + if (this.Attributes is null) + { + this.Attributes = new Dictionary(); + } + + this.Attributes[name] = value; + } + + /// + /// Creates a compound attribute value containing a merged list of unique values. + /// + /// The attribute name. + /// The new value to add to the unique list. + public int AddListAttribute(string key, string value) + { + if (this.AttributeLists is null) + { + this.AttributeLists = new Dictionary>(); + } + + if (!this.AttributeLists.TryGetValue(key, out HashSet list)) + { + list = new HashSet(); + this.AttributeLists[key] = list; + } + + list.Add(value); + return list.Count; + } + + internal void WriteAttributes(TextWriter writer) + { + if (this.Attributes != null) + { + // Creates a more stable output file (can be handy for expected output during testing). + List names = new List(this.Attributes.Keys); + names.Sort(StringComparer.Ordinal); + foreach (string name in names) + { + var value = this.Attributes[name]; + writer.Write(" {0}='{1}'", name, value); + } + } + + if (this.AttributeLists != null) + { + // Creates a more stable output file (can be handy for expected output during testing). + List names = new List(this.AttributeLists.Keys); + names.Sort(StringComparer.Ordinal); + foreach (string name in names) + { + var value = this.AttributeLists[name]; + writer.Write(" {0}='{1}'", name, string.Join(",", value)); + } + } + } + + internal void Merge(Object other) + { + if (other.Attributes != null) + { + foreach (var key in other.Attributes.Keys) + { + this.AddAttribute(key, other.Attributes[key]); + } + } + + if (other.AttributeLists != null) + { + foreach (var key in other.AttributeLists.Keys) + { + foreach (var value in other.AttributeLists[key]) + { + this.AddListAttribute(key, value); + } + } + } + } + } + + /// + /// A node of a . + /// + [DataContract] + public class Node : Object + { + /// + /// The unique id of the node within the . + /// + [DataMember] + public string Id { get; internal set; } + + /// + /// An optional display label for the node (does not need to be unique). + /// + [DataMember] + public string Label { get; internal set; } + + /// + /// An optional category for the node. + /// + [DataMember] + public string Category { get; internal set; } + + /// + /// Initializes a new instance of the class. + /// + public Node(string id, string label, string category) + { + this.Id = id; + this.Label = label; + this.Category = category; + } + + /// + /// Adds additional properties from XML element. + /// + /// An XML element representing the graph node in DGML format. + public void AddDgmlProperties(XElement e) + { + foreach (XAttribute a in e.Attributes()) + { + switch (a.Name.LocalName) + { + case "Id": + case "Label": + case "Category": + break; + default: + this.AddAttribute(a.Name.LocalName, a.Value); + break; + } + } + } + } + + /// + /// A link represents a directed connection between two objects. + /// + [DataContract] + public class Link : Object + { + /// + /// An optional display label for the link. + /// + [DataMember] + public string Label { get; internal set; } + + /// + /// An optional category for the link. The special category "Contains" is reserved for building groups. + /// + [DataMember] + public string Category { get; internal set; } + + /// + /// The source end of the link. + /// + [DataMember] + public Node Source { get; internal set; } + + /// + /// The target end of the link. + /// + [DataMember] + public Node Target { get; internal set; } + + /// + /// The optional link index. + /// + [DataMember] + public int? Index { get; internal set; } + + /// + /// Initializes a new instance of the class. + /// + public Link(Node source, Node target, string label, string category) + { + this.Source = source; + this.Target = target; + this.Label = label; + this.Category = category; + } + + /// + /// Adds additional properties from XML element. + /// + /// An XML element representing the graph node in DGML format. + public void AddDgmlProperties(XElement e) + { + foreach (XAttribute a in e.Attributes()) + { + switch (a.Name.LocalName) + { + case "Source": + case "Target": + case "Label": + case "Category": + break; + default: + this.AddAttribute(a.Name.LocalName, a.Value); + break; + } + } + } + } + } +} diff --git a/Source/Core/Coverage/CoverageInfo.cs b/Source/Core/Coverage/CoverageInfo.cs new file mode 100644 index 000000000..31a52db42 --- /dev/null +++ b/Source/Core/Coverage/CoverageInfo.cs @@ -0,0 +1,187 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; +using System.Xml; + +namespace Microsoft.Coyote.Coverage +{ + /// + /// Class for storing coverage-specific data across multiple testing iterations. + /// + [DataContract] + public class CoverageInfo + { + /// + /// The coverage graph. + /// + [DataMember] + public CoverageGraph CoverageGraph { get; set; } + + /// + /// Set of known specification monitors. + /// + [DataMember] + public HashSet Monitors { get; private set; } + + /// + /// Map from specification monitors to set of all states defined in that monitor. + /// + [DataMember] + public Dictionary> MonitorsToStates { get; private set; } + + /// + /// Set of all all monitor events that can be used for transitioning into each specification monitor state. + /// + /// + /// Set of (specification monitor + "." + state => registered monitor events). + /// + [DataMember] + public Dictionary> RegisteredMonitorEvents { get; private set; } + + /// + /// Information about events received by each specification monitor. + /// + [DataMember] + public MonitorEventCoverage MonitorEventInfo { get; set; } + + /// + /// Initializes a new instance of the class. + /// + public CoverageInfo() + { + this.Monitors = new HashSet(); + this.MonitorsToStates = new Dictionary>(); + this.RegisteredMonitorEvents = new Dictionary>(); + } + + /// + /// Checks if the specification monitor type has already been registered for coverage. + /// + public bool IsMonitorDeclared(string monitorName) => this.MonitorsToStates.ContainsKey(monitorName); + + /// + /// Declares a specification monitor state. + /// + public void DeclareMonitorState(string monitor, string state) => this.AddMonitorState(monitor, state); + + /// + /// Declares a registered specification monitor state-event pair. + /// + public void DeclareMonitorStateEventPair(string monitor, string state, string eventName) + { + this.AddMonitorState(monitor, state); + + string key = monitor + "." + state; + this.AddMonitorEvent(key, eventName); + } + + /// + /// Adds a new specification monitor state. + /// + private void AddMonitorState(string monitorName, string stateName) + { + this.Monitors.Add(monitorName); + if (!this.MonitorsToStates.ContainsKey(monitorName)) + { + this.MonitorsToStates.Add(monitorName, new HashSet()); + } + + this.MonitorsToStates[monitorName].Add(stateName); + } + + /// + /// Adds a new specification monitor event. + /// + private void AddMonitorEvent(string key, string eventName) + { + if (!this.RegisteredMonitorEvents.ContainsKey(key)) + { + this.RegisteredMonitorEvents.Add(key, new HashSet()); + } + + this.RegisteredMonitorEvents[key].Add(eventName); + } + + /// + /// Loads the given coverage info XML file. + /// + /// Path to the file to load. + /// The deserialized coverage info. + public static CoverageInfo Load(string filename) + { + using var fs = new FileStream(filename, FileMode.Open); + using var reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()); + DataContractSerializerSettings settings = new DataContractSerializerSettings + { + PreserveObjectReferences = true + }; + + var ser = new DataContractSerializer(typeof(CoverageInfo), settings); + return (CoverageInfo)ser.ReadObject(reader, true); + } + + /// + /// Saves the coverage info to the given XML file. + /// + /// The path to the file to create. + public void Save(string serFilePath) + { + using var fs = new FileStream(serFilePath, FileMode.Create); + DataContractSerializerSettings settings = new DataContractSerializerSettings + { + PreserveObjectReferences = true + }; + + var ser = new DataContractSerializer(typeof(CoverageInfo), settings); + ser.WriteObject(fs, this); + } + + /// + /// Merges the information from the specified coverage info. This is not thread-safe. + /// + public virtual void Merge(CoverageInfo coverageInfo) + { + foreach (var monitor in coverageInfo.Monitors) + { + this.Monitors.Add(monitor); + } + + foreach (var monitor in coverageInfo.MonitorsToStates) + { + foreach (var state in monitor.Value) + { + this.DeclareMonitorState(monitor.Key, state); + } + } + + foreach (var tup in coverageInfo.RegisteredMonitorEvents) + { + foreach (var e in tup.Value) + { + this.AddMonitorEvent(tup.Key, e); + } + } + + if (this.CoverageGraph is null) + { + this.CoverageGraph = coverageInfo.CoverageGraph; + } + else if (coverageInfo.CoverageGraph != null && this.CoverageGraph != coverageInfo.CoverageGraph) + { + this.CoverageGraph.Merge(coverageInfo.CoverageGraph); + } + + if (this.MonitorEventInfo is null) + { + this.MonitorEventInfo = coverageInfo.MonitorEventInfo; + } + else if (coverageInfo.MonitorEventInfo != null && this.MonitorEventInfo != coverageInfo.MonitorEventInfo) + { + this.MonitorEventInfo.Merge(coverageInfo.MonitorEventInfo); + } + } + } +} diff --git a/Source/Core/Coverage/MonitorEventCoverage.cs b/Source/Core/Coverage/MonitorEventCoverage.cs new file mode 100644 index 000000000..12ce3fad0 --- /dev/null +++ b/Source/Core/Coverage/MonitorEventCoverage.cs @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; + +namespace Microsoft.Coyote.Coverage +{ + /// + /// This class maintains information about events received in each state of each specification monitor. + /// + [DataContract] + public class MonitorEventCoverage + { + /// + /// Map from states to the list of events processed by that state. The state id is fully qualified by + /// the specification monitor type it belongs to. + /// + [DataMember] + private readonly Dictionary> EventsProcessed = new Dictionary>(); + + /// + /// Map from states to the list of events raised by that state. The state id is fully qualified by + /// the specification monitor type it belongs to. + /// + [DataMember] + private readonly Dictionary> EventsRaised = new Dictionary>(); + + /// + /// Get list of events processed by the given fully qualified state. + /// + /// The specification monitor qualified state name. + public IEnumerable GetEventsProcessed(string stateId) + { + if (this.EventsProcessed.TryGetValue(stateId, out HashSet set)) + { + return set; + } + + return Array.Empty(); + } + + /// + /// Get list of events raised by the given state. + /// + /// The specification monitor qualified state name. + public IEnumerable GetEventsRaised(string stateId) + { + if (this.EventsRaised.TryGetValue(stateId, out HashSet set)) + { + return set; + } + + return Array.Empty(); + } + + internal void AddEventProcessed(string stateId, string eventId) + { + if (!this.EventsProcessed.TryGetValue(stateId, out HashSet set)) + { + set = new HashSet(); + this.EventsProcessed[stateId] = set; + } + + set.Add(eventId); + } + + internal void AddEventRaised(string stateId, string eventId) + { + if (!this.EventsRaised.TryGetValue(stateId, out HashSet set)) + { + set = new HashSet(); + this.EventsRaised[stateId] = set; + } + + set.Add(eventId); + } + + internal void Merge(MonitorEventCoverage other) + { + MergeHashSets(this.EventsProcessed, other.EventsProcessed); + MergeHashSets(this.EventsRaised, other.EventsRaised); + } + + private static void MergeHashSets(Dictionary> ours, Dictionary> theirs) + { + foreach (var pair in theirs) + { + var stateId = pair.Key; + if (!ours.TryGetValue(stateId, out HashSet eventSet)) + { + eventSet = new HashSet(); + ours[stateId] = eventSet; + } + + eventSet.UnionWith(pair.Value); + } + } + } +} diff --git a/Source/Core/Properties/InternalsVisibleTo.cs b/Source/Core/Properties/InternalsVisibleTo.cs index 2c788b637..dbd478f41 100644 --- a/Source/Core/Properties/InternalsVisibleTo.cs +++ b/Source/Core/Properties/InternalsVisibleTo.cs @@ -4,6 +4,12 @@ using System.Runtime.CompilerServices; // Libraries +[assembly: InternalsVisibleTo("Microsoft.Coyote.Actors,PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + + "d7bc9fd67a08d3fa122120a469158da22a652af4508571ac9b16c6a05d2b3b6d7004ac76be85c3" + + "ca3d55f6ae823cd287a2810243f2bd6be5f4ba7b016c80da954371e591b10c97b0938f721c7149" + + "3bc97f9e")] [assembly: InternalsVisibleTo("Microsoft.Coyote.Test,PublicKey=" + "0024000004800000940000000602000000240000525341310004000001000100d7971281941569" + "53fd8af100ac5ecaf1d96fab578562b91133663d6ccbf0b313d037a830a20d7af1ce02a6641d71" + diff --git a/Source/Core/Runtime/CoyoteRuntime.cs b/Source/Core/Runtime/CoyoteRuntime.cs index 85f5a621c..7500223ed 100644 --- a/Source/Core/Runtime/CoyoteRuntime.cs +++ b/Source/Core/Runtime/CoyoteRuntime.cs @@ -10,11 +10,12 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -using Microsoft.Coyote.Actors; +using Microsoft.Coyote.Coverage; using Microsoft.Coyote.Logging; using Microsoft.Coyote.Runtime.CompilerServices; using Microsoft.Coyote.Specifications; using Microsoft.Coyote.Testing; +using SpecMonitor = Microsoft.Coyote.Specifications.Monitor; namespace Microsoft.Coyote.Runtime { @@ -108,11 +109,6 @@ internal sealed class CoyoteRuntime : ICoyoteRuntime, IDisposable /// internal readonly TaskFactory TaskFactory; - /// - /// The default actor execution context. - /// - internal readonly ActorExecutionContext DefaultActorExecutionContext; - /// /// Pool of threads that execute controlled operations. /// @@ -154,6 +150,16 @@ internal sealed class CoyoteRuntime : ICoyoteRuntime, IDisposable /// private ControlledOperation ScheduledOperation; + /// + /// The installed runtime extension, which by default is the . + /// + internal readonly IRuntimeExtension Extension; + + /// + /// Data structure containing information regarding testing coverage. + /// + internal readonly CoverageInfo CoverageInfo; + /// /// Responsible for generating random values. /// @@ -179,7 +185,7 @@ public ILogger Logger /// /// List of all registered safety and liveness specification monitors. /// - private readonly List SpecificationMonitors; + private readonly List SpecificationMonitors; /// /// List of all registered task liveness monitors. @@ -270,21 +276,21 @@ public ILogger Logger /// Initializes a new instance of the class. /// internal static CoyoteRuntime Create(Configuration configuration, IRandomValueGenerator valueGenerator, - LogWriter logWriter, LogManager logManager) => - new CoyoteRuntime(configuration, null, valueGenerator, logWriter, logManager); + LogWriter logWriter, LogManager logManager, IRuntimeExtension extension) => + new CoyoteRuntime(configuration, null, valueGenerator, logWriter, logManager, extension); /// /// Initializes a new instance of the class. /// internal static CoyoteRuntime Create(Configuration configuration, OperationScheduler scheduler, - LogWriter logWriter, LogManager logManager) => - new CoyoteRuntime(configuration, scheduler, scheduler.ValueGenerator, logWriter, logManager); + LogWriter logWriter, LogManager logManager, IRuntimeExtension extension) => + new CoyoteRuntime(configuration, scheduler, scheduler.ValueGenerator, logWriter, logManager, extension); /// /// Initializes a new instance of the class. /// private CoyoteRuntime(Configuration configuration, OperationScheduler scheduler, IRandomValueGenerator valueGenerator, - LogWriter logWriter, LogManager logManager) + LogWriter logWriter, LogManager logManager, IRuntimeExtension extension) { // Registers the runtime with the provider which in return assigns a unique identifier. this.Id = RuntimeProvider.Register(this); @@ -316,28 +322,23 @@ private CoyoteRuntime(Configuration configuration, OperationScheduler scheduler, Interlocked.Increment(ref ExecutionControlledUseCount); } + this.Extension = extension ?? NullRuntimeExtension.Instance; + this.CoverageInfo = this.Extension.GetCoverageInfo() ?? new CoverageInfo(); this.ValueGenerator = valueGenerator; this.LogWriter = logWriter; this.LogManager = logManager; - this.SpecificationMonitors = new List(); + this.SpecificationMonitors = new List(); this.TaskLivenessMonitors = new List(); this.ControlledTaskScheduler = new ControlledTaskScheduler(this); this.SyncContext = new ControlledSynchronizationContext(this); this.TaskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.HideScheduler, TaskContinuationOptions.HideScheduler, this.ControlledTaskScheduler); - - this.DefaultActorExecutionContext = this.SchedulingPolicy is SchedulingPolicy.Interleaving ? - new ActorExecutionContext.Mock(configuration, this, this.LogManager as ActorLogManager) : - new ActorExecutionContext(configuration, this, this.LogManager as ActorLogManager); } /// /// Runs the specified test method. /// -#if !DEBUG - [DebuggerHidden] -#endif internal Task RunTestAsync(Delegate testMethod, string testName) { this.LogWriter.LogInfo("[coyote::test] Runtime '{0}' started test{1} on thread '{2}'.", @@ -349,21 +350,14 @@ internal Task RunTestAsync(Delegate testMethod, string testName) this.ScheduleOperation(op, () => { Task task = Task.CompletedTask; - Task actorQuiescenceTask = Task.CompletedTask; - if (testMethod is Action actionWithRuntime) + if (this.Extension.RunTest(testMethod, out Task extensionTask)) { - actionWithRuntime(this.DefaultActorExecutionContext); - actorQuiescenceTask = this.DefaultActorExecutionContext.WaitUntilQuiescenceAsync(); + task = extensionTask; } else if (testMethod is Action action) { action(); } - else if (testMethod is Func functionWithRuntime) - { - task = functionWithRuntime(this.DefaultActorExecutionContext); - actorQuiescenceTask = this.DefaultActorExecutionContext.WaitUntilQuiescenceAsync(); - } else if (testMethod is Func function) { task = function(); @@ -378,12 +372,13 @@ internal Task RunTestAsync(Delegate testMethod, string testName) TaskServices.WaitUntilTaskCompletes(this, op, task); task.GetAwaiter().GetResult(); - // Wait for any actors to reach quiescence and propagate any exceptions. This is required in - // tests that include actors so that the test does not terminate early, because the main thread - // can complete without waiting for the actors to become idle or complete. - this.RegisterKnownControlledTask(actorQuiescenceTask); - TaskServices.WaitUntilTaskCompletes(this, op, actorQuiescenceTask); - actorQuiescenceTask.GetAwaiter().GetResult(); + // Wait for any operations managed by the runtime extension to reach quiescence and propagate any exceptions. + // This is required in tests that use a runtime extension so that the test does not terminate early, because + // the main thread can complete without waiting for the extended operations to reach quiescence. + Task extensionQuiescenceTask = this.Extension.WaitUntilQuiescenceAsync(); + this.RegisterKnownControlledTask(extensionQuiescenceTask); + TaskServices.WaitUntilTaskCompletes(this, op, extensionQuiescenceTask); + extensionQuiescenceTask.GetAwaiter().GetResult(); }, postCondition: () => { @@ -504,9 +499,6 @@ private void ScheduleOperation(ControlledOperation op, Action action, Action pre /// /// Schedules the specified delay to be executed asynchronously. /// -#if !DEBUG - [DebuggerStepThrough] -#endif internal Task ScheduleDelay(TimeSpan delay, CancellationToken cancellationToken) { if (delay.TotalMilliseconds is 0) @@ -1494,18 +1486,9 @@ private int GetHashedProgramState() unchecked { int hash = 19; - foreach (var operation in this.GetRegisteredOperations().OrderBy(op => op.Id)) + foreach (var operation in this.GetRegisteredOperations()) { - if (operation is ActorOperation actorOperation) - { - int operationHash = 31 + actorOperation.Actor.GetHashedState(this.SchedulingPolicy); - operationHash = (operationHash * 31) + actorOperation.LastSchedulingPoint.GetHashCode(); - hash *= operationHash; - } - else - { - hash *= 31 + operation.LastSchedulingPoint.GetHashCode(); - } + hash *= 31 + operation.GetHashedState(this.SchedulingPolicy); } foreach (var monitor in this.SpecificationMonitors) @@ -1519,11 +1502,11 @@ private int GetHashedProgramState() /// public void RegisterMonitor() - where T : Specifications.Monitor => + where T : SpecMonitor => this.TryCreateMonitor(typeof(T)); /// - /// Tries to create a new of the specified . + /// Tries to create a new of the specified . /// private bool TryCreateMonitor(Type type) { @@ -1535,7 +1518,7 @@ private bool TryCreateMonitor(Type type) // Only one monitor per type is allowed. if (!this.SpecificationMonitors.Any(m => m.GetType() == type)) { - var monitor = (Specifications.Monitor)Activator.CreateInstance(type); + var monitor = (SpecMonitor)Activator.CreateInstance(type); monitor.Initialize(this.Configuration, this); monitor.InitializeStateInformation(); this.SpecificationMonitors.Add(monitor); @@ -1561,21 +1544,21 @@ private bool TryCreateMonitor(Type type) } /// - public void Monitor(Event e) - where T : Specifications.Monitor => + public void Monitor(SpecMonitor.Event e) + where T : SpecMonitor => this.InvokeMonitor(typeof(T), e, null, null, null); /// - /// Invokes the specified with the specified . + /// Invokes the specified with the specified . /// - internal void InvokeMonitor(Type type, Event e, string senderName, string senderType, string senderStateName) + internal void InvokeMonitor(Type type, SpecMonitor.Event e, string senderName, string senderType, string senderStateName) { if (this.SchedulingPolicy != SchedulingPolicy.None || this.Configuration.IsMonitoringEnabledOutsideTesting) { using (SynchronizedSection.Enter(this.RuntimeLock)) { - Specifications.Monitor monitor = null; + SpecMonitor monitor = null; foreach (var m in this.SpecificationMonitors) { if (m.GetType() == type) @@ -1922,9 +1905,6 @@ private async Task CheckIfExecutionHasDeadlockedAsync() /// /// Checks for liveness errors. /// -#if !DEBUG - [DebuggerHidden] -#endif internal void CheckLivenessErrors() { foreach (var monitor in this.TaskLivenessMonitors) @@ -2022,9 +2002,6 @@ internal void NotifyUnhandledException(Exception ex, string message) /// /// Notify that an assertion has failed. /// -#if !DEBUG - [DebuggerHidden] -#endif internal void NotifyAssertionFailure(string text) { using (SynchronizedSection.Enter(this.RuntimeLock)) @@ -2200,19 +2177,9 @@ internal void ProcessUnhandledExceptionInOperation(ControlledOperation op, Excep } else { - string message; - string trace = FormatExceptionStackTrace(exception); - if (op is ActorOperation actorOp) - { - message = string.Format(CultureInfo.InvariantCulture, - $"Unhandled exception in actor '{actorOp.Name}'. {trace}"); - } - else - { - message = $"Unhandled exception. {trace}"; - } - // Report the unhandled exception. + string trace = FormatExceptionStackTrace(exception); + string message = $"Unhandled exception. {trace}"; this.NotifyUnhandledException(exception, message); } } @@ -2290,6 +2257,16 @@ internal void PopulateTestReport(ITestReport report) } } + /// + /// Builds the . + /// + internal CoverageInfo BuildCoverageInfo() => this.Extension.BuildCoverageInfo() ?? this.CoverageInfo; + + /// + /// Returns the of the current execution. + /// + internal CoverageGraph GetCoverageGraph() => this.Extension.GetCoverageGraph(); + /// /// Sets up the context of the executing controlled thread, allowing future retrieval /// of runtime related data from the same thread, as well as across threads that share @@ -2433,7 +2410,11 @@ private void Dispose(bool disposing) this.SpecificationMonitors.Clear(); this.TaskLivenessMonitors.Clear(); - this.DefaultActorExecutionContext.Dispose(); + if (!(this.Extension is NullRuntimeExtension)) + { + this.Extension.Dispose(); + } + this.ControlledTaskScheduler.Dispose(); this.SyncContext.Dispose(); this.CancellationSource.Dispose(); diff --git a/Source/Core/Runtime/Extensibility/IRuntimeExtension.cs b/Source/Core/Runtime/Extensibility/IRuntimeExtension.cs new file mode 100644 index 000000000..c27eb2c53 --- /dev/null +++ b/Source/Core/Runtime/Extensibility/IRuntimeExtension.cs @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.Coyote.Coverage; + +namespace Microsoft.Coyote.Runtime +{ + /// + /// Interface for a Coyote runtime extension. + /// + public interface IRuntimeExtension : IDisposable + { + /// + /// Runs the specified test entry point delegate and returns + /// a task that completes when the test is completed. + /// + /// The test entry point delegate. + /// A task that completes when the test is completed. + /// True if the extension can execute the test, else false. + bool RunTest(Delegate test, out Task task); + + /// + /// Builds the extended . + /// + /// + /// This information is only available when is enabled. + /// + CoverageInfo BuildCoverageInfo(); + + /// + /// Returns the extended . + /// + CoverageInfo GetCoverageInfo(); + + /// + /// Returns the of the current execution. + /// + CoverageGraph GetCoverageGraph(); + + /// + /// Returns a task that completes once all operations managed by the extension reach quiescence. + /// + Task WaitUntilQuiescenceAsync(); + } +} diff --git a/Source/Core/Runtime/Extensibility/NullRuntimeExtension.cs b/Source/Core/Runtime/Extensibility/NullRuntimeExtension.cs new file mode 100644 index 000000000..83822bfc0 --- /dev/null +++ b/Source/Core/Runtime/Extensibility/NullRuntimeExtension.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.Coyote.Coverage; + +namespace Microsoft.Coyote.Runtime +{ + /// + /// Implementation of a no-op runtime extension. + /// + internal class NullRuntimeExtension : IRuntimeExtension + { + /// + /// Gets a cached instance. + /// + internal static NullRuntimeExtension Instance { get; } = new NullRuntimeExtension(); + + /// + /// Initializes a new instance of the class. + /// + private NullRuntimeExtension() + { + } + + /// + bool IRuntimeExtension.RunTest(Delegate test, out Task task) + { + task = Task.CompletedTask; + return false; + } + + /// + CoverageInfo IRuntimeExtension.BuildCoverageInfo() => null; + + /// + CoverageInfo IRuntimeExtension.GetCoverageInfo() => null; + + /// + CoverageGraph IRuntimeExtension.GetCoverageGraph() => null; + + /// + Task IRuntimeExtension.WaitUntilQuiescenceAsync() => Task.CompletedTask; + + /// + public void Dispose() + { + // This should never be called. + throw new InvalidOperationException("Dispose should never be called on the null runtime extension."); + } + } +} diff --git a/Source/Core/Runtime/ICoyoteRuntime.cs b/Source/Core/Runtime/ICoyoteRuntime.cs index 0a894fedd..bbdb5b242 100644 --- a/Source/Core/Runtime/ICoyoteRuntime.cs +++ b/Source/Core/Runtime/ICoyoteRuntime.cs @@ -33,16 +33,15 @@ void RegisterMonitor() where T : Monitor; /// - /// Invokes the specified monitor with the specified . + /// Invokes the specified monitor with the specified . /// /// Type of the monitor. /// Event to send to the monitor. - void Monitor(Event e) + void Monitor(Monitor.Event e) where T : Monitor; /// - /// Returns a nondeterministic boolean choice, that can be controlled - /// during analysis or testing. + /// Returns a nondeterministic boolean choice, that can be controlled during testing. /// /// The nondeterministic boolean choice. /// @@ -52,9 +51,8 @@ void Monitor(Event e) bool RandomBoolean(); /// - /// Returns a nondeterministic integer choice, that can be - /// controlled during analysis or testing. The value is used - /// to generate an integer in the range [0..maxValue). + /// Returns a nondeterministic integer choice, that can be controlled during testing. + /// The value is used to generate an integer in the range [0..maxValue). /// /// The max value. /// The nondeterministic integer choice. diff --git a/Source/Core/Runtime/Logging/IRuntimeLog.cs b/Source/Core/Runtime/Logging/IRuntimeLog.cs index 1980e757c..ca3464782 100644 --- a/Source/Core/Runtime/Logging/IRuntimeLog.cs +++ b/Source/Core/Runtime/Logging/IRuntimeLog.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; + namespace Microsoft.Coyote.Runtime { /// @@ -36,7 +38,7 @@ public interface IRuntimeLog /// The name of the state the sender is in. /// The event being processed. void OnMonitorProcessEvent(string monitorType, string stateName, string senderName, - string senderType, string senderStateName, Event e); + string senderType, string senderStateName, MonitorEvent e); /// /// Invoked when the specified monitor raised an event. @@ -44,7 +46,7 @@ void OnMonitorProcessEvent(string monitorType, string stateName, string senderNa /// Name of type of the monitor raising the event. /// The name of the state in which the event is being raised. /// The event being raised. - void OnMonitorRaiseEvent(string monitorType, string stateName, Event e); + void OnMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e); /// /// Invoked when the specified monitor enters or exits a state. diff --git a/Source/Core/Runtime/Logging/LogManager.cs b/Source/Core/Runtime/Logging/LogManager.cs index 78ba15baf..71f042ac2 100644 --- a/Source/Core/Runtime/Logging/LogManager.cs +++ b/Source/Core/Runtime/Logging/LogManager.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.Coyote.Logging; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Runtime { @@ -60,7 +61,7 @@ internal void LogMonitorExecuteAction(string monitorType, string stateName, stri /// The name of the state the sender is in. /// The event being processed. internal void LogMonitorProcessEvent(string monitorType, string stateName, string senderName, - string senderType, string senderStateName, Event e) + string senderType, string senderStateName, MonitorEvent e) { if (this.Logs.Count > 0) { @@ -77,7 +78,7 @@ internal void LogMonitorProcessEvent(string monitorType, string stateName, strin /// Name of type of the monitor raising the event. /// The name of the state in which the event is being raised. /// The event being raised. - internal void LogMonitorRaiseEvent(string monitorType, string stateName, Event e) + internal void LogMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e) { if (this.Logs.Count > 0) { diff --git a/Source/Core/Runtime/Logging/RuntimeLogTextFormatter.cs b/Source/Core/Runtime/Logging/RuntimeLogTextFormatter.cs index 4c01823d4..f6c89c738 100644 --- a/Source/Core/Runtime/Logging/RuntimeLogTextFormatter.cs +++ b/Source/Core/Runtime/Logging/RuntimeLogTextFormatter.cs @@ -3,6 +3,7 @@ using System.Threading; using Microsoft.Coyote.Logging; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Runtime { @@ -36,12 +37,12 @@ public virtual void OnMonitorExecuteAction(string monitorType, string stateName, /// public virtual void OnMonitorProcessEvent(string monitorType, string stateName, string senderName, - string senderType, string senderStateName, Event e) => + string senderType, string senderStateName, MonitorEvent e) => this.Logger.WriteLine(" {0} is processing event '{1}' in state '{2}'.", monitorType, e.GetType().FullName, stateName); /// - public virtual void OnMonitorRaiseEvent(string monitorType, string stateName, Event e) => + public virtual void OnMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e) => this.Logger.WriteLine(" {0} raised event '{1}' in state '{2}'.", monitorType, e.GetType().FullName, stateName); diff --git a/Source/Core/Runtime/Logging/RuntimeLogXmlFormatter.cs b/Source/Core/Runtime/Logging/RuntimeLogXmlFormatter.cs index 93da9008b..8aa885032 100644 --- a/Source/Core/Runtime/Logging/RuntimeLogXmlFormatter.cs +++ b/Source/Core/Runtime/Logging/RuntimeLogXmlFormatter.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using System.Xml; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Runtime { @@ -54,7 +55,7 @@ public void OnMonitorExecuteAction(string monitorType, string stateName, string } public void OnMonitorProcessEvent(string monitorType, string stateName, string senderName, - string senderType, string senderStateName, Event e) + string senderType, string senderStateName, MonitorEvent e) { if (this.IsClosed) { @@ -83,7 +84,7 @@ public void OnMonitorProcessEvent(string monitorType, string stateName, string s this.Writer.WriteEndElement(); } - public void OnMonitorRaiseEvent(string monitorType, string stateName, Event e) + public void OnMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e) { if (this.IsClosed) { diff --git a/Source/Core/Runtime/Operations/ControlledOperation.cs b/Source/Core/Runtime/Operations/ControlledOperation.cs index b7ec08b66..c93502e76 100644 --- a/Source/Core/Runtime/Operations/ControlledOperation.cs +++ b/Source/Core/Runtime/Operations/ControlledOperation.cs @@ -188,7 +188,7 @@ internal bool TryEnable() /// /// Returns the hashed state of this operation for the specified policy. /// - internal virtual int GetHashedState(SchedulingPolicy policy) => 0; + internal virtual int GetHashedState(SchedulingPolicy policy) => this.LastSchedulingPoint.GetHashCode(); /// /// Determines whether the specified object is equal to the current object. diff --git a/Source/Core/Runtime/RuntimeProvider.cs b/Source/Core/Runtime/RuntimeProvider.cs index 65260b412..ec482f22b 100644 --- a/Source/Core/Runtime/RuntimeProvider.cs +++ b/Source/Core/Runtime/RuntimeProvider.cs @@ -16,13 +16,12 @@ public static class RuntimeProvider /// /// Map from runtime identifiers to runtime instances. /// - private static ConcurrentDictionary Runtimes = - new ConcurrentDictionary(); + private static ConcurrentDictionary RuntimeMap = new ConcurrentDictionary(); /// /// The default installed runtime instance. /// - internal static CoyoteRuntime Default { get; private set; } = CreateWithConfiguration(default, default, default); + internal static CoyoteRuntime Default { get; private set; } = CreateWithConfiguration(default, default, default, default); /// /// The runtime installed in the current execution context. @@ -34,48 +33,29 @@ public static class RuntimeProvider /// private static readonly object SyncObject = new object(); - /// - /// Creates a new Coyote runtime. - /// - /// The created Coyote runtime. - /// - /// Only one Coyote runtime can be used per process. If you create a new Coyote runtime - /// it replaces the previously installed one. This is a thread-safe operation. - /// - public static ICoyoteRuntime Create() => CreateAndInstall(default, default, default).DefaultActorExecutionContext; - - /// - /// Creates a new Coyote runtime with the specified . - /// - /// The runtime configuration to use. - /// The created Coyote runtime. - /// - /// Only one Coyote runtime can be used per process. If you create a new Coyote runtime - /// it replaces the previously installed one. This is a thread-safe operation. - /// - public static ICoyoteRuntime Create(Configuration configuration) => - CreateAndInstall(configuration, default, default).DefaultActorExecutionContext; - /// /// Creates a new Coyote runtime with the specified and sets it /// as the default installed runtime, or returns the runtime if it already exists. /// /// - /// This is a thread-safe operation. + /// Only one Coyote runtime can be used per process. If you create a new Coyote runtime + /// it replaces the previously installed one. This is a thread-safe operation. /// - internal static CoyoteRuntime CreateAndInstall(Configuration configuration, LogWriter logWriter, LogManager logManager) + internal static CoyoteRuntime CreateAndInstall(Configuration configuration, LogWriter logWriter, + LogManager logManager, IRuntimeExtension extension) { lock (SyncObject) { // Assign the newly created runtime as the default installed runtime. - return Default = CreateWithConfiguration(configuration, logWriter, logManager); + return Default = CreateWithConfiguration(configuration, logWriter, logManager, extension); } } /// /// Creates a new Coyote runtime with the specified . /// - private static CoyoteRuntime CreateWithConfiguration(Configuration configuration, LogWriter logWriter, LogManager logManager) + private static CoyoteRuntime CreateWithConfiguration(Configuration configuration, LogWriter logWriter, + LogManager logManager, IRuntimeExtension extension) { configuration ??= Configuration.Create(); var valueGenerator = new RandomValueGenerator(configuration); @@ -86,7 +66,7 @@ private static CoyoteRuntime CreateWithConfiguration(Configuration configuration logManager.RegisterLog(new RuntimeLogTextFormatter(), logWriter); } - return CoyoteRuntime.Create(configuration, valueGenerator, logWriter, logManager); + return CoyoteRuntime.Create(configuration, valueGenerator, logWriter, logManager, extension); } /// @@ -96,7 +76,7 @@ private static CoyoteRuntime CreateWithConfiguration(Configuration configuration internal static Guid Register(CoyoteRuntime runtime) { var id = Guid.NewGuid(); - Runtimes.TryAdd(id, runtime); + RuntimeMap.TryAdd(id, runtime); return id; } @@ -105,7 +85,7 @@ internal static Guid Register(CoyoteRuntime runtime) /// internal static void Deregister(Guid id) { - Runtimes.TryRemove(id, out CoyoteRuntime _); + RuntimeMap.TryRemove(id, out CoyoteRuntime _); } /// @@ -130,6 +110,6 @@ internal static bool TryGetFromSynchronizationContext(out CoyoteRuntime runtime) /// /// True if the runtime was found, else false. internal static bool TryGetFromId(Guid runtimeId, out CoyoteRuntime runtime) => - Runtimes.TryGetValue(runtimeId, out runtime) ? true : false; + RuntimeMap.TryGetValue(runtimeId, out runtime) ? true : false; } } diff --git a/Source/Core/Specifications/Monitors/CachedDelegate.cs b/Source/Core/Specifications/Monitors/CachedDelegate.cs deleted file mode 100644 index d07f6167e..000000000 --- a/Source/Core/Specifications/Monitors/CachedDelegate.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -using System; -using System.Reflection; - -namespace Microsoft.Coyote.Specifications -{ - /// - /// A monitor delegate that has been cached to optimize performance of invocations. - /// - internal class CachedDelegate - { - internal readonly MethodInfo MethodInfo; - internal readonly Delegate Handler; - - internal CachedDelegate(MethodInfo method, object caller) - { - ParameterInfo[] parameters = method.GetParameters(); - if (parameters.Length is 1 && method.ReturnType == typeof(void)) - { - this.Handler = Delegate.CreateDelegate(typeof(Action), caller, method); - } - else if (method.ReturnType == typeof(void)) - { - this.Handler = Delegate.CreateDelegate(typeof(Action), caller, method); - } - else if (parameters.Length is 1 && method.ReturnType == typeof(Monitor.Transition)) - { - this.Handler = Delegate.CreateDelegate(typeof(Func), caller, method); - } - else if (method.ReturnType == typeof(Monitor.Transition)) - { - this.Handler = Delegate.CreateDelegate(typeof(Func), caller, method); - } - else - { - throw new InvalidOperationException($"Trying to cache invalid action delegate '{method.Name}'."); - } - - this.MethodInfo = method; - } - } -} diff --git a/Source/Core/Specifications/Monitors/Monitor.cs b/Source/Core/Specifications/Monitors/Monitor.cs index 43c8c9791..664a4def3 100644 --- a/Source/Core/Specifications/Monitors/Monitor.cs +++ b/Source/Core/Specifications/Monitors/Monitor.cs @@ -4,12 +4,12 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Runtime.ExceptionServices; -using Microsoft.Coyote.Actors; -using Microsoft.Coyote.Actors.Coverage; +using Microsoft.Coyote.Coverage; using Microsoft.Coyote.Logging; using Microsoft.Coyote.Runtime; @@ -72,7 +72,7 @@ public abstract class Monitor /// /// Dictionary containing all the current action bindings. /// - internal Dictionary EventHandlers; + private Dictionary EventHandlers; /// /// Map from action names to cached action delegates. @@ -690,7 +690,7 @@ internal void GotoStartState() if (this.Runtime.SchedulingPolicy is SchedulingPolicy.Interleaving && this.Configuration.IsActivityCoverageReported) { - this.ReportActivityCoverage(this.Runtime.DefaultActorExecutionContext.CoverageInfo); + this.ReportActivityCoverage(this.Runtime.CoverageInfo); } this.ExecuteCurrentStateOnEntry(DefaultEvent.Instance); @@ -964,14 +964,14 @@ private void LogMonitorError(Monitor monitor) => internal void ReportActivityCoverage(CoverageInfo coverageInfo) { var monitorName = this.Name; - if (coverageInfo.IsMachineDeclared(monitorName)) + if (coverageInfo.IsMonitorDeclared(monitorName)) { return; } this.Assert(StateMap.ContainsKey(this.GetType()), "{0} has not populated its states yet.", this.Name); - // Fetch states. + // Fetch the monitor states. var states = new HashSet(); foreach (var state in StateMap[this.GetType()]) { @@ -980,10 +980,10 @@ internal void ReportActivityCoverage(CoverageInfo coverageInfo) foreach (var state in states) { - coverageInfo.DeclareMachineState(monitorName, state); + coverageInfo.DeclareMonitorState(monitorName, state); } - // Fetch registered events. + // Fetch the registered events. var pairs = new HashSet>(); foreach (var state in StateMap[this.GetType()]) { @@ -995,7 +995,7 @@ internal void ReportActivityCoverage(CoverageInfo coverageInfo) foreach (var tup in pairs) { - coverageInfo.DeclareStateEvent(monitorName, tup.Item1, tup.Item2); + coverageInfo.DeclareMonitorStateEventPair(monitorName, tup.Item1, tup.Item2); } } @@ -1553,5 +1553,221 @@ protected sealed class HotAttribute : Attribute public abstract class StateGroup { } + + /// + /// Abstract class representing an event that can be send to a . + /// + public abstract class Event + { + } + + /// + /// A default event that is generated when no user-defined event is dequeued or received. + /// + internal sealed class DefaultEvent : Event + { + /// + /// Gets a instance. + /// + internal static DefaultEvent Instance { get; } = new DefaultEvent(); + + /// + /// Initializes a new instance of the class. + /// + private DefaultEvent() + : base() + { + } + } + + /// + /// The goto state event. + /// + internal sealed class GotoStateEvent : Event + { + /// + /// Type of the state to transition to. + /// + internal readonly Type State; + + /// + /// Initializes a new instance of the class. + /// + /// Type of the state. + internal GotoStateEvent(Type s) + : base() + { + this.State = s; + } + } + + /// + /// The wild card event. + /// + public sealed class WildCardEvent : Event + { + /// + /// Initializes a new instance of the class. + /// + public WildCardEvent() + : base() + { + } + } + + /// + /// An abstract event handler declaration. + /// + internal abstract class EventHandlerDeclaration + { + internal abstract bool Inheritable { get; } + } + + /// + /// Defines an action event handler declaration. + /// + private sealed class ActionEventHandlerDeclaration : EventHandlerDeclaration + { + /// + /// Name of the action. + /// + internal string Name; + + /// + /// Initializes a new instance of the class. + /// + internal ActionEventHandlerDeclaration(string actionName) + { + this.Name = actionName; + } + + internal override bool Inheritable => true; + } + + /// + /// Defines a goto state transition. + /// + private sealed class GotoStateTransition : EventHandlerDeclaration + { + /// + /// The target state. + /// + internal Type TargetState; + + /// + /// An optional lambda function that executes after the + /// on-exit handler of the exiting state. + /// + internal string Lambda; + + /// + /// Initializes a new instance of the class. + /// + /// The target state. + /// Lambda function that executes after the on-exit handler of the exiting state. + internal GotoStateTransition(Type targetState, string lambda) + { + this.TargetState = targetState; + this.Lambda = lambda; + } + + /// + /// Initializes a new instance of the class. + /// + /// The target state. + internal GotoStateTransition(Type targetState) + { + this.TargetState = targetState; + this.Lambda = null; + } + + internal override bool Inheritable => false; + } + + /// + /// A monitor delegate that has been cached to optimize performance of invocations. + /// + private class CachedDelegate + { + internal readonly MethodInfo MethodInfo; + internal readonly Delegate Handler; + + internal CachedDelegate(MethodInfo method, object caller) + { + ParameterInfo[] parameters = method.GetParameters(); + if (parameters.Length is 1 && method.ReturnType == typeof(void)) + { + this.Handler = Delegate.CreateDelegate(typeof(Action), caller, method); + } + else if (method.ReturnType == typeof(void)) + { + this.Handler = Delegate.CreateDelegate(typeof(Action), caller, method); + } + else if (parameters.Length is 1 && method.ReturnType == typeof(Monitor.Transition)) + { + this.Handler = Delegate.CreateDelegate(typeof(Func), caller, method); + } + else if (method.ReturnType == typeof(Monitor.Transition)) + { + this.Handler = Delegate.CreateDelegate(typeof(Func), caller, method); + } + else + { + throw new InvalidOperationException($"Trying to cache invalid action delegate '{method.Name}'."); + } + + this.MethodInfo = method; + } + } + + /// + /// Utility class for resolving names. + /// + private static class NameResolver + { + /// + /// Cache of state names. + /// + private static readonly ConcurrentDictionary StateNamesCache = + new ConcurrentDictionary(); + + /// + /// Returns the qualified (i.e. ) name of the specified + /// state machine or monitor state, or the empty string if there is no such name. + /// + internal static string GetQualifiedStateName(Type state) + { + if (state is null) + { + return string.Empty; + } + + if (!StateNamesCache.TryGetValue(state, out string name)) + { + name = state.Name; + + var nextState = state; + while (nextState.DeclaringType != null) + { + if (!nextState.DeclaringType.IsSubclassOf(typeof(Monitor.StateGroup))) + { + break; + } + + name = string.Format(CultureInfo.InvariantCulture, "{0}.{1}", nextState.DeclaringType.Name, name); + nextState = nextState.DeclaringType; + } + + StateNamesCache.GetOrAdd(state, name); + } + + return name; + } + + /// + /// Returns the state name to be used for logging purposes. + /// + internal static string GetStateNameForLogging(Type state) => state is null ? "None" : GetQualifiedStateName(state); + } } } diff --git a/Source/Core/Specifications/Specification.cs b/Source/Core/Specifications/Specification.cs index e22e6cde3..760b1289e 100644 --- a/Source/Core/Specifications/Specification.cs +++ b/Source/Core/Specifications/Specification.cs @@ -71,7 +71,7 @@ public static void RegisterMonitor() /// Type of the monitor. /// Event to send to the monitor. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Monitor(Event e) + public static void Monitor(Monitor.Event e) where T : Monitor => CoyoteRuntime.Current.Monitor(e); } diff --git a/Source/Test/Rewriting/Passes/Pass.cs b/Source/Test/Rewriting/Passes/Pass.cs index 4a3092bd3..4b5f66bd4 100644 --- a/Source/Test/Rewriting/Passes/Pass.cs +++ b/Source/Test/Rewriting/Passes/Pass.cs @@ -294,7 +294,9 @@ protected static bool IsRuntimeType(TypeDefinition type) { // Any type from the Coyote assemblies is not a foreign type. string module = type.Module.Name; - if (module is "Microsoft.Coyote.dll" || module is "Microsoft.Coyote.Test.dll") + if (module is "Microsoft.Coyote.dll" || + module is "Microsoft.Coyote.Actors.dll" || + module is "Microsoft.Coyote.Test.dll") { return true; } diff --git a/Source/Test/SystematicTesting/Reports/TestReport.cs b/Source/Test/SystematicTesting/Reports/TestReport.cs index 43c73fd0c..e6bbc7d19 100644 --- a/Source/Test/SystematicTesting/Reports/TestReport.cs +++ b/Source/Test/SystematicTesting/Reports/TestReport.cs @@ -26,7 +26,7 @@ public class TestReport : ITestReport /// Information regarding code coverage. /// [DataMember] - public CoverageInfo CoverageInfo { get; private set; } + public ActorCoverageInfo CoverageInfo { get; private set; } /// /// Number of explored fair schedules. @@ -171,7 +171,7 @@ public TestReport(Configuration configuration) { this.Configuration = configuration; - this.CoverageInfo = new CoverageInfo(); + this.CoverageInfo = new ActorCoverageInfo(); this.NumOfExploredFairSchedules = 0; this.NumOfExploredUnfairSchedules = 0; diff --git a/Source/Test/SystematicTesting/TestingEngine.cs b/Source/Test/SystematicTesting/TestingEngine.cs index f29f3eef8..1ce409322 100644 --- a/Source/Test/SystematicTesting/TestingEngine.cs +++ b/Source/Test/SystematicTesting/TestingEngine.cs @@ -14,6 +14,7 @@ using System.Xml; using Microsoft.Coyote.Actors; using Microsoft.Coyote.Actors.Coverage; +using Microsoft.Coyote.Coverage; using Microsoft.Coyote.Logging; using Microsoft.Coyote.Rewriting; using Microsoft.Coyote.Runtime; @@ -82,9 +83,9 @@ public sealed class TestingEngine : IDisposable private readonly LogWriter LogWriter; /// - /// The DGML graph of the execution path explored in the last iteration. + /// The DGML coverage graph of the execution path explored in the last iteration. /// - private Graph LastExecutionGraph; + private CoverageGraph LastCoverageGraph; /// /// Contains a single iteration of XML log output in the case where the IsXmlLogEnabled @@ -240,28 +241,24 @@ public void Run() this.LogWriter.LogWarning("... Test timed out."); } } - catch (AggregateException aex) + catch (Exception ex) { - aex.Handle((ex) => + if (ex is AggregateException aex) { - this.LogWriter.LogDebug(ex.Message); - this.LogWriter.LogDebug(ex.StackTrace); - return true; - }); + ex = aex.Flatten().InnerException; + } - if (aex.InnerException is FileNotFoundException) + if (ex is FileNotFoundException) + { + this.LogWriter.LogError(ex.Message); + } + else { - this.LogWriter.LogError(aex.InnerException.Message); - throw; + this.LogWriter.LogError("... Test failed due to an internal '{0}' exception.", ex.GetType().FullName); + this.TestReport.InternalErrors.Add(ex.ToString()); } - this.LogWriter.LogError("Unhandled or internal exception was thrown. Please enable debug verbosity to print more information."); - throw; - } - catch (Exception ex) - { - this.LogWriter.LogError("... Test failed due to an internal error: {0}", ex); - this.TestReport.InternalErrors.Add(ex.ToString()); + ExceptionDispatchInfo.Capture(ex).Throw(); } finally { @@ -373,11 +370,14 @@ private bool RunNextIteration(TestMethodInfo methodInfo, uint iteration) // Invoke any registered callbacks at the start of this iteration. this.InvokeStartIterationCallBacks(iteration); - // Creates a new instance of the controlled runtime. - runtime = CoyoteRuntime.Create(this.Configuration, this.Scheduler, iterationLogWriter, - RuntimeFactory.CreateLogManager(iterationLogWriter)); + // TODO: optimize so that the actor runtime extension is only added if the test supports actors. + // Creates a new instance of the controlled runtime and adds the actor runtime extension. + var logManager = RuntimeFactory.CreateLogManager(iterationLogWriter); + var actorRuntimeExtension = Actors.RuntimeFactory.Create(this.Configuration, logManager, this.Scheduler.SchedulingPolicy); + runtime = CoyoteRuntime.Create(this.Configuration, this.Scheduler, iterationLogWriter, logManager, actorRuntimeExtension); + actorRuntimeExtension.WithRuntime(runtime); - this.InitializeCustomActorLogging(runtime.DefaultActorExecutionContext); + this.InitializeCustomActorLogging(actorRuntimeExtension); // Runs the test and waits for it to terminate. Task task = runtime.RunTestAsync(methodInfo.Method, methodInfo.Name); @@ -407,9 +407,7 @@ private bool RunNextIteration(TestMethodInfo methodInfo, uint iteration) this.ReproducibleTrace = TraceReport.GetJson(this.Scheduler.Trace, this.Configuration); } } - } - finally - { + if (this.Configuration.IsSystematicFuzzingFallbackEnabled && runtime.SchedulingPolicy is SchedulingPolicy.Interleaving && (runtime.ExecutionStatus is ExecutionStatus.ConcurrencyUncontrolled || @@ -438,7 +436,9 @@ runtime.SchedulingPolicy is SchedulingPolicy.Interleaving && { this.LogWriter.LogError("Failed to reproduce the bug."); } - + } + finally + { // Clean up runtime resources before the next iteration starts. runtime?.Dispose(); } @@ -516,10 +516,10 @@ public bool TryEmitReports(string directory, string fileName, out IEnumerable 0) + if (this.LastCoverageGraph != null && this.TestReport.NumOfFoundBugs > 0) { string graphPath = Path.Combine(directory, fileName + ".trace.dgml"); - this.LastExecutionGraph.SaveDgml(graphPath, true); + this.LastCoverageGraph.SaveDgml(graphPath, true); paths.Add(graphPath); } @@ -580,12 +580,12 @@ private void GatherTestingStatistics(CoyoteRuntime runtime) TestReport report = new TestReport(this.Configuration); runtime.PopulateTestReport(report); - var coverageInfo = runtime.DefaultActorExecutionContext.BuildCoverageInfo(); + var coverageInfo = runtime.BuildCoverageInfo(); report.CoverageInfo.Merge(coverageInfo); this.TestReport.Merge(report); - // Save the DGML graph of the execution path explored in the last iteration. - this.LastExecutionGraph = runtime.DefaultActorExecutionContext.GetExecutionGraph(); + // Save the DGML coverage graph of the execution path explored in the last iteration. + this.LastCoverageGraph = runtime.GetCoverageGraph(); } /// diff --git a/Source/Test/Test.csproj b/Source/Test/Test.csproj index 568c10467..731a417de 100644 --- a/Source/Test/Test.csproj +++ b/Source/Test/Test.csproj @@ -26,5 +26,6 @@ + \ No newline at end of file diff --git a/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDequeuedTests.cs b/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDequeuedTests.cs index 5cd7ba054..4d0725568 100644 --- a/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDequeuedTests.cs +++ b/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDequeuedTests.cs @@ -41,12 +41,12 @@ public End(Event e) } } - private class Done : Event - { - } - private class Spec : Monitor { + internal class Done : Event + { + } + [Start] [Hot] [OnEventGotoState(typeof(Done), typeof(S2))] @@ -77,7 +77,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec.Done()); return Task.CompletedTask; } } @@ -116,7 +116,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec.Done()); return Task.CompletedTask; } } @@ -150,7 +150,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec.Done()); return Task.CompletedTask; } } @@ -191,7 +191,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec.Done()); return Task.CompletedTask; } } @@ -227,7 +227,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec.Done()); return Task.CompletedTask; } } @@ -267,7 +267,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec.Done()); return Task.CompletedTask; } } diff --git a/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDroppedTests.cs b/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDroppedTests.cs index 060954a78..c75b4b56c 100644 --- a/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDroppedTests.cs +++ b/Tests/Tests.Actors.BugFinding/Callbacks/OnEventDroppedTests.cs @@ -177,16 +177,16 @@ public void TestOnEventDroppedParametersInStateMachine() }); } - private class EventProcessed : Event + private class Monitor3 : Monitor { - } + internal class EventProcessed : Event + { + } - private class EventDropped : Event - { - } + internal class EventDropped : Event + { + } - private class Monitor3 : Monitor - { [Hot] [Start] [OnEventGotoState(typeof(EventProcessed), typeof(S2))] @@ -224,7 +224,7 @@ private class A3c : Actor { private void Processed() { - this.Monitor(new EventProcessed()); + this.Monitor(new Monitor3.EventProcessed()); } } @@ -236,7 +236,7 @@ public void TestEventProcessedOrDroppedInActor() r.RegisterMonitor(); r.OnEventDropped += (e, target) => { - r.Monitor(new EventDropped()); + r.Monitor(new Monitor3.EventDropped()); }; var m = r.CreateActor(typeof(A3c)); @@ -284,7 +284,7 @@ private class Init : State private void Processed() { - this.Monitor(new EventProcessed()); + this.Monitor(new Monitor3.EventProcessed()); } } @@ -296,7 +296,7 @@ public void TestEventProcessedOrDroppedInStateMachine() r.RegisterMonitor(); r.OnEventDropped += (e, target) => { - r.Monitor(new EventDropped()); + r.Monitor(new Monitor3.EventDropped()); }; var m = r.CreateActor(typeof(M3c)); diff --git a/Tests/Tests.Actors.BugFinding/Callbacks/OnEventHandledTests.cs b/Tests/Tests.Actors.BugFinding/Callbacks/OnEventHandledTests.cs index 629485286..2a98a3f58 100644 --- a/Tests/Tests.Actors.BugFinding/Callbacks/OnEventHandledTests.cs +++ b/Tests/Tests.Actors.BugFinding/Callbacks/OnEventHandledTests.cs @@ -7,6 +7,7 @@ using Microsoft.Coyote.Tests.Common.Events; using Xunit; using Xunit.Abstractions; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.BugFinding.Tests { @@ -25,7 +26,7 @@ private class E2 : Event { } - private class Begin : Event + private class Begin : MonitorEvent { public Event Event; @@ -35,7 +36,7 @@ public Begin(Event e) } } - private class End : Event + private class End : MonitorEvent { public Event Event; @@ -45,10 +46,6 @@ public End(Event e) } } - private class Done : Event - { - } - private class Spec1 : Monitor { private int Counter = 0; @@ -257,6 +254,10 @@ public void TestOnEventHandledInHaltedStateMachine() private class Spec3 : Monitor { + internal class Done : Event + { + } + [Start] [Hot] [OnEventGotoState(typeof(Done), typeof(S2))] @@ -287,7 +288,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec3.Done()); return Task.CompletedTask; } } @@ -326,7 +327,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec3.Done()); return Task.CompletedTask; } } @@ -360,7 +361,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec3.Done()); return Task.CompletedTask; } } @@ -401,7 +402,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec3.Done()); return Task.CompletedTask; } } @@ -437,7 +438,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec3.Done()); return Task.CompletedTask; } } @@ -477,7 +478,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new Spec3.Done()); return Task.CompletedTask; } } diff --git a/Tests/Tests.Actors.BugFinding/Callbacks/OnExceptionTests.cs b/Tests/Tests.Actors.BugFinding/Callbacks/OnExceptionTests.cs index 0ef22b302..c6ea2a732 100644 --- a/Tests/Tests.Actors.BugFinding/Callbacks/OnExceptionTests.cs +++ b/Tests/Tests.Actors.BugFinding/Callbacks/OnExceptionTests.cs @@ -446,12 +446,12 @@ public void TestSendDuringOnExceptionInStateMachine() replay: true); } - private class Done : Event - { - } - private class GetsDone : Monitor { + internal class Done : Event + { + } + [Start] [Hot] [OnEventGotoState(typeof(Done), typeof(Ok))] @@ -479,7 +479,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new GetsDone.Done()); return Task.CompletedTask; } } @@ -514,7 +514,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new GetsDone.Done()); return Task.CompletedTask; } } @@ -543,7 +543,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new GetsDone.Done()); return Task.CompletedTask; } } @@ -585,7 +585,7 @@ protected override OnExceptionOutcome OnException(Exception ex, string methodNam protected override Task OnHaltAsync(Event e) { - this.Monitor(new Done()); + this.Monitor(new GetsDone.Done()); return Task.CompletedTask; } } diff --git a/Tests/Tests.Actors.BugFinding/Coverage/ActivityCoverageTests.cs b/Tests/Tests.Actors.BugFinding/Coverage/ActivityCoverageTests.cs index a50493ffe..f51c4fb7f 100644 --- a/Tests/Tests.Actors.BugFinding/Coverage/ActivityCoverageTests.cs +++ b/Tests/Tests.Actors.BugFinding/Coverage/ActivityCoverageTests.cs @@ -48,22 +48,29 @@ public void TestTrivialActivityCoverage() var configuration = this.GetConfiguration(); configuration.IsActivityCoverageReported = true; - string report = this.TestCoverage(r => + string result = this.TestCoverage(r => { r.CreateActor(typeof(M0)); }, configuration); - string result = report.RemoveExcessiveEmptySpace(); + this.TestOutput.WriteLine(result); + result = result.RemoveExcessiveEmptySpace(); - var expected = @"Total event coverage: 100.0% + var expected = @"============================ +Total actor coverage: 100.0% ============================ +======================================================================================== StateMachine: M0 ======================================================================================== Event coverage: 100.0% - State: Init - State has no expected events, so coverage is 100% + State: Init + State has no expected events, so coverage is 100% + +========================================= +Total specification monitor coverage: N/A +========================================= "; expected = expected.RemoveExcessiveEmptySpace(); @@ -91,27 +98,34 @@ public void TestMachineStateTransitionActivityCoverage() var configuration = this.GetConfiguration(); configuration.IsActivityCoverageReported = true; - string report = this.TestCoverage(r => + string result = this.TestCoverage(r => { r.CreateActor(typeof(M1)); }, configuration); - string result = report.RemoveExcessiveEmptySpace(); + this.TestOutput.WriteLine(result); + result = result.RemoveExcessiveEmptySpace(); - var expected = @"Total event coverage: 100.0% + var expected = @"============================ +Total actor coverage: 100.0% ============================ +======================================================================================== StateMachine: M1 ======================================================================================== Event coverage: 100.0% - State: Init - State has no expected events, so coverage is 100% - Next states: Done + State: Init + State has no expected events, so coverage is 100% + Next states: Done - State: Done - State has no expected events, so coverage is 100% - Previous states: Init + State: Done + State has no expected events, so coverage is 100% + Previous states: Init + +========================================= +Total specification monitor coverage: N/A +========================================= "; expected = expected.RemoveExcessiveEmptySpace(); @@ -140,28 +154,36 @@ public void TestMachineRaiseEventActivityCoverage() var configuration = this.GetConfiguration(); configuration.IsActivityCoverageReported = true; - string report = this.TestCoverage(r => + string result = this.TestCoverage(r => { r.CreateActor(typeof(M2)); }, configuration); - string result = report.RemoveExcessiveEmptySpace(); - var expected = @"Total event coverage: 100.0% + this.TestOutput.WriteLine(result); + result = result.RemoveExcessiveEmptySpace(); + + var expected = @"============================ +Total actor coverage: 100.0% ============================ +======================================================================================== StateMachine: M2 ======================================================================================== Event coverage: 100.0% - State: Init - State event coverage: 100.0% - Events received: Events.UnitEvent - Events sent: Events.UnitEvent - Next states: Done + State: Init + State event coverage: 100.0% + Events received: Events.UnitEvent + Events sent: Events.UnitEvent + Next states: Done + + State: Done + State has no expected events, so coverage is 100% + Previous states: Init - State: Done - State has no expected events, so coverage is 100% - Previous states: Init +========================================= +Total specification monitor coverage: N/A +========================================= "; expected = expected.RemoveExcessiveEmptySpace(); @@ -220,36 +242,44 @@ public void TestMachineSendEventActivityCoverage() var configuration = this.GetConfiguration(); configuration.IsActivityCoverageReported = true; - string report = this.TestCoverage(r => + string result = this.TestCoverage(r => { r.CreateActor(typeof(M3A)); }, configuration); - string result = report.RemoveExcessiveEmptySpace(); + this.TestOutput.WriteLine(result); + result = result.RemoveExcessiveEmptySpace(); - var expected = @"Total event coverage: 100.0% + var expected = @"============================ +Total actor coverage: 100.0% ============================ +========================================================================================= StateMachine: M3A ========================================================================================= Event coverage: 100.0% - State: Init - State event coverage: 100.0% - Events received: HelloEvent, Events.UnitEvent - Next states: Done + State: Init + State event coverage: 100.0% + Events received: HelloEvent, Events.UnitEvent + Next states: Done - State: Done - State has no expected events, so coverage is 100% - Previous states: Init + State: Done + State has no expected events, so coverage is 100% + Previous states: Init +========================================================================================= StateMachine: M3B ========================================================================================= Event coverage: 100.0% - State: Init - State has no expected events, so coverage is 100% - Events sent: HelloEvent, Events.UnitEvent + State: Init + State has no expected events, so coverage is 100% + Events sent: HelloEvent, Events.UnitEvent + +========================================= +Total specification monitor coverage: N/A +========================================= "; expected = expected.RemoveExcessiveEmptySpace(); @@ -275,50 +305,56 @@ public void TestCoverageOnMultipleTests() var configuration = this.GetConfiguration(); configuration.IsActivityCoverageReported = true; - string report1 = this.TestCoverage(r => + string result = this.TestCoverage(r => { var m = r.CreateActor(typeof(M4)); r.SendEvent(m, UnitEvent.Instance); }, configuration); - var expected = @"Total event coverage: 100.0% + this.TestOutput.WriteLine(result); + result = result.RemoveExcessiveEmptySpace(); + + var expected = @"============================ +Total actor coverage: 100.0% ============================ +======================================================================================== StateMachine: M4 ======================================================================================== Event coverage: 100.0% - State: Init - State event coverage: 100.0% - Events received: Events.UnitEvent - Next states: Done + State: Init + State event coverage: 100.0% + Events received: Events.UnitEvent + Next states: Done - State: Done - State has no expected events, so coverage is 100% - Previous states: Init + State: Done + State has no expected events, so coverage is 100% + Previous states: Init -StateMachine: ExternalCode -========================== -Event coverage: 100.0% +============ +ExternalCode +============ +Events sent: Events.UnitEvent - State: ExternalState - State has no expected events, so coverage is 100% - Events sent: Events.UnitEvent +========================================= +Total specification monitor coverage: N/A +========================================= "; expected = expected.RemoveExcessiveEmptySpace(); - string result = report1.RemoveExcessiveEmptySpace(); Assert.Equal(expected, result); - // Make sure second run is not confused by the first. - string report2 = this.TestCoverage(r => + // Assert that the second run is not confused by the first. + string report = this.TestCoverage(r => { var m = r.CreateActor(typeof(M4)); r.SendEvent(m, UnitEvent.Instance); }, configuration); - Assert.Equal(report1, report2); + report = report.RemoveExcessiveEmptySpace(); + Assert.Equal(result, report); } private class E1 : Event @@ -349,37 +385,42 @@ public void TestUncoveredEvents() var configuration = this.GetConfiguration(); configuration.IsActivityCoverageReported = true; - string report = this.TestCoverage(r => + string result = this.TestCoverage(r => { var m = r.CreateActor(typeof(M5)); r.SendEvent(m, new E1()); }, configuration); - string result = report.RemoveExcessiveEmptySpace(); - var expected = @"Total event coverage: 50.0% + this.TestOutput.WriteLine(result); + result = result.RemoveExcessiveEmptySpace(); + + var expected = @"=========================== +Total actor coverage: 50.0% =========================== +======================================================================================== StateMachine: M5 ======================================================================================== Event coverage: 50.0% - State: Init - State event coverage: 50.0% - Events received: E1 - Events not covered: E2 - Next states: Done + State: Init + State event coverage: 50.0% + Events received: E1 + Events not covered: E2 + Next states: Done - State: Done - State has no expected events, so coverage is 100% - Previous states: Init + State: Done + State has no expected events, so coverage is 100% + Previous states: Init -StateMachine: ExternalCode -========================== -Event coverage: 100.0% +============ +ExternalCode +============ +Events sent: E1 - State: ExternalState - State has no expected events, so coverage is 100% - Events sent: E1 +========================================= +Total specification monitor coverage: N/A +========================================= "; expected = expected.RemoveExcessiveEmptySpace(); @@ -423,7 +464,7 @@ public void TestPushStateActivityCoverage() var configuration = this.GetConfiguration(); configuration.IsActivityCoverageReported = true; - string report = this.TestCoverage(r => + string result = this.TestCoverage(r => { var actor = r.CreateActor(typeof(M6)); r.SendEvent(actor, new E1()); // even though Ready state is pushed E1 can still be handled by Init state because Init state is still active. @@ -431,31 +472,35 @@ public void TestPushStateActivityCoverage() }, configuration); - string result = report.RemoveExcessiveEmptySpace(); + this.TestOutput.WriteLine(result); + result = result.RemoveExcessiveEmptySpace(); - var expected = @"Total event coverage: 100.0% + var expected = @"============================ +Total actor coverage: 100.0% ============================ +======================================================================================== StateMachine: M6 ======================================================================================== Event coverage: 100.0% - State: Init - State event coverage: 100.0% - Events received: E1 - Next states: Ready + State: Init + State event coverage: 100.0% + Events received: E1 + Next states: Ready - State: Ready - State event coverage: 100.0% - Events received: E2 - Previous states: Init + State: Ready + State event coverage: 100.0% + Events received: E2 + Previous states: Init -StateMachine: ExternalCode -========================== -Event coverage: 100.0% +============ +ExternalCode +============ +Events sent: E1, E2 - State: ExternalState - State has no expected events, so coverage is 100% - Events sent: E1, E2 +========================================= +Total specification monitor coverage: N/A +========================================= "; expected = expected.RemoveExcessiveEmptySpace(); @@ -464,6 +509,14 @@ public void TestPushStateActivityCoverage() internal class Monitor1 : Monitor { + internal class E1 : Event + { + } + + internal class E2 : Event + { + } + [Cold] [Start] [OnEventGotoState(typeof(E1), typeof(Busy))] @@ -494,9 +547,9 @@ private void OnInit() { } - private void HandleE1(Event e) + private void HandleE1() { - this.Monitor(e); + this.Monitor(new Monitor1.E1()); this.RaiseGotoStateEvent(); } @@ -505,9 +558,9 @@ public class Ready : State { } - private void HandleE2(Event e) + private void HandleE2() { - this.Monitor(e); + this.Monitor(new Monitor1.E2()); } } @@ -527,45 +580,49 @@ public void TestMonitorActivityCoverage() }, configuration); + this.TestOutput.WriteLine(result); result = result.RemoveExcessiveEmptySpace(); - var expected = @"Total event coverage: 100.0% + var expected = @"============================ +Total actor coverage: 100.0% ============================ +======================================================================================== StateMachine: M7 ======================================================================================== Event coverage: 100.0% - State: Init - State event coverage: 100.0% - Events received: E1 - Next states: Ready + State: Init + State event coverage: 100.0% + Events received: E1 + Next states: Ready + + State: Ready + State event coverage: 100.0% + Events received: E2 + Previous states: Init - State: Ready - State event coverage: 100.0% - Events received: E2 - Previous states: Init +============ +ExternalCode +============ +Events sent: E1, E2 +============================================ +Total specification monitor coverage: 100.0% +============================================ +========================================================================================= Monitor: Monitor1 ========================================================================================= Event coverage: 100.0% - State: Idle - State event coverage: 100.0% - Events received: E1 - Next states: Busy[hot] - - State: Busy - State event coverage: 100.0% - Events received: E2 - Next states: Idle[cold] - -StateMachine: ExternalCode -========================== -Event coverage: 100.0% + State: Idle + State event coverage: 100.0% + Events processed: Monitor1+E1 + Next states: Busy[hot] - State: ExternalState - State has no expected events, so coverage is 100% - Events sent: E1, E2 + State: Busy + State event coverage: 100.0% + Events processed: Monitor1+E2 + Next states: Idle[cold] "; result = result.RemoveExcessiveEmptySpace(); diff --git a/Tests/Tests.Actors.BugFinding/Operations/CreateActorWithIdTests.cs b/Tests/Tests.Actors.BugFinding/Operations/CreateActorWithIdTests.cs index d9809807d..827ef8c4f 100644 --- a/Tests/Tests.Actors.BugFinding/Operations/CreateActorWithIdTests.cs +++ b/Tests/Tests.Actors.BugFinding/Operations/CreateActorWithIdTests.cs @@ -19,13 +19,13 @@ private class LivenessMonitor : Monitor { [Start] [Hot] - [OnEventGotoState(typeof(UnitEvent), typeof(S2))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(S2))] private class S1 : State { } [Hot] - [OnEventGotoState(typeof(UnitEvent), typeof(S3))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(S3))] private class S2 : State { } @@ -46,7 +46,7 @@ private class Init : State private void InitOnEntry() { - this.Monitor(typeof(LivenessMonitor), UnitEvent.Instance); + this.Monitor(typeof(LivenessMonitor), MonitorUnitEvent.Instance); } } @@ -124,8 +124,8 @@ private void Process() } else { - this.Monitor(typeof(LivenessMonitor), UnitEvent.Instance); - this.Monitor(typeof(LivenessMonitor), UnitEvent.Instance); + this.Monitor(typeof(LivenessMonitor), MonitorUnitEvent.Instance); + this.Monitor(typeof(LivenessMonitor), MonitorUnitEvent.Instance); } } diff --git a/Tests/Tests.Actors.BugFinding/Runtime/SendAndExecuteTests.cs b/Tests/Tests.Actors.BugFinding/Runtime/SendAndExecuteTests.cs index 55dfe4055..eaf88853c 100644 --- a/Tests/Tests.Actors.BugFinding/Runtime/SendAndExecuteTests.cs +++ b/Tests/Tests.Actors.BugFinding/Runtime/SendAndExecuteTests.cs @@ -6,6 +6,7 @@ using Microsoft.Coyote.Specifications; using Xunit; using Xunit.Abstractions; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.BugFinding.Tests.Runtime { @@ -340,11 +341,11 @@ protected override Task OnHaltAsync(Event e) } } - private class MHalts : Event + private class MHalts : MonitorEvent { } - private class SEReturns : Event + private class SEReturns : MonitorEvent { } diff --git a/Tests/Tests.Actors.BugFinding/Specifications/CompletenessTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/CompletenessTests.cs index aa1cff5db..9342d9b54 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/CompletenessTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/CompletenessTests.cs @@ -14,16 +14,16 @@ public CompletenessTests(ITestOutputHelper output) { } - private class E1 : Event + private class P : Monitor { - } + internal class E1 : Event + { + } - private class E2 : Event - { - } + internal class E2 : Event + { + } - private class P : Monitor - { [Cold] [Start] [OnEventDoAction(typeof(E1), nameof(Fail))] @@ -54,7 +54,7 @@ private class S : State private void InitOnEntry() { - this.Monitor

(new E1()); + this.Monitor

(new P.E1()); } } @@ -68,7 +68,7 @@ private class S : State private void InitOnEntry() { - this.Monitor

(new E2()); + this.Monitor

(new P.E2()); } } diff --git a/Tests/Tests.Actors.BugFinding/Specifications/IdempotentRegisterMonitorTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/IdempotentRegisterMonitorTests.cs index 1490b9b4c..9b0e483bb 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/IdempotentRegisterMonitorTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/IdempotentRegisterMonitorTests.cs @@ -24,18 +24,18 @@ public Counter() } } - private class E : Event + private class M : Monitor { - public Counter Counter; - - public E(Counter counter) + internal class E : Event { - this.Counter = counter; + public Counter Counter; + + public E(Counter counter) + { + this.Counter = counter; + } } - } - private class M : Monitor - { [Start] [OnEventDoAction(typeof(E), nameof(Check))] private class Init : State @@ -61,7 +61,7 @@ private class Init : State private void InitOnEntry() { Counter counter = new Counter(); - this.Monitor(typeof(M), new E(counter)); + this.Monitor(typeof(M), new M.E(counter)); this.Assert(counter.Value is 1, "Monitor created more than once."); } } diff --git a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/HotStateTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/HotStateTests.cs index 0b166753f..d5e073138 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/HotStateTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/HotStateTests.cs @@ -26,16 +26,6 @@ public SetupEvent(ActorId id) } } - private class MConfig : Event - { - public List Ids; - - public MConfig(List ids) - { - this.Ids = ids; - } - } - private class DoProcessing : Event { } @@ -44,10 +34,6 @@ private class FinishedProcessing : Event { } - private class NotifyWorkerIsDone : Event - { - } - private class Master : StateMachine { private List Workers; @@ -70,7 +56,7 @@ private void InitOnEntry() this.Workers.Add(worker); } - this.Monitor(new MConfig(this.Workers)); + this.Monitor(new M.SetupEvent(this.Workers)); this.RaiseEvent(UnitEvent.Instance); } @@ -90,7 +76,7 @@ private void ActiveOnEntry() private void ProcessWorkerIsDone() { - this.Monitor(new NotifyWorkerIsDone()); + this.Monitor(new M.NotifyWorkerIsDone()); } } @@ -134,20 +120,34 @@ private void DoneOnEntry() private class M : Monitor { + internal class SetupEvent : Event + { + public List Ids; + + public SetupEvent(List ids) + { + this.Ids = ids; + } + } + + internal class NotifyWorkerIsDone : Event + { + } + private List Workers; [Start] [Hot] - [OnEventDoAction(typeof(MConfig), nameof(SetupEvent))] - [OnEventGotoState(typeof(UnitEvent), typeof(Done))] + [OnEventDoAction(typeof(SetupEvent), nameof(Setup))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Done))] [OnEventDoAction(typeof(NotifyWorkerIsDone), nameof(ProcessNotification))] private class Init : State { } - private void SetupEvent(Event e) + private void Setup(Event e) { - this.Workers = (e as MConfig).Ids; + this.Workers = (e as SetupEvent).Ids; } private void ProcessNotification() @@ -156,7 +156,7 @@ private void ProcessNotification() if (this.Workers.Count is 0) { - this.RaiseEvent(UnitEvent.Instance); + this.RaiseEvent(MonitorUnitEvent.Instance); } } diff --git a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness1Tests.cs b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness1Tests.cs index 2805b4e50..fd7d30c49 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness1Tests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness1Tests.cs @@ -23,14 +23,6 @@ private class Done : Event { } - private class Waiting : Event - { - } - - private class Computing : Event - { - } - private class EventHandler : StateMachine { [Start] @@ -50,7 +42,7 @@ private class WaitForUser : State private void WaitForUserOnEntry() { - this.Monitor(new Waiting()); + this.Monitor(new WatchDog.Waiting()); this.SendEvent(this.Id, new UserEvent()); } @@ -62,13 +54,21 @@ private class HandleEvent : State private void HandleEventOnEntry() { - this.Monitor(new Computing()); + this.Monitor(new WatchDog.Computing()); this.SendEvent(this.Id, new Done()); } } private class WatchDog : Monitor { + internal class Waiting : Event + { + } + + internal class Computing : Event + { + } + [Start] [Cold] [OnEventGotoState(typeof(Waiting), typeof(CanGetUserInput))] diff --git a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2BugFoundTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2BugFoundTests.cs index 098639467..2772d14ea 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2BugFoundTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2BugFoundTests.cs @@ -23,14 +23,6 @@ private class Done : Event { } - private class Waiting : Event - { - } - - private class Computing : Event - { - } - private class EventHandler : StateMachine { [Start] @@ -50,7 +42,7 @@ private class WaitForUser : State private void WaitForUserOnEntry() { - this.Monitor(new Waiting()); + this.Monitor(new WatchDog.Waiting()); this.SendEvent(this.Id, new UserEvent()); } @@ -62,12 +54,20 @@ private class HandleEvent : State private void HandleEventOnEntry() { - this.Monitor(new Computing()); + this.Monitor(new WatchDog.Computing()); } } private class WatchDog : Monitor { + internal class Waiting : Event + { + } + + internal class Computing : Event + { + } + [Start] [Cold] [OnEventGotoState(typeof(Waiting), typeof(CanGetUserInput))] diff --git a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2LoopMachineTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2LoopMachineTests.cs index 43ec83716..d8f6b82a1 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2LoopMachineTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/Liveness2LoopMachineTests.cs @@ -23,14 +23,6 @@ private class Done : Event { } - private class Waiting : Event - { - } - - private class Computing : Event - { - } - private class EventHandler : StateMachine { [Start] @@ -54,7 +46,7 @@ private class WaitForUser : State private void WaitForUserOnEntry() { - this.Monitor(new Waiting()); + this.Monitor(new LivenessMonitor.Waiting()); this.SendEvent(this.Id, new UserEvent()); } @@ -65,7 +57,7 @@ private class HandleEvent : State private void HandleEventOnEntry() { - this.Monitor(new Computing()); + this.Monitor(new LivenessMonitor.Computing()); } } @@ -86,6 +78,14 @@ private void LoopingOnEntry() private class LivenessMonitor : Monitor { + internal class Waiting : Event + { + } + + internal class Computing : Event + { + } + [Start] [Cold] [OnEventGotoState(typeof(Waiting), typeof(CanGetUserInput))] diff --git a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/UnfairExecutionTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/UnfairExecutionTests.cs index 3b8d5e027..c6758369f 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/UnfairExecutionTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/UnfairExecutionTests.cs @@ -62,7 +62,7 @@ private class S3 : State private void S3OnEntry() { - this.Monitor(new E(this.Id)); + this.Monitor(MonitorUnitEvent.Instance); this.RaiseHaltEvent(); } } @@ -85,7 +85,7 @@ private class LivenessMonitor : Monitor { [Start] [Hot] - [OnEventGotoState(typeof(E), typeof(S2))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(S2))] private class S : State { } diff --git a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/WarmStateTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/WarmStateTests.cs index 00c9bd059..6a92326d9 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/Liveness/WarmStateTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/Liveness/WarmStateTests.cs @@ -23,14 +23,6 @@ private class Done : Event { } - private class Waiting : Event - { - } - - private class Computing : Event - { - } - private class EventHandler : StateMachine { [Start] @@ -50,7 +42,7 @@ private class WaitForUser : State private void WaitForUserOnEntry() { - this.Monitor(new Waiting()); + this.Monitor(new WatchDog.Waiting()); this.SendEvent(this.Id, new UserEvent()); } @@ -61,12 +53,20 @@ private class HandleEvent : State private void HandleEventOnEntry() { - this.Monitor(new Computing()); + this.Monitor(new WatchDog.Computing()); } } private class WatchDog : Monitor { + internal class Waiting : Event + { + } + + internal class Computing : Event + { + } + [Start] [OnEventGotoState(typeof(Waiting), typeof(CanGetUserInput))] [OnEventGotoState(typeof(Computing), typeof(CannotGetUserInput))] diff --git a/Tests/Tests.Actors.BugFinding/Specifications/MachineMonitorIntegrationTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/MachineMonitorIntegrationTests.cs index 54101f77f..edd5c937a 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/MachineMonitorIntegrationTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/MachineMonitorIntegrationTests.cs @@ -4,6 +4,7 @@ using Microsoft.Coyote.Specifications; using Xunit; using Xunit.Abstractions; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.BugFinding.Tests.Specifications { @@ -14,7 +15,7 @@ public MachineMonitorIntegrationTests(ITestOutputHelper output) { } - private class CheckE : Event + private class CheckE : MonitorEvent { public bool Value; diff --git a/Tests/Tests.Actors.BugFinding/Specifications/MonitorStateInheritanceTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/MonitorStateInheritanceTests.cs index 2ea424987..7d62b7dec 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/MonitorStateInheritanceTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/MonitorStateInheritanceTests.cs @@ -22,7 +22,7 @@ private class Init : BaseState { } - [OnEventDoAction(typeof(UnitEvent), nameof(Check))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(Check))] private abstract class BaseState : State { } @@ -96,7 +96,7 @@ private class Init : BaseState { } - [OnEventDoAction(typeof(UnitEvent), nameof(Check))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(Check))] private class BaseState : State { } @@ -110,12 +110,12 @@ private void Check() private class M6 : Monitor { [Start] - [OnEventDoAction(typeof(UnitEvent), nameof(Check))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(Check))] private class Init : BaseState { } - [OnEventDoAction(typeof(UnitEvent), nameof(BaseCheck))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(BaseCheck))] private class BaseState : State { } @@ -135,17 +135,17 @@ private void BaseCheck() private class M7 : Monitor { [Start] - [OnEventDoAction(typeof(UnitEvent), nameof(Check))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(Check))] private class Init : BaseState { } - [OnEventDoAction(typeof(UnitEvent), nameof(BaseCheck))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(BaseCheck))] private class BaseState : BaseBaseState { } - [OnEventDoAction(typeof(UnitEvent), nameof(BaseBaseCheck))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(BaseBaseCheck))] private class BaseBaseState : State { } @@ -174,12 +174,12 @@ private class Init : BaseState { } - [OnEventDoAction(typeof(UnitEvent), nameof(BaseCheck))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(BaseCheck))] private class BaseState : BaseBaseState { } - [OnEventDoAction(typeof(UnitEvent), nameof(BaseBaseCheck))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(BaseBaseCheck))] private class BaseBaseState : State { } @@ -203,7 +203,7 @@ private class Init : BaseState { } - [OnEventGotoState(typeof(UnitEvent), typeof(Done))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Done))] private class BaseState : State { } @@ -222,12 +222,12 @@ private void DoneOnEntry() private class M10 : Monitor { [Start] - [OnEventGotoState(typeof(UnitEvent), typeof(Done))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Done))] private class Init : BaseState { } - [OnEventGotoState(typeof(UnitEvent), typeof(Error))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Error))] private class BaseState : State { } @@ -256,17 +256,17 @@ private void ErrorOnEntry() private class M11 : Monitor { [Start] - [OnEventGotoState(typeof(UnitEvent), typeof(Done))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Done))] private class Init : BaseState { } - [OnEventGotoState(typeof(UnitEvent), typeof(Error))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Error))] private class BaseState : BaseBaseState { } - [OnEventGotoState(typeof(UnitEvent), typeof(Error))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Error))] private class BaseBaseState : State { } @@ -299,12 +299,12 @@ private class Init : BaseState { } - [OnEventGotoState(typeof(UnitEvent), typeof(Done))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Done))] private class BaseState : BaseBaseState { } - [OnEventGotoState(typeof(UnitEvent), typeof(Error))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(Error))] private class BaseBaseState : State { } @@ -336,7 +336,7 @@ public void TestMonitorStateInheritingAbstractState() this.TestWithError(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }, expectedError: "Error reached."); } @@ -376,7 +376,7 @@ public void TestMonitorStateInheritingStateOnEventDoAction() this.TestWithError(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }, expectedError: "Error reached."); } @@ -387,7 +387,7 @@ public void TestMonitorStateOverridingStateOnEventDoAction() this.Test(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }); } @@ -397,7 +397,7 @@ public void TestMonitorStateOverridingTwoStatesOnEventDoAction() this.Test(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }); } @@ -407,7 +407,7 @@ public void TestMonitorStateOverridingDeepStateOnEventDoAction() this.Test(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }); } @@ -417,7 +417,7 @@ public void TestMonitorStateInheritingStateOnEventGotoState() this.TestWithError(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }, expectedError: "Done reached."); } @@ -428,7 +428,7 @@ public void TestMonitorStateOverridingStateOnEventGotoState() this.TestWithError(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }, expectedError: "Done reached."); } @@ -439,7 +439,7 @@ public void TestMonitorStateOverridingTwoStatesOnEventGotoState() this.TestWithError(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }, expectedError: "Done reached."); } @@ -450,7 +450,7 @@ public void TestMonitorStateOverridingDeepStateOnEventGotoState() this.TestWithError(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }, expectedError: "Done reached."); } diff --git a/Tests/Tests.Actors.BugFinding/Specifications/MonitorWildCardEventTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/MonitorWildCardEventTests.cs index 1af48d627..08a406b23 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/MonitorWildCardEventTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/MonitorWildCardEventTests.cs @@ -4,6 +4,7 @@ using Microsoft.Coyote.Specifications; using Xunit; using Xunit.Abstractions; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.BugFinding.Tests.Specifications { @@ -14,6 +15,18 @@ public MonitorWildCardEventTests(ITestOutputHelper output) { } + private class E1 : MonitorEvent + { + } + + private class E2 : MonitorEvent + { + } + + private class E3 : MonitorEvent + { + } + private class M1 : Monitor { [Start] @@ -56,18 +69,6 @@ private void Check() } } - private class E1 : Event - { - } - - private class E2 : Event - { - } - - private class E3 : Event - { - } - [Fact(Timeout = 5000)] public void TestIgnoreWildCardEvent() { diff --git a/Tests/Tests.Actors.BugFinding/Specifications/OverloadedEventHandlerTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/OverloadedEventHandlerTests.cs index 4261babde..4497cfcba 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/OverloadedEventHandlerTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/OverloadedEventHandlerTests.cs @@ -19,12 +19,12 @@ private class Safety : Monitor { [Start] [OnEntry(nameof(InitOnEntry))] - [OnEventDoAction(typeof(UnitEvent), nameof(HandleUnitEvent))] + [OnEventDoAction(typeof(MonitorUnitEvent), nameof(HandleUnitEvent))] public class Init : State { } - private void InitOnEntry() => this.RaiseEvent(UnitEvent.Instance); + private void InitOnEntry() => this.RaiseEvent(MonitorUnitEvent.Instance); #pragma warning disable CA1822 // Mark members as static private void HandleUnitEvent() diff --git a/Tests/Tests.Actors.BugFinding/Specifications/Transitions/StateGroupTests.cs b/Tests/Tests.Actors.BugFinding/Specifications/Transitions/StateGroupTests.cs index 07d17fb31..ae38da614 100644 --- a/Tests/Tests.Actors.BugFinding/Specifications/Transitions/StateGroupTests.cs +++ b/Tests/Tests.Actors.BugFinding/Specifications/Transitions/StateGroupTests.cs @@ -20,13 +20,13 @@ private class Safety : Monitor private class States1 : StateGroup { [Start] - [OnEventGotoState(typeof(UnitEvent), typeof(S2))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(S2))] public class S1 : State { } [OnEntry(nameof(States1S2OnEntry))] - [OnEventGotoState(typeof(UnitEvent), typeof(States2.S1))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(States2.S1))] public class S2 : State { } @@ -35,7 +35,7 @@ public class S2 : State private class States2 : StateGroup { [OnEntry(nameof(States2S1OnEntry))] - [OnEventGotoState(typeof(UnitEvent), typeof(S2))] + [OnEventGotoState(typeof(MonitorUnitEvent), typeof(S2))] public class S1 : State { } @@ -46,9 +46,9 @@ public class S2 : State } } - private void States1S2OnEntry() => this.RaiseEvent(UnitEvent.Instance); + private void States1S2OnEntry() => this.RaiseEvent(MonitorUnitEvent.Instance); - private void States2S1OnEntry() => this.RaiseEvent(UnitEvent.Instance); + private void States2S1OnEntry() => this.RaiseEvent(MonitorUnitEvent.Instance); private void States2S2OnEntry() { @@ -62,7 +62,7 @@ public void TestStateGroup() this.TestWithError(r => { r.RegisterMonitor(); - r.Monitor(UnitEvent.Instance); + r.Monitor(MonitorUnitEvent.Instance); }, expectedError: "Reached test assertion.", replay: true); diff --git a/Tests/Tests.Actors.BugFinding/Timers/StartStopTimerTests.cs b/Tests/Tests.Actors.BugFinding/Timers/StartStopTimerTests.cs index f25bde7db..4618bcee2 100644 --- a/Tests/Tests.Actors.BugFinding/Timers/StartStopTimerTests.cs +++ b/Tests/Tests.Actors.BugFinding/Timers/StartStopTimerTests.cs @@ -17,12 +17,12 @@ public StartStopTimerTests(ITestOutputHelper output) { } - private class TimeoutReceivedEvent : Event - { - } - private class LivenessMonitor : Monitor { + internal class TimeoutReceivedEvent : Event + { + } + [Start] [Hot] [OnEventGotoState(typeof(TimeoutReceivedEvent), typeof(TimeoutReceived))] @@ -50,7 +50,7 @@ protected override Task OnInitializeAsync(Event initialEvent) private void HandleTimeout() { // Timeout in the interval between starting and disposing the timer. - this.Monitor(new TimeoutReceivedEvent()); + this.Monitor(new LivenessMonitor.TimeoutReceivedEvent()); } } @@ -88,7 +88,7 @@ private void Initialize() private void HandleTimeout() { // Timeout in the interval between starting and disposing the timer. - this.Monitor(new TimeoutReceivedEvent()); + this.Monitor(new LivenessMonitor.TimeoutReceivedEvent()); } } diff --git a/Tests/Tests.Actors.BugFinding/Timers/TimerLivenessTests.cs b/Tests/Tests.Actors.BugFinding/Timers/TimerLivenessTests.cs index b5d44adeb..521878047 100644 --- a/Tests/Tests.Actors.BugFinding/Timers/TimerLivenessTests.cs +++ b/Tests/Tests.Actors.BugFinding/Timers/TimerLivenessTests.cs @@ -16,10 +16,6 @@ public TimerLivenessTests(ITestOutputHelper output) { } - private class TimeoutReceivedEvent : Event - { - } - private class Client : StateMachine { [Start] @@ -36,12 +32,16 @@ private void Initialize() private void HandleTimeout() { - this.Monitor(new TimeoutReceivedEvent()); + this.Monitor(new LivenessMonitor.TimeoutReceivedEvent()); } } private class LivenessMonitor : Monitor { + internal class TimeoutReceivedEvent : Event + { + } + [Start] [Hot] [OnEventGotoState(typeof(TimeoutReceivedEvent), typeof(TimeoutReceived))] diff --git a/Tests/Tests.Actors.Performance/Tests.Actors.Performance.csproj b/Tests/Tests.Actors.Performance/Tests.Actors.Performance.csproj index b174dc3f4..dc707ac43 100644 --- a/Tests/Tests.Actors.Performance/Tests.Actors.Performance.csproj +++ b/Tests/Tests.Actors.Performance/Tests.Actors.Performance.csproj @@ -13,7 +13,7 @@ - + diff --git a/Tests/Tests.Actors/Logging/ActorLoggingTests.cs b/Tests/Tests.Actors/Logging/ActorLoggingTests.cs index a4408bce5..295b38432 100644 --- a/Tests/Tests.Actors/Logging/ActorLoggingTests.cs +++ b/Tests/Tests.Actors/Logging/ActorLoggingTests.cs @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -using System; using System.IO; using System.Text; using Microsoft.Coyote.Logging; +using Microsoft.Coyote.Runtime; using Microsoft.Coyote.Tests.Common; using Xunit; using Xunit.Abstractions; @@ -31,9 +31,9 @@ public void TestDefaultActorLogger() using (var interceptor = new ConsoleOutputInterceptor(stream)) { runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); } string result = Encoding.UTF8.GetString(stream.ToArray()).NormalizeNewLines() @@ -56,9 +56,9 @@ public void TestConsoleActorLogger() using (var interceptor = new ConsoleOutputInterceptor(stream)) { runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); } string result = Encoding.UTF8.GetString(stream.ToArray()).NormalizeNewLines() @@ -66,7 +66,7 @@ public void TestConsoleActorLogger() string expected = StringExtensions.FormatLines( " TestMonitor was created.", " TestMonitor enters state 'Init'.", - " TestMonitor is processing event 'SetupEvent' in state 'Init'.", + " TestMonitor is processing event 'TestMonitor+SetupEvent' in state 'Init'.", " TestMonitor executed action 'OnSetup' in state 'Init'.", " M() was created by thread ''.", " N() was created by M().", @@ -83,7 +83,7 @@ public void TestConsoleActorLogger() " M() enqueued event 'E'.", " M() dequeued event 'E'.", " M() invoked action 'Act'.", - " TestMonitor is processing event 'CompletedEvent' in state 'Init'.", + " TestMonitor is processing event 'TestMonitor+CompletedEvent' in state 'Init'.", " TestMonitor executed action 'OnCompleted' in state 'Init'."); expected = expected.NormalizeNewLines().SortLines(); @@ -106,15 +106,15 @@ public void TestCustomActorLogger() Assert.IsType((runtime.Logger as LogWriter).Logger); runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); string result = logger.ToString().RemoveNonDeterministicValues().SortLines(); string expected = StringExtensions.FormatLines( " TestMonitor was created.", " TestMonitor enters state 'Init'.", - " TestMonitor is processing event 'SetupEvent' in state 'Init'.", + " TestMonitor is processing event 'TestMonitor+SetupEvent' in state 'Init'.", " TestMonitor executed action 'OnSetup' in state 'Init'.", " M() was created by thread ''.", " N() was created by M().", @@ -131,7 +131,7 @@ public void TestCustomActorLogger() " M() enqueued event 'E'.", " M() dequeued event 'E'.", " M() invoked action 'Act'.", - " TestMonitor is processing event 'CompletedEvent' in state 'Init'.", + " TestMonitor is processing event 'TestMonitor+CompletedEvent' in state 'Init'.", " TestMonitor executed action 'OnCompleted' in state 'Init'."); expected = expected.NormalizeNewLines().SortLines(); diff --git a/Tests/Tests.Actors/Logging/BaseActorLoggingTests.cs b/Tests/Tests.Actors/Logging/BaseActorLoggingTests.cs index 2a04216dd..0b4f13835 100644 --- a/Tests/Tests.Actors/Logging/BaseActorLoggingTests.cs +++ b/Tests/Tests.Actors/Logging/BaseActorLoggingTests.cs @@ -14,16 +14,16 @@ public BaseActorLoggingTests(ITestOutputHelper output) { } - internal class SetupEvent : Event + internal class TestMonitor : Monitor { - } + internal class SetupEvent : Event + { + } - internal class CompletedEvent : Event - { - } + internal class CompletedEvent : Event + { + } - internal class TestMonitor : Monitor - { [Start] [OnEventDoAction(typeof(SetupEvent), nameof(OnSetup))] [OnEventDoAction(typeof(CompletedEvent), nameof(OnCompleted))] @@ -64,12 +64,22 @@ protected override async Task OnInitializeAsync(Event e) private void Act() { - this.Monitor(new CompletedEvent()); + this.Monitor(new TestMonitor.CompletedEvent()); } } internal class S : Monitor { + internal class E : Event + { + public ActorId Id; + + public E(ActorId id) + { + this.Id = id; + } + } + [Start] [Hot] [OnEventDoAction(typeof(E), nameof(OnE))] @@ -107,8 +117,8 @@ private class Act : State private void ActOnEntry(Event e) { - this.Monitor(e); ActorId m = (e as E).Id; + this.Monitor(new S.E(m)); this.SendEvent(m, new E(this.Id)); } } diff --git a/Tests/Tests.Actors/Logging/CustomActorRuntimeLog.cs b/Tests/Tests.Actors/Logging/CustomActorRuntimeLog.cs index 2fbbcb8dc..c2cb60ede 100644 --- a/Tests/Tests.Actors/Logging/CustomActorRuntimeLog.cs +++ b/Tests/Tests.Actors/Logging/CustomActorRuntimeLog.cs @@ -4,6 +4,7 @@ using System; using System.Text; using Microsoft.Coyote.Actors.Timers; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.Tests.Logging { @@ -121,11 +122,11 @@ public void OnMonitorExecuteAction(string monitorType, string stateName, string } public void OnMonitorProcessEvent(string monitorType, string stateName, string senderName, - string senderType, string senderStateName, Event e) + string senderType, string senderStateName, MonitorEvent e) { } - public void OnMonitorRaiseEvent(string monitorType, string stateName, Event e) + public void OnMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e) { } diff --git a/Tests/Tests.Actors/Logging/CustomActorRuntimeLogTextFormatter.cs b/Tests/Tests.Actors/Logging/CustomActorRuntimeLogTextFormatter.cs index 176b3ca34..722cc239f 100644 --- a/Tests/Tests.Actors/Logging/CustomActorRuntimeLogTextFormatter.cs +++ b/Tests/Tests.Actors/Logging/CustomActorRuntimeLogTextFormatter.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using System; +using MonitorEvent = Microsoft.Coyote.Specifications.Monitor.Event; namespace Microsoft.Coyote.Actors.Tests.Logging { @@ -50,11 +51,11 @@ public override void OnMonitorExecuteAction(string monitorType, string stateName /// public override void OnMonitorProcessEvent(string monitorType, string stateName, string senderName, - string senderType, string senderStateName, Event e) => + string senderType, string senderStateName, MonitorEvent e) => this.Logger.WriteLine(""); /// - public override void OnMonitorRaiseEvent(string monitorType, string stateName, Event e) => + public override void OnMonitorRaiseEvent(string monitorType, string stateName, MonitorEvent e) => this.Logger.WriteLine(""); /// diff --git a/Tests/Tests.Actors/Logging/GraphLoggingTests.cs b/Tests/Tests.Actors/Logging/GraphLoggingTests.cs index b98f1f7c4..f33b80802 100644 --- a/Tests/Tests.Actors/Logging/GraphLoggingTests.cs +++ b/Tests/Tests.Actors/Logging/GraphLoggingTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Microsoft.Coyote.Actors.Coverage; using Microsoft.Coyote.Logging; +using Microsoft.Coyote.Runtime; using Microsoft.Coyote.Tests.Common; using Xunit; using Xunit.Abstractions; @@ -24,13 +25,13 @@ public void TestGraphLogger() this.Test(async runtime => { runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); var graphBuilder = new ActorRuntimeLogGraphBuilder(false, false); runtime.RegisterLog(graphBuilder); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); string result = graphBuilder.Graph.ToString().RemoveNonDeterministicValues(); string expected = StringExtensions.FormatLines( @@ -48,13 +49,13 @@ public void TestGraphLogger() $" ", $" ", $" ", - $" ", + $" ", $" ", $" ", $" ", $" ", $" ", - $" ", + $" ", " ", ""); expected = expected.RemoveNonDeterministicValues(); @@ -146,7 +147,7 @@ private class Complete : State private void HandleComplete() { this.Logger.WriteLine("Test Complete"); - this.Monitor(new CompletedEvent()); + this.Monitor(new TestMonitor.CompletedEvent()); } } @@ -157,7 +158,7 @@ public void TestGraphLoggerInstances() this.Test(async runtime => { runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); var graphBuilder = new ActorRuntimeLogGraphBuilder(false, false); runtime.RegisterLog(graphBuilder); @@ -167,7 +168,7 @@ public void TestGraphLoggerInstances() runtime.CreateActor(typeof(Client), new ClientSetupEvent(serverId)); runtime.CreateActor(typeof(Client), new ClientSetupEvent(serverId)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); string result = graphBuilder.Graph.ToString().RemoveInstanceIds(); this.TestOutput.WriteLine(result); @@ -185,7 +186,7 @@ public void TestGraphLoggerCollapsed() this.Test(async runtime => { runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); var graphBuilder = new ActorRuntimeLogGraphBuilder(false, true); runtime.RegisterLog(graphBuilder); @@ -195,7 +196,7 @@ public void TestGraphLoggerCollapsed() runtime.CreateActor(typeof(Client), new ClientSetupEvent(serverId)); runtime.CreateActor(typeof(Client), new ClientSetupEvent(serverId)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); string result = graphBuilder.Graph.ToString().RemoveInstanceIds(); this.TestOutput.WriteLine(result); diff --git a/Tests/Tests.Actors/Logging/RuntimeLogTests.cs b/Tests/Tests.Actors/Logging/RuntimeLogTests.cs index 6bc514ad5..6d485ce80 100644 --- a/Tests/Tests.Actors/Logging/RuntimeLogTests.cs +++ b/Tests/Tests.Actors/Logging/RuntimeLogTests.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using Microsoft.Coyote.Logging; +using Microsoft.Coyote.Runtime; using Microsoft.Coyote.Tests.Common; using Xunit; using Xunit.Abstractions; @@ -24,14 +25,14 @@ public void TestCustomActorRuntimeLog() Assert.IsType((runtime.Logger as LogWriter).Logger); runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); runtime.RegisterMonitor(); var log = new CustomActorRuntimeLog(); runtime.RegisterLog(log); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); string result = log.ToString().RemoveNonDeterministicValues().FormatNewLine(); string expected = StringExtensions.FormatLines( diff --git a/Tests/Tests.Actors/Logging/RuntimeLogTextFormattingTests.cs b/Tests/Tests.Actors/Logging/RuntimeLogTextFormattingTests.cs index 1512634ba..a70b698cb 100644 --- a/Tests/Tests.Actors/Logging/RuntimeLogTextFormattingTests.cs +++ b/Tests/Tests.Actors/Logging/RuntimeLogTextFormattingTests.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using Microsoft.Coyote.Logging; +using Microsoft.Coyote.Runtime; using Microsoft.Coyote.Tests.Common; using Xunit; using Xunit.Abstractions; @@ -32,9 +33,9 @@ public void TestDefaultActorLoggerWithCustomFormatter() runtime.RegisterLog(log); runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); } string result = Encoding.UTF8.GetString(stream.ToArray()).NormalizeNewLines() @@ -60,9 +61,9 @@ public void TestConsoleActorLoggerWithCustomFormatter() runtime.RegisterLog(log); runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); } string result = Encoding.UTF8.GetString(stream.ToArray()).NormalizeNewLines() @@ -111,9 +112,9 @@ public void TestCustomActorLoggerWithCustomFormatter() runtime.RegisterLog(log); runtime.RegisterMonitor(); - runtime.Monitor(new SetupEvent()); + runtime.Monitor(new TestMonitor.SetupEvent()); runtime.CreateActor(typeof(M)); - await (runtime as ActorExecutionContext).WaitUntilQuiescenceAsync(); + await (runtime as IRuntimeExtension).WaitUntilQuiescenceAsync(); string result = logger.ToString().RemoveNonDeterministicValues().SortLines(); string expected = StringExtensions.FormatLines( diff --git a/Tests/Tests.Actors/Operations/CreateActorIdFromNameTests.cs b/Tests/Tests.Actors/Operations/CreateActorIdFromNameTests.cs index 0f1c22217..625837861 100644 --- a/Tests/Tests.Actors/Operations/CreateActorIdFromNameTests.cs +++ b/Tests/Tests.Actors/Operations/CreateActorIdFromNameTests.cs @@ -18,23 +18,23 @@ public CreateActorIdFromNameTests(ITestOutputHelper output) { } - private class SetupEvent : Event + private class TestMonitor : Monitor { - internal TaskCompletionSource Completed = new TaskCompletionSource(); - internal int Count; - - public SetupEvent(int count = 1) + internal class SetupEvent : Event { - this.Count = count; + internal TaskCompletionSource Completed = new TaskCompletionSource(); + internal int Count; + + public SetupEvent(int count = 1) + { + this.Count = count; + } } - } - private class CompletedEvent : Event - { - } + internal class CompletedEvent : Event + { + } - private class TestMonitor : Monitor - { private SetupEvent Setup; [Start] @@ -69,7 +69,7 @@ private class Init : State private void InitOnEntry() { - this.Monitor(new CompletedEvent()); + this.Monitor(new TestMonitor.CompletedEvent()); } } @@ -78,7 +78,7 @@ public void TestCreateActorIdFromName1() { this.Test(async r => { - var setup = new SetupEvent(2); + var setup = new TestMonitor.SetupEvent(2); r.RegisterMonitor(); r.Monitor(setup); var m1 = r.CreateActor(typeof(M)); @@ -95,7 +95,7 @@ public void TestCreateActorIdFromName2() { this.Test(async r => { - var setup = new SetupEvent(2); + var setup = new TestMonitor.SetupEvent(2); r.RegisterMonitor(); r.Monitor(setup); var m1 = r.CreateActorIdFromName(typeof(M), "M1"); @@ -117,7 +117,7 @@ private class S : State protected override SystemTask OnHaltAsync(Event e) { - this.Monitor(new CompletedEvent()); + this.Monitor(new TestMonitor.CompletedEvent()); return base.OnHaltAsync(e); } } @@ -180,7 +180,7 @@ private class S : State private void Process() { - this.Monitor(new CompletedEvent()); + this.Monitor(new TestMonitor.CompletedEvent()); } } @@ -268,7 +268,7 @@ public void TestCreateActorIdFromName8() { this.Test(async r => { - var setup = new SetupEvent(); + var setup = new TestMonitor.SetupEvent(); r.RegisterMonitor(); r.Monitor(setup); r.CreateActor(typeof(M7)); diff --git a/Tests/Tests.Actors/Operations/SendAndExecuteTests.cs b/Tests/Tests.Actors/Operations/SendAndExecuteTests.cs index 2c79d96f3..494fa5ec9 100644 --- a/Tests/Tests.Actors/Operations/SendAndExecuteTests.cs +++ b/Tests/Tests.Actors/Operations/SendAndExecuteTests.cs @@ -62,14 +62,6 @@ private class E3 : Event { } - private class MHalts : Event - { - } - - private class SEReturns : Event - { - } - private class M1 : StateMachine { [Start] @@ -211,7 +203,7 @@ private async Task InitOnEntry(Event e) var tcs = (e as Config1).Tcs; var m = await this.Context.CreateActorAndExecuteAsync(typeof(N3)); var handled = await this.Context.SendEventAndExecuteAsync(m, new E3()); - this.Monitor(new SEReturns()); + this.Monitor(new SafetyMonitor.SEReturns()); this.Assert(handled); tcs.TrySetResult(true); } @@ -229,13 +221,21 @@ private class Init : State protected override Task OnHaltAsync(Event e) { - this.Monitor(new MHalts()); + this.Monitor(new SafetyMonitor.MHalts()); return Task.CompletedTask; } } private class SafetyMonitor : Monitor { + internal class SEReturns : Event + { + } + + internal class MHalts : Event + { + } + private bool MHalted = false; private bool SEReturned = false; diff --git a/Tests/Tests.Actors/Runtime/OnEventDroppedTests.cs b/Tests/Tests.Actors/Runtime/OnEventDroppedTests.cs index dbdd1273e..b76c9ff0b 100644 --- a/Tests/Tests.Actors/Runtime/OnEventDroppedTests.cs +++ b/Tests/Tests.Actors/Runtime/OnEventDroppedTests.cs @@ -18,7 +18,6 @@ public OnEventDroppedTests(ITestOutputHelper output) private class E : Event { public ActorId Id; - public TaskCompletionSource Tcs; public E() { @@ -28,11 +27,6 @@ public E(ActorId id) { this.Id = id; } - - public E(TaskCompletionSource tcs) - { - this.Tcs = tcs; - } } private class M1 : StateMachine @@ -132,27 +126,37 @@ await this.RunAsync(async r => }); } - private class EventProcessed : Event + private class Monitor3 : Monitor { - } + internal class SetupEvent : Event + { + public TaskCompletionSource Tcs; - private class EventDropped : Event - { - } + public SetupEvent(TaskCompletionSource tcs) + { + this.Tcs = tcs; + } + } + + internal class EventProcessed : Event + { + } + + internal class EventDropped : Event + { + } - private class Monitor3 : Monitor - { private TaskCompletionSource Tcs; [Start] - [OnEventDoAction(typeof(E), nameof(InitOnEntry))] + [OnEventDoAction(typeof(SetupEvent), nameof(InitOnEntry))] private class S0 : State { } private void InitOnEntry(Event e) { - this.Tcs = (e as E).Tcs; + this.Tcs = (e as SetupEvent).Tcs; this.RaiseGotoStateEvent(); } @@ -211,7 +215,7 @@ private class Init : State private void Processed() { - this.Monitor(new EventProcessed()); + this.Monitor(new Monitor3.EventProcessed()); } } @@ -224,7 +228,7 @@ await this.RunAsync(async r => var tcs = new TaskCompletionSource(); r.RegisterMonitor(); - r.Monitor(new E(tcs)); + r.Monitor(new Monitor3.SetupEvent(tcs)); r.OnFailure += (ex) => { @@ -234,7 +238,7 @@ await this.RunAsync(async r => r.OnEventDropped += (e, target) => { - r.Monitor(new EventDropped()); + r.Monitor(new Monitor3.EventDropped()); }; var m = r.CreateActor(typeof(M3c)); diff --git a/Tests/Tests.BugFinding/Specifications/MonitorSemanticsTests.cs b/Tests/Tests.BugFinding/Specifications/MonitorSemanticsTests.cs index dade0d7b9..c57bf630f 100644 --- a/Tests/Tests.BugFinding/Specifications/MonitorSemanticsTests.cs +++ b/Tests/Tests.BugFinding/Specifications/MonitorSemanticsTests.cs @@ -15,7 +15,7 @@ public MonitorSemanticsTests(ITestOutputHelper output) { } - private class Notify : Event + private class Notify : Monitor.Event { } diff --git a/Tests/Tests.BugFinding/Specifications/TaskLivenessMonitorTests.cs b/Tests/Tests.BugFinding/Specifications/TaskLivenessMonitorTests.cs index 4515c87ec..d287b134d 100644 --- a/Tests/Tests.BugFinding/Specifications/TaskLivenessMonitorTests.cs +++ b/Tests/Tests.BugFinding/Specifications/TaskLivenessMonitorTests.cs @@ -15,7 +15,7 @@ public TaskLivenessMonitorTests(ITestOutputHelper output) { } - private class Notify : Event + private class Notify : Monitor.Event { } diff --git a/Tests/Tests.BugFinding/Specifications/TaskSafetyMonitorTests.cs b/Tests/Tests.BugFinding/Specifications/TaskSafetyMonitorTests.cs index a89995212..52f05eb30 100644 --- a/Tests/Tests.BugFinding/Specifications/TaskSafetyMonitorTests.cs +++ b/Tests/Tests.BugFinding/Specifications/TaskSafetyMonitorTests.cs @@ -15,7 +15,7 @@ public TaskSafetyMonitorTests(ITestOutputHelper output) { } - private class Notify : Event + private class Notify : Monitor.Event { } diff --git a/Tests/Tests.Common/BaseTest.cs b/Tests/Tests.Common/BaseTest.cs index 795a1fd59..86279da25 100644 --- a/Tests/Tests.Common/BaseTest.cs +++ b/Tests/Tests.Common/BaseTest.cs @@ -113,7 +113,7 @@ protected string TestCoverage(Action test, Configuration configur { TestReport report = this.RunSystematicTest(test, configuration); using var writer = new StringWriter(); - var activityCoverageReporter = new ActivityCoverageReporter(report.CoverageInfo); + var activityCoverageReporter = new ActorActivityCoverageReporter(report.CoverageInfo); activityCoverageReporter.WriteCoverageText(writer); string result = writer.ToString().RemoveNamespaceReferences(); return result; @@ -287,13 +287,13 @@ private void RunSystematicTestWithErrors(Delegate test, Configuration configurat using var logger = new TestOutputLogger(this.TestOutput); try { - using var engine = RunTestingEngine(test, configuration, logger); + using TestingEngine engine = RunTestingEngine(test, configuration, logger); CheckErrors(engine, errorChecker); if (replay && this.SchedulingPolicy is SchedulingPolicy.Interleaving) { configuration.WithReproducibleTrace(engine.ReproducibleTrace); - using var replayEngine = RunTestingEngine(test, configuration, logger); + using TestingEngine replayEngine = RunTestingEngine(test, configuration, logger); string replayError = replayEngine.Scheduler.GetLastError(); Assert.True(replayError.Length is 0, replayError); CheckErrors(replayEngine, errorChecker); @@ -376,13 +376,13 @@ private void RunSystematicTestWithException(Delegate test, Configura using var logger = new TestOutputLogger(this.TestOutput); try { - using var engine = RunTestingEngine(test, configuration, logger); + using TestingEngine engine = RunTestingEngine(test, configuration, logger); CheckErrors(engine, exceptionType); if (replay && this.SchedulingPolicy is SchedulingPolicy.Interleaving) { configuration.WithReproducibleTrace(engine.ReproducibleTrace); - using var replayEngine = RunTestingEngine(test, configuration, logger); + using TestingEngine replayEngine = RunTestingEngine(test, configuration, logger); string replayError = replayEngine.Scheduler.GetLastError(); Assert.True(replayError.Length is 0, replayError); CheckErrors(replayEngine, exceptionType); diff --git a/Tests/Tests.Common/Events/MonitorUnitEvent.cs b/Tests/Tests.Common/Events/MonitorUnitEvent.cs new file mode 100644 index 000000000..538f90eeb --- /dev/null +++ b/Tests/Tests.Common/Events/MonitorUnitEvent.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using Microsoft.Coyote.Specifications; + +namespace Microsoft.Coyote.Tests.Common.Events +{ + ///

+ /// Basic event that contains no payload. + /// + public sealed class MonitorUnitEvent : Monitor.Event + { + /// + /// Gets an instance of this event. + /// + public static MonitorUnitEvent Instance { get; } = new MonitorUnitEvent(); + + /// + /// Initializes a new instance of the class. + /// + private MonitorUnitEvent() + : base() + { + } + } +} diff --git a/Tests/Tests.Common/Events/UnitEvent.cs b/Tests/Tests.Common/Events/UnitEvent.cs index 3e07cb76b..2c5b647b9 100644 --- a/Tests/Tests.Common/Events/UnitEvent.cs +++ b/Tests/Tests.Common/Events/UnitEvent.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +using Microsoft.Coyote.Actors; + namespace Microsoft.Coyote.Tests.Common.Events { /// diff --git a/Tests/compare-rewriting-diff-logs.ps1 b/Tests/compare-rewriting-diff-logs.ps1 index 0d85b1bc8..819b46b19 100644 --- a/Tests/compare-rewriting-diff-logs.ps1 +++ b/Tests/compare-rewriting-diff-logs.ps1 @@ -16,8 +16,8 @@ $expected_hashes = [ordered]@{ "rewriting" = "2BAA1A91DBD6BC406BE564C34DE3B7B03FE1A6251C91F781880D4688F99C13DF" "rewriting-helpers" = "CC82EC742BDC1B678A89EC952257290AF8D935FA0DB1E8C5BB591D9AB3E18C77" "testing" = "37A8AE3E92E2A07AA7DB57C3BC3D5B3FAAAE4E6D3D06673AB2BB353D28509880" - "actors" = "E6E4AF71A6AD9EAC7F558F94E4A37F499EFC259B6A58D67BA16B0D0162525928" - "actors-testing" = "9392BAE6C2814A614B106C15CDD99FBFA2C29A9025F23250C7D13084FEB7572E" + "actors" = "081E821326C12C11549C4091740D88360AE445619C413251F1B9A4B53053CE8B" + "actors-testing" = "E3611899F5BA62F32719BF59073C69E34CFECB3D9177CEE9FA6A3C3C5D4EE8C0" } Write-Comment -prefix "." -text "Comparing the test rewriting diff logs" -color "yellow" diff --git a/Tools/CoverageReportMerger/CoverageReportMerger.csproj b/Tools/CoverageReportMerger/CoverageReportMerger.csproj index 2f3065f15..fad8b02e0 100644 --- a/Tools/CoverageReportMerger/CoverageReportMerger.csproj +++ b/Tools/CoverageReportMerger/CoverageReportMerger.csproj @@ -12,5 +12,6 @@ + \ No newline at end of file diff --git a/Tools/CoverageReportMerger/Program.cs b/Tools/CoverageReportMerger/Program.cs index eb985912d..660109dec 100644 --- a/Tools/CoverageReportMerger/Program.cs +++ b/Tools/CoverageReportMerger/Program.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using Microsoft.Coyote.Actors.Coverage; +using Microsoft.Coyote.Coverage; namespace Microsoft.Coyote { diff --git a/docs/concepts/actors/overview.md b/docs/concepts/actors/overview.md index 9c179066c..0673de44b 100644 --- a/docs/concepts/actors/overview.md +++ b/docs/concepts/actors/overview.md @@ -26,9 +26,10 @@ See also: [how are Coyote Actors different from existing Microsoft Actor framewo ### Declaring and creating actors -An actor based program in Coyote is a normal .NET program that also uses the `Actor` or -`StateMachine` base classes from the `Microsoft.Coyote.Actors` namespace, as well as the `Event` -base class from the `Microsoft.Coyote` namespace. Actors can be declared in the following way: +An actor based program in Coyote is a normal .NET program that also uses the `Actor`, `StateMachine` +and `Event` base classes from the `Microsoft.Coyote.Actors` namespace, which is available in the +[Microsoft.Coyote.Actors NuGet package](https://www.nuget.org/packages/Microsoft.Coyote.Actors/). +Actors can be declared in the following way: ```csharp using Microsoft.Coyote.Actors; @@ -72,10 +73,10 @@ To create the first instance of an `Actor` you need to initialize the Coyote act your C# process (typically in the `Main` method). An example of this is the following: ```csharp +using System; using Microsoft.Coyote; using Microsoft.Coyote.Actors; using Microsoft.Coyote.SystematicTesting; -using System; class Program { @@ -94,9 +95,9 @@ class Program } ``` -You must first import the Coyote runtime library (`Microsoft.Coyote.dll`), which you can get from -[NuGet](https://www.nuget.org/packages/Microsoft.Coyote/), then create a `runtime` instance (of type -`IActorRuntime`) which you pass to a `[Test]` method. +You must first import the Coyote actor runtime library (`Microsoft.Coyote.Actors.dll`), which you +can get from [NuGet](https://www.nuget.org/packages/Microsoft.Coyote.Actors/), then create a +`runtime` instance (of type `IActorRuntime`) which you pass to a `[Test]` method. The test method named `Execute` will be the entry point that is used during testing of your Coyote program. In this case it simply invokes the `CreateActor` method of the `runtime` to instantiate the @@ -115,7 +116,7 @@ The `IActorRuntime` interface also provides the `SendEvent` method for sending e actor. This method accepts as parameters an object of type `ActorId` and an event object. It also has a couple more advanced parameters which you don't need to worry about right now. -An event can be created by sub-classing from `Microsoft.Coyote.Event`: +An event can be created by sub-classing from `Microsoft.Coyote.Actors.Event`: ```csharp class PingEvent : Event diff --git a/docs/concepts/specifications.md b/docs/concepts/specifications.md index 7917acd2e..94739b33f 100644 --- a/docs/concepts/specifications.md +++ b/docs/concepts/specifications.md @@ -23,6 +23,7 @@ a program but not influence it: a desirable property when writing specifications `Monitor` is declared as follows: ```csharp +using Microsoft.Coyote.Specifications; class GlobalSpec : Monitor { ... } ``` @@ -51,7 +52,9 @@ is local to `A` or `B` because both `x` and `y` live in different places. So we are within the required bound. ```csharp -public class UpdatedXEvent : Event +using Microsoft.Coyote.Specifications; + +public class UpdatedXEvent : Monitor.Event { public int value { get; private set; } public UpdatedXEvent(int value) @@ -60,7 +63,7 @@ public class UpdatedXEvent : Event } } -public class UpdatedYEvent : Event +public class UpdatedYEvent : Monitor.Event { public int value { get; private set; } @@ -144,9 +147,10 @@ execution is erroneous if the liveness monitor stays in the hot state for an inf of time. Consider the following example. ```csharp +using Microsoft.Coyote.Specifications; -class UpEvent : Event { } -class DownEvent : Event { } +class UpEvent : Monitor.Event { } +class DownEvent : Monitor.Event { } class LivenessMonitor : Monitor { diff --git a/docs/get-started/upgrade-from-psharp.md b/docs/get-started/upgrade-from-psharp.md index d798ebd77..17479e1af 100644 --- a/docs/get-started/upgrade-from-psharp.md +++ b/docs/get-started/upgrade-from-psharp.md @@ -2,6 +2,8 @@ This document contains a list of changes from P# to Coyote. Please follow this guide in order to upgrade your applications and services. Contact us if you have any questions or face any issues. +**Note:** This page is not actively maintained, and changes from P# might have evolved further. + ## General changes - Consume the `Microsoft.Coyote` NuGet package, instead of the `Microsoft.PSharp` NuGet package. diff --git a/docs/ref/Microsoft.Coyote.Actors.CoverageNamespace.md b/docs/ref/Microsoft.Coyote.Actors.CoverageNamespace.md index 99886a1be..f09487ad6 100644 --- a/docs/ref/Microsoft.Coyote.Actors.CoverageNamespace.md +++ b/docs/ref/Microsoft.Coyote.Actors.CoverageNamespace.md @@ -2,11 +2,7 @@ | public type | description | | --- | --- | -| class [CoverageInfo](./Microsoft.Coyote.Actors.Coverage/CoverageInfo.md) | Class for storing actor coverage-specific data across multiple testing iterations. | -| class [EventCoverage](./Microsoft.Coyote.Actors.Coverage/EventCoverage.md) | This class maintains information about events received and sent from each state of each actor. | -| class [Graph](./Microsoft.Coyote.Actors.Coverage/Graph.md) | A directed graph made up of Nodes and Links. | -| class [GraphLink](./Microsoft.Coyote.Actors.Coverage/GraphLink.md) | A Link represents a directed graph connection between two Nodes. | -| class [GraphNode](./Microsoft.Coyote.Actors.Coverage/GraphNode.md) | A Node of a Graph. | -| class [GraphObject](./Microsoft.Coyote.Actors.Coverage/GraphObject.md) | A Node of a Graph. | +| class [ActorCoverageInfo](./Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo.md) | Class for storing actor coverage-specific data across multiple testing iterations. | +| class [ActorEventCoverage](./Microsoft.Coyote.Actors.Coverage/ActorEventCoverage.md) | This class maintains information about events received and sent from each state of each actor. | - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter.md index a9390aa19..e6800b229 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter.md @@ -25,6 +25,6 @@ See also [Sharing Objects](/coyote/concepts/actors/sharing-objects). ## See Also * namespace [Microsoft.Coyote.Actors.SharedObjects](../Microsoft.Coyote.Actors.SharedObjectsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Add.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Add.md index b4682bd44..d1c8d23a4 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Add.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Add.md @@ -10,6 +10,6 @@ public virtual int Add(int value) * class [SharedCounter](../SharedCounter.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedCounter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/CompareExchange.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/CompareExchange.md index 16a5688aa..0534cfccb 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/CompareExchange.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/CompareExchange.md @@ -10,6 +10,6 @@ public virtual int CompareExchange(int value, int comparand) * class [SharedCounter](../SharedCounter.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedCounter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Create.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Create.md index 01cbe5cf2..9522918fa 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Create.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Create.md @@ -16,6 +16,6 @@ public static SharedCounter Create(IActorRuntime runtime, int value = 0) * interface [IActorRuntime](../../Microsoft.Coyote.Actors/IActorRuntime.md) * class [SharedCounter](../SharedCounter.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedCounter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Decrement.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Decrement.md index 2eb563490..7e0ef340d 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Decrement.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Decrement.md @@ -10,6 +10,6 @@ public virtual void Decrement() * class [SharedCounter](../SharedCounter.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedCounter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Exchange.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Exchange.md index 9b7e81bd8..6f96c19c3 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Exchange.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Exchange.md @@ -10,6 +10,6 @@ public virtual int Exchange(int value) * class [SharedCounter](../SharedCounter.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedCounter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/GetValue.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/GetValue.md index 5c7111d6b..b9ac060ed 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/GetValue.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/GetValue.md @@ -10,6 +10,6 @@ public virtual int GetValue() * class [SharedCounter](../SharedCounter.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedCounter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Increment.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Increment.md index 1d38a2a74..9a60a1e68 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Increment.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Increment.md @@ -10,6 +10,6 @@ public virtual void Increment() * class [SharedCounter](../SharedCounter.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedCounter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2.md index d94587adf..5310c2d58 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2.md @@ -25,6 +25,6 @@ public class SharedDictionary ## See Also * namespace [Microsoft.Coyote.Actors.SharedObjects](../Microsoft.Coyote.Actors.SharedObjectsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Count.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Count.md index 0902eb084..fbe734ea9 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Count.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Count.md @@ -10,6 +10,6 @@ public virtual int Count { get; } * class [SharedDictionary<TKey,TValue>](../SharedDictionary-2.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary-2.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Item.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Item.md index 0c8b73870..669e2d496 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Item.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Item.md @@ -10,6 +10,6 @@ public virtual TValue this[TKey key] { get; set; } * class [SharedDictionary<TKey,TValue>](../SharedDictionary-2.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary-2.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryAdd.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryAdd.md index 97b9e078b..e5a4141e4 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryAdd.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryAdd.md @@ -10,6 +10,6 @@ public virtual bool TryAdd(TKey key, TValue value) * class [SharedDictionary<TKey,TValue>](../SharedDictionary-2.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary-2.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryGetValue.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryGetValue.md index b559289bd..ebc12dd9e 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryGetValue.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryGetValue.md @@ -10,6 +10,6 @@ public virtual bool TryGetValue(TKey key, out TValue value) * class [SharedDictionary<TKey,TValue>](../SharedDictionary-2.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary-2.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryRemove.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryRemove.md index e0a650f0e..cc30e4dc7 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryRemove.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryRemove.md @@ -10,6 +10,6 @@ public virtual bool TryRemove(TKey key, out TValue value) * class [SharedDictionary<TKey,TValue>](../SharedDictionary-2.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary-2.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryUpdate.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryUpdate.md index 22860ba30..e7042fdb0 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryUpdate.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryUpdate.md @@ -10,6 +10,6 @@ public virtual bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue) * class [SharedDictionary<TKey,TValue>](../SharedDictionary-2.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary-2.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary.md index 9e734d4ee..d882b7ed4 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary.md @@ -19,6 +19,6 @@ See also [Sharing Objects](/coyote/concepts/actors/sharing-objects). ## See Also * namespace [Microsoft.Coyote.Actors.SharedObjects](../Microsoft.Coyote.Actors.SharedObjectsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary/Create.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary/Create.md index f8d2e8fb0..103bc23d4 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary/Create.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary/Create.md @@ -18,7 +18,7 @@ public static SharedDictionary Create(IActorRuntime * interface [IActorRuntime](../../Microsoft.Coyote.Actors/IActorRuntime.md) * class [SharedDictionary](../SharedDictionary.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -44,6 +44,6 @@ public static SharedDictionary Create(IEqualityCompa * interface [IActorRuntime](../../Microsoft.Coyote.Actors/IActorRuntime.md) * class [SharedDictionary](../SharedDictionary.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedDictionary.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1.md index eba7e820f..6310420ba 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1.md @@ -22,6 +22,6 @@ public class SharedRegister ## See Also * namespace [Microsoft.Coyote.Actors.SharedObjects](../Microsoft.Coyote.Actors.SharedObjectsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/GetValue.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/GetValue.md index 11f414c0b..1d96312f6 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/GetValue.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/GetValue.md @@ -10,6 +10,6 @@ public virtual T GetValue() * class [SharedRegister<T>](../SharedRegister-1.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedRegister-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/SetValue.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/SetValue.md index 173003eed..2c92ec88b 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/SetValue.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/SetValue.md @@ -10,6 +10,6 @@ public virtual void SetValue(T value) * class [SharedRegister<T>](../SharedRegister-1.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedRegister-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/Update.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/Update.md index 910b49a69..8c3ee440f 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/Update.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/Update.md @@ -10,6 +10,6 @@ public virtual T Update(Func func) * class [SharedRegister<T>](../SharedRegister-1.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedRegister-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister.md index 3b90624bf..4da11f50c 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister.md @@ -19,6 +19,6 @@ See also [Sharing Objects](/coyote/concepts/actors/sharing-objects). ## See Also * namespace [Microsoft.Coyote.Actors.SharedObjects](../Microsoft.Coyote.Actors.SharedObjectsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister/Create.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister/Create.md index d9b69bcfc..eb0db86fa 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister/Create.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister/Create.md @@ -19,6 +19,6 @@ public static SharedRegister Create(IActorRuntime runtime, T value = defau * interface [IActorRuntime](../../Microsoft.Coyote.Actors/IActorRuntime.md) * class [SharedRegister](../SharedRegister.md) * namespace [Microsoft.Coyote.Actors.SharedObjects](../SharedRegister.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.SharedObjectsNamespace.md b/docs/ref/Microsoft.Coyote.Actors.SharedObjectsNamespace.md index 9d9985962..2dfc6ab03 100644 --- a/docs/ref/Microsoft.Coyote.Actors.SharedObjectsNamespace.md +++ b/docs/ref/Microsoft.Coyote.Actors.SharedObjectsNamespace.md @@ -8,4 +8,4 @@ | class [SharedRegister<T>](./Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1.md) | A thread-safe register that can be shared in-memory by actors. | | static class [SharedRegister](./Microsoft.Coyote.Actors.SharedObjects/SharedRegister.md) | A thread-safe register that can be shared in-memory by actors. | - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md index a19d14544..258385c5a 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md @@ -19,8 +19,8 @@ See [Using timers in actors](/coyote/concepts/actors/timers) for more informatio ## See Also -* class [Event](../Microsoft.Coyote/Event.md) +* class [Event](../Microsoft.Coyote.Actors/Event.md) * namespace [Microsoft.Coyote.Actors.Timers](../Microsoft.Coyote.Actors.TimersNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/Info.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/Info.md index 0682d0156..b81ef438f 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/Info.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/Info.md @@ -11,6 +11,6 @@ public TimerInfo Info { get; } * class [TimerInfo](../TimerInfo.md) * class [TimerElapsedEvent](../TimerElapsedEvent.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerElapsedEvent.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/TimerElapsedEvent.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/TimerElapsedEvent.md index 383a1acd6..84a84a146 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/TimerElapsedEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/TimerElapsedEvent.md @@ -10,6 +10,6 @@ public TimerElapsedEvent() * class [TimerElapsedEvent](../TimerElapsedEvent.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerElapsedEvent.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo.md index 76186c462..e08a63803 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo.md @@ -26,6 +26,6 @@ See [Using timers in actors](/coyote/concepts/actors/timers) for more informatio ## See Also * namespace [Microsoft.Coyote.Actors.Timers](../Microsoft.Coyote.Actors.TimersNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/CustomEvent.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/CustomEvent.md index b1733d26d..49dbde044 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/CustomEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/CustomEvent.md @@ -11,6 +11,6 @@ public readonly TimerElapsedEvent CustomEvent; * class [TimerElapsedEvent](../TimerElapsedEvent.md) * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/DueTime.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/DueTime.md index 4a8b25f30..489eea406 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/DueTime.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/DueTime.md @@ -10,6 +10,6 @@ public readonly TimeSpan DueTime; * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Equals.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Equals.md index 0ccfa9ca3..89703121b 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Equals.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Equals.md @@ -10,7 +10,7 @@ public override bool Equals(object obj) * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -26,6 +26,6 @@ public bool Equals(TimerInfo other) * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/GetHashCode.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/GetHashCode.md index 283524ec0..57d895336 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/GetHashCode.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/GetHashCode.md @@ -10,6 +10,6 @@ public override int GetHashCode() * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/OwnerId.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/OwnerId.md index 387e5a204..d8ddeb363 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/OwnerId.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/OwnerId.md @@ -11,6 +11,6 @@ public readonly ActorId OwnerId; * class [ActorId](../../Microsoft.Coyote.Actors/ActorId.md) * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Period.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Period.md index aad44a8fb..aadde7e88 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Period.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Period.md @@ -10,6 +10,6 @@ public readonly TimeSpan Period; * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/ToString.md b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/ToString.md index 6b24b9db0..3b499a236 100644 --- a/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/ToString.md +++ b/docs/ref/Microsoft.Coyote.Actors.Timers/TimerInfo/ToString.md @@ -10,6 +10,6 @@ public override string ToString() * class [TimerInfo](../TimerInfo.md) * namespace [Microsoft.Coyote.Actors.Timers](../TimerInfo.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors.TimersNamespace.md b/docs/ref/Microsoft.Coyote.Actors.TimersNamespace.md index d10448b56..8a4c7bbc9 100644 --- a/docs/ref/Microsoft.Coyote.Actors.TimersNamespace.md +++ b/docs/ref/Microsoft.Coyote.Actors.TimersNamespace.md @@ -5,4 +5,4 @@ | class [TimerElapsedEvent](./Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md) | Defines a timer elapsed event that is sent from a timer to the actor that owns the timer. | | class [TimerInfo](./Microsoft.Coyote.Actors.Timers/TimerInfo.md) | Stores information about a timer that can send timeout events to its owner actor. | - + diff --git a/docs/ref/Microsoft.Coyote.Actors.md b/docs/ref/Microsoft.Coyote.Actors.md new file mode 100644 index 000000000..72162a5c1 --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Actors.md @@ -0,0 +1,52 @@ +# Microsoft.Coyote.Actors assembly + +## Microsoft.Coyote.Actors namespace + +| public type | description | +| --- | --- | +| abstract class [Actor](./Microsoft.Coyote.Actors/Actor.md) | Type that implements an actor. Inherit from this class to declare a custom actor. | +| enum [ActorExecutionStatus](./Microsoft.Coyote.Actors/ActorExecutionStatus.md) | The execution status of an actor. | +| class [ActorId](./Microsoft.Coyote.Actors/ActorId.md) | Unique actor id. | +| class [ActorRuntimeLogTextFormatter](./Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter.md) | This class implements [`IActorRuntimeLog`](./Microsoft.Coyote.Actors/IActorRuntimeLog.md) and generates output in a a human readable text format. | +| class [AwaitableEventGroup<T>](./Microsoft.Coyote.Actors/AwaitableEventGroup-1.md) | An object representing an awaitable long running context involving one or more actors. An `AwaitableEventGroup` can be provided as an optional argument in CreateActor and SendEvent. If a null `AwaitableEventGroup` is passed then the `EventGroup` is inherited from the sender or target actors (based on which ever one has a [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md)). In this way an `AwaitableEventGroup` is automatically communicated to all actors involved in completing some larger operation. Each actor involved can find the `AwaitableEventGroup` using their [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md) property. | +| class [DefaultEvent](./Microsoft.Coyote.Actors/DefaultEvent.md) | A default event that is generated by the runtime when no user-defined event is dequeued or received. | +| enum [DequeueStatus](./Microsoft.Coyote.Actors/DequeueStatus.md) | The status returned as the result of an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) dequeue operation. | +| abstract class [Event](./Microsoft.Coyote.Actors/Event.md) | Abstract class representing an event that can be send to an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) or [`StateMachine`](./Microsoft.Coyote.Actors/StateMachine.md). | +| class [EventGroup](./Microsoft.Coyote.Actors/EventGroup.md) | An object representing a long running context involving one or more actors. An `EventGroup` can be provided as an optional argument in CreateActor and SendEvent. If a null `EventGroup` is passed then the `EventGroup` is inherited from the sender or target actors (based on which ever one has a [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md)). In this way an `EventGroup` is automatically communicated to all actors involved in completing some larger operation. Each actor involved can find the `EventGroup` using their [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md) property. | +| class [HaltEvent](./Microsoft.Coyote.Actors/HaltEvent.md) | The halt event. | +| interface [IActorRuntime](./Microsoft.Coyote.Actors/IActorRuntime.md) | Interface that exposes runtime methods for creating and executing actors. | +| interface [IActorRuntimeLog](./Microsoft.Coyote.Actors/IActorRuntimeLog.md) | Interface that allows an external module to track what is happening in the [`IActorRuntime`](./Microsoft.Coyote.Actors/IActorRuntime.md). | +| delegate [OnActorHaltedHandler](./Microsoft.Coyote.Actors/OnActorHaltedHandler.md) | Handles the [`OnActorHalted`](./Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md) event. | +| delegate [OnEventDroppedHandler](./Microsoft.Coyote.Actors/OnEventDroppedHandler.md) | Handles the [`OnEventDropped`](./Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md) event. | +| enum [OnExceptionOutcome](./Microsoft.Coyote.Actors/OnExceptionOutcome.md) | The outcome when an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) throws an exception. | +| static class [RuntimeFactory](./Microsoft.Coyote.Actors/RuntimeFactory.md) | Provides methods for creating a [`IActorRuntime`](./Microsoft.Coyote.Actors/IActorRuntime.md) runtime. | +| class [SendOptions](./Microsoft.Coyote.Actors/SendOptions.md) | Represents a send event configuration that is used during testing. | +| abstract class [StateMachine](./Microsoft.Coyote.Actors/StateMachine.md) | Type that implements a state machine actor. Inherit from this class to declare a custom actor with states, state transitions and event handlers. | +| class [UnhandledEventException](./Microsoft.Coyote.Actors/UnhandledEventException.md) | Signals that an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) received an unhandled event. | +| class [WildCardEvent](./Microsoft.Coyote.Actors/WildCardEvent.md) | The wild card event. | + +## Microsoft.Coyote.Actors.Coverage namespace + +| public type | description | +| --- | --- | +| class [ActorCoverageInfo](./Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo.md) | Class for storing actor coverage-specific data across multiple testing iterations. | +| class [ActorEventCoverage](./Microsoft.Coyote.Actors.Coverage/ActorEventCoverage.md) | This class maintains information about events received and sent from each state of each actor. | + +## Microsoft.Coyote.Actors.SharedObjects namespace + +| public type | description | +| --- | --- | +| class [SharedCounter](./Microsoft.Coyote.Actors.SharedObjects/SharedCounter.md) | A thread-safe counter that can be shared in-memory by actors. | +| class [SharedDictionary<TKey,TValue>](./Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2.md) | A thread-safe dictionary that can be shared in-memory by actors. | +| static class [SharedDictionary](./Microsoft.Coyote.Actors.SharedObjects/SharedDictionary.md) | A thread-safe dictionary that can be shared in-memory by actors. | +| class [SharedRegister<T>](./Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1.md) | A thread-safe register that can be shared in-memory by actors. | +| static class [SharedRegister](./Microsoft.Coyote.Actors.SharedObjects/SharedRegister.md) | A thread-safe register that can be shared in-memory by actors. | + +## Microsoft.Coyote.Actors.Timers namespace + +| public type | description | +| --- | --- | +| class [TimerElapsedEvent](./Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md) | Defines a timer elapsed event that is sent from a timer to the actor that owns the timer. | +| class [TimerInfo](./Microsoft.Coyote.Actors.Timers/TimerInfo.md) | Stores information about a timer that can send timeout events to its owner actor. | + + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute.md b/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute.md index bde48725a..58dce9de1 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute.md @@ -17,6 +17,6 @@ protected sealed class OnEventDoActionAttribute : Attribute * class [Actor](./Actor.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute/OnEventDoActionAttribute.md b/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute/OnEventDoActionAttribute.md index 46aa31c34..5e6a31d6f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute/OnEventDoActionAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute/OnEventDoActionAttribute.md @@ -15,6 +15,6 @@ public OnEventDoActionAttribute(Type eventType, string actionName) * class [OnEventDoActionAttribute](../Actor.OnEventDoActionAttribute.md) * namespace [Microsoft.Coyote.Actors](../Actor.OnEventDoActionAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor.md b/docs/ref/Microsoft.Coyote.Actors/Actor.md index 451e32637..8e3f49620 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor.md @@ -23,10 +23,10 @@ public abstract class Actor | virtual [HashedState](Actor/HashedState.md) { get; } | User-defined hashed state of the actor. Override to improve the accuracy of stateful techniques during testing. | | [Id](Actor/Id.md) { get; } | Unique id that identifies this actor. | | [Logger](Actor/Logger.md) { get; } | The logger installed to the runtime. | -| [Assert](Actor/Assert.md)(…) | Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](../Microsoft.Coyote.Runtime/AssertionFailureException.md) exception. (5 methods) | -| [CreateActor](Actor/CreateActor.md)(…) | Creates a new actor of the specified type and with the specified optional [`Event`](../Microsoft.Coyote/Event.md). This [`Event`](../Microsoft.Coyote/Event.md) can only be used to access its payload, and cannot be handled. (3 methods) | -| [Monitor](Actor/Monitor.md)(…) | Invokes the specified monitor with the specified event. | -| [Monitor<T>](Actor/Monitor.md)(…) | Invokes the specified monitor with the specified [`Event`](../Microsoft.Coyote/Event.md). | +| [Assert](Actor/Assert.md)(…) | Checks if the assertion holds, and if not, throws an AssertionFailureException exception. (5 methods) | +| [CreateActor](Actor/CreateActor.md)(…) | Creates a new actor of the specified type and with the specified optional [`Event`](./Event.md). This [`Event`](./Event.md) can only be used to access its payload, and cannot be handled. (3 methods) | +| [Monitor](Actor/Monitor.md)(…) | Invokes the specified monitor with the specified Event. | +| [Monitor<T>](Actor/Monitor.md)(…) | Invokes the specified monitor with the specified Event. | | virtual [OnEventDeferred](Actor/OnEventDeferred.md)(…) | Callback that is invoked when the actor defers dequeing an event from its inbox. | | virtual [OnEventDequeuedAsync](Actor/OnEventDequeuedAsync.md)(…) | Asynchronous callback that is invoked when the actor successfully dequeues an event from its inbox. This method is not called when the dequeue happens via a receive statement. | | virtual [OnEventHandledAsync](Actor/OnEventHandledAsync.md)(…) | Asynchronous callback that is invoked when the actor finishes handling a dequeued event, unless the handler of the dequeued event caused the actor to halt (either normally or due to an exception). The actor will either become idle or dequeue the next event from its inbox. | @@ -37,10 +37,10 @@ public abstract class Actor | virtual [OnHaltAsync](Actor/OnHaltAsync.md)(…) | Asynchronous callback that is invoked when the actor halts. | | virtual [OnInitializeAsync](Actor/OnInitializeAsync.md)(…) | Asynchronous callback that is invoked when the actor is initialized with an optional event. | | [RaiseHaltEvent](Actor/RaiseHaltEvent.md)() | Raises a [`HaltEvent`](./HaltEvent.md) to halt the actor at the end of the current action. | -| [RandomBoolean](Actor/RandomBoolean.md)() | Returns a nondeterministic boolean choice, that can be controlled during analysis or testing. | -| [RandomInteger](Actor/RandomInteger.md)(…) | Returns a nondeterministic integer, that can be controlled during analysis or testing. The value is used to generate an integer in the range [0..maxValue). | -| [ReceiveEventAsync](Actor/ReceiveEventAsync.md)(…) | Waits to receive an [`Event`](../Microsoft.Coyote/Event.md) of the specified type that satisfies an optional predicate. (3 methods) | -| [SendEvent](Actor/SendEvent.md)(…) | Sends an asynchronous [`Event`](../Microsoft.Coyote/Event.md) to a target. | +| [RandomBoolean](Actor/RandomBoolean.md)() | Returns a nondeterministic boolean choice, that can be controlled during testing. | +| [RandomInteger](Actor/RandomInteger.md)(…) | Returns a nondeterministic integer, that can be controlled during testing. The value is used to generate an integer in the range [0..maxValue). | +| [ReceiveEventAsync](Actor/ReceiveEventAsync.md)(…) | Waits to receive an [`Event`](./Event.md) of the specified type that satisfies an optional predicate. (3 methods) | +| [SendEvent](Actor/SendEvent.md)(…) | Sends an asynchronous [`Event`](./Event.md) to a target. | | [StartPeriodicTimer](Actor/StartPeriodicTimer.md)(…) | Starts a periodic timer that sends a [`TimerElapsedEvent`](../Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md) to this actor after the specified due time, and then repeats after each specified period. The timer accepts an optional payload to be used during timeout. The timer can be stopped by invoking the [`StopTimer`](./Actor/StopTimer.md) method. | | [StartTimer](Actor/StartTimer.md)(…) | Starts a timer that sends a [`TimerElapsedEvent`](../Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md) to this actor after the specified due time. The timer accepts an optional payload to be used during timeout. The timer is automatically disposed after it timeouts. To manually stop and dispose the timer, invoke the [`StopTimer`](./Actor/StopTimer.md) method. | | [StopTimer](Actor/StopTimer.md)(…) | Stops and disposes the specified timer. | @@ -53,6 +53,6 @@ See [Programming model: asynchronous actors](/coyote/concepts/actors/overview) f ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/Actor.md b/docs/ref/Microsoft.Coyote.Actors/Actor/Actor.md index ee1426007..693d8440a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/Actor.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/Actor.md @@ -10,6 +10,6 @@ protected Actor() * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/Assert.md b/docs/ref/Microsoft.Coyote.Actors/Actor/Assert.md index e98928935..a5b69b206 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/Assert.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/Assert.md @@ -1,6 +1,6 @@ # Actor.Assert method (1 of 5) -Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](../../Microsoft.Coyote.Runtime/AssertionFailureException.md) exception. +Checks if the assertion holds, and if not, throws an AssertionFailureException exception. ```csharp protected void Assert(bool predicate) @@ -10,13 +10,13 @@ protected void Assert(bool predicate) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.Assert method (2 of 5) -Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](../../Microsoft.Coyote.Runtime/AssertionFailureException.md) exception. +Checks if the assertion holds, and if not, throws an AssertionFailureException exception. ```csharp protected void Assert(bool predicate, string s, object arg0) @@ -26,13 +26,13 @@ protected void Assert(bool predicate, string s, object arg0) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.Assert method (3 of 5) -Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](../../Microsoft.Coyote.Runtime/AssertionFailureException.md) exception. +Checks if the assertion holds, and if not, throws an AssertionFailureException exception. ```csharp protected void Assert(bool predicate, string s, params object[] args) @@ -42,13 +42,13 @@ protected void Assert(bool predicate, string s, params object[] args) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.Assert method (4 of 5) -Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](../../Microsoft.Coyote.Runtime/AssertionFailureException.md) exception. +Checks if the assertion holds, and if not, throws an AssertionFailureException exception. ```csharp protected void Assert(bool predicate, string s, object arg0, object arg1) @@ -58,13 +58,13 @@ protected void Assert(bool predicate, string s, object arg0, object arg1) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.Assert method (5 of 5) -Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](../../Microsoft.Coyote.Runtime/AssertionFailureException.md) exception. +Checks if the assertion holds, and if not, throws an AssertionFailureException exception. ```csharp protected void Assert(bool predicate, string s, object arg0, object arg1, object arg2) @@ -74,6 +74,6 @@ protected void Assert(bool predicate, string s, object arg0, object arg1, object * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/CreateActor.md b/docs/ref/Microsoft.Coyote.Actors/Actor/CreateActor.md index e0b4df98b..a1a9f7464 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/CreateActor.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/CreateActor.md @@ -1,6 +1,6 @@ # Actor.CreateActor method (1 of 3) -Creates a new actor of the specified type and with the specified optional [`Event`](../../Microsoft.Coyote/Event.md). This [`Event`](../../Microsoft.Coyote/Event.md) can only be used to access its payload, and cannot be handled. +Creates a new actor of the specified type and with the specified optional [`Event`](../Event.md). This [`Event`](../Event.md) can only be used to access its payload, and cannot be handled. ```csharp protected ActorId CreateActor(Type type, Event initialEvent = null, EventGroup eventGroup = null) @@ -19,17 +19,17 @@ The unique actor id. ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.CreateActor method (2 of 3) -Creates a new actor of the specified type and name, and with the specified optional [`Event`](../../Microsoft.Coyote/Event.md). This [`Event`](../../Microsoft.Coyote/Event.md) can only be used to access its payload, and cannot be handled. +Creates a new actor of the specified type and name, and with the specified optional [`Event`](../Event.md). This [`Event`](../Event.md) can only be used to access its payload, and cannot be handled. ```csharp protected ActorId CreateActor(Type type, string name, Event initialEvent = null, @@ -50,17 +50,17 @@ The unique actor id. ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.CreateActor method (3 of 3) -Creates a new actor of the specified Type and name, using the specified unbound actor id, and passes the specified optional [`Event`](../../Microsoft.Coyote/Event.md). This event can only be used to access its payload, and cannot be handled. +Creates a new actor of the specified Type and name, using the specified unbound actor id, and passes the specified optional [`Event`](../Event.md). This event can only be used to access its payload, and cannot be handled. ```csharp protected void CreateActor(ActorId id, Type type, string name, Event initialEvent = null, @@ -78,10 +78,10 @@ protected void CreateActor(ActorId id, Type type, string name, Event initialEven ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md b/docs/ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md index 90db4bc51..8790ff597 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md @@ -15,6 +15,6 @@ This is an optional argument provided to [`CreateActor`](../IActorRuntime/Create * class [EventGroup](../EventGroup.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/Equals.md b/docs/ref/Microsoft.Coyote.Actors/Actor/Equals.md index 700023f86..0c0c527b3 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/Equals.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/Equals.md @@ -10,6 +10,6 @@ public override bool Equals(object obj) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/GetHashCode.md b/docs/ref/Microsoft.Coyote.Actors/Actor/GetHashCode.md index 2fa18940d..f2707085a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/GetHashCode.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/GetHashCode.md @@ -10,6 +10,6 @@ public override int GetHashCode() * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/HashedState.md b/docs/ref/Microsoft.Coyote.Actors/Actor/HashedState.md index 1e577622b..c0511f41b 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/HashedState.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/HashedState.md @@ -10,6 +10,6 @@ protected virtual int HashedState { get; } * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/Id.md b/docs/ref/Microsoft.Coyote.Actors/Actor/Id.md index 06bdf6b2b..0cda6f379 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/Id.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/Id.md @@ -11,6 +11,6 @@ protected internal ActorId Id { get; } * class [ActorId](../ActorId.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/Logger.md b/docs/ref/Microsoft.Coyote.Actors/Actor/Logger.md index a97797955..5bf95d143 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/Logger.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/Logger.md @@ -12,9 +12,8 @@ See [Logging](/coyote/concepts/actors/logging) for more information. ## See Also -* interface [ILogger](../../Microsoft.Coyote.Logging/ILogger.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/Monitor.md b/docs/ref/Microsoft.Coyote.Actors/Actor/Monitor.md index db267c08f..2efa68d68 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/Monitor.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/Monitor.md @@ -1,6 +1,6 @@ # Actor.Monitor method (1 of 2) -Invokes the specified monitor with the specified event. +Invokes the specified monitor with the specified Event. ```csharp protected void Monitor(Type type, Event e) @@ -9,20 +9,19 @@ protected void Monitor(Type type, Event e) | parameter | description | | --- | --- | | type | Type of the monitor. | -| e | The event to send. | +| e | The Event to send to the monitor. | ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.Monitor<T> method (2 of 2) -Invokes the specified monitor with the specified [`Event`](../../Microsoft.Coyote/Event.md). +Invokes the specified monitor with the specified Event. ```csharp protected void Monitor(Event e) @@ -31,13 +30,12 @@ protected void Monitor(Event e) | parameter | description | | --- | --- | | T | Type of the monitor. | -| e | Event to send to the monitor. | +| e | The Event to send to the monitor. | ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred.md index f08f103f5..886702002 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred.md @@ -12,9 +12,9 @@ protected virtual void OnEventDeferred(Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync.md index 2d6b23eaa..b9437c9b1 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync.md @@ -12,9 +12,9 @@ protected virtual Task OnEventDequeuedAsync(Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync.md index fa98cf8f8..fe5fd9ab7 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync.md @@ -12,9 +12,9 @@ protected virtual Task OnEventHandledAsync(Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored.md index 16d46c16d..cfff2f9c3 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored.md @@ -12,9 +12,9 @@ protected virtual void OnEventIgnored(Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync.md index b329d2314..3ecd3e3d8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync.md @@ -13,9 +13,9 @@ protected virtual Task OnEventUnhandledAsync(Event e, string state) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnException.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnException.md index 3a3f0b1f2..6527b47f5 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnException.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnException.md @@ -19,9 +19,9 @@ The action that the runtime should take. ## See Also * enum [OnExceptionOutcome](../OnExceptionOutcome.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync.md index 3cb02d175..0db62e010 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync.md @@ -17,9 +17,9 @@ The action that the runtime should take. ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync.md index 94b95fba1..56925aca8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync.md @@ -16,9 +16,9 @@ Task that represents the asynchronous operation. ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync.md b/docs/ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync.md index 52560ea36..208c1214c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync.md @@ -16,9 +16,9 @@ Task that represents the asynchronous operation. ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent.md b/docs/ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent.md index 0d6b7f160..5f81c86c6 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent.md @@ -10,6 +10,6 @@ protected void RaiseHaltEvent() * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/RandomBoolean.md b/docs/ref/Microsoft.Coyote.Actors/Actor/RandomBoolean.md index 6fe7f01b6..f97ea4d80 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/RandomBoolean.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/RandomBoolean.md @@ -1,6 +1,6 @@ # Actor.RandomBoolean method -Returns a nondeterministic boolean choice, that can be controlled during analysis or testing. +Returns a nondeterministic boolean choice, that can be controlled during testing. ```csharp protected bool RandomBoolean() @@ -14,6 +14,6 @@ The controlled nondeterministic choice. * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/RandomInteger.md b/docs/ref/Microsoft.Coyote.Actors/Actor/RandomInteger.md index 8c0191fc5..3601b7d43 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/RandomInteger.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/RandomInteger.md @@ -1,6 +1,6 @@ # Actor.RandomInteger method -Returns a nondeterministic integer, that can be controlled during analysis or testing. The value is used to generate an integer in the range [0..maxValue). +Returns a nondeterministic integer, that can be controlled during testing. The value is used to generate an integer in the range [0..maxValue). ```csharp protected int RandomInteger(int maxValue) @@ -18,6 +18,6 @@ The controlled nondeterministic integer. * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync.md b/docs/ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync.md index a57e13676..436103b88 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync.md @@ -1,6 +1,6 @@ # Actor.ReceiveEventAsync method (1 of 3) -Waits to receive an [`Event`](../../Microsoft.Coyote/Event.md) of the specified types that satisfy the specified predicates. +Waits to receive an [`Event`](../Event.md) of the specified types that satisfy the specified predicates. ```csharp protected internal Task ReceiveEventAsync(params Tuple>[] events) @@ -16,16 +16,16 @@ The received event. ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.ReceiveEventAsync method (2 of 3) -Waits to receive an [`Event`](../../Microsoft.Coyote/Event.md) of the specified types. +Waits to receive an [`Event`](../Event.md) of the specified types. ```csharp protected internal Task ReceiveEventAsync(params Type[] eventTypes) @@ -41,16 +41,16 @@ The received event. ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # Actor.ReceiveEventAsync method (3 of 3) -Waits to receive an [`Event`](../../Microsoft.Coyote/Event.md) of the specified type that satisfies an optional predicate. +Waits to receive an [`Event`](../Event.md) of the specified type that satisfies an optional predicate. ```csharp protected internal Task ReceiveEventAsync(Type eventType, Func predicate = null) @@ -67,9 +67,9 @@ The received event. ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/SendEvent.md b/docs/ref/Microsoft.Coyote.Actors/Actor/SendEvent.md index eb9e99531..95834ac23 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/SendEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/SendEvent.md @@ -1,6 +1,6 @@ # Actor.SendEvent method -Sends an asynchronous [`Event`](../../Microsoft.Coyote/Event.md) to a target. +Sends an asynchronous [`Event`](../Event.md) to a target. ```csharp protected void SendEvent(ActorId id, Event e, EventGroup eventGroup = null, @@ -17,11 +17,11 @@ protected void SendEvent(ActorId id, Event e, EventGroup eventGroup = null, ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * class [SendOptions](../SendOptions.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer.md b/docs/ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer.md index 5bfdfed99..665fe69e8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer.md @@ -27,6 +27,6 @@ See [Using timers in actors](/coyote/concepts/actors/timers) for more informatio * class [TimerElapsedEvent](../../Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/StartTimer.md b/docs/ref/Microsoft.Coyote.Actors/Actor/StartTimer.md index 36f27dce3..c679b37db 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/StartTimer.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/StartTimer.md @@ -25,6 +25,6 @@ See [Using timers in actors](/coyote/concepts/actors/timers) for more informatio * class [TimerElapsedEvent](../../Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/StopTimer.md b/docs/ref/Microsoft.Coyote.Actors/Actor/StopTimer.md index a1995f924..be6cbe990 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/StopTimer.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/StopTimer.md @@ -19,6 +19,6 @@ See [Using timers in actors](/coyote/concepts/actors/timers) for more informatio * class [TimerInfo](../../Microsoft.Coyote.Actors.Timers/TimerInfo.md) * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Actor/ToString.md b/docs/ref/Microsoft.Coyote.Actors/Actor/ToString.md index 9ba4a0eee..906fe08e8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/Actor/ToString.md +++ b/docs/ref/Microsoft.Coyote.Actors/Actor/ToString.md @@ -10,6 +10,6 @@ public override string ToString() * class [Actor](../Actor.md) * namespace [Microsoft.Coyote.Actors](../Actor.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorExecutionStatus.md b/docs/ref/Microsoft.Coyote.Actors/ActorExecutionStatus.md index 15383ae75..e6a73702c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorExecutionStatus.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorExecutionStatus.md @@ -18,6 +18,6 @@ public enum ActorExecutionStatus ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId.md b/docs/ref/Microsoft.Coyote.Actors/ActorId.md index 3bb4f188f..f6c9d7870 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId.md @@ -25,6 +25,6 @@ public sealed class ActorId : IComparable, IEquatable ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/CompareTo.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/CompareTo.md index 8bc9f4dca..b45bf9e6e 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/CompareTo.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/CompareTo.md @@ -10,6 +10,6 @@ public int CompareTo(ActorId other) * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/Equals.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/Equals.md index 191631235..a7b0ac8db 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/Equals.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/Equals.md @@ -10,7 +10,7 @@ public bool Equals(ActorId other) * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -26,6 +26,6 @@ public override bool Equals(object obj) * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/GetHashCode.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/GetHashCode.md index 1f6a6e4ee..3f2b3e986 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/GetHashCode.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/GetHashCode.md @@ -10,6 +10,6 @@ public override int GetHashCode() * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing.md index 051039ede..fdcafc875 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing.md @@ -10,6 +10,6 @@ public bool IsNameUsedForHashing { get; } * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/Name.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/Name.md index c3215f853..cb842dfba 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/Name.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/Name.md @@ -10,6 +10,6 @@ public readonly string Name; * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/NameValue.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/NameValue.md index ac8a36e8c..4027423e0 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/NameValue.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/NameValue.md @@ -10,6 +10,6 @@ public readonly string NameValue; * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/Runtime.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/Runtime.md index ea3ee5420..2c508b7c8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/Runtime.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/Runtime.md @@ -11,6 +11,6 @@ public IActorRuntime Runtime { get; } * interface [IActorRuntime](../IActorRuntime.md) * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/ToString.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/ToString.md index 5ebcf29e9..b665b1711 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/ToString.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/ToString.md @@ -10,6 +10,6 @@ public override string ToString() * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/Type.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/Type.md index 78b685e85..a8450484f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/Type.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/Type.md @@ -10,6 +10,6 @@ public readonly string Type; * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorId/Value.md b/docs/ref/Microsoft.Coyote.Actors/ActorId/Value.md index 0862b14d2..8dd2217c9 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorId/Value.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorId/Value.md @@ -10,6 +10,6 @@ public readonly ulong Value; * class [ActorId](../ActorId.md) * namespace [Microsoft.Coyote.Actors](../ActorId.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter.md index 1600589d2..9e9ce58d9 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter.md @@ -40,9 +40,8 @@ See [Logging](/coyote/concepts/actors/logging) for more information. ## See Also -* class [RuntimeLogTextFormatter](../Microsoft.Coyote.Runtime/RuntimeLogTextFormatter.md) * interface [IActorRuntimeLog](./IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/ActorRuntimeLogTextFormatter.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/ActorRuntimeLogTextFormatter.md index 8b10f46cb..a310d0f7f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/ActorRuntimeLogTextFormatter.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/ActorRuntimeLogTextFormatter.md @@ -10,6 +10,6 @@ public ActorRuntimeLogTextFormatter() * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateActor.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateActor.md index 70051fbe8..ec685e1cf 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateActor.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateActor.md @@ -17,6 +17,6 @@ public virtual void OnCreateActor(ActorId id, string creatorName, string creator * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateStateMachine.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateStateMachine.md index 9c51c211f..becdc8454 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateStateMachine.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateStateMachine.md @@ -17,6 +17,6 @@ public virtual void OnCreateStateMachine(ActorId id, string creatorName, string * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateTimer.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateTimer.md index 617d7d140..22070c586 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateTimer.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateTimer.md @@ -15,6 +15,6 @@ public virtual void OnCreateTimer(TimerInfo info) * class [TimerInfo](../../Microsoft.Coyote.Actors.Timers/TimerInfo.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDefaultEventHandler.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDefaultEventHandler.md index 9d9a11d4e..f15743a9e 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDefaultEventHandler.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDefaultEventHandler.md @@ -16,6 +16,6 @@ public virtual void OnDefaultEventHandler(ActorId id, string stateName) * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDequeueEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDequeueEvent.md index 39ccdfc11..9f07ae624 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDequeueEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDequeueEvent.md @@ -15,9 +15,9 @@ public virtual void OnDequeueEvent(ActorId id, string stateName, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEnqueueEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEnqueueEvent.md index ce29e557d..f22a24f26 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEnqueueEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEnqueueEvent.md @@ -14,9 +14,9 @@ public virtual void OnEnqueueEvent(ActorId id, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEventHandlerTerminated.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEventHandlerTerminated.md index 8feb27a14..a9e1ddb2b 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEventHandlerTerminated.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEventHandlerTerminated.md @@ -19,6 +19,6 @@ public virtual void OnEventHandlerTerminated(ActorId id, string stateName, * enum [DequeueStatus](../DequeueStatus.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionHandled.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionHandled.md index b41b3ea6e..ace8efd2f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionHandled.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionHandled.md @@ -19,6 +19,6 @@ public virtual void OnExceptionHandled(ActorId id, string stateName, string acti * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionThrown.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionThrown.md index 8d9268de1..5d714b643 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionThrown.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionThrown.md @@ -18,6 +18,6 @@ public virtual void OnExceptionThrown(ActorId id, string stateName, string actio * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExecuteAction.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExecuteAction.md index a09e57ce2..83e15e334 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExecuteAction.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExecuteAction.md @@ -19,6 +19,6 @@ public virtual void OnExecuteAction(ActorId id, string handlingStateName, string * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnGotoState.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnGotoState.md index 80d58d37b..12391d073 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnGotoState.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnGotoState.md @@ -17,6 +17,6 @@ public virtual void OnGotoState(ActorId id, string currentStateName, string newS * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHalt.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHalt.md index d21b6437c..8cd04eccb 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHalt.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHalt.md @@ -16,6 +16,6 @@ public virtual void OnHalt(ActorId id, int inboxSize) * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHandleRaisedEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHandleRaisedEvent.md index 66b747644..1c4bb0ff8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHandleRaisedEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHandleRaisedEvent.md @@ -15,9 +15,9 @@ public virtual void OnHandleRaisedEvent(ActorId id, string stateName, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopState.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopState.md index 5261cf35b..9605ffee5 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopState.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopState.md @@ -17,6 +17,6 @@ public virtual void OnPopState(ActorId id, string currentStateName, string resto * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopStateUnhandledEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopStateUnhandledEvent.md index 38476e2ca..1adc56315 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopStateUnhandledEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopStateUnhandledEvent.md @@ -15,9 +15,9 @@ public virtual void OnPopStateUnhandledEvent(ActorId id, string stateName, Event ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPushState.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPushState.md index c4a181586..38c3937cf 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPushState.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPushState.md @@ -17,6 +17,6 @@ public virtual void OnPushState(ActorId id, string currentStateName, string newS * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnRaiseEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnRaiseEvent.md index 4c62dd8c9..f95000cbc 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnRaiseEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnRaiseEvent.md @@ -15,9 +15,9 @@ public virtual void OnRaiseEvent(ActorId id, string stateName, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnReceiveEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnReceiveEvent.md index 5e63010ae..b9c855e8c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnReceiveEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnReceiveEvent.md @@ -16,9 +16,9 @@ public virtual void OnReceiveEvent(ActorId id, string stateName, Event e, bool w ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnSendEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnSendEvent.md index 4782bb2c1..643fe35d9 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnSendEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnSendEvent.md @@ -20,9 +20,9 @@ public virtual void OnSendEvent(ActorId targetActorId, string senderName, string ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStateTransition.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStateTransition.md index 076b6610c..60886b68c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStateTransition.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStateTransition.md @@ -17,6 +17,6 @@ public virtual void OnStateTransition(ActorId id, string stateName, bool isEntry * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStopTimer.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStopTimer.md index f88ca5648..caf0417f7 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStopTimer.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStopTimer.md @@ -15,6 +15,6 @@ public virtual void OnStopTimer(TimerInfo info) * class [TimerInfo](../../Microsoft.Coyote.Actors.Timers/TimerInfo.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnWaitEvent.md b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnWaitEvent.md index 1a95ce2e7..6acfe0d4c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnWaitEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnWaitEvent.md @@ -17,7 +17,7 @@ public virtual void OnWaitEvent(ActorId id, string stateName, Type eventType) * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -40,6 +40,6 @@ public virtual void OnWaitEvent(ActorId id, string stateName, params Type[] even * class [ActorId](../ActorId.md) * class [ActorRuntimeLogTextFormatter](../ActorRuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Actors](../ActorRuntimeLogTextFormatter.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1.md index 6050c9308..d44da1ed4 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1.md @@ -31,6 +31,6 @@ public class AwaitableEventGroup : EventGroup * class [EventGroup](./EventGroup.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/AwaitableEventGroup.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/AwaitableEventGroup.md index 3a517e96c..ee968a47c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/AwaitableEventGroup.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/AwaitableEventGroup.md @@ -15,6 +15,6 @@ public AwaitableEventGroup(Guid id = default, string name = null) * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/GetAwaiter.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/GetAwaiter.md index 17ce46e21..6e57bf1da 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/GetAwaiter.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/GetAwaiter.md @@ -10,6 +10,6 @@ public TaskAwaiter GetAwaiter() * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCanceled.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCanceled.md index 65bbafb07..cccc6364a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCanceled.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCanceled.md @@ -10,6 +10,6 @@ public bool IsCanceled { get; } * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCompleted.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCompleted.md index 69e619b92..a8d4a0c78 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCompleted.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCompleted.md @@ -10,6 +10,6 @@ public bool IsCompleted { get; } * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsFaulted.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsFaulted.md index db3dd596f..910002de1 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsFaulted.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsFaulted.md @@ -10,6 +10,6 @@ public bool IsFaulted { get; } * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetCancelled.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetCancelled.md index cfe0f608a..9e9b1a9bd 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetCancelled.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetCancelled.md @@ -10,6 +10,6 @@ public virtual void SetCancelled() * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetException.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetException.md index 42d910602..37d1cd7b2 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetException.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetException.md @@ -14,6 +14,6 @@ public virtual void SetException(Exception exception) * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetResult.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetResult.md index 9a25a374d..510668bb1 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetResult.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetResult.md @@ -14,6 +14,6 @@ public virtual void SetResult(T result) * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/Task.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/Task.md index f5039d173..cc3aafb17 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/Task.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/Task.md @@ -10,6 +10,6 @@ public Task Task { get; } * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetCanceled.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetCanceled.md index 0cfac39c1..ca9823485 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetCanceled.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetCanceled.md @@ -14,6 +14,6 @@ True if the `AwaitableEventGroup` was successful; otherwise, false. * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetException.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetException.md index 469bb03b3..e1c3a069e 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetException.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetException.md @@ -18,6 +18,6 @@ True if the `AwaitableEventGroup` was successful; otherwise, false. * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetResult.md b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetResult.md index 62259c7c2..94a2084f6 100644 --- a/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetResult.md +++ b/docs/ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetResult.md @@ -14,6 +14,6 @@ public virtual void TrySetResult(T result) * class [AwaitableEventGroup<T>](../AwaitableEventGroup-1.md) * namespace [Microsoft.Coyote.Actors](../AwaitableEventGroup-1.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/DefaultEvent.md b/docs/ref/Microsoft.Coyote.Actors/DefaultEvent.md index e5c26c747..7a3cdf174 100644 --- a/docs/ref/Microsoft.Coyote.Actors/DefaultEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/DefaultEvent.md @@ -10,12 +10,12 @@ public sealed class DefaultEvent : Event | name | description | | --- | --- | -| static [Instance](DefaultEvent/Instance.md) { get; } | Gets a [`DefaultEvent`](./DefaultEvent.md) instance. | +| static [Instance](DefaultEvent/Instance.md) { get; } | Gets a cached [`DefaultEvent`](./DefaultEvent.md) instance. | ## See Also -* class [Event](../Microsoft.Coyote/Event.md) +* class [Event](./Event.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/DefaultEvent/Instance.md b/docs/ref/Microsoft.Coyote.Actors/DefaultEvent/Instance.md index a0d4d9b35..dc659c12a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/DefaultEvent/Instance.md +++ b/docs/ref/Microsoft.Coyote.Actors/DefaultEvent/Instance.md @@ -1,6 +1,6 @@ # DefaultEvent.Instance property -Gets a [`DefaultEvent`](../DefaultEvent.md) instance. +Gets a cached [`DefaultEvent`](../DefaultEvent.md) instance. ```csharp public static DefaultEvent Instance { get; } @@ -10,6 +10,6 @@ public static DefaultEvent Instance { get; } * class [DefaultEvent](../DefaultEvent.md) * namespace [Microsoft.Coyote.Actors](../DefaultEvent.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/DequeueStatus.md b/docs/ref/Microsoft.Coyote.Actors/DequeueStatus.md index c668c002d..14a600ab4 100644 --- a/docs/ref/Microsoft.Coyote.Actors/DequeueStatus.md +++ b/docs/ref/Microsoft.Coyote.Actors/DequeueStatus.md @@ -19,6 +19,6 @@ public enum DequeueStatus ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/Event.md b/docs/ref/Microsoft.Coyote.Actors/Event.md new file mode 100644 index 000000000..7235fc0b7 --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Actors/Event.md @@ -0,0 +1,20 @@ +# Event class + +Abstract class representing an event that can be send to an [`Actor`](./Actor.md) or [`StateMachine`](./StateMachine.md). + +```csharp +public abstract class Event +``` + +## Protected Members + +| name | description | +| --- | --- | +| [Event](Event/Event.md)() | The default constructor. | + +## See Also + +* namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) + + diff --git a/docs/ref/Microsoft.Coyote.Actors/Event/Event.md b/docs/ref/Microsoft.Coyote.Actors/Event/Event.md new file mode 100644 index 000000000..c7c61c349 --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Actors/Event/Event.md @@ -0,0 +1,15 @@ +# Event constructor + +The default constructor. + +```csharp +protected Event() +``` + +## See Also + +* class [Event](../Event.md) +* namespace [Microsoft.Coyote.Actors](../Event.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) + + diff --git a/docs/ref/Microsoft.Coyote.Actors/EventGroup.md b/docs/ref/Microsoft.Coyote.Actors/EventGroup.md index 7ec755fe8..ba419d997 100644 --- a/docs/ref/Microsoft.Coyote.Actors/EventGroup.md +++ b/docs/ref/Microsoft.Coyote.Actors/EventGroup.md @@ -18,6 +18,6 @@ public class EventGroup ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/EventGroup/EventGroup.md b/docs/ref/Microsoft.Coyote.Actors/EventGroup/EventGroup.md index 4c91c4d2c..0628fba38 100644 --- a/docs/ref/Microsoft.Coyote.Actors/EventGroup/EventGroup.md +++ b/docs/ref/Microsoft.Coyote.Actors/EventGroup/EventGroup.md @@ -15,6 +15,6 @@ public EventGroup(Guid id = default, string name = null) * class [EventGroup](../EventGroup.md) * namespace [Microsoft.Coyote.Actors](../EventGroup.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/EventGroup/Id.md b/docs/ref/Microsoft.Coyote.Actors/EventGroup/Id.md index cccded597..2a040c403 100644 --- a/docs/ref/Microsoft.Coyote.Actors/EventGroup/Id.md +++ b/docs/ref/Microsoft.Coyote.Actors/EventGroup/Id.md @@ -10,6 +10,6 @@ public Guid Id { get; } * class [EventGroup](../EventGroup.md) * namespace [Microsoft.Coyote.Actors](../EventGroup.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/EventGroup/Name.md b/docs/ref/Microsoft.Coyote.Actors/EventGroup/Name.md index f41cffb2c..6ed6dfa23 100644 --- a/docs/ref/Microsoft.Coyote.Actors/EventGroup/Name.md +++ b/docs/ref/Microsoft.Coyote.Actors/EventGroup/Name.md @@ -10,6 +10,6 @@ public string Name { get; } * class [EventGroup](../EventGroup.md) * namespace [Microsoft.Coyote.Actors](../EventGroup.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/EventGroup/Null.md b/docs/ref/Microsoft.Coyote.Actors/EventGroup/Null.md index 70ad0c001..38a0fe35a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/EventGroup/Null.md +++ b/docs/ref/Microsoft.Coyote.Actors/EventGroup/Null.md @@ -10,6 +10,6 @@ public static EventGroup Null; * class [EventGroup](../EventGroup.md) * namespace [Microsoft.Coyote.Actors](../EventGroup.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/HaltEvent.md b/docs/ref/Microsoft.Coyote.Actors/HaltEvent.md index 0d6f1f522..b5310c69a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/HaltEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/HaltEvent.md @@ -14,8 +14,8 @@ public sealed class HaltEvent : Event ## See Also -* class [Event](../Microsoft.Coyote/Event.md) +* class [Event](./Event.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/HaltEvent/Instance.md b/docs/ref/Microsoft.Coyote.Actors/HaltEvent/Instance.md index ffb5865c3..5cf72ad45 100644 --- a/docs/ref/Microsoft.Coyote.Actors/HaltEvent/Instance.md +++ b/docs/ref/Microsoft.Coyote.Actors/HaltEvent/Instance.md @@ -10,6 +10,6 @@ public static HaltEvent Instance { get; } * class [HaltEvent](../HaltEvent.md) * namespace [Microsoft.Coyote.Actors](../HaltEvent.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime.md index 44483b888..bbf0c9b60 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime.md @@ -12,7 +12,7 @@ public interface IActorRuntime : ICoyoteRuntime | --- | --- | | event [OnActorHalted](IActorRuntime/OnActorHalted.md) | Callback that is fired when an actor has halted and the runtime has stopped managing it. | | event [OnEventDropped](IActorRuntime/OnEventDropped.md) | Callback that is fired when an event is dropped. | -| [CreateActor](IActorRuntime/CreateActor.md)(…) | Creates a new actor of the specified Type and with the specified optional [`Event`](../Microsoft.Coyote/Event.md). This event is given to the Event) method on the new actor. (3 methods) | +| [CreateActor](IActorRuntime/CreateActor.md)(…) | Creates a new actor of the specified Type and with the specified optional [`Event`](./Event.md). This event is given to the Event) method on the new actor. (3 methods) | | [CreateActorId](IActorRuntime/CreateActorId.md)(…) | Creates a fresh actor id that has not yet been bound to any actor. | | [CreateActorIdFromName](IActorRuntime/CreateActorIdFromName.md)(…) | Creates a actor id that is uniquely tied to the specified unique name. The returned actor id can either be a fresh id (not yet bound to any actor), or it can be bound to a previously created actor. In the second case, this actor id can be directly used to communicate with the corresponding actor. | | [GetActorExecutionStatus](IActorRuntime/GetActorExecutionStatus.md)(…) | Returns the execution status of the actor with the specified [`ActorId`](./ActorId.md). | @@ -20,7 +20,7 @@ public interface IActorRuntime : ICoyoteRuntime | [GetCurrentActorIds](IActorRuntime/GetCurrentActorIds.md)() | Returns the [`ActorId`](./ActorId.md) of all active actors currently managed by this runtime. | | [GetCurrentActorTypes](IActorRuntime/GetCurrentActorTypes.md)() | Returns the distinct types of all active actors currently managed by this runtime. | | [GetCurrentEventGroup](IActorRuntime/GetCurrentEventGroup.md)(…) | Returns the current [`EventGroup`](./EventGroup.md) of the actor with the specified id. Returns null if the id is not set, or if the [`ActorId`](./ActorId.md) is not associated with this runtime. During testing, the runtime asserts that the specified actor is currently executing. | -| [SendEvent](IActorRuntime/SendEvent.md)(…) | Sends an asynchronous [`Event`](../Microsoft.Coyote/Event.md) to an actor. | +| [SendEvent](IActorRuntime/SendEvent.md)(…) | Sends an asynchronous [`Event`](./Event.md) to an actor. | ## Remarks @@ -28,8 +28,7 @@ See [Programming model: asynchronous actors](/coyote/concepts/actors/overview) f ## See Also -* interface [ICoyoteRuntime](../Microsoft.Coyote.Runtime/ICoyoteRuntime.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor.md index a6b98c4f0..013437b78 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor.md @@ -1,6 +1,6 @@ # IActorRuntime.CreateActor method (1 of 3) -Creates a new actor of the specified Type and with the specified optional [`Event`](../../Microsoft.Coyote/Event.md). This event is given to the Event) method on the new actor. +Creates a new actor of the specified Type and with the specified optional [`Event`](../Event.md). This event is given to the Event) method on the new actor. ```csharp public ActorId CreateActor(Type type, Event initialEvent = null, EventGroup eventGroup = null) @@ -19,17 +19,17 @@ The result is the actor id. ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # IActorRuntime.CreateActor method (2 of 3) -Creates a new actor of the specified type, using the specified [`ActorId`](../ActorId.md). This method optionally passes an [`Event`](../../Microsoft.Coyote/Event.md). This event is given to the InitializeAsync method on the new actor. +Creates a new actor of the specified type, using the specified [`ActorId`](../ActorId.md). This method optionally passes an [`Event`](../Event.md). This event is given to the InitializeAsync method on the new actor. ```csharp public ActorId CreateActor(ActorId id, Type type, Event initialEvent = null, @@ -50,17 +50,17 @@ The result is the actor id. ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # IActorRuntime.CreateActor method (3 of 3) -Creates a new actor of the specified Type and name, and with the specified optional [`Event`](../../Microsoft.Coyote/Event.md). This event is given to the Event) method on the new actor. +Creates a new actor of the specified Type and name, and with the specified optional [`Event`](../Event.md). This event is given to the Event) method on the new actor. ```csharp public ActorId CreateActor(Type type, string name, Event initialEvent = null, @@ -81,10 +81,10 @@ The result is the actor id. ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId.md index 310d68b57..27b82f924 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId.md @@ -20,6 +20,6 @@ The result is the actor id. * class [ActorId](../ActorId.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName.md index d5ae47073..b6f8e1c88 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName.md @@ -20,6 +20,6 @@ The result is the actor id. * class [ActorId](../ActorId.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus.md index c8a3115d2..4f6c79960 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus.md @@ -24,6 +24,6 @@ This method is not thread-safe. * class [ActorId](../ActorId.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount.md index 3e7cb6ea6..d0853aa5c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount.md @@ -18,6 +18,6 @@ This method is not thread-safe. * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds.md index 7585ef648..66b5ad4b6 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds.md @@ -19,6 +19,6 @@ This method is not thread-safe. * class [ActorId](../ActorId.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes.md index 59d8e92fd..f3e902690 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes.md @@ -18,6 +18,6 @@ This method is not thread-safe. * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup.md index fff1eb2e0..88f566cd9 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup.md @@ -20,6 +20,6 @@ The current EventGroup or null. * class [ActorId](../ActorId.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md index 47afd9f17..0f054ea5e 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md @@ -11,6 +11,6 @@ public event OnActorHaltedHandler OnActorHalted; * delegate [OnActorHaltedHandler](../OnActorHaltedHandler.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md index 173a77337..9e2c443b2 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md @@ -11,6 +11,6 @@ public event OnEventDroppedHandler OnEventDropped; * delegate [OnEventDroppedHandler](../OnEventDroppedHandler.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent.md index 50d5522ab..bb4b51857 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent.md @@ -1,6 +1,6 @@ # IActorRuntime.SendEvent method -Sends an asynchronous [`Event`](../../Microsoft.Coyote/Event.md) to an actor. +Sends an asynchronous [`Event`](../Event.md) to an actor. ```csharp public void SendEvent(ActorId targetId, Event e, EventGroup eventGroup = null, @@ -17,11 +17,11 @@ public void SendEvent(ActorId targetId, Event e, EventGroup eventGroup = null, ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [EventGroup](../EventGroup.md) * class [SendOptions](../SendOptions.md) * interface [IActorRuntime](../IActorRuntime.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntime.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog.md index cb8538990..d54284eda 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog.md @@ -39,8 +39,7 @@ See [Logging](/coyote/concepts/actors/logging) for more information. ## See Also -* interface [IRuntimeLog](../Microsoft.Coyote.Runtime/IRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateActor.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateActor.md index c92935677..37a8f3134 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateActor.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateActor.md @@ -17,6 +17,6 @@ public void OnCreateActor(ActorId id, string creatorName, string creatorType) * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateStateMachine.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateStateMachine.md index 5a7283ed6..f608b5632 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateStateMachine.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateStateMachine.md @@ -17,6 +17,6 @@ public void OnCreateStateMachine(ActorId id, string creatorName, string creatorT * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateTimer.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateTimer.md index 89854c77d..492b72279 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateTimer.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateTimer.md @@ -15,6 +15,6 @@ public void OnCreateTimer(TimerInfo info) * class [TimerInfo](../../Microsoft.Coyote.Actors.Timers/TimerInfo.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDefaultEventHandler.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDefaultEventHandler.md index da23280f3..709409e8c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDefaultEventHandler.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDefaultEventHandler.md @@ -16,6 +16,6 @@ public void OnDefaultEventHandler(ActorId id, string stateName) * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDequeueEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDequeueEvent.md index 7f32ca019..2e86e71cf 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDequeueEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDequeueEvent.md @@ -15,9 +15,9 @@ public void OnDequeueEvent(ActorId id, string stateName, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEnqueueEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEnqueueEvent.md index b334a56b6..74eebbd86 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEnqueueEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEnqueueEvent.md @@ -14,9 +14,9 @@ public void OnEnqueueEvent(ActorId id, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEventHandlerTerminated.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEventHandlerTerminated.md index 3cada90dd..3f3779a9f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEventHandlerTerminated.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEventHandlerTerminated.md @@ -18,6 +18,6 @@ public void OnEventHandlerTerminated(ActorId id, string stateName, DequeueStatus * enum [DequeueStatus](../DequeueStatus.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionHandled.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionHandled.md index 7abffda61..549f6cff9 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionHandled.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionHandled.md @@ -18,6 +18,6 @@ public void OnExceptionHandled(ActorId id, string stateName, string actionName, * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionThrown.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionThrown.md index 7c55b6bb5..e9d5febb1 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionThrown.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionThrown.md @@ -18,6 +18,6 @@ public void OnExceptionThrown(ActorId id, string stateName, string actionName, E * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExecuteAction.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExecuteAction.md index 9b3629b73..f06923328 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExecuteAction.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExecuteAction.md @@ -19,6 +19,6 @@ public void OnExecuteAction(ActorId id, string handlingStateName, string current * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnGotoState.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnGotoState.md index 934927fca..97bf807d9 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnGotoState.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnGotoState.md @@ -17,6 +17,6 @@ public void OnGotoState(ActorId id, string currentStateName, string newStateName * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHalt.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHalt.md index 6f65538ad..dc768ecc3 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHalt.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHalt.md @@ -16,6 +16,6 @@ public void OnHalt(ActorId id, int inboxSize) * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHandleRaisedEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHandleRaisedEvent.md index 9c2044087..955965eba 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHandleRaisedEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHandleRaisedEvent.md @@ -15,9 +15,9 @@ public void OnHandleRaisedEvent(ActorId id, string stateName, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopState.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopState.md index c6045d409..0149cc19a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopState.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopState.md @@ -17,6 +17,6 @@ public void OnPopState(ActorId id, string currentStateName, string restoredState * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopStateUnhandledEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopStateUnhandledEvent.md index 4879fa62b..c57c7c31c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopStateUnhandledEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopStateUnhandledEvent.md @@ -15,9 +15,9 @@ public void OnPopStateUnhandledEvent(ActorId id, string stateName, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPushState.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPushState.md index cd73b5cc9..238cf042f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPushState.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPushState.md @@ -17,6 +17,6 @@ public void OnPushState(ActorId id, string currentStateName, string newStateName * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnRaiseEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnRaiseEvent.md index a1173a253..c26427638 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnRaiseEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnRaiseEvent.md @@ -15,9 +15,9 @@ public void OnRaiseEvent(ActorId id, string stateName, Event e) ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnReceiveEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnReceiveEvent.md index cc668ebdc..e8f2122b0 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnReceiveEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnReceiveEvent.md @@ -16,9 +16,9 @@ public void OnReceiveEvent(ActorId id, string stateName, Event e, bool wasBlocke ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnSendEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnSendEvent.md index 4ed96953a..ab2565871 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnSendEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnSendEvent.md @@ -20,9 +20,9 @@ public void OnSendEvent(ActorId targetActorId, string senderName, string senderT ## See Also * class [ActorId](../ActorId.md) -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStateTransition.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStateTransition.md index f91ca0e54..f6d5208d7 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStateTransition.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStateTransition.md @@ -17,6 +17,6 @@ public void OnStateTransition(ActorId id, string stateName, bool isEntry) * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStopTimer.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStopTimer.md index a52cfabbd..5c59eb0c1 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStopTimer.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStopTimer.md @@ -15,6 +15,6 @@ public void OnStopTimer(TimerInfo info) * class [TimerInfo](../../Microsoft.Coyote.Actors.Timers/TimerInfo.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnWaitEvent.md b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnWaitEvent.md index 9ba3753c7..5c20b9c5f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnWaitEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnWaitEvent.md @@ -17,7 +17,7 @@ public void OnWaitEvent(ActorId id, string stateName, Type eventType) * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -40,6 +40,6 @@ public void OnWaitEvent(ActorId id, string stateName, params Type[] eventTypes) * class [ActorId](../ActorId.md) * interface [IActorRuntimeLog](../IActorRuntimeLog.md) * namespace [Microsoft.Coyote.Actors](../IActorRuntimeLog.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/OnActorHaltedHandler.md b/docs/ref/Microsoft.Coyote.Actors/OnActorHaltedHandler.md index c1170cd5d..6e8236562 100644 --- a/docs/ref/Microsoft.Coyote.Actors/OnActorHaltedHandler.md +++ b/docs/ref/Microsoft.Coyote.Actors/OnActorHaltedHandler.md @@ -10,6 +10,6 @@ public delegate void OnActorHaltedHandler(ActorId id); * class [ActorId](./ActorId.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/OnEventDroppedHandler.md b/docs/ref/Microsoft.Coyote.Actors/OnEventDroppedHandler.md index 2c46c7a79..49d1953af 100644 --- a/docs/ref/Microsoft.Coyote.Actors/OnEventDroppedHandler.md +++ b/docs/ref/Microsoft.Coyote.Actors/OnEventDroppedHandler.md @@ -8,9 +8,9 @@ public delegate void OnEventDroppedHandler(Event e, ActorId target); ## See Also -* class [Event](../Microsoft.Coyote/Event.md) +* class [Event](./Event.md) * class [ActorId](./ActorId.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/OnExceptionOutcome.md b/docs/ref/Microsoft.Coyote.Actors/OnExceptionOutcome.md index d5b4df3e8..68d5d8cf8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/OnExceptionOutcome.md +++ b/docs/ref/Microsoft.Coyote.Actors/OnExceptionOutcome.md @@ -17,6 +17,6 @@ public enum OnExceptionOutcome ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory.md b/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory.md index 64ea4a5f4..74c62bf37 100644 --- a/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory.md +++ b/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory.md @@ -11,11 +11,11 @@ public static class RuntimeFactory | name | description | | --- | --- | | static [Create](RuntimeFactory/Create.md)() | Creates a new actor runtime. | -| static [Create](RuntimeFactory/Create.md)(…) | Creates a new actor runtime with the specified [`Configuration`](../Microsoft.Coyote/Configuration.md). | +| static [Create](RuntimeFactory/Create.md)(…) | Creates a new actor runtime with the specified Configuration. | ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory/Create.md b/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory/Create.md index 205256a91..537287d34 100644 --- a/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory/Create.md +++ b/docs/ref/Microsoft.Coyote.Actors/RuntimeFactory/Create.md @@ -19,13 +19,13 @@ Only one actor runtime can be used per process. If you create a new actor runtim * interface [IActorRuntime](../IActorRuntime.md) * class [RuntimeFactory](../RuntimeFactory.md) * namespace [Microsoft.Coyote.Actors](../RuntimeFactory.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- # RuntimeFactory.Create method (2 of 2) -Creates a new actor runtime with the specified [`Configuration`](../../Microsoft.Coyote/Configuration.md). +Creates a new actor runtime with the specified Configuration. ```csharp public static IActorRuntime Create(Configuration configuration) @@ -46,9 +46,8 @@ Only one actor runtime can be used per process. If you create a new actor runtim ## See Also * interface [IActorRuntime](../IActorRuntime.md) -* class [Configuration](../../Microsoft.Coyote/Configuration.md) * class [RuntimeFactory](../RuntimeFactory.md) * namespace [Microsoft.Coyote.Actors](../RuntimeFactory.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/SendOptions.md b/docs/ref/Microsoft.Coyote.Actors/SendOptions.md index e577bd888..039a4bf42 100644 --- a/docs/ref/Microsoft.Coyote.Actors/SendOptions.md +++ b/docs/ref/Microsoft.Coyote.Actors/SendOptions.md @@ -20,6 +20,6 @@ public class SendOptions ## See Also * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/SendOptions/Assert.md b/docs/ref/Microsoft.Coyote.Actors/SendOptions/Assert.md index 2bf4ca3be..211ae6c78 100644 --- a/docs/ref/Microsoft.Coyote.Actors/SendOptions/Assert.md +++ b/docs/ref/Microsoft.Coyote.Actors/SendOptions/Assert.md @@ -10,6 +10,6 @@ public int Assert { get; } * class [SendOptions](../SendOptions.md) * namespace [Microsoft.Coyote.Actors](../SendOptions.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/SendOptions/Default.md b/docs/ref/Microsoft.Coyote.Actors/SendOptions/Default.md index 2831810a7..9ee27bc4c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/SendOptions/Default.md +++ b/docs/ref/Microsoft.Coyote.Actors/SendOptions/Default.md @@ -10,6 +10,6 @@ public static SendOptions Default { get; } * class [SendOptions](../SendOptions.md) * namespace [Microsoft.Coyote.Actors](../SendOptions.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/SendOptions/HashedState.md b/docs/ref/Microsoft.Coyote.Actors/SendOptions/HashedState.md index 93eff6773..d692200d3 100644 --- a/docs/ref/Microsoft.Coyote.Actors/SendOptions/HashedState.md +++ b/docs/ref/Microsoft.Coyote.Actors/SendOptions/HashedState.md @@ -10,6 +10,6 @@ public int HashedState { get; } * class [SendOptions](../SendOptions.md) * namespace [Microsoft.Coyote.Actors](../SendOptions.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/SendOptions/MustHandle.md b/docs/ref/Microsoft.Coyote.Actors/SendOptions/MustHandle.md index 646dae119..50edb5200 100644 --- a/docs/ref/Microsoft.Coyote.Actors/SendOptions/MustHandle.md +++ b/docs/ref/Microsoft.Coyote.Actors/SendOptions/MustHandle.md @@ -10,6 +10,6 @@ public bool MustHandle { get; } * class [SendOptions](../SendOptions.md) * namespace [Microsoft.Coyote.Actors](../SendOptions.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/SendOptions/SendOptions.md b/docs/ref/Microsoft.Coyote.Actors/SendOptions/SendOptions.md index 70e255e7e..de97cbd1e 100644 --- a/docs/ref/Microsoft.Coyote.Actors/SendOptions/SendOptions.md +++ b/docs/ref/Microsoft.Coyote.Actors/SendOptions/SendOptions.md @@ -10,6 +10,6 @@ public SendOptions(bool mustHandle = false, int assert = -1, int hashedState = 0 * class [SendOptions](../SendOptions.md) * namespace [Microsoft.Coyote.Actors](../SendOptions.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/SendOptions/ToString.md b/docs/ref/Microsoft.Coyote.Actors/SendOptions/ToString.md index c408bdff5..82f400f8d 100644 --- a/docs/ref/Microsoft.Coyote.Actors/SendOptions/ToString.md +++ b/docs/ref/Microsoft.Coyote.Actors/SendOptions/ToString.md @@ -10,6 +10,6 @@ public override string ToString() * class [SendOptions](../SendOptions.md) * namespace [Microsoft.Coyote.Actors](../SendOptions.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute.md index fee6c2d56..bd9650bf2 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute.md @@ -17,6 +17,6 @@ protected sealed class DeferEventsAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute/DeferEventsAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute/DeferEventsAttribute.md index 76dbc3964..715f406ac 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute/DeferEventsAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute/DeferEventsAttribute.md @@ -14,6 +14,6 @@ public DeferEventsAttribute(params Type[] eventTypes) * class [DeferEventsAttribute](../StateMachine.State.DeferEventsAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.DeferEventsAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute.md index 739fd23b3..c6f7b7111 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute.md @@ -17,6 +17,6 @@ protected sealed class IgnoreEventsAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute/IgnoreEventsAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute/IgnoreEventsAttribute.md index 56c7e4365..569eff4eb 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute/IgnoreEventsAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute/IgnoreEventsAttribute.md @@ -14,6 +14,6 @@ public IgnoreEventsAttribute(params Type[] eventTypes) * class [IgnoreEventsAttribute](../StateMachine.State.IgnoreEventsAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.IgnoreEventsAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute.md index c9464dd75..66494aa73 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute.md @@ -17,6 +17,6 @@ protected sealed class OnEntryAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute/OnEntryAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute/OnEntryAttribute.md index f9190f76a..2c5c6a15c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute/OnEntryAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute/OnEntryAttribute.md @@ -14,6 +14,6 @@ public OnEntryAttribute(string actionName) * class [OnEntryAttribute](../StateMachine.State.OnEntryAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.OnEntryAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute.md index a1530a54a..c2b7dad06 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute.md @@ -17,6 +17,6 @@ protected sealed class OnEventDoActionAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute/OnEventDoActionAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute/OnEventDoActionAttribute.md index 8e1ec682d..6686f6370 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute/OnEventDoActionAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute/OnEventDoActionAttribute.md @@ -15,6 +15,6 @@ public OnEventDoActionAttribute(Type eventType, string actionName) * class [OnEventDoActionAttribute](../StateMachine.State.OnEventDoActionAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.OnEventDoActionAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute.md index f3c0f4ad5..6d1936676 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute.md @@ -17,6 +17,6 @@ protected sealed class OnEventGotoStateAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute.md index 955578289..59ac40d8d 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute.md @@ -15,7 +15,7 @@ public OnEventGotoStateAttribute(Type eventType, Type stateType) * class [OnEventGotoStateAttribute](../StateMachine.State.OnEventGotoStateAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.OnEventGotoStateAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -37,6 +37,6 @@ public OnEventGotoStateAttribute(Type eventType, Type stateType, string actionNa * class [OnEventGotoStateAttribute](../StateMachine.State.OnEventGotoStateAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.OnEventGotoStateAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute.md index 6819fad46..80266844e 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute.md @@ -17,6 +17,6 @@ protected sealed class OnEventPushStateAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute/OnEventPushStateAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute/OnEventPushStateAttribute.md index 125259547..f86884e42 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute/OnEventPushStateAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute/OnEventPushStateAttribute.md @@ -15,6 +15,6 @@ public OnEventPushStateAttribute(Type eventType, Type stateType) * class [OnEventPushStateAttribute](../StateMachine.State.OnEventPushStateAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.OnEventPushStateAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute.md index 11d40a162..001d7f71a 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute.md @@ -17,6 +17,6 @@ protected sealed class OnExitAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute/OnExitAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute/OnExitAttribute.md index f49bd53e9..a8719f289 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute/OnExitAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute/OnExitAttribute.md @@ -14,6 +14,6 @@ public OnExitAttribute(string actionName) * class [OnExitAttribute](../StateMachine.State.OnExitAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.OnExitAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute.md index 5e0ad2dc2..dc82e5984 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute.md @@ -17,6 +17,6 @@ protected sealed class StartAttribute : Attribute * class [State](./StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute/StartAttribute.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute/StartAttribute.md index e875f361b..2c25d20ef 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute/StartAttribute.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute/StartAttribute.md @@ -10,6 +10,6 @@ public StartAttribute() * class [StartAttribute](../StateMachine.State.StartAttribute.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.StartAttribute.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.md index b9731c1dc..d41d2fc83 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State.md @@ -28,6 +28,6 @@ See [State machines](/coyote/concepts/actors/state-machines) for more informatio * class [StateMachine](./StateMachine.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State/State.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State/State.md index e1680abcb..d52be9776 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.State/State.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.State/State.md @@ -10,6 +10,6 @@ protected State() * class [State](../StateMachine.State.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.State.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup.md index c9ce2a080..b4d66e3a2 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup.md @@ -16,6 +16,6 @@ public abstract class StateGroup * class [StateMachine](./StateMachine.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup/StateGroup.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup/StateGroup.md index 3a3d47b51..e8a048b38 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup/StateGroup.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.StateGroup/StateGroup.md @@ -10,6 +10,6 @@ protected StateGroup() * class [StateGroup](../StateMachine.StateGroup.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.StateGroup.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine.md index cf3ee8e58..f2b099a0b 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine.md @@ -20,7 +20,7 @@ public abstract class StateMachine : Actor | [StateMachine](StateMachine/StateMachine.md)() | Initializes a new instance of the [`StateMachine`](./StateMachine.md) class. | | [CurrentState](StateMachine/CurrentState.md) { get; } | Gets the Type of the current state. | | override [OnEventHandledAsync](StateMachine/OnEventHandledAsync.md)(…) | Asynchronous callback that is invoked when the actor finishes handling a dequeued event, unless the handler of the dequeued event raised an event or caused the actor to halt (either normally or due to an exception). Unless this callback raises an event, the actor will either become idle or dequeue the next event from its inbox. | -| [RaiseEvent](StateMachine/RaiseEvent.md)(…) | Raises the specified [`Event`](../Microsoft.Coyote/Event.md) at the end of the current action. | +| [RaiseEvent](StateMachine/RaiseEvent.md)(…) | Raises the specified [`Event`](./Event.md) at the end of the current action. | | [RaiseGotoStateEvent](StateMachine/RaiseGotoStateEvent.md)(…) | Raise a special event that performs a goto state operation at the end of the current action. | | [RaiseGotoStateEvent<TState>](StateMachine/RaiseGotoStateEvent.md)() | Raise a special event that performs a goto state operation at the end of the current action. | | [RaiseHaltEvent](StateMachine/RaiseHaltEvent.md)() | Raises a [`HaltEvent`](./HaltEvent.md) to halt the actor at the end of the current action. | @@ -36,6 +36,6 @@ See [State machines](/coyote/concepts/actors/state-machines) for more informatio * class [Actor](./Actor.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/CurrentState.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/CurrentState.md index 24e670fce..ef9e1cd3c 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/CurrentState.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/CurrentState.md @@ -10,6 +10,6 @@ protected internal Type CurrentState { get; } * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/OnEventHandledAsync.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/OnEventHandledAsync.md index fdeced34c..a0f62eed7 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/OnEventHandledAsync.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/OnEventHandledAsync.md @@ -12,9 +12,9 @@ protected override Task OnEventHandledAsync(Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseEvent.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseEvent.md index 9e08f6397..ffd23d16f 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseEvent.md @@ -1,6 +1,6 @@ # StateMachine.RaiseEvent method -Raises the specified [`Event`](../../Microsoft.Coyote/Event.md) at the end of the current action. +Raises the specified [`Event`](../Event.md) at the end of the current action. ```csharp protected void RaiseEvent(Event e) @@ -16,9 +16,9 @@ This event is not handled until the action that calls this method returns contro ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseGotoStateEvent.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseGotoStateEvent.md index 047631d50..bf23812a8 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseGotoStateEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseGotoStateEvent.md @@ -26,7 +26,7 @@ This event is not handled until the action that calls this method returns contro * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -60,6 +60,6 @@ This event is not handled until the action that calls this method returns contro * class [State](../StateMachine.State.md) * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseHaltEvent.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseHaltEvent.md index 75d7e6745..e7ef4baa1 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseHaltEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaiseHaltEvent.md @@ -14,6 +14,6 @@ This event is not handled until the action that calls this method returns contro * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePopStateEvent.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePopStateEvent.md index 6ebac0962..286f84c65 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePopStateEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePopStateEvent.md @@ -14,6 +14,6 @@ Popping a state pops the current [`State`](../StateMachine.State.md) that was pu * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePushStateEvent.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePushStateEvent.md index ace2dce1e..b170f0623 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePushStateEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/RaisePushStateEvent.md @@ -26,7 +26,7 @@ This event is not handled until the action that calls this method returns contro * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) --- @@ -60,6 +60,6 @@ This event is not handled until the action that calls this method returns contro * class [State](../StateMachine.State.md) * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/StateMachine/StateMachine.md b/docs/ref/Microsoft.Coyote.Actors/StateMachine/StateMachine.md index defe1c0b5..d9efe9424 100644 --- a/docs/ref/Microsoft.Coyote.Actors/StateMachine/StateMachine.md +++ b/docs/ref/Microsoft.Coyote.Actors/StateMachine/StateMachine.md @@ -10,6 +10,6 @@ protected StateMachine() * class [StateMachine](../StateMachine.md) * namespace [Microsoft.Coyote.Actors](../StateMachine.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException.md b/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException.md index 9837b16e1..28e1023aa 100644 --- a/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException.md +++ b/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException.md @@ -15,8 +15,7 @@ public sealed class UnhandledEventException : RuntimeException ## See Also -* class [RuntimeException](../Microsoft.Coyote.Runtime/RuntimeException.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/CurrentStateName.md b/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/CurrentStateName.md index fb4133486..01d4d91f0 100644 --- a/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/CurrentStateName.md +++ b/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/CurrentStateName.md @@ -10,6 +10,6 @@ public string CurrentStateName; * class [UnhandledEventException](../UnhandledEventException.md) * namespace [Microsoft.Coyote.Actors](../UnhandledEventException.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/UnhandledEvent.md b/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/UnhandledEvent.md index ad9aa6c81..ada5b5d9b 100644 --- a/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/UnhandledEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/UnhandledEventException/UnhandledEvent.md @@ -8,9 +8,9 @@ public Event UnhandledEvent; ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Event.md) * class [UnhandledEventException](../UnhandledEventException.md) * namespace [Microsoft.Coyote.Actors](../UnhandledEventException.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/WildCardEvent.md b/docs/ref/Microsoft.Coyote.Actors/WildCardEvent.md index 05da546ac..e75beb847 100644 --- a/docs/ref/Microsoft.Coyote.Actors/WildCardEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/WildCardEvent.md @@ -14,8 +14,8 @@ public sealed class WildCardEvent : Event ## See Also -* class [Event](../Microsoft.Coyote/Event.md) +* class [Event](./Event.md) * namespace [Microsoft.Coyote.Actors](../Microsoft.Coyote.ActorsNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.Actors/WildCardEvent/WildCardEvent.md b/docs/ref/Microsoft.Coyote.Actors/WildCardEvent/WildCardEvent.md index 87a70e76a..f4be3caa3 100644 --- a/docs/ref/Microsoft.Coyote.Actors/WildCardEvent/WildCardEvent.md +++ b/docs/ref/Microsoft.Coyote.Actors/WildCardEvent/WildCardEvent.md @@ -10,6 +10,6 @@ public WildCardEvent() * class [WildCardEvent](../WildCardEvent.md) * namespace [Microsoft.Coyote.Actors](../WildCardEvent.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) +* assembly [Microsoft.Coyote.Actors](../../Microsoft.Coyote.Actors.md) - + diff --git a/docs/ref/Microsoft.Coyote.ActorsNamespace.md b/docs/ref/Microsoft.Coyote.ActorsNamespace.md index 20a62620a..985084a67 100644 --- a/docs/ref/Microsoft.Coyote.ActorsNamespace.md +++ b/docs/ref/Microsoft.Coyote.ActorsNamespace.md @@ -9,6 +9,7 @@ | class [AwaitableEventGroup<T>](./Microsoft.Coyote.Actors/AwaitableEventGroup-1.md) | An object representing an awaitable long running context involving one or more actors. An `AwaitableEventGroup` can be provided as an optional argument in CreateActor and SendEvent. If a null `AwaitableEventGroup` is passed then the `EventGroup` is inherited from the sender or target actors (based on which ever one has a [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md)). In this way an `AwaitableEventGroup` is automatically communicated to all actors involved in completing some larger operation. Each actor involved can find the `AwaitableEventGroup` using their [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md) property. | | class [DefaultEvent](./Microsoft.Coyote.Actors/DefaultEvent.md) | A default event that is generated by the runtime when no user-defined event is dequeued or received. | | enum [DequeueStatus](./Microsoft.Coyote.Actors/DequeueStatus.md) | The status returned as the result of an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) dequeue operation. | +| abstract class [Event](./Microsoft.Coyote.Actors/Event.md) | Abstract class representing an event that can be send to an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) or [`StateMachine`](./Microsoft.Coyote.Actors/StateMachine.md). | | class [EventGroup](./Microsoft.Coyote.Actors/EventGroup.md) | An object representing a long running context involving one or more actors. An `EventGroup` can be provided as an optional argument in CreateActor and SendEvent. If a null `EventGroup` is passed then the `EventGroup` is inherited from the sender or target actors (based on which ever one has a [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md)). In this way an `EventGroup` is automatically communicated to all actors involved in completing some larger operation. Each actor involved can find the `EventGroup` using their [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md) property. | | class [HaltEvent](./Microsoft.Coyote.Actors/HaltEvent.md) | The halt event. | | interface [IActorRuntime](./Microsoft.Coyote.Actors/IActorRuntime.md) | Interface that exposes runtime methods for creating and executing actors. | @@ -22,4 +23,4 @@ | class [UnhandledEventException](./Microsoft.Coyote.Actors/UnhandledEventException.md) | Signals that an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) received an unhandled event. | | class [WildCardEvent](./Microsoft.Coyote.Actors/WildCardEvent.md) | The wild card event. | - + diff --git a/docs/ref/Microsoft.Coyote.CoverageNamespace.md b/docs/ref/Microsoft.Coyote.CoverageNamespace.md new file mode 100644 index 000000000..fb92cf59c --- /dev/null +++ b/docs/ref/Microsoft.Coyote.CoverageNamespace.md @@ -0,0 +1,9 @@ +## Microsoft.Coyote.Coverage namespace + +| public type | description | +| --- | --- | +| class [CoverageGraph](./Microsoft.Coyote.Coverage/CoverageGraph.md) | A directed graph made up of [`Node`](./Microsoft.Coyote.Coverage/CoverageGraph.Node.md) and [`Link`](./Microsoft.Coyote.Coverage/CoverageGraph.Link.md) objects. | +| class [CoverageInfo](./Microsoft.Coyote.Coverage/CoverageInfo.md) | Class for storing coverage-specific data across multiple testing iterations. | +| class [MonitorEventCoverage](./Microsoft.Coyote.Coverage/MonitorEventCoverage.md) | This class maintains information about events received in each state of each specification monitor. | + + diff --git a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime.md b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime.md index 0fc7cf6d0..be3a73a4d 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime.md +++ b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime.md @@ -13,9 +13,9 @@ public interface ICoyoteRuntime : IDisposable | [Logger](ICoyoteRuntime/Logger.md) { get; set; } | Gets or sets an [`ILogger`](../Microsoft.Coyote.Logging/ILogger.md) for logging runtime messages. | | event [OnFailure](ICoyoteRuntime/OnFailure.md) | Callback that is fired when an exception is thrown that includes failed assertions. | | [Assert](ICoyoteRuntime/Assert.md)(…) | Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](./AssertionFailureException.md) exception. (5 methods) | -| [Monitor<T>](ICoyoteRuntime/Monitor.md)(…) | Invokes the specified monitor with the specified [`Event`](../Microsoft.Coyote/Event.md). | -| [RandomBoolean](ICoyoteRuntime/RandomBoolean.md)() | Returns a nondeterministic boolean choice, that can be controlled during analysis or testing. | -| [RandomInteger](ICoyoteRuntime/RandomInteger.md)(…) | Returns a nondeterministic integer choice, that can be controlled during analysis or testing. The value is used to generate an integer in the range [0..maxValue). | +| [Monitor<T>](ICoyoteRuntime/Monitor.md)(…) | Invokes the specified monitor with the specified [`Event`](../Microsoft.Coyote.Specifications/Monitor.Event.md). | +| [RandomBoolean](ICoyoteRuntime/RandomBoolean.md)() | Returns a nondeterministic boolean choice, that can be controlled during testing. | +| [RandomInteger](ICoyoteRuntime/RandomInteger.md)(…) | Returns a nondeterministic integer choice, that can be controlled during testing. The value is used to generate an integer in the range [0..maxValue). | | [RegisterLog](ICoyoteRuntime/RegisterLog.md)(…) | Use this method to register an [`IRuntimeLog`](./IRuntimeLog.md). | | [RegisterMonitor<T>](ICoyoteRuntime/RegisterMonitor.md)() | Registers a new specification monitor of the specified Type. | | [RemoveLog](ICoyoteRuntime/RemoveLog.md)(…) | Use this method to unregister a previously registered [`IRuntimeLog`](./IRuntimeLog.md). | diff --git a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor.md b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor.md index e276cc95a..9c3a646d1 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor.md +++ b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor.md @@ -1,6 +1,6 @@ # ICoyoteRuntime.Monitor<T> method -Invokes the specified monitor with the specified [`Event`](../../Microsoft.Coyote/Event.md). +Invokes the specified monitor with the specified [`Event`](../../Microsoft.Coyote.Specifications/Monitor.Event.md). ```csharp public void Monitor(Event e) @@ -14,7 +14,7 @@ public void Monitor(Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../../Microsoft.Coyote.Specifications/Monitor.Event.md) * class [Monitor](../../Microsoft.Coyote.Specifications/Monitor.md) * interface [ICoyoteRuntime](../ICoyoteRuntime.md) * namespace [Microsoft.Coyote.Runtime](../ICoyoteRuntime.md) diff --git a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean.md b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean.md index 85babc9f0..7334cf065 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean.md +++ b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean.md @@ -1,6 +1,6 @@ # ICoyoteRuntime.RandomBoolean method -Returns a nondeterministic boolean choice, that can be controlled during analysis or testing. +Returns a nondeterministic boolean choice, that can be controlled during testing. ```csharp public bool RandomBoolean() diff --git a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger.md b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger.md index ce486bfb0..a8a0fbc39 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger.md +++ b/docs/ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger.md @@ -1,6 +1,6 @@ # ICoyoteRuntime.RandomInteger method -Returns a nondeterministic integer choice, that can be controlled during analysis or testing. The value is used to generate an integer in the range [0..maxValue). +Returns a nondeterministic integer choice, that can be controlled during testing. The value is used to generate an integer in the range [0..maxValue). ```csharp public int RandomInteger(int maxValue) diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension.md new file mode 100644 index 000000000..edad17b8e --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension.md @@ -0,0 +1,24 @@ +# IRuntimeExtension interface + +Interface for a Coyote runtime extension. + +```csharp +public interface IRuntimeExtension : IDisposable +``` + +## Members + +| name | description | +| --- | --- | +| [BuildCoverageInfo](IRuntimeExtension/BuildCoverageInfo.md)() | Builds the extended [`CoverageInfo`](../Microsoft.Coyote.Coverage/CoverageInfo.md). | +| [GetCoverageGraph](IRuntimeExtension/GetCoverageGraph.md)() | Returns the [`CoverageGraph`](../Microsoft.Coyote.Coverage/CoverageGraph.md) of the current execution. | +| [GetCoverageInfo](IRuntimeExtension/GetCoverageInfo.md)() | Returns the extended [`CoverageInfo`](../Microsoft.Coyote.Coverage/CoverageInfo.md). | +| [RunTest](IRuntimeExtension/RunTest.md)(…) | Runs the specified test entry point delegate and returns a task that completes when the test is completed. | +| [WaitUntilQuiescenceAsync](IRuntimeExtension/WaitUntilQuiescenceAsync.md)() | Returns a task that completes once all operations managed by the extension reach quiescence. | + +## See Also + +* namespace [Microsoft.Coyote.Runtime](../Microsoft.Coyote.RuntimeNamespace.md) +* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/BuildCoverageInfo.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/BuildCoverageInfo.md new file mode 100644 index 000000000..2d4c7ee66 --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/BuildCoverageInfo.md @@ -0,0 +1,20 @@ +# IRuntimeExtension.BuildCoverageInfo method + +Builds the extended [`CoverageInfo`](../../Microsoft.Coyote.Coverage/CoverageInfo.md). + +```csharp +public CoverageInfo BuildCoverageInfo() +``` + +## Remarks + +This information is only available when IsActivityCoverageReported is enabled. + +## See Also + +* class [CoverageInfo](../../Microsoft.Coyote.Coverage/CoverageInfo.md) +* interface [IRuntimeExtension](../IRuntimeExtension.md) +* namespace [Microsoft.Coyote.Runtime](../IRuntimeExtension.md) +* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageGraph.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageGraph.md new file mode 100644 index 000000000..de629199a --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageGraph.md @@ -0,0 +1,16 @@ +# IRuntimeExtension.GetCoverageGraph method + +Returns the [`CoverageGraph`](../../Microsoft.Coyote.Coverage/CoverageGraph.md) of the current execution. + +```csharp +public CoverageGraph GetCoverageGraph() +``` + +## See Also + +* class [CoverageGraph](../../Microsoft.Coyote.Coverage/CoverageGraph.md) +* interface [IRuntimeExtension](../IRuntimeExtension.md) +* namespace [Microsoft.Coyote.Runtime](../IRuntimeExtension.md) +* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageInfo.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageInfo.md new file mode 100644 index 000000000..de16cd1c4 --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageInfo.md @@ -0,0 +1,16 @@ +# IRuntimeExtension.GetCoverageInfo method + +Returns the extended [`CoverageInfo`](../../Microsoft.Coyote.Coverage/CoverageInfo.md). + +```csharp +public CoverageInfo GetCoverageInfo() +``` + +## See Also + +* class [CoverageInfo](../../Microsoft.Coyote.Coverage/CoverageInfo.md) +* interface [IRuntimeExtension](../IRuntimeExtension.md) +* namespace [Microsoft.Coyote.Runtime](../IRuntimeExtension.md) +* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/RunTest.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/RunTest.md new file mode 100644 index 000000000..9b5831ae7 --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/RunTest.md @@ -0,0 +1,24 @@ +# IRuntimeExtension.RunTest method + +Runs the specified test entry point delegate and returns a task that completes when the test is completed. + +```csharp +public bool RunTest(Delegate test, out Task task) +``` + +| parameter | description | +| --- | --- | +| test | The test entry point delegate. | +| task | A task that completes when the test is completed. | + +## Return Value + +True if the extension can execute the test, else false. + +## See Also + +* interface [IRuntimeExtension](../IRuntimeExtension.md) +* namespace [Microsoft.Coyote.Runtime](../IRuntimeExtension.md) +* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/WaitUntilQuiescenceAsync.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/WaitUntilQuiescenceAsync.md new file mode 100644 index 000000000..67e407b1c --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeExtension/WaitUntilQuiescenceAsync.md @@ -0,0 +1,15 @@ +# IRuntimeExtension.WaitUntilQuiescenceAsync method + +Returns a task that completes once all operations managed by the extension reach quiescence. + +```csharp +public Task WaitUntilQuiescenceAsync() +``` + +## See Also + +* interface [IRuntimeExtension](../IRuntimeExtension.md) +* namespace [Microsoft.Coyote.Runtime](../IRuntimeExtension.md) +* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent.md index a83bd8f44..e3918f088 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent.md +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent.md @@ -18,7 +18,7 @@ public void OnMonitorProcessEvent(string monitorType, string stateName, string s ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../../Microsoft.Coyote.Specifications/Monitor.Event.md) * interface [IRuntimeLog](../IRuntimeLog.md) * namespace [Microsoft.Coyote.Runtime](../IRuntimeLog.md) * assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) diff --git a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent.md b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent.md index 0915a24b1..6f79d3b6a 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent.md +++ b/docs/ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent.md @@ -14,7 +14,7 @@ public void OnMonitorRaiseEvent(string monitorType, string stateName, Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../../Microsoft.Coyote.Specifications/Monitor.Event.md) * interface [IRuntimeLog](../IRuntimeLog.md) * namespace [Microsoft.Coyote.Runtime](../IRuntimeLog.md) * assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) diff --git a/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent.md b/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent.md index 83088bcc6..efca258dc 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent.md +++ b/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent.md @@ -18,7 +18,7 @@ public virtual void OnMonitorProcessEvent(string monitorType, string stateName, ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../../Microsoft.Coyote.Specifications/Monitor.Event.md) * class [RuntimeLogTextFormatter](../RuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Runtime](../RuntimeLogTextFormatter.md) * assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) diff --git a/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent.md b/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent.md index 73c7a76cd..d5b54c51e 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent.md +++ b/docs/ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent.md @@ -14,7 +14,7 @@ public virtual void OnMonitorRaiseEvent(string monitorType, string stateName, Ev ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../../Microsoft.Coyote.Specifications/Monitor.Event.md) * class [RuntimeLogTextFormatter](../RuntimeLogTextFormatter.md) * namespace [Microsoft.Coyote.Runtime](../RuntimeLogTextFormatter.md) * assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) diff --git a/docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider.md b/docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider.md index 83b6f8996..7644adc91 100644 --- a/docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider.md +++ b/docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider.md @@ -11,8 +11,6 @@ public static class RuntimeProvider | name | description | | --- | --- | | static [Current](RuntimeProvider/Current.md) { get; } | The runtime installed in the current execution context. | -| static [Create](RuntimeProvider/Create.md)() | Creates a new Coyote runtime. | -| static [Create](RuntimeProvider/Create.md)(…) | Creates a new Coyote runtime with the specified [`Configuration`](../Microsoft.Coyote/Configuration.md). | ## See Also diff --git a/docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider/Create.md b/docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider/Create.md deleted file mode 100644 index 38444b459..000000000 --- a/docs/ref/Microsoft.Coyote.Runtime/RuntimeProvider/Create.md +++ /dev/null @@ -1,54 +0,0 @@ -# RuntimeProvider.Create method (1 of 2) - -Creates a new Coyote runtime. - -```csharp -public static ICoyoteRuntime Create() -``` - -## Return Value - -The created Coyote runtime. - -## Remarks - -Only one Coyote runtime can be used per process. If you create a new Coyote runtime it replaces the previously installed one. This is a thread-safe operation. - -## See Also - -* interface [ICoyoteRuntime](../ICoyoteRuntime.md) -* class [RuntimeProvider](../RuntimeProvider.md) -* namespace [Microsoft.Coyote.Runtime](../RuntimeProvider.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) - ---- - -# RuntimeProvider.Create method (2 of 2) - -Creates a new Coyote runtime with the specified [`Configuration`](../../Microsoft.Coyote/Configuration.md). - -```csharp -public static ICoyoteRuntime Create(Configuration configuration) -``` - -| parameter | description | -| --- | --- | -| configuration | The runtime configuration to use. | - -## Return Value - -The created Coyote runtime. - -## Remarks - -Only one Coyote runtime can be used per process. If you create a new Coyote runtime it replaces the previously installed one. This is a thread-safe operation. - -## See Also - -* interface [ICoyoteRuntime](../ICoyoteRuntime.md) -* class [Configuration](../../Microsoft.Coyote/Configuration.md) -* class [RuntimeProvider](../RuntimeProvider.md) -* namespace [Microsoft.Coyote.Runtime](../RuntimeProvider.md) -* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) - - diff --git a/docs/ref/Microsoft.Coyote.RuntimeNamespace.md b/docs/ref/Microsoft.Coyote.RuntimeNamespace.md index 62b48e0e4..d47fb5f2c 100644 --- a/docs/ref/Microsoft.Coyote.RuntimeNamespace.md +++ b/docs/ref/Microsoft.Coyote.RuntimeNamespace.md @@ -5,6 +5,7 @@ | class [AssertionFailureException](./Microsoft.Coyote.Runtime/AssertionFailureException.md) | The exception that is thrown by the Coyote runtime upon assertion failure. | | interface [ICoyoteRuntime](./Microsoft.Coyote.Runtime/ICoyoteRuntime.md) | Interface that exposes base runtime methods for Coyote. | | interface [IOperationBuilder](./Microsoft.Coyote.Runtime/IOperationBuilder.md) | Interface of a controlled operation builder. | +| interface [IRuntimeExtension](./Microsoft.Coyote.Runtime/IRuntimeExtension.md) | Interface for a Coyote runtime extension. | | interface [IRuntimeLog](./Microsoft.Coyote.Runtime/IRuntimeLog.md) | Interface that allows an external module to track what is happening in the [`ICoyoteRuntime`](./Microsoft.Coyote.Runtime/ICoyoteRuntime.md). | | delegate [OnFailureHandler](./Microsoft.Coyote.Runtime/OnFailureHandler.md) | Handles the [`OnFailure`](./Microsoft.Coyote.Runtime/ICoyoteRuntime/OnFailure.md) event. | | static class [Operation](./Microsoft.Coyote.Runtime/Operation.md) | Provides a set of static methods for instrumenting concurrency primitives that can then be controlled during testing. | diff --git a/docs/ref/Microsoft.Coyote.Specifications/Monitor.Event.md b/docs/ref/Microsoft.Coyote.Specifications/Monitor.Event.md new file mode 100644 index 000000000..fa0b5b6fd --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Specifications/Monitor.Event.md @@ -0,0 +1,21 @@ +# Monitor.Event class + +Abstract class representing an event that can be send to a [`Monitor`](./Monitor.md). + +```csharp +public abstract class Event +``` + +## Protected Members + +| name | description | +| --- | --- | +| [Event](Monitor.Event/Event.md)() | The default constructor. | + +## See Also + +* class [Monitor](./Monitor.md) +* namespace [Microsoft.Coyote.Specifications](../Microsoft.Coyote.SpecificationsNamespace.md) +* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote/Event/Event.md b/docs/ref/Microsoft.Coyote.Specifications/Monitor.Event/Event.md similarity index 60% rename from docs/ref/Microsoft.Coyote/Event/Event.md rename to docs/ref/Microsoft.Coyote.Specifications/Monitor.Event/Event.md index adb7e68f8..167da4386 100644 --- a/docs/ref/Microsoft.Coyote/Event/Event.md +++ b/docs/ref/Microsoft.Coyote.Specifications/Monitor.Event/Event.md @@ -1,4 +1,4 @@ -# Event constructor +# Monitor.Event constructor The default constructor. @@ -8,8 +8,8 @@ protected Event() ## See Also -* class [Event](../Event.md) -* namespace [Microsoft.Coyote](../Event.md) +* class [Event](../Monitor.Event.md) +* namespace [Microsoft.Coyote.Specifications](../Monitor.Event.md) * assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) diff --git a/docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent.md b/docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent.md new file mode 100644 index 000000000..2ce8af423 --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent.md @@ -0,0 +1,22 @@ +# Monitor.WildCardEvent class + +The wild card event. + +```csharp +public sealed class WildCardEvent : Event +``` + +## Public Members + +| name | description | +| --- | --- | +| [WildCardEvent](Monitor.WildCardEvent/WildCardEvent.md)() | Initializes a new instance of the [`WildCardEvent`](./Monitor.WildCardEvent.md) class. | + +## See Also + +* class [Event](./Monitor.Event.md) +* class [Monitor](./Monitor.md) +* namespace [Microsoft.Coyote.Specifications](../Microsoft.Coyote.SpecificationsNamespace.md) +* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent/WildCardEvent.md b/docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent/WildCardEvent.md new file mode 100644 index 000000000..abcd4ebce --- /dev/null +++ b/docs/ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent/WildCardEvent.md @@ -0,0 +1,15 @@ +# Monitor.WildCardEvent constructor + +Initializes a new instance of the [`WildCardEvent`](../Monitor.WildCardEvent.md) class. + +```csharp +public WildCardEvent() +``` + +## See Also + +* class [WildCardEvent](../Monitor.WildCardEvent.md) +* namespace [Microsoft.Coyote.Specifications](../Monitor.WildCardEvent.md) +* assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) + + diff --git a/docs/ref/Microsoft.Coyote.Specifications/Monitor.md b/docs/ref/Microsoft.Coyote.Specifications/Monitor.md index 2084a0781..d06d7cf7e 100644 --- a/docs/ref/Microsoft.Coyote.Specifications/Monitor.md +++ b/docs/ref/Microsoft.Coyote.Specifications/Monitor.md @@ -11,8 +11,10 @@ public abstract class Monitor | name | description | | --- | --- | | override [ToString](Monitor/ToString.md)() | Returns a string that represents the current monitor. | +| abstract class [Event](Monitor.Event.md) | Abstract class representing an event that can be send to a [`Monitor`](./Monitor.md). | | abstract class [State](Monitor.State.md) | Abstract class representing a state. | | abstract class [StateGroup](Monitor.StateGroup.md) | Abstract class used for representing a group of related states. | +| class [WildCardEvent](Monitor.WildCardEvent.md) | The wild card event. | ## Protected Members @@ -23,7 +25,7 @@ public abstract class Monitor | virtual [HashedState](Monitor/HashedState.md) { get; } | User-defined hashed state of the monitor. Override to improve the accuracy of stateful techniques during testing. | | [Logger](Monitor/Logger.md) { get; } | The logger installed to the runtime. | | [Assert](Monitor/Assert.md)(…) | Checks if the assertion holds, and if not, throws an [`AssertionFailureException`](../Microsoft.Coyote.Runtime/AssertionFailureException.md) exception. (5 methods) | -| [RaiseEvent](Monitor/RaiseEvent.md)(…) | Raises the specified [`Event`](../Microsoft.Coyote/Event.md) at the end of the current action. | +| [RaiseEvent](Monitor/RaiseEvent.md)(…) | Raises the specified [`Event`](./Monitor.Event.md) at the end of the current action. | | [RaiseGotoStateEvent](Monitor/RaiseGotoStateEvent.md)(…) | Raise a special event that performs a goto state operation at the end of the current action. | | [RaiseGotoStateEvent<TState>](Monitor/RaiseGotoStateEvent.md)() | Raise a special event that performs a goto state operation at the end of the current action. | diff --git a/docs/ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent.md b/docs/ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent.md index b0f26e3f7..f8ec464d6 100644 --- a/docs/ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent.md +++ b/docs/ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent.md @@ -1,6 +1,6 @@ # Monitor.RaiseEvent method -Raises the specified [`Event`](../../Microsoft.Coyote/Event.md) at the end of the current action. +Raises the specified [`Event`](../Monitor.Event.md) at the end of the current action. ```csharp protected void RaiseEvent(Event e) @@ -16,7 +16,7 @@ This event is not handled until the action that calls this method returns contro ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Monitor.Event.md) * class [Monitor](../Monitor.md) * namespace [Microsoft.Coyote.Specifications](../Monitor.md) * assembly [Microsoft.Coyote](../../Microsoft.Coyote.md) diff --git a/docs/ref/Microsoft.Coyote.Specifications/Specification/Monitor.md b/docs/ref/Microsoft.Coyote.Specifications/Specification/Monitor.md index 068a1dd8f..bfeed6448 100644 --- a/docs/ref/Microsoft.Coyote.Specifications/Specification/Monitor.md +++ b/docs/ref/Microsoft.Coyote.Specifications/Specification/Monitor.md @@ -14,7 +14,7 @@ public static void Monitor(Event e) ## See Also -* class [Event](../../Microsoft.Coyote/Event.md) +* class [Event](../Monitor.Event.md) * class [Monitor](../Monitor.md) * class [Specification](../Specification.md) * namespace [Microsoft.Coyote.Specifications](../Specification.md) diff --git a/docs/ref/Microsoft.Coyote.SystematicTesting/TestReport/CoverageInfo.md b/docs/ref/Microsoft.Coyote.SystematicTesting/TestReport/CoverageInfo.md index 8cd16837a..ca869de51 100644 --- a/docs/ref/Microsoft.Coyote.SystematicTesting/TestReport/CoverageInfo.md +++ b/docs/ref/Microsoft.Coyote.SystematicTesting/TestReport/CoverageInfo.md @@ -3,7 +3,7 @@ Information regarding code coverage. ```csharp -public CoverageInfo CoverageInfo { get; } +public ActorCoverageInfo CoverageInfo { get; } ``` ## See Also diff --git a/docs/ref/Microsoft.Coyote.md b/docs/ref/Microsoft.Coyote.md index 1817e6b20..da654a638 100644 --- a/docs/ref/Microsoft.Coyote.md +++ b/docs/ref/Microsoft.Coyote.md @@ -5,59 +5,14 @@ | public type | description | | --- | --- | | class [Configuration](./Microsoft.Coyote/Configuration.md) | The Coyote runtime and testing configuration. | -| abstract class [Event](./Microsoft.Coyote/Event.md) | Abstract class representing an event. | -## Microsoft.Coyote.Actors namespace +## Microsoft.Coyote.Coverage namespace | public type | description | | --- | --- | -| abstract class [Actor](./Microsoft.Coyote.Actors/Actor.md) | Type that implements an actor. Inherit from this class to declare a custom actor. | -| enum [ActorExecutionStatus](./Microsoft.Coyote.Actors/ActorExecutionStatus.md) | The execution status of an actor. | -| class [ActorId](./Microsoft.Coyote.Actors/ActorId.md) | Unique actor id. | -| class [ActorRuntimeLogTextFormatter](./Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter.md) | This class implements [`IActorRuntimeLog`](./Microsoft.Coyote.Actors/IActorRuntimeLog.md) and generates output in a a human readable text format. | -| class [AwaitableEventGroup<T>](./Microsoft.Coyote.Actors/AwaitableEventGroup-1.md) | An object representing an awaitable long running context involving one or more actors. An `AwaitableEventGroup` can be provided as an optional argument in CreateActor and SendEvent. If a null `AwaitableEventGroup` is passed then the `EventGroup` is inherited from the sender or target actors (based on which ever one has a [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md)). In this way an `AwaitableEventGroup` is automatically communicated to all actors involved in completing some larger operation. Each actor involved can find the `AwaitableEventGroup` using their [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md) property. | -| class [DefaultEvent](./Microsoft.Coyote.Actors/DefaultEvent.md) | A default event that is generated by the runtime when no user-defined event is dequeued or received. | -| enum [DequeueStatus](./Microsoft.Coyote.Actors/DequeueStatus.md) | The status returned as the result of an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) dequeue operation. | -| class [EventGroup](./Microsoft.Coyote.Actors/EventGroup.md) | An object representing a long running context involving one or more actors. An `EventGroup` can be provided as an optional argument in CreateActor and SendEvent. If a null `EventGroup` is passed then the `EventGroup` is inherited from the sender or target actors (based on which ever one has a [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md)). In this way an `EventGroup` is automatically communicated to all actors involved in completing some larger operation. Each actor involved can find the `EventGroup` using their [`CurrentEventGroup`](./Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md) property. | -| class [HaltEvent](./Microsoft.Coyote.Actors/HaltEvent.md) | The halt event. | -| interface [IActorRuntime](./Microsoft.Coyote.Actors/IActorRuntime.md) | Interface that exposes runtime methods for creating and executing actors. | -| interface [IActorRuntimeLog](./Microsoft.Coyote.Actors/IActorRuntimeLog.md) | Interface that allows an external module to track what is happening in the [`IActorRuntime`](./Microsoft.Coyote.Actors/IActorRuntime.md). | -| delegate [OnActorHaltedHandler](./Microsoft.Coyote.Actors/OnActorHaltedHandler.md) | Handles the [`OnActorHalted`](./Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md) event. | -| delegate [OnEventDroppedHandler](./Microsoft.Coyote.Actors/OnEventDroppedHandler.md) | Handles the [`OnEventDropped`](./Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md) event. | -| enum [OnExceptionOutcome](./Microsoft.Coyote.Actors/OnExceptionOutcome.md) | The outcome when an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) throws an exception. | -| static class [RuntimeFactory](./Microsoft.Coyote.Actors/RuntimeFactory.md) | Provides methods for creating a [`IActorRuntime`](./Microsoft.Coyote.Actors/IActorRuntime.md) runtime. | -| class [SendOptions](./Microsoft.Coyote.Actors/SendOptions.md) | Represents a send event configuration that is used during testing. | -| abstract class [StateMachine](./Microsoft.Coyote.Actors/StateMachine.md) | Type that implements a state machine actor. Inherit from this class to declare a custom actor with states, state transitions and event handlers. | -| class [UnhandledEventException](./Microsoft.Coyote.Actors/UnhandledEventException.md) | Signals that an [`Actor`](./Microsoft.Coyote.Actors/Actor.md) received an unhandled event. | -| class [WildCardEvent](./Microsoft.Coyote.Actors/WildCardEvent.md) | The wild card event. | - -## Microsoft.Coyote.Actors.Coverage namespace - -| public type | description | -| --- | --- | -| class [CoverageInfo](./Microsoft.Coyote.Actors.Coverage/CoverageInfo.md) | Class for storing actor coverage-specific data across multiple testing iterations. | -| class [EventCoverage](./Microsoft.Coyote.Actors.Coverage/EventCoverage.md) | This class maintains information about events received and sent from each state of each actor. | -| class [Graph](./Microsoft.Coyote.Actors.Coverage/Graph.md) | A directed graph made up of Nodes and Links. | -| class [GraphLink](./Microsoft.Coyote.Actors.Coverage/GraphLink.md) | A Link represents a directed graph connection between two Nodes. | -| class [GraphNode](./Microsoft.Coyote.Actors.Coverage/GraphNode.md) | A Node of a Graph. | -| class [GraphObject](./Microsoft.Coyote.Actors.Coverage/GraphObject.md) | A Node of a Graph. | - -## Microsoft.Coyote.Actors.SharedObjects namespace - -| public type | description | -| --- | --- | -| class [SharedCounter](./Microsoft.Coyote.Actors.SharedObjects/SharedCounter.md) | A thread-safe counter that can be shared in-memory by actors. | -| class [SharedDictionary<TKey,TValue>](./Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2.md) | A thread-safe dictionary that can be shared in-memory by actors. | -| static class [SharedDictionary](./Microsoft.Coyote.Actors.SharedObjects/SharedDictionary.md) | A thread-safe dictionary that can be shared in-memory by actors. | -| class [SharedRegister<T>](./Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1.md) | A thread-safe register that can be shared in-memory by actors. | -| static class [SharedRegister](./Microsoft.Coyote.Actors.SharedObjects/SharedRegister.md) | A thread-safe register that can be shared in-memory by actors. | - -## Microsoft.Coyote.Actors.Timers namespace - -| public type | description | -| --- | --- | -| class [TimerElapsedEvent](./Microsoft.Coyote.Actors.Timers/TimerElapsedEvent.md) | Defines a timer elapsed event that is sent from a timer to the actor that owns the timer. | -| class [TimerInfo](./Microsoft.Coyote.Actors.Timers/TimerInfo.md) | Stores information about a timer that can send timeout events to its owner actor. | +| class [CoverageGraph](./Microsoft.Coyote.Coverage/CoverageGraph.md) | A directed graph made up of [`Node`](./Microsoft.Coyote.Coverage/CoverageGraph.Node.md) and [`Link`](./Microsoft.Coyote.Coverage/CoverageGraph.Link.md) objects. | +| class [CoverageInfo](./Microsoft.Coyote.Coverage/CoverageInfo.md) | Class for storing coverage-specific data across multiple testing iterations. | +| class [MonitorEventCoverage](./Microsoft.Coyote.Coverage/MonitorEventCoverage.md) | This class maintains information about events received in each state of each specification monitor. | ## Microsoft.Coyote.Logging namespace @@ -82,6 +37,7 @@ | class [AssertionFailureException](./Microsoft.Coyote.Runtime/AssertionFailureException.md) | The exception that is thrown by the Coyote runtime upon assertion failure. | | interface [ICoyoteRuntime](./Microsoft.Coyote.Runtime/ICoyoteRuntime.md) | Interface that exposes base runtime methods for Coyote. | | interface [IOperationBuilder](./Microsoft.Coyote.Runtime/IOperationBuilder.md) | Interface of a controlled operation builder. | +| interface [IRuntimeExtension](./Microsoft.Coyote.Runtime/IRuntimeExtension.md) | Interface for a Coyote runtime extension. | | interface [IRuntimeLog](./Microsoft.Coyote.Runtime/IRuntimeLog.md) | Interface that allows an external module to track what is happening in the [`ICoyoteRuntime`](./Microsoft.Coyote.Runtime/ICoyoteRuntime.md). | | delegate [OnFailureHandler](./Microsoft.Coyote.Runtime/OnFailureHandler.md) | Handles the [`OnFailure`](./Microsoft.Coyote.Runtime/ICoyoteRuntime/OnFailure.md) event. | | static class [Operation](./Microsoft.Coyote.Runtime/Operation.md) | Provides a set of static methods for instrumenting concurrency primitives that can then be controlled during testing. | diff --git a/docs/ref/Microsoft.Coyote/Event.md b/docs/ref/Microsoft.Coyote/Event.md deleted file mode 100644 index f21cc7346..000000000 --- a/docs/ref/Microsoft.Coyote/Event.md +++ /dev/null @@ -1,20 +0,0 @@ -# Event class - -Abstract class representing an event. - -```csharp -public abstract class Event -``` - -## Protected Members - -| name | description | -| --- | --- | -| [Event](Event/Event.md)() | The default constructor. | - -## See Also - -* namespace [Microsoft.Coyote](../Microsoft.CoyoteNamespace.md) -* assembly [Microsoft.Coyote](../Microsoft.Coyote.md) - - diff --git a/docs/ref/Microsoft.CoyoteNamespace.md b/docs/ref/Microsoft.CoyoteNamespace.md index 30e64da4a..1f24d45e8 100644 --- a/docs/ref/Microsoft.CoyoteNamespace.md +++ b/docs/ref/Microsoft.CoyoteNamespace.md @@ -3,6 +3,5 @@ | public type | description | | --- | --- | | class [Configuration](./Microsoft.Coyote/Configuration.md) | The Coyote runtime and testing configuration. | -| abstract class [Event](./Microsoft.Coyote/Event.md) | Abstract class representing an event. | diff --git a/docs/ref/toc.yml b/docs/ref/toc.yml index 6b10bcbeb..a3aedca2b 100644 --- a/docs/ref/toc.yml +++ b/docs/ref/toc.yml @@ -5,11 +5,6 @@ toc: - name: Microsoft.Coyote link: ref/Microsoft.CoyoteNamespace subfolderitems: - - name: Event - link: ref/Microsoft.Coyote/Event - subfolderitems: - - name: Event - link: ref/Microsoft.Coyote/Event/Event - name: Configuration link: ref/Microsoft.Coyote/Configuration subfolderitems: @@ -89,836 +84,898 @@ toc: link: ref/Microsoft.Coyote/Configuration/DeadlockTimeout - name: VerbosityLevel link: ref/Microsoft.Coyote/Configuration/VerbosityLevel - - name: Microsoft.Coyote.Actors - link: ref/Microsoft.Coyote.ActorsNamespace + - name: Microsoft.Coyote.Coverage + link: ref/Microsoft.Coyote.CoverageNamespace subfolderitems: - - name: Actor - link: ref/Microsoft.Coyote.Actors/Actor - subfolderitems: - - name: CreateActor - link: ref/Microsoft.Coyote.Actors/Actor/CreateActor - - name: SendEvent - link: ref/Microsoft.Coyote.Actors/Actor/SendEvent - - name: ReceiveEventAsync - link: ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync - - name: StartTimer - link: ref/Microsoft.Coyote.Actors/Actor/StartTimer - - name: StartPeriodicTimer - link: ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer - - name: StopTimer - link: ref/Microsoft.Coyote.Actors/Actor/StopTimer - - name: RandomBoolean - link: ref/Microsoft.Coyote.Actors/Actor/RandomBoolean - - name: RandomInteger - link: ref/Microsoft.Coyote.Actors/Actor/RandomInteger - - name: Monitor - link: ref/Microsoft.Coyote.Actors/Actor/Monitor - - name: Assert - link: ref/Microsoft.Coyote.Actors/Actor/Assert - - name: RaiseHaltEvent - link: ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent - - name: OnInitializeAsync - link: ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync - - name: OnEventDequeuedAsync - link: ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync - - name: OnEventIgnored - link: ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored - - name: OnEventDeferred - link: ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred - - name: OnEventHandledAsync - link: ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync - - name: OnEventUnhandledAsync - link: ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync - - name: OnExceptionHandledAsync - link: ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync - - name: OnHaltAsync - link: ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync - - name: OnException - link: ref/Microsoft.Coyote.Actors/Actor/OnException - - name: Equals - link: ref/Microsoft.Coyote.Actors/Actor/Equals - - name: GetHashCode - link: ref/Microsoft.Coyote.Actors/Actor/GetHashCode - - name: ToString - link: ref/Microsoft.Coyote.Actors/Actor/ToString - - name: Actor - link: ref/Microsoft.Coyote.Actors/Actor/Actor - - name: Id - link: ref/Microsoft.Coyote.Actors/Actor/Id - - name: CurrentEventGroup - link: ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup - - name: Logger - link: ref/Microsoft.Coyote.Actors/Actor/Logger - - name: HashedState - link: ref/Microsoft.Coyote.Actors/Actor/HashedState - - name: ActorExecutionStatus - link: ref/Microsoft.Coyote.Actors/ActorExecutionStatus - - name: ActorId - link: ref/Microsoft.Coyote.Actors/ActorId + - name: CoverageGraph + link: ref/Microsoft.Coyote.Coverage/CoverageGraph subfolderitems: - - name: Equals - link: ref/Microsoft.Coyote.Actors/ActorId/Equals - - name: GetHashCode - link: ref/Microsoft.Coyote.Actors/ActorId/GetHashCode + - name: GetNode + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/GetNode + - name: GetOrCreateNode + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/GetOrCreateNode + - name: GetOrCreateLink + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/GetOrCreateLink + - name: WriteDgml + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/WriteDgml + - name: LoadDgml + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/LoadDgml + - name: Merge + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/Merge - name: ToString - link: ref/Microsoft.Coyote.Actors/ActorId/ToString - - name: CompareTo - link: ref/Microsoft.Coyote.Actors/ActorId/CompareTo - - name: Runtime - link: ref/Microsoft.Coyote.Actors/ActorId/Runtime - - name: IsNameUsedForHashing - link: ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing - - name: Value - link: ref/Microsoft.Coyote.Actors/ActorId/Value - - name: NameValue - link: ref/Microsoft.Coyote.Actors/ActorId/NameValue - - name: Type - link: ref/Microsoft.Coyote.Actors/ActorId/Type - - name: Name - link: ref/Microsoft.Coyote.Actors/ActorId/Name - - name: DequeueStatus - link: ref/Microsoft.Coyote.Actors/DequeueStatus - - name: AwaitableEventGroup - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1 - subfolderitems: - - name: SetResult - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetResult - - name: TrySetResult - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetResult - - name: SetCancelled - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetCancelled - - name: TrySetCanceled - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetCanceled - - name: SetException - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetException - - name: TrySetException - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetException - - name: GetAwaiter - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/GetAwaiter - - name: AwaitableEventGroup - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/AwaitableEventGroup - - name: Task - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/Task - - name: IsCompleted - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCompleted - - name: IsCanceled - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCanceled - - name: IsFaulted - link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsFaulted - - name: DefaultEvent - link: ref/Microsoft.Coyote.Actors/DefaultEvent + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/ToString + - name: CoverageGraph + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/CoverageGraph + - name: Nodes + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/Nodes + - name: Links + link: ref/Microsoft.Coyote.Coverage/CoverageGraph/Links + - name: CoverageInfo + link: ref/Microsoft.Coyote.Coverage/CoverageInfo + subfolderitems: + - name: IsMonitorDeclared + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/IsMonitorDeclared + - name: DeclareMonitorState + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/DeclareMonitorState + - name: DeclareMonitorStateEventPair + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/DeclareMonitorStateEventPair + - name: Load + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/Load + - name: Save + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/Save + - name: Merge + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/Merge + - name: CoverageInfo + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/CoverageInfo + - name: CoverageGraph + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/CoverageGraph + - name: Monitors + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/Monitors + - name: MonitorsToStates + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/MonitorsToStates + - name: RegisteredMonitorEvents + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/RegisteredMonitorEvents + - name: MonitorEventInfo + link: ref/Microsoft.Coyote.Coverage/CoverageInfo/MonitorEventInfo + - name: MonitorEventCoverage + link: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage + subfolderitems: + - name: GetEventsProcessed + link: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage/GetEventsProcessed + - name: GetEventsRaised + link: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage/GetEventsRaised + - name: MonitorEventCoverage + link: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage/MonitorEventCoverage + - name: CoverageGraph.Object + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object subfolderitems: - - name: Instance - link: ref/Microsoft.Coyote.Actors/DefaultEvent/Instance - - name: EventGroup - link: ref/Microsoft.Coyote.Actors/EventGroup + - name: AddAttribute + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/AddAttribute + - name: AddListAttribute + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/AddListAttribute + - name: Object + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/Object + - name: Attributes + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/Attributes + - name: AttributeLists + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/AttributeLists + - name: CoverageGraph.Node + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node subfolderitems: - - name: EventGroup - link: ref/Microsoft.Coyote.Actors/EventGroup/EventGroup + - name: AddDgmlProperties + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/AddDgmlProperties + - name: Node + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Node - name: Id - link: ref/Microsoft.Coyote.Actors/EventGroup/Id - - name: Name - link: ref/Microsoft.Coyote.Actors/EventGroup/Name - - name: Null - link: ref/Microsoft.Coyote.Actors/EventGroup/Null - - name: HaltEvent - link: ref/Microsoft.Coyote.Actors/HaltEvent + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Id + - name: Label + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Label + - name: Category + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Category + - name: CoverageGraph.Link + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link subfolderitems: - - name: Instance - link: ref/Microsoft.Coyote.Actors/HaltEvent/Instance - - name: WildCardEvent - link: ref/Microsoft.Coyote.Actors/WildCardEvent + - name: AddDgmlProperties + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/AddDgmlProperties + - name: Link + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Link + - name: Label + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Label + - name: Category + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Category + - name: Source + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Source + - name: Target + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Target + - name: Index + link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Index + - name: Microsoft.Coyote.Logging + link: ref/Microsoft.Coyote.LoggingNamespace + subfolderitems: + - name: ILogger + link: ref/Microsoft.Coyote.Logging/ILogger subfolderitems: - - name: WildCardEvent - link: ref/Microsoft.Coyote.Actors/WildCardEvent/WildCardEvent - - name: OnExceptionOutcome - link: ref/Microsoft.Coyote.Actors/OnExceptionOutcome - - name: UnhandledEventException - link: ref/Microsoft.Coyote.Actors/UnhandledEventException + - name: Write + link: ref/Microsoft.Coyote.Logging/ILogger/Write + - name: WriteLine + link: ref/Microsoft.Coyote.Logging/ILogger/WriteLine + - name: LogSeverity + link: ref/Microsoft.Coyote.Logging/LogSeverity + - name: MemoryLogger + link: ref/Microsoft.Coyote.Logging/MemoryLogger subfolderitems: - - name: UnhandledEvent - link: ref/Microsoft.Coyote.Actors/UnhandledEventException/UnhandledEvent - - name: CurrentStateName - link: ref/Microsoft.Coyote.Actors/UnhandledEventException/CurrentStateName - - name: OnActorHaltedHandler - link: ref/Microsoft.Coyote.Actors/OnActorHaltedHandler - - name: OnEventDroppedHandler - link: ref/Microsoft.Coyote.Actors/OnEventDroppedHandler - - name: IActorRuntime - link: ref/Microsoft.Coyote.Actors/IActorRuntime + - name: Write + link: ref/Microsoft.Coyote.Logging/MemoryLogger/Write + - name: WriteLine + link: ref/Microsoft.Coyote.Logging/MemoryLogger/WriteLine + - name: ToString + link: ref/Microsoft.Coyote.Logging/MemoryLogger/ToString + - name: Dispose + link: ref/Microsoft.Coyote.Logging/MemoryLogger/Dispose + - name: MemoryLogger + link: ref/Microsoft.Coyote.Logging/MemoryLogger/MemoryLogger + - name: TextWriterLogger + link: ref/Microsoft.Coyote.Logging/TextWriterLogger subfolderitems: - - name: CreateActorId - link: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId - - name: CreateActorIdFromName - link: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName - - name: CreateActor - link: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor - - name: SendEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent - - name: GetCurrentEventGroup - link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup - - name: GetActorExecutionStatus - link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus - - name: GetCurrentActorIds - link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds - - name: GetCurrentActorTypes - link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes - - name: GetCurrentActorCount - link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount - - name: OnActorHalted - link: ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted - - name: OnEventDropped - link: ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped - - name: ActorRuntimeLogTextFormatter - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter - subfolderitems: - - name: OnCreateActor - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateActor - - name: OnCreateStateMachine - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateStateMachine - - name: OnCreateTimer - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateTimer - - name: OnDefaultEventHandler - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDefaultEventHandler - - name: OnEventHandlerTerminated - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEventHandlerTerminated - - name: OnDequeueEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDequeueEvent - - name: OnEnqueueEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEnqueueEvent - - name: OnExceptionHandled - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionHandled - - name: OnExceptionThrown - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionThrown - - name: OnExecuteAction - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExecuteAction - - name: OnGotoState - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnGotoState - - name: OnHalt - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHalt - - name: OnPopState - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopState - - name: OnPopStateUnhandledEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopStateUnhandledEvent - - name: OnPushState - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPushState - - name: OnRaiseEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnRaiseEvent - - name: OnHandleRaisedEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHandleRaisedEvent - - name: OnReceiveEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnReceiveEvent - - name: OnSendEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnSendEvent - - name: OnStateTransition - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStateTransition - - name: OnStopTimer - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStopTimer - - name: OnWaitEvent - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnWaitEvent - - name: ActorRuntimeLogTextFormatter - link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/ActorRuntimeLogTextFormatter - - name: IActorRuntimeLog - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog - subfolderitems: - - name: OnCreateActor - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateActor - - name: OnCreateStateMachine - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateStateMachine - - name: OnExecuteAction - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExecuteAction - - name: OnSendEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnSendEvent - - name: OnRaiseEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnRaiseEvent - - name: OnHandleRaisedEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHandleRaisedEvent - - name: OnEnqueueEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEnqueueEvent - - name: OnDequeueEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDequeueEvent - - name: OnReceiveEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnReceiveEvent - - name: OnWaitEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnWaitEvent - - name: OnStateTransition - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStateTransition - - name: OnGotoState - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnGotoState - - name: OnPushState - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPushState - - name: OnPopState - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopState - - name: OnDefaultEventHandler - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDefaultEventHandler - - name: OnEventHandlerTerminated - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEventHandlerTerminated - - name: OnHalt - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHalt - - name: OnPopStateUnhandledEvent - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopStateUnhandledEvent - - name: OnExceptionThrown - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionThrown - - name: OnExceptionHandled - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionHandled - - name: OnCreateTimer - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateTimer - - name: OnStopTimer - link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStopTimer - - name: RuntimeFactory - link: ref/Microsoft.Coyote.Actors/RuntimeFactory + - name: Write + link: ref/Microsoft.Coyote.Logging/TextWriterLogger/Write + - name: WriteLine + link: ref/Microsoft.Coyote.Logging/TextWriterLogger/WriteLine + - name: Dispose + link: ref/Microsoft.Coyote.Logging/TextWriterLogger/Dispose + - name: TextWriterLogger + link: ref/Microsoft.Coyote.Logging/TextWriterLogger/TextWriterLogger + - name: VerbosityLevel + link: ref/Microsoft.Coyote.Logging/VerbosityLevel + - name: Microsoft.Coyote.Random + link: ref/Microsoft.Coyote.RandomNamespace + subfolderitems: + - name: Generator + link: ref/Microsoft.Coyote.Random/Generator subfolderitems: - name: Create - link: ref/Microsoft.Coyote.Actors/RuntimeFactory/Create - - name: SendOptions - link: ref/Microsoft.Coyote.Actors/SendOptions - subfolderitems: - - name: ToString - link: ref/Microsoft.Coyote.Actors/SendOptions/ToString - - name: SendOptions - link: ref/Microsoft.Coyote.Actors/SendOptions/SendOptions - - name: Default - link: ref/Microsoft.Coyote.Actors/SendOptions/Default - - name: MustHandle - link: ref/Microsoft.Coyote.Actors/SendOptions/MustHandle - - name: Assert - link: ref/Microsoft.Coyote.Actors/SendOptions/Assert - - name: HashedState - link: ref/Microsoft.Coyote.Actors/SendOptions/HashedState - - name: StateMachine - link: ref/Microsoft.Coyote.Actors/StateMachine - subfolderitems: - - name: RaiseEvent - link: ref/Microsoft.Coyote.Actors/StateMachine/RaiseEvent - - name: RaiseGotoStateEvent - link: ref/Microsoft.Coyote.Actors/StateMachine/RaiseGotoStateEvent - - name: RaisePushStateEvent - link: ref/Microsoft.Coyote.Actors/StateMachine/RaisePushStateEvent - - name: RaisePopStateEvent - link: ref/Microsoft.Coyote.Actors/StateMachine/RaisePopStateEvent - - name: RaiseHaltEvent - link: ref/Microsoft.Coyote.Actors/StateMachine/RaiseHaltEvent - - name: OnEventHandledAsync - link: ref/Microsoft.Coyote.Actors/StateMachine/OnEventHandledAsync - - name: StateMachine - link: ref/Microsoft.Coyote.Actors/StateMachine/StateMachine - - name: CurrentState - link: ref/Microsoft.Coyote.Actors/StateMachine/CurrentState - - name: Actor.OnEventDoActionAttribute - link: ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute - subfolderitems: - - name: OnEventDoActionAttribute - link: ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute/OnEventDoActionAttribute - - name: StateMachine.State - link: ref/Microsoft.Coyote.Actors/StateMachine.State + link: ref/Microsoft.Coyote.Random/Generator/Create + - name: NextBoolean + link: ref/Microsoft.Coyote.Random/Generator/NextBoolean + - name: NextInteger + link: ref/Microsoft.Coyote.Random/Generator/NextInteger + - name: Microsoft.Coyote.Runtime + link: ref/Microsoft.Coyote.RuntimeNamespace + subfolderitems: + - name: AssertionFailureException + link: ref/Microsoft.Coyote.Runtime/AssertionFailureException + - name: RuntimeException + link: ref/Microsoft.Coyote.Runtime/RuntimeException subfolderitems: - - name: State - link: ref/Microsoft.Coyote.Actors/StateMachine.State/State - - name: StateMachine.StateGroup - link: ref/Microsoft.Coyote.Actors/StateMachine.StateGroup + - name: RuntimeException + link: ref/Microsoft.Coyote.Runtime/RuntimeException/RuntimeException + - name: IRuntimeExtension + link: ref/Microsoft.Coyote.Runtime/IRuntimeExtension + subfolderitems: + - name: RunTest + link: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/RunTest + - name: BuildCoverageInfo + link: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/BuildCoverageInfo + - name: GetCoverageInfo + link: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageInfo + - name: GetCoverageGraph + link: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageGraph + - name: WaitUntilQuiescenceAsync + link: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/WaitUntilQuiescenceAsync + - name: ICoyoteRuntime + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime subfolderitems: - - name: StateGroup - link: ref/Microsoft.Coyote.Actors/StateMachine.StateGroup/StateGroup - - name: StateMachine.State.StartAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute + - name: RegisterMonitor + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterMonitor + - name: Monitor + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor + - name: RandomBoolean + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean + - name: RandomInteger + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger + - name: Assert + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Assert + - name: RegisterLog + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterLog + - name: RemoveLog + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RemoveLog + - name: Stop + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Stop + - name: Logger + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Logger + - name: OnFailure + link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/OnFailure + - name: IRuntimeLog + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog subfolderitems: - - name: StartAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute/StartAttribute - - name: StateMachine.State.OnEntryAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute + - name: OnCreateMonitor + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCreateMonitor + - name: OnMonitorExecuteAction + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorExecuteAction + - name: OnMonitorProcessEvent + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent + - name: OnMonitorRaiseEvent + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent + - name: OnMonitorStateTransition + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorStateTransition + - name: OnMonitorError + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorError + - name: OnRandom + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnRandom + - name: OnAssertionFailure + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnAssertionFailure + - name: OnCompleted + link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCompleted + - name: RuntimeLogTextFormatter + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter subfolderitems: - - name: OnEntryAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute/OnEntryAttribute - - name: StateMachine.State.OnExitAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute + - name: OnCreateMonitor + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCreateMonitor + - name: OnMonitorExecuteAction + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorExecuteAction + - name: OnMonitorProcessEvent + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent + - name: OnMonitorRaiseEvent + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent + - name: OnMonitorStateTransition + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorStateTransition + - name: OnMonitorError + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorError + - name: OnRandom + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnRandom + - name: OnAssertionFailure + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnAssertionFailure + - name: OnCompleted + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCompleted + - name: RuntimeLogTextFormatter + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/RuntimeLogTextFormatter + - name: Logger + link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/Logger + - name: OnFailureHandler + link: ref/Microsoft.Coyote.Runtime/OnFailureHandler + - name: IOperationBuilder + link: ref/Microsoft.Coyote.Runtime/IOperationBuilder subfolderitems: - - name: OnExitAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute/OnExitAttribute - - name: StateMachine.State.OnEventGotoStateAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute + - name: Name + link: ref/Microsoft.Coyote.Runtime/IOperationBuilder/Name + - name: GroupId + link: ref/Microsoft.Coyote.Runtime/IOperationBuilder/GroupId + - name: HashedStateCallback + link: ref/Microsoft.Coyote.Runtime/IOperationBuilder/HashedStateCallback + - name: Operation + link: ref/Microsoft.Coyote.Runtime/Operation subfolderitems: - - name: OnEventGotoStateAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute - - name: StateMachine.State.OnEventPushStateAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute + - name: GetNextId + link: ref/Microsoft.Coyote.Runtime/Operation/GetNextId + - name: CreateNext + link: ref/Microsoft.Coyote.Runtime/Operation/CreateNext + - name: CreateFrom + link: ref/Microsoft.Coyote.Runtime/Operation/CreateFrom + - name: Start + link: ref/Microsoft.Coyote.Runtime/Operation/Start + - name: PauseUntil + link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntil + - name: PauseUntilCompleted + link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompleted + - name: PauseUntilAsync + link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilAsync + - name: PauseUntilCompletedAsync + link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompletedAsync + - name: ScheduleNext + link: ref/Microsoft.Coyote.Runtime/Operation/ScheduleNext + - name: Complete + link: ref/Microsoft.Coyote.Runtime/Operation/Complete + - name: TryReset + link: ref/Microsoft.Coyote.Runtime/Operation/TryReset + - name: RuntimeProvider + link: ref/Microsoft.Coyote.Runtime/RuntimeProvider subfolderitems: - - name: OnEventPushStateAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute/OnEventPushStateAttribute - - name: StateMachine.State.OnEventDoActionAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute + - name: Current + link: ref/Microsoft.Coyote.Runtime/RuntimeProvider/Current + - name: SchedulingPoint + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint subfolderitems: - - name: OnEventDoActionAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute/OnEventDoActionAttribute - - name: StateMachine.State.DeferEventsAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute + - name: Interleave + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Interleave + - name: Yield + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Yield + - name: Read + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Read + - name: Write + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Write + - name: Suppress + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Suppress + - name: Resume + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Resume + - name: SetCheckpoint + link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/SetCheckpoint + - name: TaskServices + link: ref/Microsoft.Coyote.Runtime/TaskServices + - name: Microsoft.Coyote.Specifications + link: ref/Microsoft.Coyote.SpecificationsNamespace + subfolderitems: + - name: Monitor + link: ref/Microsoft.Coyote.Specifications/Monitor subfolderitems: - - name: DeferEventsAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute/DeferEventsAttribute - - name: StateMachine.State.IgnoreEventsAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute + - name: RaiseEvent + link: ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent + - name: RaiseGotoStateEvent + link: ref/Microsoft.Coyote.Specifications/Monitor/RaiseGotoStateEvent + - name: Assert + link: ref/Microsoft.Coyote.Specifications/Monitor/Assert + - name: ToString + link: ref/Microsoft.Coyote.Specifications/Monitor/ToString + - name: Monitor + link: ref/Microsoft.Coyote.Specifications/Monitor/Monitor + - name: Logger + link: ref/Microsoft.Coyote.Specifications/Monitor/Logger + - name: CurrentState + link: ref/Microsoft.Coyote.Specifications/Monitor/CurrentState + - name: HashedState + link: ref/Microsoft.Coyote.Specifications/Monitor/HashedState + - name: Specification + link: ref/Microsoft.Coyote.Specifications/Specification subfolderitems: - - name: IgnoreEventsAttribute - link: ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute/IgnoreEventsAttribute - - name: Microsoft.Coyote.Actors.Coverage - link: ref/Microsoft.Coyote.Actors.CoverageNamespace - subfolderitems: - - name: EventCoverage - link: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage + - name: Assert + link: ref/Microsoft.Coyote.Specifications/Specification/Assert + - name: IsEventuallyCompletedSuccessfully + link: ref/Microsoft.Coyote.Specifications/Specification/IsEventuallyCompletedSuccessfully + - name: RegisterMonitor + link: ref/Microsoft.Coyote.Specifications/Specification/RegisterMonitor + - name: Monitor + link: ref/Microsoft.Coyote.Specifications/Specification/Monitor + - name: Monitor.State + link: ref/Microsoft.Coyote.Specifications/Monitor.State subfolderitems: - - name: GetEventsReceived - link: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage/GetEventsReceived - - name: GetEventsSent - link: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage/GetEventsSent - - name: EventCoverage - link: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage/EventCoverage - - name: Graph - link: ref/Microsoft.Coyote.Actors.Coverage/Graph + - name: State + link: ref/Microsoft.Coyote.Specifications/Monitor.State/State + - name: Monitor.StateGroup + link: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup subfolderitems: - - name: GetNode - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/GetNode - - name: GetOrCreateNode - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/GetOrCreateNode - - name: GetOrCreateLink - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/GetOrCreateLink - - name: ToString - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/ToString - - name: WriteDgml - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/WriteDgml - - name: LoadDgml - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/LoadDgml - - name: Merge - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/Merge - - name: Graph - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/Graph - - name: Nodes - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/Nodes - - name: Links - link: ref/Microsoft.Coyote.Actors.Coverage/Graph/Links - - name: GraphObject - link: ref/Microsoft.Coyote.Actors.Coverage/GraphObject + - name: StateGroup + link: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup/StateGroup + - name: Monitor.Event + link: ref/Microsoft.Coyote.Specifications/Monitor.Event subfolderitems: - - name: AddAttribute - link: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/AddAttribute - - name: AddListAttribute - link: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/AddListAttribute - - name: GraphObject - link: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/GraphObject - - name: Attributes - link: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/Attributes - - name: AttributeLists - link: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/AttributeLists - - name: GraphNode - link: ref/Microsoft.Coyote.Actors.Coverage/GraphNode + - name: Event + link: ref/Microsoft.Coyote.Specifications/Monitor.Event/Event + - name: Monitor.WildCardEvent + link: ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent subfolderitems: - - name: AddDgmlProperties - link: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/AddDgmlProperties - - name: GraphNode - link: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/GraphNode - - name: Id - link: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/Id - - name: Label - link: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/Label - - name: Category - link: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/Category - - name: GraphLink - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink + - name: WildCardEvent + link: ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent/WildCardEvent + - name: Monitor.State.StartAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute subfolderitems: - - name: AddDgmlProperties - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/AddDgmlProperties - - name: GraphLink - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/GraphLink - - name: Label - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Label - - name: Category - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Category - - name: Source - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Source - - name: Target - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Target - - name: Index - link: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Index - - name: CoverageInfo - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo + - name: StartAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute/StartAttribute + - name: Monitor.State.OnEntryAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute subfolderitems: - - name: IsMachineDeclared - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/IsMachineDeclared - - name: DeclareMachineState - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/DeclareMachineState - - name: DeclareStateEvent - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/DeclareStateEvent - - name: Merge - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Merge - - name: Load - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Load - - name: Save - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Save - - name: CoverageInfo - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/CoverageInfo - - name: Machines - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Machines - - name: MachinesToStates - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/MachinesToStates - - name: RegisteredEvents - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/RegisteredEvents - - name: CoverageGraph - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/CoverageGraph - - name: EventInfo - link: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/EventInfo - - name: Microsoft.Coyote.Actors.SharedObjects - link: ref/Microsoft.Coyote.Actors.SharedObjectsNamespace - subfolderitems: - - name: SharedCounter - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter + - name: OnEntryAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute/OnEntryAttribute + - name: Monitor.State.OnExitAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute subfolderitems: - - name: Create - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Create - - name: Increment - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Increment - - name: Decrement - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Decrement - - name: GetValue - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/GetValue - - name: Add - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Add - - name: Exchange - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Exchange - - name: CompareExchange - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/CompareExchange - - name: SharedDictionary - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary + - name: OnExitAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute/OnExitAttribute + - name: Monitor.State.OnEventGotoStateAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute subfolderitems: - - name: Create - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary/Create - - name: SharedDictionary - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2 + - name: OnEventGotoStateAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute + - name: Monitor.State.OnEventDoActionAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute subfolderitems: - - name: TryAdd - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryAdd - - name: TryUpdate - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryUpdate - - name: TryGetValue - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryGetValue - - name: TryRemove - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryRemove - - name: Item - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Item - - name: Count - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Count - - name: SharedRegister - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister + - name: OnEventDoActionAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute/OnEventDoActionAttribute + - name: Monitor.State.IgnoreEventsAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute subfolderitems: - - name: Create - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister/Create - - name: SharedRegister - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1 + - name: IgnoreEventsAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute/IgnoreEventsAttribute + - name: Monitor.State.ColdAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute subfolderitems: - - name: Update - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/Update - - name: GetValue - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/GetValue - - name: SetValue - link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/SetValue - - name: Microsoft.Coyote.Actors.Timers - link: ref/Microsoft.Coyote.Actors.TimersNamespace + - name: ColdAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute/ColdAttribute + - name: Monitor.State.HotAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute + subfolderitems: + - name: HotAttribute + link: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute/HotAttribute + - name: Microsoft.Coyote.Actors + link: ref/Microsoft.Coyote.Actors + subfolderitems: + - name: Microsoft.Coyote.Actors + link: ref/Microsoft.Coyote.ActorsNamespace subfolderitems: - - name: TimerElapsedEvent - link: ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent + - name: DequeueStatus + link: ref/Microsoft.Coyote.Actors/DequeueStatus + - name: AwaitableEventGroup + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1 subfolderitems: - - name: TimerElapsedEvent - link: ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/TimerElapsedEvent - - name: Info - link: ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/Info - - name: TimerInfo - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo + - name: SetResult + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetResult + - name: TrySetResult + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetResult + - name: SetCancelled + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetCancelled + - name: TrySetCanceled + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetCanceled + - name: SetException + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/SetException + - name: TrySetException + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/TrySetException + - name: GetAwaiter + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/GetAwaiter + - name: AwaitableEventGroup + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/AwaitableEventGroup + - name: Task + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/Task + - name: IsCompleted + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCompleted + - name: IsCanceled + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsCanceled + - name: IsFaulted + link: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1/IsFaulted + - name: DefaultEvent + link: ref/Microsoft.Coyote.Actors/DefaultEvent subfolderitems: - - name: Equals - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Equals - - name: GetHashCode - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/GetHashCode - - name: ToString - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/ToString - - name: OwnerId - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/OwnerId - - name: DueTime - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/DueTime - - name: Period - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Period - - name: CustomEvent - link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/CustomEvent - - name: Microsoft.Coyote.Logging - link: ref/Microsoft.Coyote.LoggingNamespace - subfolderitems: - - name: ILogger - link: ref/Microsoft.Coyote.Logging/ILogger + - name: Instance + link: ref/Microsoft.Coyote.Actors/DefaultEvent/Instance + - name: Event + link: ref/Microsoft.Coyote.Actors/Event subfolderitems: - - name: Write - link: ref/Microsoft.Coyote.Logging/ILogger/Write - - name: WriteLine - link: ref/Microsoft.Coyote.Logging/ILogger/WriteLine - - name: LogSeverity - link: ref/Microsoft.Coyote.Logging/LogSeverity - - name: MemoryLogger - link: ref/Microsoft.Coyote.Logging/MemoryLogger + - name: Event + link: ref/Microsoft.Coyote.Actors/Event/Event + - name: EventGroup + link: ref/Microsoft.Coyote.Actors/EventGroup subfolderitems: - - name: Write - link: ref/Microsoft.Coyote.Logging/MemoryLogger/Write - - name: WriteLine - link: ref/Microsoft.Coyote.Logging/MemoryLogger/WriteLine - - name: ToString - link: ref/Microsoft.Coyote.Logging/MemoryLogger/ToString - - name: Dispose - link: ref/Microsoft.Coyote.Logging/MemoryLogger/Dispose - - name: MemoryLogger - link: ref/Microsoft.Coyote.Logging/MemoryLogger/MemoryLogger - - name: TextWriterLogger - link: ref/Microsoft.Coyote.Logging/TextWriterLogger + - name: EventGroup + link: ref/Microsoft.Coyote.Actors/EventGroup/EventGroup + - name: Id + link: ref/Microsoft.Coyote.Actors/EventGroup/Id + - name: Name + link: ref/Microsoft.Coyote.Actors/EventGroup/Name + - name: Null + link: ref/Microsoft.Coyote.Actors/EventGroup/Null + - name: HaltEvent + link: ref/Microsoft.Coyote.Actors/HaltEvent subfolderitems: - - name: Write - link: ref/Microsoft.Coyote.Logging/TextWriterLogger/Write - - name: WriteLine - link: ref/Microsoft.Coyote.Logging/TextWriterLogger/WriteLine - - name: Dispose - link: ref/Microsoft.Coyote.Logging/TextWriterLogger/Dispose - - name: TextWriterLogger - link: ref/Microsoft.Coyote.Logging/TextWriterLogger/TextWriterLogger - - name: VerbosityLevel - link: ref/Microsoft.Coyote.Logging/VerbosityLevel - - name: Microsoft.Coyote.Random - link: ref/Microsoft.Coyote.RandomNamespace - subfolderitems: - - name: Generator - link: ref/Microsoft.Coyote.Random/Generator + - name: Instance + link: ref/Microsoft.Coyote.Actors/HaltEvent/Instance + - name: WildCardEvent + link: ref/Microsoft.Coyote.Actors/WildCardEvent subfolderitems: - - name: Create - link: ref/Microsoft.Coyote.Random/Generator/Create - - name: NextBoolean - link: ref/Microsoft.Coyote.Random/Generator/NextBoolean - - name: NextInteger - link: ref/Microsoft.Coyote.Random/Generator/NextInteger - - name: Microsoft.Coyote.Runtime - link: ref/Microsoft.Coyote.RuntimeNamespace - subfolderitems: - - name: AssertionFailureException - link: ref/Microsoft.Coyote.Runtime/AssertionFailureException - - name: RuntimeException - link: ref/Microsoft.Coyote.Runtime/RuntimeException + - name: WildCardEvent + link: ref/Microsoft.Coyote.Actors/WildCardEvent/WildCardEvent + - name: OnExceptionOutcome + link: ref/Microsoft.Coyote.Actors/OnExceptionOutcome + - name: UnhandledEventException + link: ref/Microsoft.Coyote.Actors/UnhandledEventException + subfolderitems: + - name: UnhandledEvent + link: ref/Microsoft.Coyote.Actors/UnhandledEventException/UnhandledEvent + - name: CurrentStateName + link: ref/Microsoft.Coyote.Actors/UnhandledEventException/CurrentStateName + - name: OnActorHaltedHandler + link: ref/Microsoft.Coyote.Actors/OnActorHaltedHandler + - name: OnEventDroppedHandler + link: ref/Microsoft.Coyote.Actors/OnEventDroppedHandler + - name: ActorRuntimeLogTextFormatter + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter + subfolderitems: + - name: OnCreateActor + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateActor + - name: OnCreateStateMachine + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateStateMachine + - name: OnCreateTimer + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateTimer + - name: OnDefaultEventHandler + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDefaultEventHandler + - name: OnEventHandlerTerminated + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEventHandlerTerminated + - name: OnDequeueEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnDequeueEvent + - name: OnEnqueueEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnEnqueueEvent + - name: OnExceptionHandled + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionHandled + - name: OnExceptionThrown + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExceptionThrown + - name: OnExecuteAction + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnExecuteAction + - name: OnGotoState + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnGotoState + - name: OnHalt + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHalt + - name: OnPopState + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopState + - name: OnPopStateUnhandledEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPopStateUnhandledEvent + - name: OnPushState + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnPushState + - name: OnRaiseEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnRaiseEvent + - name: OnHandleRaisedEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnHandleRaisedEvent + - name: OnReceiveEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnReceiveEvent + - name: OnSendEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnSendEvent + - name: OnStateTransition + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStateTransition + - name: OnStopTimer + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnStopTimer + - name: OnWaitEvent + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnWaitEvent + - name: ActorRuntimeLogTextFormatter + link: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/ActorRuntimeLogTextFormatter + - name: IActorRuntimeLog + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog subfolderitems: - - name: RuntimeException - link: ref/Microsoft.Coyote.Runtime/RuntimeException/RuntimeException - - name: ICoyoteRuntime - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime + - name: OnCreateActor + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateActor + - name: OnCreateStateMachine + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateStateMachine + - name: OnExecuteAction + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExecuteAction + - name: OnSendEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnSendEvent + - name: OnRaiseEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnRaiseEvent + - name: OnHandleRaisedEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHandleRaisedEvent + - name: OnEnqueueEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEnqueueEvent + - name: OnDequeueEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDequeueEvent + - name: OnReceiveEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnReceiveEvent + - name: OnWaitEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnWaitEvent + - name: OnStateTransition + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStateTransition + - name: OnGotoState + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnGotoState + - name: OnPushState + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPushState + - name: OnPopState + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopState + - name: OnDefaultEventHandler + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnDefaultEventHandler + - name: OnEventHandlerTerminated + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnEventHandlerTerminated + - name: OnHalt + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnHalt + - name: OnPopStateUnhandledEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnPopStateUnhandledEvent + - name: OnExceptionThrown + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionThrown + - name: OnExceptionHandled + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionHandled + - name: OnCreateTimer + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateTimer + - name: OnStopTimer + link: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStopTimer + - name: Actor + link: ref/Microsoft.Coyote.Actors/Actor subfolderitems: - - name: RegisterMonitor - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterMonitor - - name: Monitor - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor + - name: CreateActor + link: ref/Microsoft.Coyote.Actors/Actor/CreateActor + - name: SendEvent + link: ref/Microsoft.Coyote.Actors/Actor/SendEvent + - name: ReceiveEventAsync + link: ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync + - name: StartTimer + link: ref/Microsoft.Coyote.Actors/Actor/StartTimer + - name: StartPeriodicTimer + link: ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer + - name: StopTimer + link: ref/Microsoft.Coyote.Actors/Actor/StopTimer - name: RandomBoolean - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean + link: ref/Microsoft.Coyote.Actors/Actor/RandomBoolean - name: RandomInteger - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger + link: ref/Microsoft.Coyote.Actors/Actor/RandomInteger + - name: Monitor + link: ref/Microsoft.Coyote.Actors/Actor/Monitor - name: Assert - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Assert - - name: RegisterLog - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterLog - - name: RemoveLog - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RemoveLog - - name: Stop - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Stop - - name: Logger - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Logger - - name: OnFailure - link: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/OnFailure - - name: IRuntimeLog - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog - subfolderitems: - - name: OnCreateMonitor - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCreateMonitor - - name: OnMonitorExecuteAction - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorExecuteAction - - name: OnMonitorProcessEvent - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent - - name: OnMonitorRaiseEvent - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent - - name: OnMonitorStateTransition - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorStateTransition - - name: OnMonitorError - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorError - - name: OnRandom - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnRandom - - name: OnAssertionFailure - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnAssertionFailure - - name: OnCompleted - link: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCompleted - - name: RuntimeLogTextFormatter - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter - subfolderitems: - - name: OnCreateMonitor - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCreateMonitor - - name: OnMonitorExecuteAction - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorExecuteAction - - name: OnMonitorProcessEvent - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent - - name: OnMonitorRaiseEvent - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent - - name: OnMonitorStateTransition - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorStateTransition - - name: OnMonitorError - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorError - - name: OnRandom - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnRandom - - name: OnAssertionFailure - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnAssertionFailure - - name: OnCompleted - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCompleted - - name: RuntimeLogTextFormatter - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/RuntimeLogTextFormatter + link: ref/Microsoft.Coyote.Actors/Actor/Assert + - name: RaiseHaltEvent + link: ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent + - name: OnInitializeAsync + link: ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync + - name: OnEventDequeuedAsync + link: ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync + - name: OnEventIgnored + link: ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored + - name: OnEventDeferred + link: ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred + - name: OnEventHandledAsync + link: ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync + - name: OnEventUnhandledAsync + link: ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync + - name: OnExceptionHandledAsync + link: ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync + - name: OnHaltAsync + link: ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync + - name: OnException + link: ref/Microsoft.Coyote.Actors/Actor/OnException + - name: Equals + link: ref/Microsoft.Coyote.Actors/Actor/Equals + - name: GetHashCode + link: ref/Microsoft.Coyote.Actors/Actor/GetHashCode + - name: ToString + link: ref/Microsoft.Coyote.Actors/Actor/ToString + - name: Actor + link: ref/Microsoft.Coyote.Actors/Actor/Actor + - name: Id + link: ref/Microsoft.Coyote.Actors/Actor/Id + - name: CurrentEventGroup + link: ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup - name: Logger - link: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/Logger - - name: OnFailureHandler - link: ref/Microsoft.Coyote.Runtime/OnFailureHandler - - name: IOperationBuilder - link: ref/Microsoft.Coyote.Runtime/IOperationBuilder + link: ref/Microsoft.Coyote.Actors/Actor/Logger + - name: HashedState + link: ref/Microsoft.Coyote.Actors/Actor/HashedState + - name: ActorExecutionStatus + link: ref/Microsoft.Coyote.Actors/ActorExecutionStatus + - name: ActorId + link: ref/Microsoft.Coyote.Actors/ActorId subfolderitems: + - name: Equals + link: ref/Microsoft.Coyote.Actors/ActorId/Equals + - name: GetHashCode + link: ref/Microsoft.Coyote.Actors/ActorId/GetHashCode + - name: ToString + link: ref/Microsoft.Coyote.Actors/ActorId/ToString + - name: CompareTo + link: ref/Microsoft.Coyote.Actors/ActorId/CompareTo + - name: Runtime + link: ref/Microsoft.Coyote.Actors/ActorId/Runtime + - name: IsNameUsedForHashing + link: ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing + - name: Value + link: ref/Microsoft.Coyote.Actors/ActorId/Value + - name: NameValue + link: ref/Microsoft.Coyote.Actors/ActorId/NameValue + - name: Type + link: ref/Microsoft.Coyote.Actors/ActorId/Type - name: Name - link: ref/Microsoft.Coyote.Runtime/IOperationBuilder/Name - - name: GroupId - link: ref/Microsoft.Coyote.Runtime/IOperationBuilder/GroupId - - name: HashedStateCallback - link: ref/Microsoft.Coyote.Runtime/IOperationBuilder/HashedStateCallback - - name: Operation - link: ref/Microsoft.Coyote.Runtime/Operation + link: ref/Microsoft.Coyote.Actors/ActorId/Name + - name: IActorRuntime + link: ref/Microsoft.Coyote.Actors/IActorRuntime subfolderitems: - - name: GetNextId - link: ref/Microsoft.Coyote.Runtime/Operation/GetNextId - - name: CreateNext - link: ref/Microsoft.Coyote.Runtime/Operation/CreateNext - - name: CreateFrom - link: ref/Microsoft.Coyote.Runtime/Operation/CreateFrom - - name: Start - link: ref/Microsoft.Coyote.Runtime/Operation/Start - - name: PauseUntil - link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntil - - name: PauseUntilCompleted - link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompleted - - name: PauseUntilAsync - link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilAsync - - name: PauseUntilCompletedAsync - link: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompletedAsync - - name: ScheduleNext - link: ref/Microsoft.Coyote.Runtime/Operation/ScheduleNext - - name: Complete - link: ref/Microsoft.Coyote.Runtime/Operation/Complete - - name: TryReset - link: ref/Microsoft.Coyote.Runtime/Operation/TryReset - - name: RuntimeProvider - link: ref/Microsoft.Coyote.Runtime/RuntimeProvider + - name: CreateActorId + link: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId + - name: CreateActorIdFromName + link: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName + - name: CreateActor + link: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor + - name: SendEvent + link: ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent + - name: GetCurrentEventGroup + link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup + - name: GetActorExecutionStatus + link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus + - name: GetCurrentActorIds + link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds + - name: GetCurrentActorTypes + link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes + - name: GetCurrentActorCount + link: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount + - name: OnActorHalted + link: ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted + - name: OnEventDropped + link: ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped + - name: RuntimeFactory + link: ref/Microsoft.Coyote.Actors/RuntimeFactory subfolderitems: - name: Create - link: ref/Microsoft.Coyote.Runtime/RuntimeProvider/Create - - name: Current - link: ref/Microsoft.Coyote.Runtime/RuntimeProvider/Current - - name: SchedulingPoint - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint + link: ref/Microsoft.Coyote.Actors/RuntimeFactory/Create + - name: SendOptions + link: ref/Microsoft.Coyote.Actors/SendOptions subfolderitems: - - name: Interleave - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Interleave - - name: Yield - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Yield - - name: Read - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Read - - name: Write - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Write - - name: Suppress - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Suppress - - name: Resume - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Resume - - name: SetCheckpoint - link: ref/Microsoft.Coyote.Runtime/SchedulingPoint/SetCheckpoint - - name: TaskServices - link: ref/Microsoft.Coyote.Runtime/TaskServices - - name: Microsoft.Coyote.Specifications - link: ref/Microsoft.Coyote.SpecificationsNamespace - subfolderitems: - - name: Monitor - link: ref/Microsoft.Coyote.Specifications/Monitor + - name: ToString + link: ref/Microsoft.Coyote.Actors/SendOptions/ToString + - name: SendOptions + link: ref/Microsoft.Coyote.Actors/SendOptions/SendOptions + - name: Default + link: ref/Microsoft.Coyote.Actors/SendOptions/Default + - name: MustHandle + link: ref/Microsoft.Coyote.Actors/SendOptions/MustHandle + - name: Assert + link: ref/Microsoft.Coyote.Actors/SendOptions/Assert + - name: HashedState + link: ref/Microsoft.Coyote.Actors/SendOptions/HashedState + - name: StateMachine + link: ref/Microsoft.Coyote.Actors/StateMachine subfolderitems: - name: RaiseEvent - link: ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent + link: ref/Microsoft.Coyote.Actors/StateMachine/RaiseEvent - name: RaiseGotoStateEvent - link: ref/Microsoft.Coyote.Specifications/Monitor/RaiseGotoStateEvent - - name: Assert - link: ref/Microsoft.Coyote.Specifications/Monitor/Assert - - name: ToString - link: ref/Microsoft.Coyote.Specifications/Monitor/ToString - - name: Monitor - link: ref/Microsoft.Coyote.Specifications/Monitor/Monitor - - name: Logger - link: ref/Microsoft.Coyote.Specifications/Monitor/Logger + link: ref/Microsoft.Coyote.Actors/StateMachine/RaiseGotoStateEvent + - name: RaisePushStateEvent + link: ref/Microsoft.Coyote.Actors/StateMachine/RaisePushStateEvent + - name: RaisePopStateEvent + link: ref/Microsoft.Coyote.Actors/StateMachine/RaisePopStateEvent + - name: RaiseHaltEvent + link: ref/Microsoft.Coyote.Actors/StateMachine/RaiseHaltEvent + - name: OnEventHandledAsync + link: ref/Microsoft.Coyote.Actors/StateMachine/OnEventHandledAsync + - name: StateMachine + link: ref/Microsoft.Coyote.Actors/StateMachine/StateMachine - name: CurrentState - link: ref/Microsoft.Coyote.Specifications/Monitor/CurrentState - - name: HashedState - link: ref/Microsoft.Coyote.Specifications/Monitor/HashedState - - name: Specification - link: ref/Microsoft.Coyote.Specifications/Specification + link: ref/Microsoft.Coyote.Actors/StateMachine/CurrentState + - name: Actor.OnEventDoActionAttribute + link: ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute subfolderitems: - - name: Assert - link: ref/Microsoft.Coyote.Specifications/Specification/Assert - - name: IsEventuallyCompletedSuccessfully - link: ref/Microsoft.Coyote.Specifications/Specification/IsEventuallyCompletedSuccessfully - - name: RegisterMonitor - link: ref/Microsoft.Coyote.Specifications/Specification/RegisterMonitor - - name: Monitor - link: ref/Microsoft.Coyote.Specifications/Specification/Monitor - - name: Monitor.State - link: ref/Microsoft.Coyote.Specifications/Monitor.State + - name: OnEventDoActionAttribute + link: ref/Microsoft.Coyote.Actors/Actor.OnEventDoActionAttribute/OnEventDoActionAttribute + - name: StateMachine.State + link: ref/Microsoft.Coyote.Actors/StateMachine.State subfolderitems: - name: State - link: ref/Microsoft.Coyote.Specifications/Monitor.State/State - - name: Monitor.StateGroup - link: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup + link: ref/Microsoft.Coyote.Actors/StateMachine.State/State + - name: StateMachine.StateGroup + link: ref/Microsoft.Coyote.Actors/StateMachine.StateGroup subfolderitems: - name: StateGroup - link: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup/StateGroup - - name: Monitor.State.StartAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.StateGroup/StateGroup + - name: StateMachine.State.StartAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute subfolderitems: - name: StartAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute/StartAttribute - - name: Monitor.State.OnEntryAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.StartAttribute/StartAttribute + - name: StateMachine.State.OnEntryAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute subfolderitems: - name: OnEntryAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute/OnEntryAttribute - - name: Monitor.State.OnExitAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEntryAttribute/OnEntryAttribute + - name: StateMachine.State.OnExitAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute subfolderitems: - name: OnExitAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute/OnExitAttribute - - name: Monitor.State.OnEventGotoStateAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnExitAttribute/OnExitAttribute + - name: StateMachine.State.OnEventGotoStateAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute subfolderitems: - name: OnEventGotoStateAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute - - name: Monitor.State.OnEventDoActionAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute + - name: StateMachine.State.OnEventPushStateAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute + subfolderitems: + - name: OnEventPushStateAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventPushStateAttribute/OnEventPushStateAttribute + - name: StateMachine.State.OnEventDoActionAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute subfolderitems: - name: OnEventDoActionAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute/OnEventDoActionAttribute - - name: Monitor.State.IgnoreEventsAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.OnEventDoActionAttribute/OnEventDoActionAttribute + - name: StateMachine.State.DeferEventsAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute + subfolderitems: + - name: DeferEventsAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.DeferEventsAttribute/DeferEventsAttribute + - name: StateMachine.State.IgnoreEventsAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute subfolderitems: - name: IgnoreEventsAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute/IgnoreEventsAttribute - - name: Monitor.State.ColdAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute + link: ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute/IgnoreEventsAttribute + - name: Microsoft.Coyote.Actors.Coverage + link: ref/Microsoft.Coyote.Actors.CoverageNamespace + subfolderitems: + - name: ActorCoverageInfo + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo subfolderitems: - - name: ColdAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute/ColdAttribute - - name: Monitor.State.HotAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute + - name: IsMachineDeclared + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/IsMachineDeclared + - name: DeclareMachineState + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/DeclareMachineState + - name: DeclareMachineStateEventPair + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/DeclareMachineStateEventPair + - name: Merge + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/Merge + - name: ActorCoverageInfo + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/ActorCoverageInfo + - name: Machines + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/Machines + - name: MachinesToStates + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/MachinesToStates + - name: RegisteredActorEvents + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/RegisteredActorEvents + - name: ActorEventInfo + link: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/ActorEventInfo + - name: ActorEventCoverage + link: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage subfolderitems: - - name: HotAttribute - link: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute/HotAttribute + - name: GetEventsReceived + link: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage/GetEventsReceived + - name: GetEventsSent + link: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage/GetEventsSent + - name: ActorEventCoverage + link: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage/ActorEventCoverage + - name: Microsoft.Coyote.Actors.SharedObjects + link: ref/Microsoft.Coyote.Actors.SharedObjectsNamespace + subfolderitems: + - name: SharedCounter + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter + subfolderitems: + - name: Create + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Create + - name: Increment + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Increment + - name: Decrement + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Decrement + - name: GetValue + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/GetValue + - name: Add + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Add + - name: Exchange + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/Exchange + - name: CompareExchange + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedCounter/CompareExchange + - name: SharedDictionary + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary + subfolderitems: + - name: Create + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary/Create + - name: SharedDictionary + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2 + subfolderitems: + - name: TryAdd + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryAdd + - name: TryUpdate + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryUpdate + - name: TryGetValue + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryGetValue + - name: TryRemove + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/TryRemove + - name: Item + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Item + - name: Count + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedDictionary-2/Count + - name: SharedRegister + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister + subfolderitems: + - name: Create + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister/Create + - name: SharedRegister + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1 + subfolderitems: + - name: Update + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/Update + - name: GetValue + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/GetValue + - name: SetValue + link: ref/Microsoft.Coyote.Actors.SharedObjects/SharedRegister-1/SetValue + - name: Microsoft.Coyote.Actors.Timers + link: ref/Microsoft.Coyote.Actors.TimersNamespace + subfolderitems: + - name: TimerElapsedEvent + link: ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent + subfolderitems: + - name: TimerElapsedEvent + link: ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/TimerElapsedEvent + - name: Info + link: ref/Microsoft.Coyote.Actors.Timers/TimerElapsedEvent/Info + - name: TimerInfo + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo + subfolderitems: + - name: Equals + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Equals + - name: GetHashCode + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/GetHashCode + - name: ToString + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/ToString + - name: OwnerId + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/OwnerId + - name: DueTime + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/DueTime + - name: Period + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Period + - name: CustomEvent + link: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/CustomEvent - name: Microsoft.Coyote.Test link: ref/Microsoft.Coyote.Test subfolderitems: diff --git a/docs/tutorials/actors/hello-world.md b/docs/tutorials/actors/hello-world.md index 9a1df91ec..39b635a89 100644 --- a/docs/tutorials/actors/hello-world.md +++ b/docs/tutorials/actors/hello-world.md @@ -47,7 +47,7 @@ Received greeting: Good Morning When the error is caught, an extra line of output is written saying: ```plain -Exception 'Microsoft.Coyote.AssertionFailureException' was thrown in 0 (action '1'): +Exception 'Microsoft.Coyote.Runtime.AssertionFailureException' was thrown in 0 (action '1'): Too many greetings returned! ``` diff --git a/mkdocs.yml b/mkdocs.yml index c04bbd113..423884b6f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -103,9 +103,6 @@ nav: - Overview: ref/Microsoft.Coyote.md - Microsoft.Coyote: - Namespace Overview: ref/Microsoft.CoyoteNamespace.md - - Event: - - Overview: ref/Microsoft.Coyote/Event.md - - Event: ref/Microsoft.Coyote/Event/Event.md - Configuration: - Overview: ref/Microsoft.Coyote/Configuration.md - Create: ref/Microsoft.Coyote/Configuration/Create.md @@ -146,51 +143,229 @@ nav: - TimeoutDelay: ref/Microsoft.Coyote/Configuration/TimeoutDelay.md - DeadlockTimeout: ref/Microsoft.Coyote/Configuration/DeadlockTimeout.md - VerbosityLevel: ref/Microsoft.Coyote/Configuration/VerbosityLevel.md + - Microsoft.Coyote.Coverage: + - Namespace Overview: ref/Microsoft.Coyote.CoverageNamespace.md + - CoverageGraph: + - Overview: ref/Microsoft.Coyote.Coverage/CoverageGraph.md + - GetNode: ref/Microsoft.Coyote.Coverage/CoverageGraph/GetNode.md + - GetOrCreateNode: ref/Microsoft.Coyote.Coverage/CoverageGraph/GetOrCreateNode.md + - GetOrCreateLink: ref/Microsoft.Coyote.Coverage/CoverageGraph/GetOrCreateLink.md + - WriteDgml: ref/Microsoft.Coyote.Coverage/CoverageGraph/WriteDgml.md + - LoadDgml: ref/Microsoft.Coyote.Coverage/CoverageGraph/LoadDgml.md + - Merge: ref/Microsoft.Coyote.Coverage/CoverageGraph/Merge.md + - ToString: ref/Microsoft.Coyote.Coverage/CoverageGraph/ToString.md + - CoverageGraph: ref/Microsoft.Coyote.Coverage/CoverageGraph/CoverageGraph.md + - Nodes: ref/Microsoft.Coyote.Coverage/CoverageGraph/Nodes.md + - Links: ref/Microsoft.Coyote.Coverage/CoverageGraph/Links.md + - CoverageInfo: + - Overview: ref/Microsoft.Coyote.Coverage/CoverageInfo.md + - IsMonitorDeclared: ref/Microsoft.Coyote.Coverage/CoverageInfo/IsMonitorDeclared.md + - DeclareMonitorState: ref/Microsoft.Coyote.Coverage/CoverageInfo/DeclareMonitorState.md + - DeclareMonitorStateEventPair: ref/Microsoft.Coyote.Coverage/CoverageInfo/DeclareMonitorStateEventPair.md + - Load: ref/Microsoft.Coyote.Coverage/CoverageInfo/Load.md + - Save: ref/Microsoft.Coyote.Coverage/CoverageInfo/Save.md + - Merge: ref/Microsoft.Coyote.Coverage/CoverageInfo/Merge.md + - CoverageInfo: ref/Microsoft.Coyote.Coverage/CoverageInfo/CoverageInfo.md + - CoverageGraph: ref/Microsoft.Coyote.Coverage/CoverageInfo/CoverageGraph.md + - Monitors: ref/Microsoft.Coyote.Coverage/CoverageInfo/Monitors.md + - MonitorsToStates: ref/Microsoft.Coyote.Coverage/CoverageInfo/MonitorsToStates.md + - RegisteredMonitorEvents: ref/Microsoft.Coyote.Coverage/CoverageInfo/RegisteredMonitorEvents.md + - MonitorEventInfo: ref/Microsoft.Coyote.Coverage/CoverageInfo/MonitorEventInfo.md + - MonitorEventCoverage: + - Overview: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage.md + - GetEventsProcessed: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage/GetEventsProcessed.md + - GetEventsRaised: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage/GetEventsRaised.md + - MonitorEventCoverage: ref/Microsoft.Coyote.Coverage/MonitorEventCoverage/MonitorEventCoverage.md + - CoverageGraph.Object: + - Overview: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object.md + - AddAttribute: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/AddAttribute.md + - AddListAttribute: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/AddListAttribute.md + - Object: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/Object.md + - Attributes: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/Attributes.md + - AttributeLists: ref/Microsoft.Coyote.Coverage/CoverageGraph.Object/AttributeLists.md + - CoverageGraph.Node: + - Overview: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node.md + - AddDgmlProperties: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/AddDgmlProperties.md + - Node: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Node.md + - Id: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Id.md + - Label: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Label.md + - Category: ref/Microsoft.Coyote.Coverage/CoverageGraph.Node/Category.md + - CoverageGraph.Link: + - Overview: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link.md + - AddDgmlProperties: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/AddDgmlProperties.md + - Link: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Link.md + - Label: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Label.md + - Category: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Category.md + - Source: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Source.md + - Target: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Target.md + - Index: ref/Microsoft.Coyote.Coverage/CoverageGraph.Link/Index.md + - Microsoft.Coyote.Logging: + - Namespace Overview: ref/Microsoft.Coyote.LoggingNamespace.md + - ILogger: + - Overview: ref/Microsoft.Coyote.Logging/ILogger.md + - Write: ref/Microsoft.Coyote.Logging/ILogger/Write.md + - WriteLine: ref/Microsoft.Coyote.Logging/ILogger/WriteLine.md + - LogSeverity: ref/Microsoft.Coyote.Logging/LogSeverity.md + - MemoryLogger: + - Overview: ref/Microsoft.Coyote.Logging/MemoryLogger.md + - Write: ref/Microsoft.Coyote.Logging/MemoryLogger/Write.md + - WriteLine: ref/Microsoft.Coyote.Logging/MemoryLogger/WriteLine.md + - ToString: ref/Microsoft.Coyote.Logging/MemoryLogger/ToString.md + - Dispose: ref/Microsoft.Coyote.Logging/MemoryLogger/Dispose.md + - MemoryLogger: ref/Microsoft.Coyote.Logging/MemoryLogger/MemoryLogger.md + - TextWriterLogger: + - Overview: ref/Microsoft.Coyote.Logging/TextWriterLogger.md + - Write: ref/Microsoft.Coyote.Logging/TextWriterLogger/Write.md + - WriteLine: ref/Microsoft.Coyote.Logging/TextWriterLogger/WriteLine.md + - Dispose: ref/Microsoft.Coyote.Logging/TextWriterLogger/Dispose.md + - TextWriterLogger: ref/Microsoft.Coyote.Logging/TextWriterLogger/TextWriterLogger.md + - VerbosityLevel: ref/Microsoft.Coyote.Logging/VerbosityLevel.md + - Microsoft.Coyote.Random: + - Namespace Overview: ref/Microsoft.Coyote.RandomNamespace.md + - Generator: + - Overview: ref/Microsoft.Coyote.Random/Generator.md + - Create: ref/Microsoft.Coyote.Random/Generator/Create.md + - NextBoolean: ref/Microsoft.Coyote.Random/Generator/NextBoolean.md + - NextInteger: ref/Microsoft.Coyote.Random/Generator/NextInteger.md + - Microsoft.Coyote.Runtime: + - Namespace Overview: ref/Microsoft.Coyote.RuntimeNamespace.md + - AssertionFailureException: ref/Microsoft.Coyote.Runtime/AssertionFailureException.md + - RuntimeException: + - Overview: ref/Microsoft.Coyote.Runtime/RuntimeException.md + - RuntimeException: ref/Microsoft.Coyote.Runtime/RuntimeException/RuntimeException.md + - IRuntimeExtension: + - Overview: ref/Microsoft.Coyote.Runtime/IRuntimeExtension.md + - RunTest: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/RunTest.md + - BuildCoverageInfo: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/BuildCoverageInfo.md + - GetCoverageInfo: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageInfo.md + - GetCoverageGraph: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/GetCoverageGraph.md + - WaitUntilQuiescenceAsync: ref/Microsoft.Coyote.Runtime/IRuntimeExtension/WaitUntilQuiescenceAsync.md + - ICoyoteRuntime: + - Overview: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime.md + - RegisterMonitor: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterMonitor.md + - Monitor: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor.md + - RandomBoolean: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean.md + - RandomInteger: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger.md + - Assert: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Assert.md + - RegisterLog: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterLog.md + - RemoveLog: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RemoveLog.md + - Stop: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Stop.md + - Logger: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Logger.md + - OnFailure: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/OnFailure.md + - IRuntimeLog: + - Overview: ref/Microsoft.Coyote.Runtime/IRuntimeLog.md + - OnCreateMonitor: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCreateMonitor.md + - OnMonitorExecuteAction: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorExecuteAction.md + - OnMonitorProcessEvent: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent.md + - OnMonitorRaiseEvent: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent.md + - OnMonitorStateTransition: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorStateTransition.md + - OnMonitorError: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorError.md + - OnRandom: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnRandom.md + - OnAssertionFailure: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnAssertionFailure.md + - OnCompleted: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCompleted.md + - RuntimeLogTextFormatter: + - Overview: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter.md + - OnCreateMonitor: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCreateMonitor.md + - OnMonitorExecuteAction: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorExecuteAction.md + - OnMonitorProcessEvent: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent.md + - OnMonitorRaiseEvent: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent.md + - OnMonitorStateTransition: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorStateTransition.md + - OnMonitorError: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorError.md + - OnRandom: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnRandom.md + - OnAssertionFailure: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnAssertionFailure.md + - OnCompleted: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCompleted.md + - RuntimeLogTextFormatter: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/RuntimeLogTextFormatter.md + - Logger: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/Logger.md + - OnFailureHandler: ref/Microsoft.Coyote.Runtime/OnFailureHandler.md + - IOperationBuilder: + - Overview: ref/Microsoft.Coyote.Runtime/IOperationBuilder.md + - Name: ref/Microsoft.Coyote.Runtime/IOperationBuilder/Name.md + - GroupId: ref/Microsoft.Coyote.Runtime/IOperationBuilder/GroupId.md + - HashedStateCallback: ref/Microsoft.Coyote.Runtime/IOperationBuilder/HashedStateCallback.md + - Operation: + - Overview: ref/Microsoft.Coyote.Runtime/Operation.md + - GetNextId: ref/Microsoft.Coyote.Runtime/Operation/GetNextId.md + - CreateNext: ref/Microsoft.Coyote.Runtime/Operation/CreateNext.md + - CreateFrom: ref/Microsoft.Coyote.Runtime/Operation/CreateFrom.md + - Start: ref/Microsoft.Coyote.Runtime/Operation/Start.md + - PauseUntil: ref/Microsoft.Coyote.Runtime/Operation/PauseUntil.md + - PauseUntilCompleted: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompleted.md + - PauseUntilAsync: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilAsync.md + - PauseUntilCompletedAsync: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompletedAsync.md + - ScheduleNext: ref/Microsoft.Coyote.Runtime/Operation/ScheduleNext.md + - Complete: ref/Microsoft.Coyote.Runtime/Operation/Complete.md + - TryReset: ref/Microsoft.Coyote.Runtime/Operation/TryReset.md + - RuntimeProvider: + - Overview: ref/Microsoft.Coyote.Runtime/RuntimeProvider.md + - Current: ref/Microsoft.Coyote.Runtime/RuntimeProvider/Current.md + - SchedulingPoint: + - Overview: ref/Microsoft.Coyote.Runtime/SchedulingPoint.md + - Interleave: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Interleave.md + - Yield: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Yield.md + - Read: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Read.md + - Write: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Write.md + - Suppress: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Suppress.md + - Resume: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Resume.md + - SetCheckpoint: ref/Microsoft.Coyote.Runtime/SchedulingPoint/SetCheckpoint.md + - TaskServices: ref/Microsoft.Coyote.Runtime/TaskServices.md + - Microsoft.Coyote.Specifications: + - Namespace Overview: ref/Microsoft.Coyote.SpecificationsNamespace.md + - Monitor: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.md + - RaiseEvent: ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent.md + - RaiseGotoStateEvent: ref/Microsoft.Coyote.Specifications/Monitor/RaiseGotoStateEvent.md + - Assert: ref/Microsoft.Coyote.Specifications/Monitor/Assert.md + - ToString: ref/Microsoft.Coyote.Specifications/Monitor/ToString.md + - Monitor: ref/Microsoft.Coyote.Specifications/Monitor/Monitor.md + - Logger: ref/Microsoft.Coyote.Specifications/Monitor/Logger.md + - CurrentState: ref/Microsoft.Coyote.Specifications/Monitor/CurrentState.md + - HashedState: ref/Microsoft.Coyote.Specifications/Monitor/HashedState.md + - Specification: + - Overview: ref/Microsoft.Coyote.Specifications/Specification.md + - Assert: ref/Microsoft.Coyote.Specifications/Specification/Assert.md + - IsEventuallyCompletedSuccessfully: ref/Microsoft.Coyote.Specifications/Specification/IsEventuallyCompletedSuccessfully.md + - RegisterMonitor: ref/Microsoft.Coyote.Specifications/Specification/RegisterMonitor.md + - Monitor: ref/Microsoft.Coyote.Specifications/Specification/Monitor.md + - Monitor.State: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.md + - State: ref/Microsoft.Coyote.Specifications/Monitor.State/State.md + - Monitor.StateGroup: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup.md + - StateGroup: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup/StateGroup.md + - Monitor.Event: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.Event.md + - Event: ref/Microsoft.Coyote.Specifications/Monitor.Event/Event.md + - Monitor.WildCardEvent: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent.md + - WildCardEvent: ref/Microsoft.Coyote.Specifications/Monitor.WildCardEvent/WildCardEvent.md + - Monitor.State.StartAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute.md + - StartAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute/StartAttribute.md + - Monitor.State.OnEntryAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute.md + - OnEntryAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute/OnEntryAttribute.md + - Monitor.State.OnExitAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute.md + - OnExitAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute/OnExitAttribute.md + - Monitor.State.OnEventGotoStateAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute.md + - OnEventGotoStateAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute.md + - Monitor.State.OnEventDoActionAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute.md + - OnEventDoActionAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute/OnEventDoActionAttribute.md + - Monitor.State.IgnoreEventsAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute.md + - IgnoreEventsAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute/IgnoreEventsAttribute.md + - Monitor.State.ColdAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute.md + - ColdAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute/ColdAttribute.md + - Monitor.State.HotAttribute: + - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute.md + - HotAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute/HotAttribute.md + - Microsoft.Coyote.Actors: + - Overview: ref/Microsoft.Coyote.Actors.md - Microsoft.Coyote.Actors: - Namespace Overview: ref/Microsoft.Coyote.ActorsNamespace.md - - Actor: - - Overview: ref/Microsoft.Coyote.Actors/Actor.md - - CreateActor: ref/Microsoft.Coyote.Actors/Actor/CreateActor.md - - SendEvent: ref/Microsoft.Coyote.Actors/Actor/SendEvent.md - - ReceiveEventAsync: ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync.md - - StartTimer: ref/Microsoft.Coyote.Actors/Actor/StartTimer.md - - StartPeriodicTimer: ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer.md - - StopTimer: ref/Microsoft.Coyote.Actors/Actor/StopTimer.md - - RandomBoolean: ref/Microsoft.Coyote.Actors/Actor/RandomBoolean.md - - RandomInteger: ref/Microsoft.Coyote.Actors/Actor/RandomInteger.md - - Monitor: ref/Microsoft.Coyote.Actors/Actor/Monitor.md - - Assert: ref/Microsoft.Coyote.Actors/Actor/Assert.md - - RaiseHaltEvent: ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent.md - - OnInitializeAsync: ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync.md - - OnEventDequeuedAsync: ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync.md - - OnEventIgnored: ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored.md - - OnEventDeferred: ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred.md - - OnEventHandledAsync: ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync.md - - OnEventUnhandledAsync: ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync.md - - OnExceptionHandledAsync: ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync.md - - OnHaltAsync: ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync.md - - OnException: ref/Microsoft.Coyote.Actors/Actor/OnException.md - - Equals: ref/Microsoft.Coyote.Actors/Actor/Equals.md - - GetHashCode: ref/Microsoft.Coyote.Actors/Actor/GetHashCode.md - - ToString: ref/Microsoft.Coyote.Actors/Actor/ToString.md - - Actor: ref/Microsoft.Coyote.Actors/Actor/Actor.md - - Id: ref/Microsoft.Coyote.Actors/Actor/Id.md - - CurrentEventGroup: ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md - - Logger: ref/Microsoft.Coyote.Actors/Actor/Logger.md - - HashedState: ref/Microsoft.Coyote.Actors/Actor/HashedState.md - - ActorExecutionStatus: ref/Microsoft.Coyote.Actors/ActorExecutionStatus.md - - ActorId: - - Overview: ref/Microsoft.Coyote.Actors/ActorId.md - - Equals: ref/Microsoft.Coyote.Actors/ActorId/Equals.md - - GetHashCode: ref/Microsoft.Coyote.Actors/ActorId/GetHashCode.md - - ToString: ref/Microsoft.Coyote.Actors/ActorId/ToString.md - - CompareTo: ref/Microsoft.Coyote.Actors/ActorId/CompareTo.md - - Runtime: ref/Microsoft.Coyote.Actors/ActorId/Runtime.md - - IsNameUsedForHashing: ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing.md - - Value: ref/Microsoft.Coyote.Actors/ActorId/Value.md - - NameValue: ref/Microsoft.Coyote.Actors/ActorId/NameValue.md - - Type: ref/Microsoft.Coyote.Actors/ActorId/Type.md - - Name: ref/Microsoft.Coyote.Actors/ActorId/Name.md - DequeueStatus: ref/Microsoft.Coyote.Actors/DequeueStatus.md - AwaitableEventGroup: - Overview: ref/Microsoft.Coyote.Actors/AwaitableEventGroup-1.md @@ -209,6 +384,9 @@ nav: - DefaultEvent: - Overview: ref/Microsoft.Coyote.Actors/DefaultEvent.md - Instance: ref/Microsoft.Coyote.Actors/DefaultEvent/Instance.md + - Event: + - Overview: ref/Microsoft.Coyote.Actors/Event.md + - Event: ref/Microsoft.Coyote.Actors/Event/Event.md - EventGroup: - Overview: ref/Microsoft.Coyote.Actors/EventGroup.md - EventGroup: ref/Microsoft.Coyote.Actors/EventGroup/EventGroup.md @@ -228,19 +406,6 @@ nav: - CurrentStateName: ref/Microsoft.Coyote.Actors/UnhandledEventException/CurrentStateName.md - OnActorHaltedHandler: ref/Microsoft.Coyote.Actors/OnActorHaltedHandler.md - OnEventDroppedHandler: ref/Microsoft.Coyote.Actors/OnEventDroppedHandler.md - - IActorRuntime: - - Overview: ref/Microsoft.Coyote.Actors/IActorRuntime.md - - CreateActorId: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId.md - - CreateActorIdFromName: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName.md - - CreateActor: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor.md - - SendEvent: ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent.md - - GetCurrentEventGroup: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup.md - - GetActorExecutionStatus: ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus.md - - GetCurrentActorIds: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds.md - - GetCurrentActorTypes: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes.md - - GetCurrentActorCount: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount.md - - OnActorHalted: ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md - - OnEventDropped: ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md - ActorRuntimeLogTextFormatter: - Overview: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter.md - OnCreateActor: ref/Microsoft.Coyote.Actors/ActorRuntimeLogTextFormatter/OnCreateActor.md @@ -290,6 +455,62 @@ nav: - OnExceptionHandled: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnExceptionHandled.md - OnCreateTimer: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnCreateTimer.md - OnStopTimer: ref/Microsoft.Coyote.Actors/IActorRuntimeLog/OnStopTimer.md + - Actor: + - Overview: ref/Microsoft.Coyote.Actors/Actor.md + - CreateActor: ref/Microsoft.Coyote.Actors/Actor/CreateActor.md + - SendEvent: ref/Microsoft.Coyote.Actors/Actor/SendEvent.md + - ReceiveEventAsync: ref/Microsoft.Coyote.Actors/Actor/ReceiveEventAsync.md + - StartTimer: ref/Microsoft.Coyote.Actors/Actor/StartTimer.md + - StartPeriodicTimer: ref/Microsoft.Coyote.Actors/Actor/StartPeriodicTimer.md + - StopTimer: ref/Microsoft.Coyote.Actors/Actor/StopTimer.md + - RandomBoolean: ref/Microsoft.Coyote.Actors/Actor/RandomBoolean.md + - RandomInteger: ref/Microsoft.Coyote.Actors/Actor/RandomInteger.md + - Monitor: ref/Microsoft.Coyote.Actors/Actor/Monitor.md + - Assert: ref/Microsoft.Coyote.Actors/Actor/Assert.md + - RaiseHaltEvent: ref/Microsoft.Coyote.Actors/Actor/RaiseHaltEvent.md + - OnInitializeAsync: ref/Microsoft.Coyote.Actors/Actor/OnInitializeAsync.md + - OnEventDequeuedAsync: ref/Microsoft.Coyote.Actors/Actor/OnEventDequeuedAsync.md + - OnEventIgnored: ref/Microsoft.Coyote.Actors/Actor/OnEventIgnored.md + - OnEventDeferred: ref/Microsoft.Coyote.Actors/Actor/OnEventDeferred.md + - OnEventHandledAsync: ref/Microsoft.Coyote.Actors/Actor/OnEventHandledAsync.md + - OnEventUnhandledAsync: ref/Microsoft.Coyote.Actors/Actor/OnEventUnhandledAsync.md + - OnExceptionHandledAsync: ref/Microsoft.Coyote.Actors/Actor/OnExceptionHandledAsync.md + - OnHaltAsync: ref/Microsoft.Coyote.Actors/Actor/OnHaltAsync.md + - OnException: ref/Microsoft.Coyote.Actors/Actor/OnException.md + - Equals: ref/Microsoft.Coyote.Actors/Actor/Equals.md + - GetHashCode: ref/Microsoft.Coyote.Actors/Actor/GetHashCode.md + - ToString: ref/Microsoft.Coyote.Actors/Actor/ToString.md + - Actor: ref/Microsoft.Coyote.Actors/Actor/Actor.md + - Id: ref/Microsoft.Coyote.Actors/Actor/Id.md + - CurrentEventGroup: ref/Microsoft.Coyote.Actors/Actor/CurrentEventGroup.md + - Logger: ref/Microsoft.Coyote.Actors/Actor/Logger.md + - HashedState: ref/Microsoft.Coyote.Actors/Actor/HashedState.md + - ActorExecutionStatus: ref/Microsoft.Coyote.Actors/ActorExecutionStatus.md + - ActorId: + - Overview: ref/Microsoft.Coyote.Actors/ActorId.md + - Equals: ref/Microsoft.Coyote.Actors/ActorId/Equals.md + - GetHashCode: ref/Microsoft.Coyote.Actors/ActorId/GetHashCode.md + - ToString: ref/Microsoft.Coyote.Actors/ActorId/ToString.md + - CompareTo: ref/Microsoft.Coyote.Actors/ActorId/CompareTo.md + - Runtime: ref/Microsoft.Coyote.Actors/ActorId/Runtime.md + - IsNameUsedForHashing: ref/Microsoft.Coyote.Actors/ActorId/IsNameUsedForHashing.md + - Value: ref/Microsoft.Coyote.Actors/ActorId/Value.md + - NameValue: ref/Microsoft.Coyote.Actors/ActorId/NameValue.md + - Type: ref/Microsoft.Coyote.Actors/ActorId/Type.md + - Name: ref/Microsoft.Coyote.Actors/ActorId/Name.md + - IActorRuntime: + - Overview: ref/Microsoft.Coyote.Actors/IActorRuntime.md + - CreateActorId: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorId.md + - CreateActorIdFromName: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActorIdFromName.md + - CreateActor: ref/Microsoft.Coyote.Actors/IActorRuntime/CreateActor.md + - SendEvent: ref/Microsoft.Coyote.Actors/IActorRuntime/SendEvent.md + - GetCurrentEventGroup: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentEventGroup.md + - GetActorExecutionStatus: ref/Microsoft.Coyote.Actors/IActorRuntime/GetActorExecutionStatus.md + - GetCurrentActorIds: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorIds.md + - GetCurrentActorTypes: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorTypes.md + - GetCurrentActorCount: ref/Microsoft.Coyote.Actors/IActorRuntime/GetCurrentActorCount.md + - OnActorHalted: ref/Microsoft.Coyote.Actors/IActorRuntime/OnActorHalted.md + - OnEventDropped: ref/Microsoft.Coyote.Actors/IActorRuntime/OnEventDropped.md - RuntimeFactory: - Overview: ref/Microsoft.Coyote.Actors/RuntimeFactory.md - Create: ref/Microsoft.Coyote.Actors/RuntimeFactory/Create.md @@ -346,60 +567,22 @@ nav: - IgnoreEventsAttribute: ref/Microsoft.Coyote.Actors/StateMachine.State.IgnoreEventsAttribute/IgnoreEventsAttribute.md - Microsoft.Coyote.Actors.Coverage: - Namespace Overview: ref/Microsoft.Coyote.Actors.CoverageNamespace.md - - EventCoverage: - - Overview: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage.md - - GetEventsReceived: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage/GetEventsReceived.md - - GetEventsSent: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage/GetEventsSent.md - - EventCoverage: ref/Microsoft.Coyote.Actors.Coverage/EventCoverage/EventCoverage.md - - Graph: - - Overview: ref/Microsoft.Coyote.Actors.Coverage/Graph.md - - GetNode: ref/Microsoft.Coyote.Actors.Coverage/Graph/GetNode.md - - GetOrCreateNode: ref/Microsoft.Coyote.Actors.Coverage/Graph/GetOrCreateNode.md - - GetOrCreateLink: ref/Microsoft.Coyote.Actors.Coverage/Graph/GetOrCreateLink.md - - ToString: ref/Microsoft.Coyote.Actors.Coverage/Graph/ToString.md - - WriteDgml: ref/Microsoft.Coyote.Actors.Coverage/Graph/WriteDgml.md - - LoadDgml: ref/Microsoft.Coyote.Actors.Coverage/Graph/LoadDgml.md - - Merge: ref/Microsoft.Coyote.Actors.Coverage/Graph/Merge.md - - Graph: ref/Microsoft.Coyote.Actors.Coverage/Graph/Graph.md - - Nodes: ref/Microsoft.Coyote.Actors.Coverage/Graph/Nodes.md - - Links: ref/Microsoft.Coyote.Actors.Coverage/Graph/Links.md - - GraphObject: - - Overview: ref/Microsoft.Coyote.Actors.Coverage/GraphObject.md - - AddAttribute: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/AddAttribute.md - - AddListAttribute: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/AddListAttribute.md - - GraphObject: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/GraphObject.md - - Attributes: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/Attributes.md - - AttributeLists: ref/Microsoft.Coyote.Actors.Coverage/GraphObject/AttributeLists.md - - GraphNode: - - Overview: ref/Microsoft.Coyote.Actors.Coverage/GraphNode.md - - AddDgmlProperties: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/AddDgmlProperties.md - - GraphNode: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/GraphNode.md - - Id: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/Id.md - - Label: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/Label.md - - Category: ref/Microsoft.Coyote.Actors.Coverage/GraphNode/Category.md - - GraphLink: - - Overview: ref/Microsoft.Coyote.Actors.Coverage/GraphLink.md - - AddDgmlProperties: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/AddDgmlProperties.md - - GraphLink: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/GraphLink.md - - Label: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Label.md - - Category: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Category.md - - Source: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Source.md - - Target: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Target.md - - Index: ref/Microsoft.Coyote.Actors.Coverage/GraphLink/Index.md - - CoverageInfo: - - Overview: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo.md - - IsMachineDeclared: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/IsMachineDeclared.md - - DeclareMachineState: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/DeclareMachineState.md - - DeclareStateEvent: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/DeclareStateEvent.md - - Merge: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Merge.md - - Load: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Load.md - - Save: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Save.md - - CoverageInfo: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/CoverageInfo.md - - Machines: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/Machines.md - - MachinesToStates: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/MachinesToStates.md - - RegisteredEvents: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/RegisteredEvents.md - - CoverageGraph: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/CoverageGraph.md - - EventInfo: ref/Microsoft.Coyote.Actors.Coverage/CoverageInfo/EventInfo.md + - ActorCoverageInfo: + - Overview: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo.md + - IsMachineDeclared: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/IsMachineDeclared.md + - DeclareMachineState: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/DeclareMachineState.md + - DeclareMachineStateEventPair: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/DeclareMachineStateEventPair.md + - Merge: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/Merge.md + - ActorCoverageInfo: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/ActorCoverageInfo.md + - Machines: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/Machines.md + - MachinesToStates: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/MachinesToStates.md + - RegisteredActorEvents: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/RegisteredActorEvents.md + - ActorEventInfo: ref/Microsoft.Coyote.Actors.Coverage/ActorCoverageInfo/ActorEventInfo.md + - ActorEventCoverage: + - Overview: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage.md + - GetEventsReceived: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage/GetEventsReceived.md + - GetEventsSent: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage/GetEventsSent.md + - ActorEventCoverage: ref/Microsoft.Coyote.Actors.Coverage/ActorEventCoverage/ActorEventCoverage.md - Microsoft.Coyote.Actors.SharedObjects: - Namespace Overview: ref/Microsoft.Coyote.Actors.SharedObjectsNamespace.md - SharedCounter: @@ -445,157 +628,6 @@ nav: - DueTime: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/DueTime.md - Period: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/Period.md - CustomEvent: ref/Microsoft.Coyote.Actors.Timers/TimerInfo/CustomEvent.md - - Microsoft.Coyote.Logging: - - Namespace Overview: ref/Microsoft.Coyote.LoggingNamespace.md - - ILogger: - - Overview: ref/Microsoft.Coyote.Logging/ILogger.md - - Write: ref/Microsoft.Coyote.Logging/ILogger/Write.md - - WriteLine: ref/Microsoft.Coyote.Logging/ILogger/WriteLine.md - - LogSeverity: ref/Microsoft.Coyote.Logging/LogSeverity.md - - MemoryLogger: - - Overview: ref/Microsoft.Coyote.Logging/MemoryLogger.md - - Write: ref/Microsoft.Coyote.Logging/MemoryLogger/Write.md - - WriteLine: ref/Microsoft.Coyote.Logging/MemoryLogger/WriteLine.md - - ToString: ref/Microsoft.Coyote.Logging/MemoryLogger/ToString.md - - Dispose: ref/Microsoft.Coyote.Logging/MemoryLogger/Dispose.md - - MemoryLogger: ref/Microsoft.Coyote.Logging/MemoryLogger/MemoryLogger.md - - TextWriterLogger: - - Overview: ref/Microsoft.Coyote.Logging/TextWriterLogger.md - - Write: ref/Microsoft.Coyote.Logging/TextWriterLogger/Write.md - - WriteLine: ref/Microsoft.Coyote.Logging/TextWriterLogger/WriteLine.md - - Dispose: ref/Microsoft.Coyote.Logging/TextWriterLogger/Dispose.md - - TextWriterLogger: ref/Microsoft.Coyote.Logging/TextWriterLogger/TextWriterLogger.md - - VerbosityLevel: ref/Microsoft.Coyote.Logging/VerbosityLevel.md - - Microsoft.Coyote.Random: - - Namespace Overview: ref/Microsoft.Coyote.RandomNamespace.md - - Generator: - - Overview: ref/Microsoft.Coyote.Random/Generator.md - - Create: ref/Microsoft.Coyote.Random/Generator/Create.md - - NextBoolean: ref/Microsoft.Coyote.Random/Generator/NextBoolean.md - - NextInteger: ref/Microsoft.Coyote.Random/Generator/NextInteger.md - - Microsoft.Coyote.Runtime: - - Namespace Overview: ref/Microsoft.Coyote.RuntimeNamespace.md - - AssertionFailureException: ref/Microsoft.Coyote.Runtime/AssertionFailureException.md - - RuntimeException: - - Overview: ref/Microsoft.Coyote.Runtime/RuntimeException.md - - RuntimeException: ref/Microsoft.Coyote.Runtime/RuntimeException/RuntimeException.md - - ICoyoteRuntime: - - Overview: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime.md - - RegisterMonitor: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterMonitor.md - - Monitor: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Monitor.md - - RandomBoolean: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomBoolean.md - - RandomInteger: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RandomInteger.md - - Assert: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Assert.md - - RegisterLog: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RegisterLog.md - - RemoveLog: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/RemoveLog.md - - Stop: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Stop.md - - Logger: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/Logger.md - - OnFailure: ref/Microsoft.Coyote.Runtime/ICoyoteRuntime/OnFailure.md - - IRuntimeLog: - - Overview: ref/Microsoft.Coyote.Runtime/IRuntimeLog.md - - OnCreateMonitor: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCreateMonitor.md - - OnMonitorExecuteAction: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorExecuteAction.md - - OnMonitorProcessEvent: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorProcessEvent.md - - OnMonitorRaiseEvent: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorRaiseEvent.md - - OnMonitorStateTransition: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorStateTransition.md - - OnMonitorError: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnMonitorError.md - - OnRandom: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnRandom.md - - OnAssertionFailure: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnAssertionFailure.md - - OnCompleted: ref/Microsoft.Coyote.Runtime/IRuntimeLog/OnCompleted.md - - RuntimeLogTextFormatter: - - Overview: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter.md - - OnCreateMonitor: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCreateMonitor.md - - OnMonitorExecuteAction: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorExecuteAction.md - - OnMonitorProcessEvent: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorProcessEvent.md - - OnMonitorRaiseEvent: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorRaiseEvent.md - - OnMonitorStateTransition: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorStateTransition.md - - OnMonitorError: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnMonitorError.md - - OnRandom: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnRandom.md - - OnAssertionFailure: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnAssertionFailure.md - - OnCompleted: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/OnCompleted.md - - RuntimeLogTextFormatter: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/RuntimeLogTextFormatter.md - - Logger: ref/Microsoft.Coyote.Runtime/RuntimeLogTextFormatter/Logger.md - - OnFailureHandler: ref/Microsoft.Coyote.Runtime/OnFailureHandler.md - - IOperationBuilder: - - Overview: ref/Microsoft.Coyote.Runtime/IOperationBuilder.md - - Name: ref/Microsoft.Coyote.Runtime/IOperationBuilder/Name.md - - GroupId: ref/Microsoft.Coyote.Runtime/IOperationBuilder/GroupId.md - - HashedStateCallback: ref/Microsoft.Coyote.Runtime/IOperationBuilder/HashedStateCallback.md - - Operation: - - Overview: ref/Microsoft.Coyote.Runtime/Operation.md - - GetNextId: ref/Microsoft.Coyote.Runtime/Operation/GetNextId.md - - CreateNext: ref/Microsoft.Coyote.Runtime/Operation/CreateNext.md - - CreateFrom: ref/Microsoft.Coyote.Runtime/Operation/CreateFrom.md - - Start: ref/Microsoft.Coyote.Runtime/Operation/Start.md - - PauseUntil: ref/Microsoft.Coyote.Runtime/Operation/PauseUntil.md - - PauseUntilCompleted: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompleted.md - - PauseUntilAsync: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilAsync.md - - PauseUntilCompletedAsync: ref/Microsoft.Coyote.Runtime/Operation/PauseUntilCompletedAsync.md - - ScheduleNext: ref/Microsoft.Coyote.Runtime/Operation/ScheduleNext.md - - Complete: ref/Microsoft.Coyote.Runtime/Operation/Complete.md - - TryReset: ref/Microsoft.Coyote.Runtime/Operation/TryReset.md - - RuntimeProvider: - - Overview: ref/Microsoft.Coyote.Runtime/RuntimeProvider.md - - Create: ref/Microsoft.Coyote.Runtime/RuntimeProvider/Create.md - - Current: ref/Microsoft.Coyote.Runtime/RuntimeProvider/Current.md - - SchedulingPoint: - - Overview: ref/Microsoft.Coyote.Runtime/SchedulingPoint.md - - Interleave: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Interleave.md - - Yield: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Yield.md - - Read: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Read.md - - Write: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Write.md - - Suppress: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Suppress.md - - Resume: ref/Microsoft.Coyote.Runtime/SchedulingPoint/Resume.md - - SetCheckpoint: ref/Microsoft.Coyote.Runtime/SchedulingPoint/SetCheckpoint.md - - TaskServices: ref/Microsoft.Coyote.Runtime/TaskServices.md - - Microsoft.Coyote.Specifications: - - Namespace Overview: ref/Microsoft.Coyote.SpecificationsNamespace.md - - Monitor: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.md - - RaiseEvent: ref/Microsoft.Coyote.Specifications/Monitor/RaiseEvent.md - - RaiseGotoStateEvent: ref/Microsoft.Coyote.Specifications/Monitor/RaiseGotoStateEvent.md - - Assert: ref/Microsoft.Coyote.Specifications/Monitor/Assert.md - - ToString: ref/Microsoft.Coyote.Specifications/Monitor/ToString.md - - Monitor: ref/Microsoft.Coyote.Specifications/Monitor/Monitor.md - - Logger: ref/Microsoft.Coyote.Specifications/Monitor/Logger.md - - CurrentState: ref/Microsoft.Coyote.Specifications/Monitor/CurrentState.md - - HashedState: ref/Microsoft.Coyote.Specifications/Monitor/HashedState.md - - Specification: - - Overview: ref/Microsoft.Coyote.Specifications/Specification.md - - Assert: ref/Microsoft.Coyote.Specifications/Specification/Assert.md - - IsEventuallyCompletedSuccessfully: ref/Microsoft.Coyote.Specifications/Specification/IsEventuallyCompletedSuccessfully.md - - RegisterMonitor: ref/Microsoft.Coyote.Specifications/Specification/RegisterMonitor.md - - Monitor: ref/Microsoft.Coyote.Specifications/Specification/Monitor.md - - Monitor.State: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.md - - State: ref/Microsoft.Coyote.Specifications/Monitor.State/State.md - - Monitor.StateGroup: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup.md - - StateGroup: ref/Microsoft.Coyote.Specifications/Monitor.StateGroup/StateGroup.md - - Monitor.State.StartAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute.md - - StartAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.StartAttribute/StartAttribute.md - - Monitor.State.OnEntryAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute.md - - OnEntryAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEntryAttribute/OnEntryAttribute.md - - Monitor.State.OnExitAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute.md - - OnExitAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnExitAttribute/OnExitAttribute.md - - Monitor.State.OnEventGotoStateAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute.md - - OnEventGotoStateAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventGotoStateAttribute/OnEventGotoStateAttribute.md - - Monitor.State.OnEventDoActionAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute.md - - OnEventDoActionAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.OnEventDoActionAttribute/OnEventDoActionAttribute.md - - Monitor.State.IgnoreEventsAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute.md - - IgnoreEventsAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.IgnoreEventsAttribute/IgnoreEventsAttribute.md - - Monitor.State.ColdAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute.md - - ColdAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.ColdAttribute/ColdAttribute.md - - Monitor.State.HotAttribute: - - Overview: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute.md - - HotAttribute: ref/Microsoft.Coyote.Specifications/Monitor.State.HotAttribute/HotAttribute.md - Microsoft.Coyote.Test: - Overview: ref/Microsoft.Coyote.Test.md - Microsoft.Coyote.Rewriting: