mirror of
https://github.com/anoma/juvix.git
synced 2024-12-15 18:13:56 +03:00
2cf3f85439
* work in progress towards implicit arguments * Wip towards implicit types * improve arity checker * Add version of SimpleFungibleToken with implicit arguments * guess arity of body before checking the lhs of a clause * add ArityUnknown and fix some tests * wip: proper errors in arity checker * fix bugs, improve errors and add tests * format * set hlint version to 3.4 in the ci * update pre-commit version to 3.0.0 * minor changes * added more revisions * minor Co-authored-by: Jonathan Cubides <jonathan.cubides@uib.no>
88 lines
2.3 KiB
Haskell
88 lines
2.3 KiB
Haskell
module Arity.Negative (allTests) where
|
|
|
|
import Base
|
|
import MiniJuvix.Pipeline
|
|
import MiniJuvix.Syntax.MicroJuvix.ArityChecker.Error
|
|
|
|
type FailMsg = String
|
|
|
|
data NegTest = NegTest
|
|
{ _name :: String,
|
|
_relDir :: FilePath,
|
|
_file :: FilePath,
|
|
_checkErr :: ArityCheckerError -> Maybe FailMsg
|
|
}
|
|
|
|
testDescr :: NegTest -> TestDescr
|
|
testDescr NegTest {..} =
|
|
let tRoot = root </> _relDir
|
|
in TestDescr
|
|
{ _testName = _name,
|
|
_testRoot = tRoot,
|
|
_testAssertion = Single $ do
|
|
let entryPoint = defaultEntryPoint _file
|
|
result <- runIOEither (upToMicroJuvixArity entryPoint)
|
|
case mapLeft fromMiniJuvixError result of
|
|
Left (Just tyError) -> whenJust (_checkErr tyError) assertFailure
|
|
Left Nothing -> assertFailure "The arity checker did not find an error."
|
|
Right _ -> assertFailure "An error ocurred but it was not in the arity checker."
|
|
}
|
|
|
|
allTests :: TestTree
|
|
allTests =
|
|
testGroup
|
|
"Arity checker negative tests"
|
|
(map (mkTest . testDescr) tests)
|
|
|
|
root :: FilePath
|
|
root = "tests/negative"
|
|
|
|
wrongError :: Maybe FailMsg
|
|
wrongError = Just "Incorrect error"
|
|
|
|
tests :: [NegTest]
|
|
tests =
|
|
[ NegTest
|
|
"Too many arguments in expression"
|
|
"MicroJuvix"
|
|
"TooManyArguments.mjuvix"
|
|
$ \case
|
|
ErrTooManyArguments {} -> Nothing
|
|
_ -> wrongError,
|
|
NegTest
|
|
"Pattern match a function type"
|
|
"MicroJuvix"
|
|
"FunctionPattern.mjuvix"
|
|
$ \case
|
|
ErrPatternFunction {} -> Nothing
|
|
_ -> wrongError,
|
|
NegTest
|
|
"Function type (* → *) application"
|
|
"MicroJuvix"
|
|
"FunctionApplied.mjuvix"
|
|
$ \case
|
|
ErrFunctionApplied {} -> Nothing
|
|
_ -> wrongError,
|
|
NegTest
|
|
"Expected explicit pattern"
|
|
"MicroJuvix"
|
|
"ExpectedExplicitPattern.mjuvix"
|
|
$ \case
|
|
ErrExpectedExplicitPattern {} -> Nothing
|
|
_ -> wrongError,
|
|
NegTest
|
|
"Expected explicit argument"
|
|
"MicroJuvix"
|
|
"ExpectedExplicitArgument.mjuvix"
|
|
$ \case
|
|
ErrExpectedExplicitArgument {} -> Nothing
|
|
_ -> wrongError,
|
|
NegTest
|
|
"Function clause with two many patterns in the lhs"
|
|
"MicroJuvix"
|
|
"LhsTooManyPatterns.mjuvix"
|
|
$ \case
|
|
ErrLhsTooManyPatterns {} -> Nothing
|
|
_ -> wrongError
|
|
]
|