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
|