1 module Main(main) where
3 import Control.Concurrent
5 import Control.Exception
6 import System.Directory
9 testdir = "createDirectoryIfMissing001.d"
10 testdir_a = testdir </> "a"
15 report $ createDirectoryIfMissing False testdir
18 report $ createDirectoryIfMissing False testdir_a
19 -- should fail with does not exist
21 report $ createDirectoryIfMissing True testdir_a
22 -- should succeed with no error
23 report $ createDirectoryIfMissing False testdir_a
24 -- should succeed with no error
25 report $ createDirectoryIfMissing False (addTrailingPathSeparator testdir_a)
26 -- should succeed with no error
29 report $ createDirectoryIfMissing True (addTrailingPathSeparator testdir_a)
31 -- look for race conditions: #2808. This fails with
32 -- +RTS -N2 and directory 1.0.0.2.
34 forkIO $ do replicateM_ 10000 create; putMVar m ()
35 forkIO $ do replicateM_ 10000 cleanup; putMVar m ()
36 replicateM_ 2 $ takeMVar m
39 create = createDirectoryIfMissing True testdir_a
41 cleanup = ignore $ removeDirectoryRecursive testdir
43 report :: Show a => IO a -> IO ()
47 Left e -> print (e :: SomeException)
50 ignore :: IO a -> IO ()
54 Left e -> let _ = e :: SomeException in return ()