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

--StepをAbsSRL.StepからAbsRL.Stepへ変換する関数
tests = TestList
    [ "fact 1" ~: transStep (AbsSRL.SasnAdd (AbsSRL.Ident "12345") (AbsSRL.Econ 123)) ~?= AbsRL.SasnAdd (Ident "12345") (AbsRL.Econ 123)
    , "fact 2" ~: transStep (AbsSRL.SasnMin (AbsSRL.Ident "12345") (AbsSRL.Econ 123)) ~?= AbsRL.SasnMin (Ident "12345") (AbsRL.Econ 123)
    , "fact 3" ~: transStep (AbsSRL.SasnXor (AbsSRL.Ident "12345") (AbsSRL.Econ 123)) ~?= AbsRL.SasnXor (Ident "12345") (AbsRL.Econ 123)
    , "fact 4" ~: transStep (AbsSRL.SasnArrAdd (AbsSRL.Ident "abc") (AbsSRL.Earr (AbsSRL.Econ 123) (AbsSRL.Econ 456)) (AbsSRL.Elt (AbsSRL.Econ 123) (AbsSRL.Econ 1234))) ~?= AbsRL.SasnArrAdd (Ident "abc") (AbsRL.Earr (AbsRL.Econ 123) (AbsRL.Econ 456)) (AbsRL.Elt (AbsRL.Econ 123) (AbsRL.Econ 1234))
    , "fact 5" ~: transStep (AbsSRL.SasnArrMin (AbsSRL.Ident "abc") (AbsSRL.Earr (AbsSRL.Econ 123) (AbsSRL.Econ 456)) (AbsSRL.Elt (AbsSRL.Econ 123) (AbsSRL.Econ 1234))) ~?= AbsRL.SasnArrMin (Ident "abc") (AbsRL.Earr (AbsRL.Econ 123) (AbsRL.Econ 456)) (AbsRL.Elt (AbsRL.Econ 123) (AbsRL.Econ 1234))
    , "fact 6" ~: transStep (AbsSRL.SasnArrXor (AbsSRL.Ident "abc") (AbsSRL.Earr (AbsSRL.Econ 123) (AbsSRL.Econ 456)) (AbsSRL.Elt (AbsSRL.Econ 123) (AbsSRL.Econ 1234))) ~?= AbsRL.SasnArrXor (Ident "abc") (AbsRL.Earr (AbsRL.Econ 123) (AbsRL.Econ 456)) (AbsRL.Elt (AbsRL.Econ 123) (AbsRL.Econ 1234))
    , "fact 7" ~: transStep (AbsSRL.Spush (AbsSRL.Ident "abc") (AbsSRL.Ident "def")) ~?= (AbsRL.Spush (AbsRL.Ident "abc")  (AbsRL.Ident "def"))
    , "fact 8" ~: transStep (AbsSRL.Spop (AbsSRL.Ident "abc") (AbsSRL.Ident "def")) ~?= (AbsRL.Spop  (AbsRL.Ident "abc")  (AbsRL.Ident "def"))
    , "fact 9" ~: transStep (AbsSRL.Sskip) ~?= (AbsRL.Sskip)
    ]

main =
    runTestText (putTextToHandle stderr False) tests
