{-# LANGUAGE CPP, ScopedTypeVariables #-} module Main where #ifndef ghcjs_HOST_OS import Control.Monad import Control.Monad.IO.Class import Control.Applicative import Data.Monoid import Transient.Base import Transient.Internals import Transient.Indeterminism import Transient.Move import Transient.Move.Utils import Transient.Move.Services import Transient.MapReduce import Data.List import qualified Data.Map as M import System.Exit import Control.Monad.State import Control.Exception -- #define _UPK_(x) {-# UNPACK #-} !(x) shouldRun x= local $ getMyNode >>= \p -> assert ( p == (x)) (return ()) service= [("service","test suite") ,("executable", "test-transient1") ,("package","https://github.com/agocorona/transient-universe")] main= do mr <- keep $ test `catcht` \(e:: SomeException) -> liftIO (putStr "EXCEPTiON: " >> print e) >> exit (Just e) endMonitor case mr of Nothing -> print "NO RESULT, NO THREADS RUNNING" >> exitFailure Just Nothing -> print "SUCCESS" >> exitSuccess Just (Just e) -> putStr "FAIL: " >> print e >> exitFailure test= initNodeServ service "localhost" 8080 $ do node0 <- local getMyNode local $ guard (nodePort node0== 8080) -- only executes in node 8080 -- local $ option "get" "get instances" [node1, node2] <- requestInstance "PIN1" service 2 local ( option "f" "fire") <|> return "" -- to repeat the test, remove exit localIO $ putStrLn "------checking Alternative distributed--------" r <- local $ collect 3 $ runCloud $ (runAt node0 (shouldRun( node0) >> return "hello" )) <|> (runAt node1 (shouldRun( node1) >> return "world" )) <|> (runAt node2 (shouldRun( node2) >> return "world2" )) assert(sort r== ["hello", "world","world2"]) $ localIO $ print r localIO $ putStrLn "--------------checking Applicative distributed--------" r <- loggedc $(runAt node0 (shouldRun( node0) >> return "hello ")) <> (runAt node1 (shouldRun( node1) >> return "world " )) <> (runAt node2 (shouldRun( node2) >> return "world2" )) assert(r== "hello world world2") $ localIO $ print r localIO $ putStrLn "----------------checking monadic, distributed-------------" r <- runAt node0 (shouldRun(node0) >> runAt node1 (shouldRun (node1) >> runAt node2 (shouldRun(node2) >> (return "HELLO" )))) assert(r== "HELLO") $ localIO $ print r localIO $ putStrLn "----------------checking map-reduce -------------" r <- reduce (+) . mapKeyB (\w -> (w, 1 :: Int)) $ getText words "hello world hello" localIO $ print r assert (sort (M.toList r) == sort [("hello",2::Int),("world",1)]) $ return r local $ exit (Nothing :: Maybe SomeException) -- remove this to repeat the test #else main= return () #endif