packages feed

ecta-1.0.0.0: test/SATSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module SATSpec ( spec ) where

import qualified Data.HashMap.Strict as HashMap
import qualified Data.HashSet as HashSet
import Test.Hspec

import Application.SAT

-----------------------------------------------------------------

smallFormula :: CNF
smallFormula = And [ Or [PosLit "x1", PosLit "x2"]
                   , Or [NegLit "x1", NegLit "x2"]
                   ]

--------

spec :: Spec
spec = do
  describe "SAT test inputs" $ do
    it "solves a 2-var, 2-clause problem" $
      allSolutions smallFormula `shouldBe` (HashSet.fromList [ HashMap.fromList [("x1", True), ("x2", False)]
                                                             , HashMap.fromList [("x1", False), ("x2", True)]
                                                             ])