mirror of
https://github.com/idris-lang/Idris2.git
synced 2024-12-24 20:23:11 +03:00
[ refactor ] to allow testpools to specify a backend (#1591)
This commit is contained in:
parent
49f8cefeff
commit
d2986e5fea
1
.github/workflows/ci-macos-combined.yml
vendored
1
.github/workflows/ci-macos-combined.yml
vendored
@ -11,7 +11,6 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
SCHEME: chez
|
SCHEME: chez
|
||||||
IDRIS2_TESTS_CG: chez
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
7
.github/workflows/ci-ubuntu-combined.yml
vendored
7
.github/workflows/ci-ubuntu-combined.yml
vendored
@ -25,7 +25,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
IDRIS2_CG: chez
|
IDRIS2_CG: chez
|
||||||
IDRIS2_TESTS_CG: chez
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -47,7 +46,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
IDRIS2_CG: racket
|
IDRIS2_CG: racket
|
||||||
IDRIS2_TESTS_CG: racket
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -67,7 +65,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
IDRIS2_CG: chez
|
IDRIS2_CG: chez
|
||||||
IDRIS2_TESTS_CG: chez
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -111,7 +108,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
IDRIS2_CG: chez
|
IDRIS2_CG: chez
|
||||||
IDRIS2_TESTS_CG: chez
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -137,7 +133,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
IDRIS2_CG: racket
|
IDRIS2_CG: racket
|
||||||
IDRIS2_TESTS_CG: racket
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -161,7 +156,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
IDRIS2_CG: chez
|
IDRIS2_CG: chez
|
||||||
IDRIS2_TESTS_CG: chez
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -194,7 +188,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
IDRIS2_CG: chez
|
IDRIS2_CG: chez
|
||||||
IDRIS2_TESTS_CG: chez
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
1
.github/workflows/ci-windows.yml
vendored
1
.github/workflows/ci-windows.yml
vendored
@ -12,7 +12,6 @@ env:
|
|||||||
MSYSTEM: MINGW64
|
MSYSTEM: MINGW64
|
||||||
MSYS2_PATH_TYPE: inherit
|
MSYS2_PATH_TYPE: inherit
|
||||||
SCHEME: scheme
|
SCHEME: scheme
|
||||||
IDRIS2_TESTS_CG: chez
|
|
||||||
CC: gcc
|
CC: gcc
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
@ -1,14 +1,25 @@
|
|||||||
# Test
|
# Test
|
||||||
The test package exposes the same test framework(s) the Idris 2 compiler uses for its test suite.
|
The test package exposes the same test framework(s) the Idris 2 compiler
|
||||||
|
uses for its test suite.
|
||||||
|
|
||||||
In a language like Idris 2, there are a number of strategies one can take for testing their code and the eventual goal of this testing package is to facilitate a blend of these strategies in any project. Currently the package contains one module facilitating one style of testing: `Golden`. Contributions containing other modules that enable additional testing styles are encouraged.
|
In a language like Idris 2, there are a number of strategies one can take
|
||||||
|
for testing their code and the eventual goal of this testing package is to
|
||||||
|
facilitate a blend of these strategies in any project. Currently the package
|
||||||
|
contains one module facilitating one style of testing: `Golden`. Contributions
|
||||||
|
containing other modules that enable additional testing styles are encouraged.
|
||||||
|
|
||||||
To use the test package, either pass `-p test` to the idris2 executable or add `depends = test` to your test suite's package file.
|
To use the test package, either pass `-p test` to the idris2 executable or
|
||||||
|
add `depends = test` to your test suite's package file.
|
||||||
|
|
||||||
## Golden
|
## Golden
|
||||||
Golden facilitates testing by way of comparing test output with a predetermined expecation. The module is well documented in its own source code but the following is a primer.
|
|
||||||
|
|
||||||
You first import the `Test.Golden` module and write an `IO` function to serve as the entrypoint for your test suite. This function must at some point call into Golden's `runner`.
|
Golden facilitates testing by way of comparing a test's output to a
|
||||||
|
predetermined expecation. The module is well documented in its own source code
|
||||||
|
but the following is a primer.
|
||||||
|
|
||||||
|
You first import the `Test.Golden` module and write an `IO` function to serve as
|
||||||
|
the entrypoint for your test suite. This function must at some point call into
|
||||||
|
Golden's `runner`.
|
||||||
```idris
|
```idris
|
||||||
-- your_project/tests/Main.idr
|
-- your_project/tests/Main.idr
|
||||||
|
|
||||||
@ -23,10 +34,11 @@ main = do
|
|||||||
runner [tests]
|
runner [tests]
|
||||||
```
|
```
|
||||||
|
|
||||||
You populate the `TestPool` list that the `runner` expects with one entry per pool of tests you want to run. Within each pool, tests are run concurrently.
|
You populate the `TestPool` list that the `runner` expects with one entry per
|
||||||
|
pool of tests you want to run. Within each pool, tests are run concurrently.
|
||||||
```idris
|
```idris
|
||||||
tests : TestPool
|
tests : TestPool
|
||||||
tests = MkTestPool "Description of the test pool" [] [
|
tests = MkTestPool "Description of the test pool" [] Nothing [
|
||||||
"my_great_test"
|
"my_great_test"
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
@ -34,9 +46,20 @@ tests = MkTestPool "Description of the test pool" [] [
|
|||||||
The first argument to `MkTestPool` is a description of the whole test pool.
|
The first argument to `MkTestPool` is a description of the whole test pool.
|
||||||
It will be printed before the tests from this pool are started.
|
It will be printed before the tests from this pool are started.
|
||||||
|
|
||||||
The second argument to `MkTestPool` (empty in the above example) is a list of codegen backends required to run the tests in the given pool. Any empty list means no requirements. If your tests required the Racket backend, you could instead specify `[Racket]`. See the [`Requirement` type](./Test/Golden.idr#L228) for more.
|
The second argument to `MkTestPool` (empty in the above example) is a list of
|
||||||
|
constraints that need to be satisfied to be able to run the tests in the given
|
||||||
|
pool. An empty list means no requirements. If your tests required racket to be
|
||||||
|
installed, you could for instance specify `[Racket]`.
|
||||||
|
See the [`Requirement` type](./Test/Golden.idr#L228) for more.
|
||||||
|
|
||||||
The third argument to `MkTestPool` is a list of directory names that can be found relative to your `Main.idr` file. This directory will have some combination of the following files.
|
The third argument to `MkTestPool` is an optional backend. In the example we
|
||||||
|
did not specify any but if you want to use the reference counting C backend
|
||||||
|
you could for instance use `Just C`.
|
||||||
|
|
||||||
|
|
||||||
|
The last argument is a list of directory names that can be found relative to
|
||||||
|
your `Main.idr` file. This directory will have some combination of the following
|
||||||
|
files.
|
||||||
```Shell
|
```Shell
|
||||||
my_great_test/
|
my_great_test/
|
||||||
Test.idr
|
Test.idr
|
||||||
@ -47,16 +70,27 @@ my_great_test/
|
|||||||
```
|
```
|
||||||
|
|
||||||
These files define:
|
These files define:
|
||||||
1. Any Idris 2 source code needed for the test (Test.idr, which can be named anything you'd like and is not limited to 1 file).
|
1. Any Idris 2 source code needed for the test
|
||||||
|
(Test.idr, which can be named anything you'd like and is not limited to 1 file).
|
||||||
2. Any package information needed to build those source files (test.ipkg).
|
2. Any package information needed to build those source files (test.ipkg).
|
||||||
3. The command run at the shell to execute your test (run).
|
3. The command run at the shell to execute your test (run, use `$1` in place of the name of the idris2 executable).
|
||||||
4. Optional input passed to your test case (input).
|
4. Optional input passed to your test case (input).
|
||||||
5. The expected output of running your test (expected).
|
5. The expected output of running your test (expected).
|
||||||
|
|
||||||
See the [documentation](./Test/Golden.idr#L12) in `Test/Golden.idr` and the [template directories](../../tests/templates) provided with the Idris 2 project for a great primer on these files.
|
See the [documentation](./Test/Golden.idr#L12) in `Test/Golden.idr` and
|
||||||
|
the [template directories](../../tests/templates) provided with the Idris 2
|
||||||
|
project for a great primer on these files.
|
||||||
|
|
||||||
When you run your tests (the executable produced by building your `tests/Main.idr` file), you need to specify the Idris executable to use and optionally use interactive mode (`--interactive`) or limit the test cases that are run (`--only [names]`).
|
When you run your tests (the executable produced by building your
|
||||||
|
`tests/Main.idr` file), you need to specify the Idris executable to use
|
||||||
Interactive mode is useful when you know the expected output for a test case is going to change -- you will be prompted to updated the expectation so you can choose whether the output produced by a new test run should become the new "golden" standard.
|
and optionally set the interactive mode (`--interactive`), specify the
|
||||||
You can even skip the step of creating an `expected` file altogether when you write a new test case and use interactive mode to accept the output of your test case as the expectation.
|
number of threads to use concurrently (`--threads`), or limit the test
|
||||||
|
cases that are run (`--only [names]`).
|
||||||
|
|
||||||
|
Interactive mode is useful when you know the expected output for a test case
|
||||||
|
is going to change -- you will be prompted to updated the expectation so you
|
||||||
|
can choose whether the output produced by a new test run should become the new
|
||||||
|
"golden" standard.
|
||||||
|
You can even skip the step of creating an `expected` file altogether when you
|
||||||
|
write a new test case and use interactive mode to accept the output of your
|
||||||
|
test case as the expectation.
|
||||||
|
@ -205,11 +205,10 @@ export
|
|||||||
runTest : Options -> (testPath : String) -> IO (Future Result)
|
runTest : Options -> (testPath : String) -> IO (Future Result)
|
||||||
runTest opts testPath = forkIO $ do
|
runTest opts testPath = forkIO $ do
|
||||||
start <- clockTime UTC
|
start <- clockTime UTC
|
||||||
let cg = case codegen opts of
|
let cg = maybe "" (" --cg " ++) (codegen opts)
|
||||||
Nothing => ""
|
let exe = "\"" ++ exeUnderTest opts ++ cg ++ "\""
|
||||||
Just cg => "env IDRIS2_TESTS_CG=" ++ cg ++ " "
|
|
||||||
ignore $ system $ "cd " ++ testPath ++ " && " ++
|
ignore $ system $ "cd " ++ testPath ++ " && " ++
|
||||||
cg ++ "sh ./run " ++ exeUnderTest opts ++ " | tr -d '\\r' > output"
|
"sh ./run " ++ exe ++ " | tr -d '\\r' > output"
|
||||||
end <- clockTime UTC
|
end <- clockTime UTC
|
||||||
|
|
||||||
Right out <- readFile $ testPath ++ "/output"
|
Right out <- readFile $ testPath ++ "/output"
|
||||||
@ -309,6 +308,14 @@ Show Requirement where
|
|||||||
show Racket = "racket"
|
show Racket = "racket"
|
||||||
show Gambit = "gambit"
|
show Gambit = "gambit"
|
||||||
|
|
||||||
|
export
|
||||||
|
[CG] Show Requirement where
|
||||||
|
show C = "refc"
|
||||||
|
show Chez = "chez"
|
||||||
|
show Node = "node"
|
||||||
|
show Racket = "racket"
|
||||||
|
show Gambit = "gambit"
|
||||||
|
|
||||||
export
|
export
|
||||||
checkRequirement : Requirement -> IO (Maybe String)
|
checkRequirement : Requirement -> IO (Maybe String)
|
||||||
checkRequirement req
|
checkRequirement req
|
||||||
@ -320,7 +327,7 @@ checkRequirement req
|
|||||||
where
|
where
|
||||||
requirement : Requirement -> (String, List String)
|
requirement : Requirement -> (String, List String)
|
||||||
requirement C = ("CC", ["cc"])
|
requirement C = ("CC", ["cc"])
|
||||||
requirement Chez = ("CHEZ", ["chez", "chezscheme9.5", "scheme"])
|
requirement Chez = ("CHEZ", ["chez", "chezscheme9.5", "chezscheme", "scheme"])
|
||||||
requirement Node = ("NODE", ["node"])
|
requirement Node = ("NODE", ["node"])
|
||||||
requirement Racket = ("RACKET", ["racket"])
|
requirement Racket = ("RACKET", ["racket"])
|
||||||
requirement Gambit = ("GAMBIT", ["gsc"])
|
requirement Gambit = ("GAMBIT", ["gsc"])
|
||||||
@ -343,12 +350,14 @@ findCG
|
|||||||
||| A test pool is characterised by
|
||| A test pool is characterised by
|
||||||
||| + a name
|
||| + a name
|
||||||
||| + a list of requirement
|
||| + a list of requirement
|
||||||
|
||| + a choice of codegen (overriding the default)
|
||||||
||| + and a list of directory paths
|
||| + and a list of directory paths
|
||||||
public export
|
public export
|
||||||
record TestPool where
|
record TestPool where
|
||||||
constructor MkTestPool
|
constructor MkTestPool
|
||||||
poolName : String
|
poolName : String
|
||||||
constraints : List Requirement
|
constraints : List Requirement
|
||||||
|
codegen : Maybe Requirement
|
||||||
testCases : List String
|
testCases : List String
|
||||||
|
|
||||||
||| Only keep the tests that have been asked for
|
||| Only keep the tests that have been asked for
|
||||||
@ -395,7 +404,7 @@ poolRunner opts pool
|
|||||||
let (_ :: _) = tests
|
let (_ :: _) = tests
|
||||||
| [] => pure initSummary
|
| [] => pure initSummary
|
||||||
-- if so make sure the constraints are satisfied
|
-- if so make sure the constraints are satisfied
|
||||||
cs <- for (constraints pool) $ \ req => do
|
cs <- for (toList (codegen pool) ++ constraints pool) $ \ req => do
|
||||||
mfp <- checkRequirement req
|
mfp <- checkRequirement req
|
||||||
let msg = case mfp of
|
let msg = case mfp of
|
||||||
Nothing => "✗ " ++ show req ++ " not found"
|
Nothing => "✗ " ++ show req ++ " not found"
|
||||||
@ -407,8 +416,13 @@ poolRunner opts pool
|
|||||||
|
|
||||||
let Just _ = the (Maybe (List String)) (sequence cs)
|
let Just _ = the (Maybe (List String)) (sequence cs)
|
||||||
| Nothing => pure initSummary
|
| Nothing => pure initSummary
|
||||||
|
|
||||||
|
-- if the test pool requires a specific codegen then use that
|
||||||
|
let opts = case codegen pool of
|
||||||
|
Nothing => opts
|
||||||
|
Just cg => { codegen := Just (show @{CG} cg) } opts
|
||||||
-- if so run them all!
|
-- if so run them all!
|
||||||
loop initSummary tests
|
loop opts initSummary tests
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
||||||
@ -421,12 +435,12 @@ poolRunner opts pool
|
|||||||
++ msgs
|
++ msgs
|
||||||
++ [ separator, "" ]
|
++ [ separator, "" ]
|
||||||
|
|
||||||
loop : Summary -> List String -> IO Summary
|
loop : Options -> Summary -> List String -> IO Summary
|
||||||
loop acc [] = pure acc
|
loop opts acc [] = pure acc
|
||||||
loop acc tests
|
loop opts acc tests
|
||||||
= do let (now, later) = splitAt opts.threads tests
|
= do let (now, later) = splitAt opts.threads tests
|
||||||
bs <- map await <$> traverse (runTest opts) now
|
bs <- map await <$> traverse (runTest opts) now
|
||||||
loop (updateSummary bs acc) later
|
loop opts (updateSummary bs acc) later
|
||||||
|
|
||||||
|
|
||||||
||| A runner for a whole test suite
|
||| A runner for a whole test suite
|
||||||
@ -465,5 +479,3 @@ runner tests
|
|||||||
if nfail == 0
|
if nfail == 0
|
||||||
then exitWith ExitSuccess
|
then exitWith ExitSuccess
|
||||||
else exitWith (ExitFailure 1)
|
else exitWith (ExitFailure 1)
|
||||||
|
|
||||||
-- [ EOF ]
|
|
||||||
|
@ -8,7 +8,7 @@ import Test.Golden
|
|||||||
-- Test cases
|
-- Test cases
|
||||||
|
|
||||||
ttimpTests : TestPool
|
ttimpTests : TestPool
|
||||||
ttimpTests = MkTestPool "TTImp" []
|
ttimpTests = MkTestPool "TTImp" [] Nothing
|
||||||
[ "basic001", "basic002", "basic003", "basic004", "basic005"
|
[ "basic001", "basic002", "basic003", "basic004", "basic005"
|
||||||
, "basic006"
|
, "basic006"
|
||||||
, "coverage001", "coverage002"
|
, "coverage001", "coverage002"
|
||||||
@ -23,7 +23,7 @@ ttimpTests = MkTestPool "TTImp" []
|
|||||||
]
|
]
|
||||||
|
|
||||||
idrisTestsBasic : TestPool
|
idrisTestsBasic : TestPool
|
||||||
idrisTestsBasic = MkTestPool "Fundamental language features" []
|
idrisTestsBasic = MkTestPool "Fundamental language features" [] Nothing
|
||||||
-- Fundamental language features
|
-- Fundamental language features
|
||||||
["basic001", "basic002", "basic003", "basic004", "basic005",
|
["basic001", "basic002", "basic003", "basic004", "basic005",
|
||||||
"basic006", "basic007", "basic008", "basic009", "basic010",
|
"basic006", "basic007", "basic008", "basic009", "basic010",
|
||||||
@ -34,13 +34,13 @@ idrisTestsBasic = MkTestPool "Fundamental language features" []
|
|||||||
"basic031", "basic032", "basic033", "basic034", "basic035",
|
"basic031", "basic032", "basic033", "basic034", "basic035",
|
||||||
"basic036", "basic037", "basic038", "basic039", "basic040",
|
"basic036", "basic037", "basic038", "basic039", "basic040",
|
||||||
"basic041", "basic042", "basic043", "basic044", "basic045",
|
"basic041", "basic042", "basic043", "basic044", "basic045",
|
||||||
"basic046", "basic047", "basic048", "basic049", "basic050",
|
"basic046", "basic047", "basic049", "basic050",
|
||||||
"basic051", "basic052", "basic053", "basic054", "basic055",
|
"basic051", "basic052", "basic053", "basic054", "basic055",
|
||||||
"basic056", "basic057", "basic058", "basic059", "basic060",
|
"basic056", "basic057", "basic058", "basic059", "basic060",
|
||||||
"basic061"]
|
"basic061"]
|
||||||
|
|
||||||
idrisTestsCoverage : TestPool
|
idrisTestsCoverage : TestPool
|
||||||
idrisTestsCoverage = MkTestPool "Coverage checking" []
|
idrisTestsCoverage = MkTestPool "Coverage checking" [] Nothing
|
||||||
-- Coverage checking
|
-- Coverage checking
|
||||||
["coverage001", "coverage002", "coverage003", "coverage004",
|
["coverage001", "coverage002", "coverage003", "coverage004",
|
||||||
"coverage005", "coverage006", "coverage007", "coverage008",
|
"coverage005", "coverage006", "coverage007", "coverage008",
|
||||||
@ -49,16 +49,16 @@ idrisTestsCoverage = MkTestPool "Coverage checking" []
|
|||||||
"coverage017"]
|
"coverage017"]
|
||||||
|
|
||||||
idrisTestsCasetree : TestPool
|
idrisTestsCasetree : TestPool
|
||||||
idrisTestsCasetree = MkTestPool "Case tree building" []
|
idrisTestsCasetree = MkTestPool "Case tree building" [] Nothing
|
||||||
-- Case tree building
|
-- Case tree building
|
||||||
["casetree001"]
|
["casetree001"]
|
||||||
|
|
||||||
idrisTestsWarning : TestPool
|
idrisTestsWarning : TestPool
|
||||||
idrisTestsWarning = MkTestPool "Warnings" []
|
idrisTestsWarning = MkTestPool "Warnings" [] Nothing
|
||||||
["warning001"]
|
["warning001"]
|
||||||
|
|
||||||
idrisTestsError : TestPool
|
idrisTestsError : TestPool
|
||||||
idrisTestsError = MkTestPool "Error messages" []
|
idrisTestsError = MkTestPool "Error messages" [] Nothing
|
||||||
-- Error messages
|
-- Error messages
|
||||||
["error001", "error002", "error003", "error004", "error005",
|
["error001", "error002", "error003", "error004", "error005",
|
||||||
"error006", "error007", "error008", "error009", "error010",
|
"error006", "error007", "error008", "error009", "error010",
|
||||||
@ -69,7 +69,7 @@ idrisTestsError = MkTestPool "Error messages" []
|
|||||||
"perror006", "perror007", "perror008"]
|
"perror006", "perror007", "perror008"]
|
||||||
|
|
||||||
idrisTestsInteractive : TestPool
|
idrisTestsInteractive : TestPool
|
||||||
idrisTestsInteractive = MkTestPool "Interactive editing" []
|
idrisTestsInteractive = MkTestPool "Interactive editing" [] Nothing
|
||||||
-- Interactive editing support
|
-- Interactive editing support
|
||||||
["interactive001", "interactive002", "interactive003", "interactive004",
|
["interactive001", "interactive002", "interactive003", "interactive004",
|
||||||
"interactive005", "interactive006", "interactive007", "interactive008",
|
"interactive005", "interactive006", "interactive007", "interactive008",
|
||||||
@ -82,7 +82,7 @@ idrisTestsInteractive = MkTestPool "Interactive editing" []
|
|||||||
"interactive033"]
|
"interactive033"]
|
||||||
|
|
||||||
idrisTestsInterface : TestPool
|
idrisTestsInterface : TestPool
|
||||||
idrisTestsInterface = MkTestPool "Interface" []
|
idrisTestsInterface = MkTestPool "Interface" [] Nothing
|
||||||
-- Interfaces
|
-- Interfaces
|
||||||
["interface001", "interface002", "interface003", "interface004",
|
["interface001", "interface002", "interface003", "interface004",
|
||||||
"interface005", "interface006", "interface007", "interface008",
|
"interface005", "interface006", "interface007", "interface008",
|
||||||
@ -93,7 +93,7 @@ idrisTestsInterface = MkTestPool "Interface" []
|
|||||||
"interface025"]
|
"interface025"]
|
||||||
|
|
||||||
idrisTestsLinear : TestPool
|
idrisTestsLinear : TestPool
|
||||||
idrisTestsLinear = MkTestPool "Quantities" []
|
idrisTestsLinear = MkTestPool "Quantities" [] Nothing
|
||||||
-- QTT and linearity related
|
-- QTT and linearity related
|
||||||
["linear001", "linear002", "linear003", -- "linear004" -- disabled due to requiring linearity subtyping
|
["linear001", "linear002", "linear003", -- "linear004" -- disabled due to requiring linearity subtyping
|
||||||
"linear005", "linear006", "linear007", "linear008",
|
"linear005", "linear006", "linear007", "linear008",
|
||||||
@ -101,7 +101,7 @@ idrisTestsLinear = MkTestPool "Quantities" []
|
|||||||
"linear013", "linear014"]
|
"linear013", "linear014"]
|
||||||
|
|
||||||
idrisTestsLiterate : TestPool
|
idrisTestsLiterate : TestPool
|
||||||
idrisTestsLiterate = MkTestPool "Literate programming" []
|
idrisTestsLiterate = MkTestPool "Literate programming" [] Nothing
|
||||||
-- Literate
|
-- Literate
|
||||||
["literate001", "literate002", "literate003", "literate004",
|
["literate001", "literate002", "literate003", "literate004",
|
||||||
"literate005", "literate006", "literate007", "literate008",
|
"literate005", "literate006", "literate007", "literate008",
|
||||||
@ -109,14 +109,14 @@ idrisTestsLiterate = MkTestPool "Literate programming" []
|
|||||||
"literate013", "literate014", "literate015", "literate016"]
|
"literate013", "literate014", "literate015", "literate016"]
|
||||||
|
|
||||||
idrisTestsPerformance : TestPool
|
idrisTestsPerformance : TestPool
|
||||||
idrisTestsPerformance = MkTestPool "Performance" []
|
idrisTestsPerformance = MkTestPool "Performance" [] Nothing
|
||||||
-- Performance: things which have been slow in the past, or which
|
-- Performance: things which have been slow in the past, or which
|
||||||
-- pose interesting challenges for the elaborator
|
-- pose interesting challenges for the elaborator
|
||||||
["perf001", "perf002", "perf003", "perf004", "perf005", "perf006",
|
["perf001", "perf002", "perf003", "perf004", "perf005",
|
||||||
"perf007", "perf008"]
|
"perf007", "perf008"]
|
||||||
|
|
||||||
idrisTestsRegression : TestPool
|
idrisTestsRegression : TestPool
|
||||||
idrisTestsRegression = MkTestPool "Various regressions" []
|
idrisTestsRegression = MkTestPool "Various regressions" [] Nothing
|
||||||
-- Miscellaneous regressions
|
-- Miscellaneous regressions
|
||||||
["reg001", "reg002", "reg003", "reg004", "reg005", "reg006", "reg007",
|
["reg001", "reg002", "reg003", "reg004", "reg005", "reg006", "reg007",
|
||||||
"reg008", "reg009", "reg010", "reg011", "reg012", "reg013", "reg014",
|
"reg008", "reg009", "reg010", "reg011", "reg012", "reg013", "reg014",
|
||||||
@ -126,7 +126,7 @@ idrisTestsRegression = MkTestPool "Various regressions" []
|
|||||||
"reg036", "reg037", "reg038", "reg039", "reg040", "reg041", "reg042"]
|
"reg036", "reg037", "reg038", "reg039", "reg040", "reg041", "reg042"]
|
||||||
|
|
||||||
idrisTestsData : TestPool
|
idrisTestsData : TestPool
|
||||||
idrisTestsData = MkTestPool "Data and record types" []
|
idrisTestsData = MkTestPool "Data and record types" [] Nothing
|
||||||
[-- Data types
|
[-- Data types
|
||||||
"data001",
|
"data001",
|
||||||
-- Records, access and dependent update
|
-- Records, access and dependent update
|
||||||
@ -134,25 +134,34 @@ idrisTestsData = MkTestPool "Data and record types" []
|
|||||||
"record006", "record007", "record008"]
|
"record006", "record007", "record008"]
|
||||||
|
|
||||||
idrisTestsBuiltin : TestPool
|
idrisTestsBuiltin : TestPool
|
||||||
idrisTestsBuiltin = MkTestPool "Builtin types and functions" []
|
idrisTestsBuiltin = MkTestPool "Builtin types and functions" [] Nothing
|
||||||
-- %builtin related tests for the frontend (type-checking)
|
-- %builtin related tests for the frontend (type-checking)
|
||||||
["builtin001", "builtin002", "builtin003", "builtin004", "builtin005",
|
["builtin001", "builtin002", "builtin003", "builtin004", "builtin005",
|
||||||
"builtin006", "builtin007", "builtin008", "builtin009", "builtin010",
|
"builtin006", "builtin007", "builtin008", "builtin009", "builtin010",
|
||||||
"builtin011"]
|
"builtin011"]
|
||||||
|
|
||||||
idrisTestsEvaluator : TestPool
|
idrisTestsEvaluator : TestPool
|
||||||
idrisTestsEvaluator = MkTestPool "Evaluation" []
|
idrisTestsEvaluator = MkTestPool "Evaluation" [] Nothing
|
||||||
[ -- Evaluator
|
[ -- Evaluator
|
||||||
"evaluator001", "evaluator002", "evaluator003", "evaluator004",
|
"evaluator001", "evaluator002", "evaluator003",
|
||||||
-- Unfortunately the behaviour of Double is platform dependent so the
|
|
||||||
-- following test is turned off.
|
|
||||||
-- "evaluator005",
|
|
||||||
-- Miscellaneous REPL
|
-- Miscellaneous REPL
|
||||||
"interpreter001", "interpreter002", "interpreter003", "interpreter004",
|
"interpreter001", "interpreter002", "interpreter003", "interpreter004",
|
||||||
"interpreter005", "interpreter006", "interpreter007"]
|
"interpreter005", "interpreter006", "interpreter007"]
|
||||||
|
|
||||||
|
idrisTestsAllBackends : Requirement -> TestPool
|
||||||
|
idrisTestsAllBackends cg = MkTestPool
|
||||||
|
("Test across all backends: " ++ show cg ++ " instance")
|
||||||
|
[] (Just cg)
|
||||||
|
[ -- Evaluator
|
||||||
|
"evaluator004",
|
||||||
|
-- Unfortunately the behaviour of Double is platform dependent so the
|
||||||
|
-- following test is turned off.
|
||||||
|
-- "evaluator005",
|
||||||
|
"basic048",
|
||||||
|
"perf006"]
|
||||||
|
|
||||||
idrisTests : TestPool
|
idrisTests : TestPool
|
||||||
idrisTests = MkTestPool "Misc" []
|
idrisTests = MkTestPool "Misc" [] Nothing
|
||||||
-- Documentation strings
|
-- Documentation strings
|
||||||
["docs001", "docs002", "docs003",
|
["docs001", "docs002", "docs003",
|
||||||
-- Eta equality
|
-- Eta equality
|
||||||
@ -188,14 +197,14 @@ idrisTests = MkTestPool "Misc" []
|
|||||||
"pretty001"]
|
"pretty001"]
|
||||||
|
|
||||||
typeddTests : TestPool
|
typeddTests : TestPool
|
||||||
typeddTests = MkTestPool "Type Driven Development" []
|
typeddTests = MkTestPool "Type Driven Development" [] Nothing
|
||||||
[ "chapter01", "chapter02", "chapter03", "chapter04", "chapter05"
|
[ "chapter01", "chapter02", "chapter03", "chapter04", "chapter05"
|
||||||
, "chapter06", "chapter07", "chapter08", "chapter09", "chapter10"
|
, "chapter06", "chapter07", "chapter08", "chapter09", "chapter10"
|
||||||
, "chapter11", "chapter12", "chapter13", "chapter14"
|
, "chapter11", "chapter12", "chapter13", "chapter14"
|
||||||
]
|
]
|
||||||
|
|
||||||
chezTests : TestPool
|
chezTests : TestPool
|
||||||
chezTests = MkTestPool "Chez backend" [Chez]
|
chezTests = MkTestPool "Chez backend" [] (Just Chez)
|
||||||
[ "chez001", "chez002", "chez003", "chez004", "chez005", "chez006"
|
[ "chez001", "chez002", "chez003", "chez004", "chez005", "chez006"
|
||||||
, "chez007", "chez008", "chez009", "chez010", "chez011", "chez012"
|
, "chez007", "chez008", "chez009", "chez010", "chez011", "chez012"
|
||||||
, "chez013", "chez014", "chez015", "chez016", "chez017", "chez018"
|
, "chez013", "chez014", "chez015", "chez016", "chez017", "chez018"
|
||||||
@ -214,14 +223,14 @@ chezTests = MkTestPool "Chez backend" [Chez]
|
|||||||
]
|
]
|
||||||
|
|
||||||
refcTests : TestPool
|
refcTests : TestPool
|
||||||
refcTests = MkTestPool "Reference counting C backend" [C]
|
refcTests = MkTestPool "Reference counting C backend" [] (Just C)
|
||||||
[ "refc001" , "refc002"
|
[ "refc001" , "refc002"
|
||||||
, "strings", "integers", "doubles"
|
, "strings", "integers", "doubles"
|
||||||
, "buffer", "clock", "args"
|
, "buffer", "clock", "args"
|
||||||
]
|
]
|
||||||
|
|
||||||
racketTests : TestPool
|
racketTests : TestPool
|
||||||
racketTests = MkTestPool "Racket backend" [Racket]
|
racketTests = MkTestPool "Racket backend" [] (Just Racket)
|
||||||
[ "forkjoin001"
|
[ "forkjoin001"
|
||||||
, "semaphores001", "semaphores002"
|
, "semaphores001", "semaphores002"
|
||||||
, "futures001"
|
, "futures001"
|
||||||
@ -236,7 +245,7 @@ racketTests = MkTestPool "Racket backend" [Racket]
|
|||||||
]
|
]
|
||||||
|
|
||||||
nodeTests : TestPool
|
nodeTests : TestPool
|
||||||
nodeTests = MkTestPool "Node backend" [Node]
|
nodeTests = MkTestPool "Node backend" [] (Just Node)
|
||||||
[ "node001", "node002", "node003", "node004", "node005", "node006"
|
[ "node001", "node002", "node003", "node004", "node005", "node006"
|
||||||
, "node007", "node008", "node009", "node011", "node012", "node015"
|
, "node007", "node008", "node009", "node011", "node012", "node015"
|
||||||
, "node017", "node018", "node019", "node021", "node022", "node023"
|
, "node017", "node018", "node019", "node021", "node022", "node023"
|
||||||
@ -255,17 +264,17 @@ nodeTests = MkTestPool "Node backend" [Node]
|
|||||||
]
|
]
|
||||||
|
|
||||||
ideModeTests : TestPool
|
ideModeTests : TestPool
|
||||||
ideModeTests = MkTestPool "IDE mode" []
|
ideModeTests = MkTestPool "IDE mode" [] Nothing
|
||||||
[ "ideMode001", "ideMode002", "ideMode003", "ideMode004", "ideMode005"
|
[ "ideMode001", "ideMode002", "ideMode003", "ideMode004", "ideMode005"
|
||||||
]
|
]
|
||||||
|
|
||||||
preludeTests : TestPool
|
preludeTests : TestPool
|
||||||
preludeTests = MkTestPool "Prelude library" []
|
preludeTests = MkTestPool "Prelude library" [] Nothing
|
||||||
[ "reg001"
|
[ "reg001"
|
||||||
]
|
]
|
||||||
|
|
||||||
templateTests : TestPool
|
templateTests : TestPool
|
||||||
templateTests = MkTestPool "Test templates" []
|
templateTests = MkTestPool "Test templates" [] Nothing
|
||||||
[ "simple-test", "ttimp", "with-ipkg"
|
[ "simple-test", "ttimp", "with-ipkg"
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -275,7 +284,7 @@ templateTests = MkTestPool "Test templates" []
|
|||||||
-- that only runs if all backends are
|
-- that only runs if all backends are
|
||||||
-- available.
|
-- available.
|
||||||
baseLibraryTests : TestPool
|
baseLibraryTests : TestPool
|
||||||
baseLibraryTests = MkTestPool "Base library" [Chez, Node]
|
baseLibraryTests = MkTestPool "Base library" [Chez, Node] Nothing
|
||||||
[ "system_file001"
|
[ "system_file001"
|
||||||
, "data_bits001"
|
, "data_bits001"
|
||||||
, "system_info001"
|
, "system_info001"
|
||||||
@ -284,18 +293,18 @@ baseLibraryTests = MkTestPool "Base library" [Chez, Node]
|
|||||||
|
|
||||||
-- same behavior as `baseLibraryTests`
|
-- same behavior as `baseLibraryTests`
|
||||||
contribLibraryTests : TestPool
|
contribLibraryTests : TestPool
|
||||||
contribLibraryTests = MkTestPool "Contrib library" [Chez, Node]
|
contribLibraryTests = MkTestPool "Contrib library" [Chez, Node] Nothing
|
||||||
[ "json_001"
|
[ "json_001"
|
||||||
]
|
]
|
||||||
|
|
||||||
codegenTests : TestPool
|
codegenTests : TestPool
|
||||||
codegenTests = MkTestPool "Code generation" []
|
codegenTests = MkTestPool "Code generation" [] Nothing
|
||||||
[ "con001"
|
[ "con001"
|
||||||
, "builtin001"
|
, "builtin001"
|
||||||
]
|
]
|
||||||
|
|
||||||
main : IO ()
|
main : IO ()
|
||||||
main = runner
|
main = runner $
|
||||||
[ testPaths "ttimp" ttimpTests
|
[ testPaths "ttimp" ttimpTests
|
||||||
, testPaths "idris2" idrisTestsBasic
|
, testPaths "idris2" idrisTestsBasic
|
||||||
, testPaths "idris2" idrisTestsCoverage
|
, testPaths "idris2" idrisTestsCoverage
|
||||||
@ -323,7 +332,11 @@ main = runner
|
|||||||
, testPaths "node" nodeTests
|
, testPaths "node" nodeTests
|
||||||
, testPaths "templates" templateTests
|
, testPaths "templates" templateTests
|
||||||
, testPaths "codegen" codegenTests
|
, testPaths "codegen" codegenTests
|
||||||
] where
|
]
|
||||||
|
++ map (testPaths "allbackends" . idrisTestsAllBackends) [Chez, Node, Racket]
|
||||||
|
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
testPaths : String -> TestPool -> TestPool
|
testPaths : String -> TestPool -> TestPool
|
||||||
testPaths dir = record { testCases $= map ((dir ++ "/") ++) }
|
testPaths dir = record { testCases $= map ((dir ++ "/") ++) }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
$1 --no-banner --no-color --console-width 0 "Module'.idr" < input
|
$1 --no-banner --no-color --console-width 0 "Module'.idr" < input
|
||||||
$1 --exec main --cg ${IDRIS2_TESTS_CG} "Module'.idr"
|
$1 --exec main "Module'.idr"
|
||||||
EDITOR=true $1 --no-banner --no-color --console-width 0 "Module'.idr" < input-ed
|
EDITOR=true $1 --no-banner --no-color --console-width 0 "Module'.idr" < input-ed
|
||||||
|
|
||||||
rm -rf build
|
rm -rf build
|
@ -1,4 +1,4 @@
|
|||||||
$1 --no-banner --no-color --console-width 0 Issue735.idr < input
|
$1 --no-banner --no-color --console-width 0 Issue735.idr < input
|
||||||
$1 --exec main --cg ${IDRIS2_TESTS_CG} Issue735.idr
|
$1 --exec main Issue735.idr
|
||||||
|
|
||||||
rm -rf build
|
rm -rf build
|
3
tests/allbackends/evaluator005/run
Normal file
3
tests/allbackends/evaluator005/run
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
$1 --exec main Issue1200.idr
|
||||||
|
|
||||||
|
rm -rf build
|
3
tests/allbackends/perf006/run
Normal file
3
tests/allbackends/perf006/run
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
$1 --exec main Issue775.idr
|
||||||
|
|
||||||
|
rm -rf build
|
@ -1,12 +1,4 @@
|
|||||||
# This test needs to run `idris2` from a sub-folder. Get the absolute path.
|
|
||||||
|
|
||||||
if [ "$(uname)" = Darwin ]; then
|
|
||||||
IDRIS2_EXEC=$(zsh -c 'printf %s "$0:A"' "$1")
|
|
||||||
else
|
|
||||||
IDRIS2_EXEC="$(readlink -f -- "$1")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd "folder with spaces" || exit
|
cd "folder with spaces" || exit
|
||||||
|
|
||||||
"$IDRIS2_EXEC" --no-color --console-width 0 --no-banner Main.idr < ../input
|
$1 --no-color --console-width 0 --no-banner Main.idr < ../input
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
$1 --no-color --console-width 0 --no-banner Test.idr -o test
|
$1 --no-color --console-width 0 --no-banner --exec main Test.idr
|
||||||
|
|
||||||
./build/exec/test
|
|
||||||
|
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
$1 --no-color --console-width 0 --no-banner Test.idr -o test
|
$1 --no-color --console-width 0 --no-banner --exec main Test.idr
|
||||||
|
|
||||||
./build/exec/test
|
|
||||||
|
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
$1 --exec main --cg ${IDRIS2_TESTS_CG} Issue1200.idr
|
|
||||||
|
|
||||||
rm -rf build
|
|
@ -1,3 +0,0 @@
|
|||||||
$1 --exec main --cg ${IDRIS2_TESTS_CG} Issue775.idr
|
|
||||||
|
|
||||||
rm -rf build
|
|
Loading…
Reference in New Issue
Block a user