aboutsummaryrefslogtreecommitdiffstats
path: root/app/Main.hs
blob: 988e3ed7deb4303460fe9061939b5acb36613a53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
module Main where

import           Control.Concurrent
import           Data.Text           (Text)
import qualified Data.Text           as T
import           Options.Applicative
import           Prelude             hiding (FilePath)
import           Simulation
import           VeriFuzz

data Opts = Opts
  { output :: Text }

myForkIO :: IO () -> IO (MVar ())
myForkIO io = do
  mvar <- newEmptyMVar
  _ <- forkFinally io (\_ -> putMVar mvar ())
  return mvar

textOption :: Mod OptionFields String -> Parser Text
textOption = fmap T.pack . strOption

argparse :: Parser Opts
argparse = Opts
  <$> textOption
  ( long "output"
    <> short 'o'
    <> metavar "DIR"
    <> help "Output directory that the fuzz run takes place in."
    <> showDefault
    <> value "output"
  )

opts :: ParserInfo Opts
opts = info (argparse <**> helper)
       ( fullDesc
         <> progDesc "Fuzz different simulators and synthesisers."
         <> header "VeriFuzz - A hardware simulator and synthesiser Verilog fuzzer." )

main :: IO ()
 --main = sample (arbitrary :: Gen (Circuit Input))
main = do
  optsparsed <- execParser opts
  num <- getNumCapabilities
  vars <- sequence $ (\x -> myForkIO $
                       runEquivalence (randomMod 5 15) ("test_" <> T.pack (show x)) 0) <$> [1..num]
  sequence_ $ takeMVar <$> vars