blob: 431a15528b63e859661f053e9fa8f681f5609bfb (
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
48
49
50
51
52
53
54
55
56
57
|
module Property
( propertyTests
)
where
import Data.Either (either, isRight)
import qualified Data.Graph.Inductive as G
import Hedgehog (Gen, (===))
import qualified Hedgehog as Hog
import qualified Hedgehog.Gen as Hog
import Test.Tasty
import Test.Tasty.Hedgehog
import Text.Parsec
import VeriFuzz
import VeriFuzz.Verilog.Lex
import VeriFuzz.Verilog.Parser
randomMod' :: Gen ModDecl
randomMod' = Hog.resize 20 (randomMod 3 10)
randomDAG' :: Gen Circuit
randomDAG' = Hog.resize 30 randomDAG
simpleGraph :: TestTree
simpleGraph = testProperty "simple graph generation check" . Hog.property $ do
xs <- Hog.forAllWith (const "") randomDAG'
Hog.assert $ simp xs
where simp = G.isSimple . getCircuit
parserInput' :: Hog.Property
parserInput' = Hog.property $ do
v <- Hog.forAll randomMod'
Hog.assert . isRight $ parse parseModDecl
"input_test.v"
(alexScanTokens $ str v)
where str = show . GenVerilog
parserIdempotent' :: Hog.Property
parserIdempotent' = Hog.property $ do
v <- Hog.forAll randomMod'
let sv = vshow v
p sv === (p . p) sv
where
vshow = show . GenVerilog
p sv = either (\x -> show x <> "\n" <> sv) vshow
. parse parseModDecl "idempotent_test.v"
$ alexScanTokens sv
parserInput :: TestTree
parserInput = testProperty "parser input" parserInput'
parserIdempotent :: TestTree
parserIdempotent = testProperty "parser idempotence" parserIdempotent'
propertyTests :: TestTree
propertyTests =
testGroup "Property Tests" [simpleGraph, parserInput, parserIdempotent]
|