aboutsummaryrefslogtreecommitdiffstats
path: root/test/Property.hs
blob: 7e1911e57ff65b791410c2fda6d41795183c6438 (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
{-# LANGUAGE ConstraintKinds     #-}
{-# LANGUAGE RankNTypes          #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications    #-}

{-# OPTIONS_GHC -Wno-unused-top-binds #-}
{-# OPTIONS_GHC -Wno-unused-imports #-}

module Property
    ( propertyTests
    )
where

import           Data.Either              (either, isRight)
import qualified Data.Graph.Inductive     as G
import           Data.Text                (Text)
import           Hedgehog                 (Gen, Property, (===))
import qualified Hedgehog                 as Hog
import qualified Hedgehog.Gen             as Hog
import qualified Hedgehog.Range           as Hog
import           Parser                   (parserTests)
import           Test.Tasty
import           Test.Tasty.Hedgehog
import           Text.Parsec
import           Verismith
import           Verismith.Result
import           Verismith.Verilog.Lex
import           Verismith.Verilog.Parser

randomDAG' :: Gen Circuit
randomDAG' = Hog.resize 30 randomDAG

acyclicGraph :: Property
acyclicGraph = Hog.property $ do
    xs <- Hog.forAllWith (const "") randomDAG'
    Hog.assert $ simp xs
  where
    simp g =
        (== G.noNodes (getCircuit g))
            . sum
            . fmap length
            . G.scc
            . getCircuit
            $ g

propertyTests :: TestTree
propertyTests = testGroup
    "Property Tests"
    [ testProperty "acyclic graph generation check" acyclicGraph
    , parserTests
    ]