Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / compilers / idris2 / tests.nix
blob54bb6d29eeef0e68e33ec84a9c5ae7c41106095b
1 { stdenv, lib, pname, idris2, zsh }:
3 let
4   testCompileAndRun = {testName, code, want, packages ? []}: let
5       packageString = builtins.concatStringsSep " " (map (p: "--package " + p) packages);
6     in stdenv.mkDerivation {
7       name = "${pname}-${testName}";
8       meta.timeout = 60;
10       # with idris2 compiled binaries assume zsh is available on darwin, but that
11       # is not the case with pure nix environments. Thus, we need to include zsh
12       # when we build for darwin in tests. While this is impure, this is also what
13       # we find in real darwin hosts.
14       nativeBuildInputs = lib.optionals stdenv.isDarwin [ zsh ];
16       buildCommand = ''
17         set -eo pipefail
19         cat > packageTest.idr <<HERE
20         ${code}
21         HERE
23         ${idris2}/bin/idris2 ${packageString} -o packageTest packageTest.idr
25         GOT=$(./build/exec/packageTest)
27         if [ "$GOT" = "${want}" ]; then
28           echo "${testName} SUCCESS: '$GOT' = '${want}'"
29         else
30           >&2 echo "Got '$GOT', want: '${want}'"
31           exit 1
32         fi
34         touch $out
35       '';
36     };
37 in {
38   # Simple hello world compiles, runs and outputs as expected
39   hello-world = testCompileAndRun {
40     testName = "hello-world";
41     code = ''
42       module Main
44       main : IO ()
45       main = putStrLn "Hello World!"
46     '';
47     want = "Hello World!";
48   };
50   # Data.Vect.Sort is available via --package contrib
51   use-contrib = testCompileAndRun {
52     testName = "use-contrib";
53     packages = [ "contrib" ];
54     code = ''
55       module Main
57       import Data.Vect
58       import Data.Vect.Sort  -- from contrib
60       vect : Vect 3 Int
61       vect = 3 :: 1 :: 5 :: Nil
63       main : IO ()
64       main = putStrLn $ show (sort vect)
65     '';
66     want = "[1, 3, 5]";
67   };