aboutsummaryrefslogtreecommitdiffstats
path: root/test/Property.hs
blob: 2d5dcc1fb6092a5c08f83765ff7e75514f03c686 (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
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -Wno-unused-imports #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}

module Property
  ( propertyTests,
  )
where

import Data.Either (either, isRight)
import qualified Data.Graph.Inductive as G
import Data.Text (Text)
import Distance (distanceTests)
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,
      distanceTests
    ]