annotate test/ParRead.hs @ 9:947c5cfa4149

Change function related to Tree, Tree is not visiable from outside.
author Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
date Tue, 21 Jan 2014 13:17:02 +0900
parents f03876c8236a
children a30ec665df9d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 {-# LANGUAGE OverloadedStrings #-}
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import Control.Parallel
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 import Control.Parallel.Strategies
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 import Text.Printf
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 import Jungle
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 import Data.Maybe
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 import Data.List
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 import Data.Time.Clock
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 import qualified Data.ByteString.Lazy.Char8 as B
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 import Control.Exception
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 import System.Environment
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 main = do
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 let
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 jungle = createJungle
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 new_jungle <- createTree jungle "test_tree"
9
947c5cfa4149 Change function related to Tree, Tree is not visiable from outside.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
19 node <- getRootNode new_jungle "test_tree"
8
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 let
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 x = testTree node 7
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 putStrLn $ show $ size x
9
947c5cfa4149 Change function related to Tree, Tree is not visiable from outside.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
23 updateRootNode new_jungle "test_tree" x
947c5cfa4149 Change function related to Tree, Tree is not visiable from outside.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
24 node2 <- getRootNode new_jungle "test_tree"
8
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 t0 <- getCurrentTime
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 printTimeSince t0
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 r <- evaluate (runEval $ test node2)
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 print r
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 printTimeSince t0
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 test node = do
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 x <- rpar (func node)
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 y <- rseq (func2 node)
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 rseq x
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 return (x,y)
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 func :: Node -> Int
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 func node = size node
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 func2 :: Node -> Int
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 func2 node = size node2
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 where
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 node2 = addNewChildAt node [0,0] 0
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 -- ある程度の大きさの木を作れる
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 -- size $ testTree y 1 = 10
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 -- size $ testTree y 5 = 11742
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 -- size $ testTree y 7 = 876808
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 testTree node h = foldl' (add h) node (concatMap permutations . subsequences $ [0..h])
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 where
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 add w node h = addc node h w
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 addc node h w = foldl' (add h) node [0..w]
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 where
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 add h node pos = addNewChildAt node h pos
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 printTimeSince t0 = do
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 t1 <- getCurrentTime
f03876c8236a add ParRead
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 printf "time: %.2fs\n" (realToFrac (diffUTCTime t1 t0) :: Double)