fortran-vars-0.3.0: test/BozConstantSpec.hs
module BozConstantSpec ( spec ) where
import Test.Hspec
import Language.Fortran.Vars.BozConstant
( bozToInt2
, bozToInt4
, bozToInt8
)
import Language.Fortran.Vars.Types
( ExpVal(..) )
import qualified Language.Fortran.AST.Boz as AST
boz :: String -> ExpVal
boz = Boz . AST.parseBoz
spec :: Spec
spec = describe "Boz Constant Conversion" $ do
it "Mixed case BOZ constant conversions" $ do
bozToInt2 (boz "'ffff'x") `shouldBe` Int (-1)
bozToInt2 (boz "'FfFf'x") `shouldBe` Int (-1)
bozToInt4 (boz "'FFFFFFFF'x") `shouldBe` Int (-1)
it "BOZ constant to Integer*2" $ do
bozToInt2 (boz "'1'x") `shouldBe` Int 1
bozToInt2 (boz "'10'x") `shouldBe` Int 16
bozToInt2 (boz "'7fff'x") `shouldBe` Int 32767
bozToInt2 (boz "'8000'x") `shouldBe` Int (-32768)
bozToInt2 (boz "'ffff'x") `shouldBe` Int (-1)
it "BOZ constant to Integer*4" $ do
bozToInt4 (boz "'1'x") `shouldBe` Int 1
bozToInt4 (boz "'10'x") `shouldBe` Int 16
bozToInt4 (boz "'7fff'x") `shouldBe` Int 32767
bozToInt4 (boz "'8000'x") `shouldBe` Int 32768
bozToInt4 (boz "'ffff'x") `shouldBe` Int 65535
bozToInt4 (boz "'7fffffff'x") `shouldBe` Int 2147483647
bozToInt4 (boz "'80000000'x") `shouldBe` Int (-2147483648)
bozToInt4 (boz "'ffffffff'x") `shouldBe` Int (-1)
it "BOZ constant to Integer*8" $ do
bozToInt8 (boz "'1'x") `shouldBe` Int 1
bozToInt8 (boz "'10'x") `shouldBe` Int 16
bozToInt8 (boz "'7fff'x") `shouldBe` Int 32767
bozToInt8 (boz "'8000'x") `shouldBe` Int 32768
bozToInt8 (boz "'ffff'x") `shouldBe` Int 65535
bozToInt8 (boz "'7fffffff'x") `shouldBe` Int 2147483647
bozToInt8 (boz "'80000000'x") `shouldBe` Int 2147483648
bozToInt8 (boz "'ffffffff'x") `shouldBe` Int 4294967295
bozToInt8 (boz "'7fffffffffffffff'x") `shouldBe` Int 9223372036854775807
bozToInt8 (boz "'8000000000000000'x") `shouldBe` Int (-9223372036854775808)
bozToInt8 (boz "'ffffffffffffffff'x") `shouldBe` Int (-1)