import Test.HUnit
import System.IO
import AbsRL
import AbsSRL hiding (Ident)
import qualified AbsSRL
import Control.Monad.State
import Compiler

--ExpをAbsSRL.ExpからAbsRL.Expへ変換する関数
tests = TestList
    [ "fact 1" ~: transExp (AbsSRL.Etop (AbsSRL.Econ 123)) ~?= AbsRL.Etop (AbsRL.Econ 123)
    , "fact 2" ~: transExp (AbsSRL.Eempty (AbsSRL.Econ 123)) ~?= AbsRL.Eempty (AbsRL.Econ 123)
    , "fact 3" ~: transExp (AbsSRL.Exor (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Exor (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 4" ~: transExp (AbsSRL.Eeq (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Eeq (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 5" ~: transExp (AbsSRL.Ene (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Ene (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 6" ~: transExp (AbsSRL.Elt (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Elt (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 7" ~: transExp (AbsSRL.Egt (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Egt (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 8" ~: transExp (AbsSRL.Ele (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Ele (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 9" ~: transExp (AbsSRL.Ege (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Ege (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 10" ~: transExp (AbsSRL.Eadd (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Eadd (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 11" ~: transExp (AbsSRL.Emin (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Emin (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 12" ~: transExp (AbsSRL.Emul (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Emul (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 13" ~: transExp (AbsSRL.Ediv (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Ediv (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 14" ~: transExp (AbsSRL.Earr (AbsSRL.Econ 123)(AbsSRL.Econ 456)) ~?= AbsRL.Earr (AbsRL.Econ 123)(AbsRL.Econ 456)
    , "fact 15" ~: transExp (AbsSRL.Econ 123) ~?= AbsRL.Econ 123
    , "fact 16" ~: transExp (AbsSRL.Evar (AbsSRL.Ident "abc")) ~?= AbsRL.Evar (Ident "abc")
    ]

main =
    runTestText (putTextToHandle stderr False) tests
