Jikka-5.5.0.0: test/Jikka/Core/Convert/CumulativeSumSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Jikka.Core.Convert.CumulativeSumSpec
( spec,
)
where
import Jikka.Common.Alpha
import Jikka.Common.Error
import Jikka.Core.Convert.CumulativeSum (run)
import qualified Jikka.Core.Convert.TypeInfer as TypeInfer
import Jikka.Core.Format (formatProgram)
import Jikka.Core.Language.Expr
import Jikka.Core.Parse (parseProgram)
import Test.Hspec
run' :: Program -> Either Error Program
run' = flip evalAlphaT 0 . run
parseProgram' :: [String] -> Program
parseProgram' = fromSuccess . flip evalAlphaT 100 . (TypeInfer.run <=< parseProgram . unlines)
spec :: Spec
spec = describe "run" $ do
it "works" $ do
let prog =
parseProgram'
[ "let rec f: int =", -- Remove distinction between top-level and non-top-level.
" let a: int list = range 1000",
" in let n: int = 500",
" in sum (map (fun i -> a[i]) (range n))",
"in f"
]
let expected =
parseProgram'
[ "let rec f: int =",
" let a: int list = range 1000",
" in let n: int = 500",
" in let $0 = scanl (+) 0 a",
" in $0[n]",
"in f"
]
(formatProgram <$> run' prog) `shouldBe` Right (formatProgram expected)