diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/science/math/sage/sage-tests.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/science/math/sage/sage-tests.nix | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/science/math/sage/sage-tests.nix b/nixpkgs/pkgs/applications/science/math/sage/sage-tests.nix new file mode 100644 index 000000000000..451edb8f085e --- /dev/null +++ b/nixpkgs/pkgs/applications/science/math/sage/sage-tests.nix @@ -0,0 +1,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} + ''; +} |