summary refs log tree commit diff
path: root/pkgs/applications/science/math/sage/sage-tests.nix
blob: 451edb8f085ebfb3c270d2903968dcaf62605a00 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
{ stdenv
, lib
, sage-with-env
, makeWrapper
, files ? null # "null" means run all tests
, longTests ? true # run tests marked as "long time" (roughly doubles runtime)
# Run as many tests as possible in approximately n seconds. This will give each
# file to test a "time budget" and stop tests if it is exceeded. 300 is the
# upstream default value.
# https://trac.sagemath.org/ticket/25270 for details.
, timeLimit ? null
}:

# for a quick test of some source files:
# nix-build -E 'with (import ./. {}); sage.tests.override { files = [ "src/sage/misc/cython.py" ];}'

let
  src = sage-with-env.env.lib.src;
  runAllTests = files == null;
  testArgs = if runAllTests then "--all" else testFileList;
  patienceSpecifier = if longTests then "--long" else "";
  timeSpecifier = if timeLimit == null then "" else "--short ${toString timeLimit}";
  relpathToArg = relpath: lib.escapeShellArg "${src}/${relpath}"; # paths need to be absolute
  testFileList = lib.concatStringsSep " " (map relpathToArg files);
in
stdenv.mkDerivation {
  version = src.version;
  pname = "sage-tests";
  inherit src;

  buildInputs = [
    makeWrapper
    sage-with-env
  ];

  dontUnpack = true;
  configurePhase = "#do nothing";
  buildPhase = "#do nothing";

  installPhase = ''
    # This output is not actually needed for anything, the package just
    # exists to decouple the sage build from its t ests.

    mkdir -p "$out/bin"
    # Like a symlink, but make sure that $0 points to the original.
    makeWrapper "${sage-with-env}/bin/sage" "$out/bin/sage"
  '';

  doInstallCheck = true;
  installCheckPhase = ''
    export HOME="$TMPDIR/sage-home"
    mkdir -p "$HOME"

    # avoid running out of memory with many threads in subprocesses, see
    # https://github.com/NixOS/nixpkgs/pull/65802
    export GLIBC_TUNABLES=glibc.malloc.arena_max=4

    echo "Running sage tests with arguments ${timeSpecifier} ${patienceSpecifier} ${testArgs}"
    "sage" -t --timeout=0 --nthreads "$NIX_BUILD_CORES" --optional=sage ${timeSpecifier} ${patienceSpecifier} ${testArgs}
  '';
}