Merge pull request #30 from anderspapitto/setfix
add some evaluation tests and fix bug
This commit is contained in:
commit
f60f12f9a0
|
@ -102,9 +102,9 @@ evalExpr = cata phi
|
|||
phi (NSet recBind binds) = \env -> case env of
|
||||
(Fix (NVSet env')) -> do
|
||||
rec
|
||||
mergedEnv <- pure $ case recBind of
|
||||
Rec -> Fix $ NVSet $ evaledBinds `Map.union` env'
|
||||
NonRec -> env
|
||||
mergedEnv <- case recBind of
|
||||
Rec -> pure $ Fix $ NVSet $ evaledBinds `Map.union` env'
|
||||
NonRec -> fmap (Fix . NVSet) $ evalBinds True env binds
|
||||
evaledBinds <- evalBinds True mergedEnv binds
|
||||
pure mergedEnv
|
||||
_ -> error "invalid evaluation environment"
|
||||
|
|
48
tests/EvalTests.hs
Normal file
48
tests/EvalTests.hs
Normal file
|
@ -0,0 +1,48 @@
|
|||
{-# LANGUAGE TemplateHaskell #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module EvalTests (tests) where
|
||||
|
||||
import Data.Fix
|
||||
|
||||
import Test.Tasty
|
||||
import Test.Tasty.HUnit
|
||||
import Test.Tasty.TH
|
||||
|
||||
import Nix.Eval
|
||||
import Nix.Parser
|
||||
import Nix.Types
|
||||
|
||||
case_basic_sum :: Assertion
|
||||
case_basic_sum = constantEqualStr "2" "1 + 1"
|
||||
|
||||
case_basic_function :: Assertion
|
||||
case_basic_function = constantEqualStr "2" "(a: a) 2"
|
||||
|
||||
case_set_attr :: Assertion
|
||||
case_set_attr = constantEqualStr "2" "{ a = 2; }.a"
|
||||
|
||||
case_function_set_arg :: Assertion
|
||||
case_function_set_arg = constantEqualStr "2" "({ a }: 2) { a = 1; }"
|
||||
|
||||
case_function_set_two_arg :: Assertion
|
||||
case_function_set_two_arg = constantEqualStr "2" "({ a, b ? 3 }: b - a) { a = 1; }"
|
||||
|
||||
-- case_function_set_two_arg_default_scope :: Assertion
|
||||
-- case_function_set_two_arg_default_scope = constantEqualStr "2" "({ a, b ? a * 3 }: b - a) { a = 1; }"
|
||||
|
||||
tests :: TestTree
|
||||
tests = $testGroupGenerator
|
||||
|
||||
-----------------------
|
||||
|
||||
constantEqual :: NExpr -> NExpr -> Assertion
|
||||
constantEqual a b = do
|
||||
Fix (NVConstant a') <- evalExpr a (Fix (NVSet mempty))
|
||||
Fix (NVConstant b') <- evalExpr b (Fix (NVSet mempty))
|
||||
assertEqual "" a' b'
|
||||
|
||||
constantEqualStr :: String -> String -> Assertion
|
||||
constantEqualStr a b =
|
||||
let Success a' = parseNixString a
|
||||
Success b' = parseNixString b
|
||||
in constantEqual a' b'
|
|
@ -3,8 +3,10 @@ module Main where
|
|||
import Test.Tasty
|
||||
|
||||
import qualified ParserTests
|
||||
import qualified EvalTests
|
||||
|
||||
main :: IO ()
|
||||
main = defaultMain $ testGroup "hnix"
|
||||
[ ParserTests.tests
|
||||
, EvalTests.tests
|
||||
]
|
||||
|
|
Loading…
Reference in a new issue