ZN$      !"#!(c) Tim Watson, Jeff Epstein 2013BSD3 (see the file LICENSE) Tim Watson experimental#non-portable (requires concurrency)None+035;CINControl signals used to manage test processes A simple Ping signal(A mutable cell containing a test result.6Does exactly what it says on the tin, doing so in the Process monad.Run the supplied testProc using an MVar> to collect and assert against its result. Uses the supplied note if the assertion fails.Takes the value of mv (using takeMVar) and asserts that it matches a$Create a new Logger. Logger uses a $4 to receive and process messages on a worker thread.Send a message to the Logger+Stop the worker thread for the given Logger(Starts a test process on the local node.Runs a  test process around the supplied proc@, which is executed whenever the outer process loop receives a % signal.Tell a  test process to continue executingTell a  test process to stop (i.e., &)Tell a  test process8 to send a report (message) back to the calling process"'()*%+ ,-  '()*%+ ,-None +035;CINDExtra operations required of transports for the purposes of testing.!The transport to use for testing.5IO action to perform to simulate losing a connection.None +035;CIN.ALike fork, but throw exceptions in the child thread to the parent/The ping server from the paper09Quick and dirty synchronous version of whereisRemoteAsync1 Monitor or link to a remote node2Basic ping test3(Monitor a process on an unreachable node4+Monitor a process which terminates normally5-Monitor a process which terminates abnormally6,Monitor a local process that is already dead7-Monitor a remote process that is already dead8+Monitor a process that becomes disconnected9(Test the math server (i.e., receiveWait):Send first message (i.e. connect) to an already terminated process (without monitoring); then send another message to a second process on the same remote node (we're checking that the remote node did not die);Test (non-zero) timeout<Test zero timeout=Test typed channels>Test merging receive ports?VTests that unreliable messages arrive sorted even when there are connection failures.@Test A. This repeats the 9$ but with a proxy server in betweenBTest A. This repeats the 97 but with a proxy server in between, however we block C requests ....DTest E. We provide an echo7 server, but it ignores requests unless the text body /= "bar"X - this case should time out rather than removing the message from the process mailbox.FJTest Functor, Applicative, Alternative and Monad instances for ReceiveChanFGHCIJKLMNOP./0Q1R for monitor, S for linkProcess to monitor/link to2MVar to signal on once the monitor has been set upT23456789:;<=>UVWXYZ[\]^_?@B`DabFcdefghijklmnopqrstuvAGHCIJKLMNOP./0Q1T23456789:;<=>UVWXYZ[\]^_?@B`DabFcdefghijklmnopqrstuvNone+035;>CINw2First argument indicates empty closure environmentxhTests that spawn executes the supplied closure even if the caller dies immediately after calling spawn.uThis situation is of interest because the implementation of spawn has the remote peer monitor the caller. See DP-99.The condition is tested by using a transport which refuses to send to the remote peer the message that it is waiting to stop monitoring the caller, namely ().yzu used to ave a race condition which would be triggered if the spawning process terminates immediately after spawningG{|}~wxyG{|}~wxyNone +035;CIN    None+035;CIN!!!!None +035;CIN""""None +035;CINSets the value of an environment variable while executing the given IO computation and restores the preceeding value upon completion.Tests that one and only one interesting trace message is produced when a given action is performed. A message is considered interesting when the given function return True.RTests that one and only one trace message is produced when a message is received.NTests that one and only one trace message is produced when a message is sent.JTests that one and only one trace message is produced when a process dies.HTests that one and only one trace message appears when a process spawns.PTests that one and only one trace message appears when a process is registered.RTests that one and only one trace message appears when a process is unregistered.####       !""#$%%%%%%&'()*+, -./0123 456789:;<=>?@ABCD*+EFGH*+IJKKGLLMM  NOPQOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx*yz{|}~distr_ApUsj79UNSs3Py4gd0JPQu0Control.Distributed.Process.Tests.Internal.UtilsNetwork.Transport.Test$Control.Distributed.Process.Tests.CH)Control.Distributed.Process.Tests.Closure$Control.Distributed.Process.Tests.Mx)Control.Distributed.Process.Tests.Receive'Control.Distributed.Process.Tests.Stats)Control.Distributed.Process.Tests.TracingLoggerTestProcessControlPing TestResultpingnoopsynchronisedAssertionstash expectThatshouldBe shouldContainshouldNotContain shouldMatchdelayedAssertionassertComplete newLogger putLogMsg stopLoggerstartTestProcessrunTestProcess testProcessGotestProcessStoptestProcessReport tryRunProcesstryForkProcess TestTransport testTransporttestBreakConnectiontestsstm_EyxFXFfnfY05IrjGaqCxeDControl.Concurrent.STM.TQueueTQueueGodistr_6zFdk2gFhD4Eik3p83nv05/Control.Distributed.Process.Internal.Primitives terminate_tidmsgsStopReport$fBinaryTestProcessControl $fBinaryPingforkTry whereisRemote monitorOrLinktestPingtestMonitorUnreachabletestMonitorNormalTerminationtestMonitorAbnormalTerminationtestMonitorLocalDeadProcesstestMonitorRemoteDeadProcesstestMonitorDisconnecttestMathtestSendToTerminated testTimeout testTimeout0testTypedChannelstestMergeChannels testUSend testMatchAnymatchAnytestMatchAnyHandleDividetestMatchAnyIf matchAnyIftestReceiveChanFeatures DivByZeroAddPongmathghc-prim GHC.TypesTrueFalsemonitorTestProcess testTerminatetestMonitorNodetestMonitorLiveNodetestMonitorChannel testRegistrytestRegistryRemoteProcesstestRemoteRegistrytestRemoteRegistryRemoteProcesstestSpawnLocaltestSpawnAsyncStrictness testReconnecttestMatchAnyNoHandletestMatchMessageWithUnwraptestReceiveChanTimeout testKillLocaltestKillRemotetestCatchesExittestHandleMessageIf testCatchestestMaskRestoreScopetestDietestPrettyExit testExitLocaltestExitRemotetestUnsafeSendtestUnsafeUSendtestUnsafeNSendtestUnsafeNSendRemotetestUnsafeSendChan testCallLocalsyncBreakConnection$fBinaryDivByZero$fBinaryDivide $fBinaryAddtypedPingServer testSpawnRacetestSpawnTerminate*Control.Distributed.Process.Internal.Spawnspawndfib quintuplesdictInt factorialaddIntputIntsendPidwait expectUnitisPrimesignalfactorial__staticfactorial__sdictfactorial__tdictaddInt__static addInt__sdictputInt__static putInt__sdictsendPid__staticsendPid__sdictsendPid__tdictsdictInt__static wait__static wait__sdict wait__tdictexpectUnit__statictypedPingServer__statictypedPingServer__sdictisPrime__staticisPrime__sdictisPrime__tdictquintuple__staticsignal__static signal__sdict signal__tdict __remoteTable randomElement dfib__static dfib__sdict dfib__tdict__remoteTableDeclstaticQuintuplefactorialClosure addIntClosure putIntClosuresendPidClosuresendFac factorialOf factorial' waitClosuresimulateNetworkFailure testUnclosuretestBindtestSendPureClosuretestSendIOClosuretestSendProcClosure testSpawntestCall testCallBindtestSeqtestSpawnSupervisedtestSpawnInvalidtestClosureExpecttestSpawnChannel testTDicttestFibtestSpawnReconnectPublishtestAgentBroadcasttestAgentDualInputtestAgentPrioritisationtestAgentMailboxHandlingtestAgentEventHandlingtestAgentPublicationtestAgentTableCleartestAgentTablePurgetestAgentTableDelete$fBinaryPublishrecTest1recTest2recTest3recTest4master testReceivetestLocalDeadProcessInfotestLocalLiveProcessInfotestRemoteLiveProcessInfowithEnvtestSystemLoggerMsgtestSystemLoggerMxReceivetestSystemLoggerMxSenttestSystemLoggerMxProcessDiedtestSystemLoggerMxSpawnedtestSystemLoggerMxRegisteredtestSystemLoggerMxUnRegisteredtestSpawnTracingtestTraceRecvExplicitPidtestTraceRecvNamedPidtestTraceSendingtestTraceRegistrationtestTraceUnRegistrationtestTraceLayeringtestRemoteTraceRelay