packages feed

set-cover-0.1.2: test/DocTest/GraphColoring/CutEnumSet.hs

-- Do not edit! Automatically created with doctest-extract from example/GraphColoring/CutEnumSet.hs
{-# LINE 17 "example/GraphColoring/CutEnumSet.hs" #-}

module DocTest.GraphColoring.CutEnumSet where

import GraphColoring.CutEnumSet
import qualified Test.DocTest.Driver as DocTest

{-# LINE 18 "example/GraphColoring/CutEnumSet.hs" #-}
import     qualified Math.SetCover.Exact as ESC

import     qualified Data.EnumSet as EnumSet
import     qualified Data.List.Key as Key
import     Data.Word (Word32)

import     Control.Applicative (liftA2)

import     qualified Test.QuickCheck as QC
import     Test.QuickCheck ((===))

test :: DocTest.T ()
test = do
 DocTest.printPrefix "GraphColoring.CutEnumSet:111: "
{-# LINE 111 "example/GraphColoring/CutEnumSet.hs" #-}
 DocTest.property(
{-# LINE 111 "example/GraphColoring/CutEnumSet.hs" #-}
        
   QC.forAll (fmap (\n -> take (1 + mod n 5) ['a'..]) QC.arbitrary) $ \set ->
   QC.forAll (QC.sublistOf set) $ \used ->
   let usedSet = EnumSet.fromList used in
   let genLabel =
         QC.oneof
            [fmap Left $ liftA2 (,) (QC.elements set) (QC.elements set),
             fmap Right $
               liftA2 (,) (QC.arbitrary :: QC.Gen Integer) (QC.elements set)]
       genAssignSet :: QC.Gen Word32
       genAssignSet = QC.arbitrary
   in
   QC.forAll (QC.listOf (liftA2 ESC.assign genLabel genAssignSet)) $ \assigns ->
   let normalize =
         Key.sort fst . map (\(ESC.Assign label aset) -> (label,aset)) in

   normalize (uniqueNewColors usedSet assigns)
   ===
   normalize (uniqueNewColorsStable usedSet assigns)
  )