J@ $      !"#!(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?Test @. This repeats the 9$ but with a proxy server in betweenATest @. This repeats the 97 but with a proxy server in between, however we block B requests ....CTest D. 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.EJTest Functor, Applicative, Alternative and Monad instances for ReceiveChan>FGBHIJKLMNO./0P1Q for monitor, R for linkProcess to monitor/link to2MVar to signal on once the monitor has been set upS23456789:;<=>TUVWXYZ[?A\C]^E_`abcdefghijklmn9FGBHIJKLMNO./0P1S23456789:;<=>TUVWXYZ[?A\C]^E_`abcdefghijklmnNone+035;>CINo2First argument indicates empty closure environmentphTests 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 ().qru used to ave a race condition which would be triggered if the spawning process terminates immediately after spawningEstuvwxyz{o|}~pqEstuvwxyz{o|}~pqNone +035;CIN    None+035;CIN!!!!None +035;CIN""""None +035;CIN ### #       !""#$%%%%%%&'()*+, -./0123 456789:;<=>?@ABC*+DEFG*+HIJJFKKLL  MNOPNOQRSTUVWXYZ[\]^_`abcdefghijklmnop*qrstuvwxyz{|}~distr_5tEhVhOpIz7LSdT6jHxKgN0Control.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_C1kFMnPqFjvDhFjgMZGUprControl.Concurrent.STM.TQueueTQueueGodistr_KAnEvuZEhZc0y1Ml6i83So/Control.Distributed.Process.Internal.Primitives terminate_tidmsgsStopReport$fBinaryTestProcessControl $fBinaryPingforkTry whereisRemote monitorOrLinktestPingtestMonitorUnreachabletestMonitorNormalTerminationtestMonitorAbnormalTerminationtestMonitorLocalDeadProcesstestMonitorRemoteDeadProcesstestMonitorDisconnecttestMathtestSendToTerminated testTimeout testTimeout0testTypedChannelstestMergeChannels testMatchAnymatchAnytestMatchAnyHandleDividetestMatchAnyIf matchAnyIftestReceiveChanFeatures DivByZeroAddPongmathghc-prim GHC.TypesTrueFalsemonitorTestProcess testTerminatetestMonitorNodetestMonitorLiveNodetestMonitorChannel testRegistrytestRemoteRegistrytestSpawnLocal testReconnecttestMatchAnyNoHandletestMatchMessageWithUnwraptestReceiveChanTimeout testKillLocaltestKillRemotetestCatchesExittestHandleMessageIf testCatchestestMaskRestoreScopetestDietestPrettyExit testExitLocaltestExitRemotetestUnsafeSendtestUnsafeNSendtestUnsafeSendChan$fBinaryDivByZero$fBinaryDivide $fBinaryAddtypedPingServer testSpawnRacetestSpawnTerminate*Control.Distributed.Process.Internal.Spawnspawndfib quintuplesdictInt factorialaddIntputIntsendPidwaitisPrimesignalfactorial__staticfactorial__sdictfactorial__tdictaddInt__static addInt__sdictputInt__static putInt__sdictsendPid__staticsendPid__sdictsendPid__tdictsdictInt__static wait__static wait__sdict wait__tdicttypedPingServer__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 testReceivetestLocalDeadProcessInfotestLocalLiveProcessInfotestRemoteLiveProcessInfotestSpawnTracingtestTraceRecvExplicitPidtestTraceRecvNamedPidtestTraceSendingtestTraceRegistrationtestTraceUnRegistrationtestTraceLayeringtestRemoteTraceRelay