mirror of
https://github.com/edwinb/Idris2-boot.git
synced 2024-12-25 22:06:33 +03:00
Add first Idris2 tests
This commit is contained in:
parent
94cc2a0d4c
commit
07229bdb5e
@ -118,7 +118,7 @@ modules =
|
|||||||
sourcedir = src
|
sourcedir = src
|
||||||
executable = idris2
|
executable = idris2
|
||||||
-- opts = "--cg-opt -O2 --partial-eval"
|
-- opts = "--cg-opt -O2 --partial-eval"
|
||||||
opts = "--cg-opt -g --partial-eval --dumpdefuns idris2.dc"
|
opts = "--cg-opt -g --partial-eval"
|
||||||
|
|
||||||
main = Idris.Main
|
main = Idris.Main
|
||||||
|
|
||||||
|
@ -65,7 +65,6 @@ getNameRefs gam
|
|||||||
addToMap arr (n, i)
|
addToMap arr (n, i)
|
||||||
= coreLift $ writeArray arr i (n, Nothing)
|
= coreLift $ writeArray arr i (n, Nothing)
|
||||||
|
|
||||||
|
|
||||||
initSize : Int
|
initSize : Int
|
||||||
initSize = 10000
|
initSize = 10000
|
||||||
|
|
||||||
@ -686,10 +685,16 @@ export
|
|||||||
commit : {auto c : Ref Ctxt Defs} ->
|
commit : {auto c : Ref Ctxt Defs} ->
|
||||||
Core ()
|
Core ()
|
||||||
commit
|
commit
|
||||||
= do ctxt <- get Ctxt
|
= do defs <- get Ctxt
|
||||||
gam' <- commitCtxt (gamma ctxt)
|
gam' <- commitCtxt (gamma defs)
|
||||||
setCtxt gam'
|
setCtxt gam'
|
||||||
|
|
||||||
|
export
|
||||||
|
depth : {auto c : Ref Ctxt Defs} ->
|
||||||
|
Core Nat
|
||||||
|
depth
|
||||||
|
= do defs <- get Ctxt
|
||||||
|
pure (branchDepth (gamma defs))
|
||||||
|
|
||||||
-- Get the names to save. These are the ones explicitly noted, and the
|
-- Get the names to save. These are the ones explicitly noted, and the
|
||||||
-- ones between firstEntry and nextEntry (which are the names introduced in
|
-- ones between firstEntry and nextEntry (which are the names introduced in
|
||||||
|
@ -126,6 +126,7 @@ convertErrorS s loc env x y
|
|||||||
= if s then convertError loc env y x
|
= if s then convertError loc env y x
|
||||||
else convertError loc env x y
|
else convertError loc env x y
|
||||||
|
|
||||||
|
export
|
||||||
postpone : {auto c : Ref Ctxt Defs} ->
|
postpone : {auto c : Ref Ctxt Defs} ->
|
||||||
{auto u : Ref UST UState} ->
|
{auto u : Ref UST UState} ->
|
||||||
FC -> String -> Env Term vars -> NF vars -> NF vars -> Core UnifyResult
|
FC -> String -> Env Term vars -> NF vars -> NF vars -> Core UnifyResult
|
||||||
|
@ -504,10 +504,14 @@ checkValidHole (idx, (fc, n))
|
|||||||
case c of
|
case c of
|
||||||
MkConstraint fc env x y =>
|
MkConstraint fc env x y =>
|
||||||
do put UST (record { guesses = empty } ust)
|
do put UST (record { guesses = empty } ust)
|
||||||
throw (CantSolveEq fc env x y)
|
xnf <- normaliseHoles defs env x
|
||||||
|
ynf <- normaliseHoles defs env y
|
||||||
|
throw (CantSolveEq fc env xnf ynf)
|
||||||
MkSeqConstraint fc env (x :: _) (y :: _) =>
|
MkSeqConstraint fc env (x :: _) (y :: _) =>
|
||||||
do put UST (record { guesses = empty } ust)
|
do put UST (record { guesses = empty } ust)
|
||||||
throw (CantSolveEq fc env x y)
|
xnf <- normaliseHoles defs env x
|
||||||
|
ynf <- normaliseHoles defs env y
|
||||||
|
throw (CantSolveEq fc env xnf ynf)
|
||||||
_ => pure ()
|
_ => pure ()
|
||||||
_ => traverse_ checkRef (map fst (toList (getRefs (type gdef))))
|
_ => traverse_ checkRef (map fst (toList (getRefs (type gdef))))
|
||||||
where
|
where
|
||||||
|
@ -547,7 +547,7 @@ processCatch cmd
|
|||||||
put UST u'
|
put UST u'
|
||||||
put Syn s'
|
put Syn s'
|
||||||
put ROpts o'
|
put ROpts o'
|
||||||
coreLift (putStrLn !(perror err))
|
coreLift (putStrLn !(display err))
|
||||||
pure True)
|
pure True)
|
||||||
|
|
||||||
parseRepl : String -> Either ParseError REPLCmd
|
parseRepl : String -> Either ParseError REPLCmd
|
||||||
|
@ -485,7 +485,8 @@ convert fc elabinfo env x y
|
|||||||
= case elabMode elabinfo of
|
= case elabMode elabinfo of
|
||||||
InLHS _ => InLHS
|
InLHS _ => InLHS
|
||||||
_ => InTerm in
|
_ => InTerm in
|
||||||
catch (do logGlueNF 5 "Unifying" env x
|
catch
|
||||||
|
(do logGlueNF 5 "Unifying" env x
|
||||||
logGlueNF 5 "....with" env y
|
logGlueNF 5 "....with" env y
|
||||||
vs <- if isFromTerm x && isFromTerm y
|
vs <- if isFromTerm x && isFromTerm y
|
||||||
then do xtm <- getTerm x
|
then do xtm <- getTerm x
|
||||||
@ -497,7 +498,8 @@ convert fc elabinfo env x y
|
|||||||
when (holesSolved vs) $
|
when (holesSolved vs) $
|
||||||
solveConstraints umode Normal
|
solveConstraints umode Normal
|
||||||
pure vs)
|
pure vs)
|
||||||
(\err => do defs <- get Ctxt
|
(\err =>
|
||||||
|
do defs <- get Ctxt
|
||||||
xtm <- getTerm x
|
xtm <- getTerm x
|
||||||
ytm <- getTerm y
|
ytm <- getTerm y
|
||||||
-- See if we can improve the error message by
|
-- See if we can improve the error message by
|
||||||
@ -507,6 +509,7 @@ convert fc elabinfo env x y
|
|||||||
-- We need to normalise the known holes before
|
-- We need to normalise the known holes before
|
||||||
-- throwing because they may no longer be known
|
-- throwing because they may no longer be known
|
||||||
-- by the time we look at the error
|
-- by the time we look at the error
|
||||||
|
defs <- get Ctxt
|
||||||
throw (WhenUnifying fc env
|
throw (WhenUnifying fc env
|
||||||
!(normaliseHoles defs env xtm)
|
!(normaliseHoles defs env xtm)
|
||||||
!(normaliseHoles defs env ytm) err))
|
!(normaliseHoles defs env ytm) err))
|
||||||
|
@ -23,7 +23,8 @@ ttimpTests
|
|||||||
|
|
||||||
idrisTests : List String
|
idrisTests : List String
|
||||||
idrisTests
|
idrisTests
|
||||||
= ["basic001"]
|
= ["basic001",
|
||||||
|
"import001"]
|
||||||
|
|
||||||
chdir : String -> IO Bool
|
chdir : String -> IO Bool
|
||||||
chdir dir
|
chdir dir
|
||||||
@ -54,11 +55,11 @@ runTest dir prog test
|
|||||||
|
|
||||||
main : IO ()
|
main : IO ()
|
||||||
main
|
main
|
||||||
= do [_, ttimp] <- getArgs
|
= do [_, idris2] <- getArgs
|
||||||
| _ => do putStrLn "Usage: runtests [ttimp path]"
|
| _ => do putStrLn "Usage: runtests [ttimp path]"
|
||||||
ttimps <- traverse (runTest "ttimp" ttimp) ttimpTests
|
ttimps <- traverse (runTest "ttimp" idris2) ttimpTests
|
||||||
-- blods <- traverse (runTest "blodwen" blodwen) blodwenTests
|
idrs <- traverse (runTest "idris2" idris2) idrisTests
|
||||||
if (any not ttimps)
|
if (any not (ttimps ++ idrs))
|
||||||
then exitWith (ExitFailure 1)
|
then exitWith (ExitFailure 1)
|
||||||
else exitWith ExitSuccess
|
else exitWith ExitSuccess
|
||||||
|
|
||||||
|
34
tests/idris2/basic001/Vect.idr
Normal file
34
tests/idris2/basic001/Vect.idr
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
data Nat = Z | S Nat
|
||||||
|
|
||||||
|
plus : Nat -> Nat -> Nat
|
||||||
|
plus Z y = y
|
||||||
|
plus (S k) y = S (plus k y)
|
||||||
|
|
||||||
|
data Vect : Nat -> Type -> Type where
|
||||||
|
Nil : Vect Z a
|
||||||
|
Cons : a -> Vect k a -> Vect (S k) a
|
||||||
|
|
||||||
|
foldl : (0 b : Nat -> Type) ->
|
||||||
|
({k : Nat} -> b k -> a -> b (S k)) ->
|
||||||
|
b Z ->
|
||||||
|
Vect n a -> b n
|
||||||
|
foldl b g z Nil = z
|
||||||
|
foldl b g z (Cons x xs) = foldl (\i => b (S i)) g (g z x) xs
|
||||||
|
|
||||||
|
reverse : Vect n a -> Vect n a
|
||||||
|
reverse
|
||||||
|
= foldl (\m => Vect m a)
|
||||||
|
(\rev => \x => Cons x rev) Nil
|
||||||
|
|
||||||
|
append : Vect n a -> Vect m a -> Vect (plus n m) a
|
||||||
|
append Nil ys = ys
|
||||||
|
append (Cons x xs) ys = Cons x (append xs ys)
|
||||||
|
|
||||||
|
vlength : (n : Nat) -> Vect n a -> Nat
|
||||||
|
vlength Z Nil = Z
|
||||||
|
vlength n@_ (Cons x xs) = n -- (vlength _ xs);
|
||||||
|
|
||||||
|
zipWith : (a -> b -> c) -> Vect n a -> Vect n b -> Vect n c
|
||||||
|
zipWith f Nil Nil = Nil
|
||||||
|
-- zipWith f (Cons x xs) Nil impossible
|
||||||
|
zipWith f (Cons x xs) (Cons y ys) = Cons (f x y) (zipWith f xs ys)
|
9
tests/idris2/basic001/expected
Normal file
9
tests/idris2/basic001/expected
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
1/1: Building Vect (Vect.idr)
|
||||||
|
Welcome to Idris 2 version 0.0. Fingers crossed!
|
||||||
|
Main> Main> Cons (S Z) (Cons (S (S Z)) []) : Vect (S (S Z)) Nat
|
||||||
|
Main> (interactive):1:22--1:25:When unifying Vect Z ?a and Vect (S Z) ?a
|
||||||
|
Mismatch between:
|
||||||
|
Z
|
||||||
|
and
|
||||||
|
S Z
|
||||||
|
Main> Bye for now!
|
4
tests/idris2/basic001/input
Normal file
4
tests/idris2/basic001/input
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
:set showtypes
|
||||||
|
zipWith plus (Cons Z (Cons (S Z) Nil)) (Cons (S Z) (Cons (S Z) Nil))
|
||||||
|
zipWith plus (Cons Z Nil) (Cons (S Z) (Cons Z Nil))
|
||||||
|
:q
|
3
tests/idris2/basic001/run
Executable file
3
tests/idris2/basic001/run
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
$1 --no-prelude Vect.idr < input
|
||||||
|
|
||||||
|
rm -rf build
|
8
tests/idris2/import001/Mult.idr
Normal file
8
tests/idris2/import001/Mult.idr
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module Mult
|
||||||
|
|
||||||
|
import public Nat
|
||||||
|
|
||||||
|
public export
|
||||||
|
mult : Nat -> Nat -> Nat
|
||||||
|
mult Z y = Z
|
||||||
|
mult (S k) y = plus y (mult k y)
|
10
tests/idris2/import001/Nat.idr
Normal file
10
tests/idris2/import001/Nat.idr
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
module Nat
|
||||||
|
|
||||||
|
public export
|
||||||
|
data Nat = Z | S Nat
|
||||||
|
|
||||||
|
public export
|
||||||
|
plus : Nat -> Nat -> Nat
|
||||||
|
plus Z y = y
|
||||||
|
plus (S k) y = S (plus k y)
|
||||||
|
|
7
tests/idris2/import001/Test.idr
Normal file
7
tests/idris2/import001/Test.idr
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
module Test
|
||||||
|
|
||||||
|
import Mult
|
||||||
|
|
||||||
|
thing : Nat -> Nat
|
||||||
|
thing x = mult x (plus x x)
|
||||||
|
|
10
tests/idris2/import001/expected
Normal file
10
tests/idris2/import001/expected
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
1/3: Building Nat (Nat.idr)
|
||||||
|
2/3: Building Mult (Mult.idr)
|
||||||
|
3/3: Building Test (Test.idr)
|
||||||
|
Welcome to Idris 2 version 0.0. Fingers crossed!
|
||||||
|
Test> S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S Z)))))))))))))))))
|
||||||
|
Test> Bye for now!
|
||||||
|
2/3: Building Mult (Mult.idr)
|
||||||
|
Welcome to Idris 2 version 0.0. Fingers crossed!
|
||||||
|
Test> S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S Z)))))))))))))))))
|
||||||
|
Test> Bye for now!
|
2
tests/idris2/import001/input
Normal file
2
tests/idris2/import001/input
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
thing (S (S (S Z)))
|
||||||
|
:q
|
6
tests/idris2/import001/run
Executable file
6
tests/idris2/import001/run
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
$1 --no-prelude Test.idr < input
|
||||||
|
sleep 1
|
||||||
|
touch Mult.idr
|
||||||
|
$1 --no-prelude Test.idr < input
|
||||||
|
|
||||||
|
rm -rf build
|
Loading…
Reference in New Issue
Block a user