module Main where

import Sham
import Hardware.Chalk
import qualified Hardware.Chalk.Combinators (zip)
import Data.GraphViz
import Data.Typeable
import System.Directory
import Test.QuickCheck
import Data.Stream (Stream (..), unfold, (<:>))
import qualified Data.Stream (zip,take)


main = do
  putStrLn "Generating graphs..."
  dir <- getCurrentDirectory
  let sg = simpleGraph test
  let g = (graph dir test) {graphID = Just (Str "\"The Sham microprocessor\"")}
  writeFile "sout.dot" (show sg)
  writeFile "out.dot" (show g)
  

prop cmds dst srcA srcB n = 
  all (\_ -> True) $ Data.Stream.take (abs n) (simulate (Hardware.Chalk.Combinators.zip $ sham cmds dst srcA srcB))
