{-# LANGUAGE Trustworthy #-} {-# LANGUAGE TypeApplications #-} -- TODO: Remove this once yaya-hedgehog has improved recursive generators. {-# OPTIONS_GHC -fplugin-opt=NoRecursion:ignore-decls:genGraph #-} -- | -- Copyright: 2024 Greg Pfeil -- License: AGPL-3.0-only WITH Universal-FOSS-exception-1.0 OR LicenseRef-commercial module Main (main) where import safe "algebraic-graph-duoids" Algebra.Graph.Duoid.Orphans () import "algebraic-graphs" Algebra.Graph ( Graph (Connect, Empty, Overlay, Vertex), ) import safe "base" Control.Applicative (pure, (<*>)) import safe "base" Control.Category ((.)) import safe "base" Data.Function (($)) import safe "base" Data.Functor (fmap, (<$>)) import safe "base" Data.Ord ((<=)) import safe "base" Data.Word (Word8) import safe "base" System.IO (IO) import safe "duoids-hedgehog" Test.Duoid qualified as Duoid import "hedgehog" Hedgehog qualified import "hedgehog" Hedgehog.Gen qualified as Gen import safe "hedgehog" Hedgehog.Main qualified as Hedgehog import "hedgehog" Hedgehog.Range qualified as Range genGraph :: (Hedgehog.MonadGen m) => m a -> m (Graph a) genGraph genA = Gen.recursive Gen.choice [ pure Empty, Vertex <$> genA ] [ Overlay <$> genGraph genA <*> genGraph genA, Connect <$> genGraph genA <*> genGraph genA ] main :: IO () main = Hedgehog.defaultMain $ fmap Hedgehog.checkParallel [ Duoid.validateNormal @(Graph Word8) (<=) . genGraph $ Gen.word8 Range.linearBounded ]