# HG changeset patch # User Daichi TOMA # Date 1390371190 -32400 # Node ID 3337ccc824a44ebc636e9618b29a7f40af1b0a7a # Parent 9df5178e867c173149c19f945fe0be291865929c fix diff -r 9df5178e867c -r 3337ccc824a4 test/ParWrite.hs --- a/test/ParWrite.hs Wed Jan 22 14:23:29 2014 +0900 +++ b/test/ParWrite.hs Wed Jan 22 15:13:10 2014 +0900 @@ -31,12 +31,16 @@ jungle <- createTree jungle treeId2 node <- getRootNode jungle treeId + node2 <- getRootNode jungle treeId let - miniTree = testTree node treeDepth + miniTree = testTree node treeDepth + miniTree2 = testTree node2 treeDepth updateRootNode jungle treeId miniTree + updateRootNode jungle treeId2 miniTree2 putStrLn $ show $ size miniTree + putStrLn $ show $ size miniTree2 t0 <- getCurrentTime printTimeSince t0 @@ -52,21 +56,16 @@ -- parallel write for two trees by singleWrite dualWrite jungle = do - x <- rpar (mapM runEval (singleWrite jungle writeCount treeId)) - y <- rpar (mapM runEval (singleWrite jungle writeCount treeId2)) + x <- rpar (updateRootNodeWith (writeFunctions writeCount) jungle treeId) + y <- rseq (updateRootNodeWith (writeFunctions writeCount) jungle treeId2) + rseq x return [x, y] --- paralell write for single tree -singleWrite :: Jungle -> Int -> String -> [Eval (IO ())] -singleWrite jungle writeCount treeId = zipWith parApply (writeFunctions writeCount) (repeat jungle) +-- generate functions to node update +writeFunctions :: Int -> Node -> Node +writeFunctions writeCount node = foldl' apply node [0..writeCount] where - parApply f jungle = (rseq.runEval.rpar) (updateRootNodeWith f jungle treeId) - --- generate functions to node update -writeFunctions :: Int -> [(Node -> Node)] -writeFunctions writeCount = map apply [0..writeCount] - where - apply x node = putAttribute node lastPos (show x) (B.pack . show $ x) + apply node x = putAttribute node lastPos (show x) (B.pack . show $ x) -- utils from ParRead