Merge pull request #333766 from Luflosi/npiet-tests

npiet: add tests, cleanup
This commit is contained in:
Doron Behar 2024-08-13 10:38:35 +00:00 committed by GitHub
commit 102b1152a6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 128 additions and 47 deletions

View File

@ -0,0 +1,68 @@
{
lib,
stdenv,
fetchurl,
gd,
giflib,
groff,
libpng,
tk,
callPackage,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "npiet";
version = "1.3f";
src = fetchurl {
url = "https://www.bertnase.de/npiet/npiet-${finalAttrs.version}.tar.gz";
hash = "sha256-Le2FYGKr1zWZ6F4edozmvGC6LbItx9aptidj3KBLhVo=";
};
buildInputs = [
gd
giflib
libpng
];
nativeBuildInputs = [ groff ];
postPatch = ''
# malloc.h is not needed because stdlib.h is already included.
# On macOS, malloc.h does not even exist, resulting in an error.
substituteInPlace npiet-foogol.c \
--replace-fail '#include <malloc.h>' ""
substituteInPlace npietedit \
--replace-fail 'exec wish' 'exec ${tk}/bin/wish'
'';
strictDeps = true;
passthru.tests =
let
all-tests = callPackage ./tests { };
in
{
inherit (all-tests)
hello
prime
no-prime
brainfuck
;
};
meta = {
description = "Interpreter for piet programs. Also includes npietedit and npiet-foogol";
longDescription = ''
npiet is an interpreter for the piet programming language.
Instead of text, piet programs are pictures. Commands are determined based on changes in color.
'';
homepage = "https://www.bertnase.de/npiet/";
changelog = "https://www.bertnase.de/npiet/ChangeLog";
license = lib.licenses.gpl2Only;
platforms = lib.platforms.unix;
mainProgram = "npiet";
maintainers = with lib.maintainers; [ Luflosi ];
};
})

View File

@ -0,0 +1,41 @@
{ fetchurl, callPackage }:
let
# More examples can be found at https://www.dangermouse.net/esoteric/piet/samples.html
hello-program = fetchurl {
url = "https://www.dangermouse.net/esoteric/piet/hw6.png";
hash = "sha256-E8OMu0b/oU8lDF3X4o5WMnnD1IKNT2YF+qe4MXLuczI=";
};
prime-tester-program = fetchurl {
url = "https://www.bertnase.de/npiet/nprime.gif";
hash = "sha256-4eaJweV/n73byoWZWCXiMLkfSEhMPf5itVwz48AK/FA=";
};
brainfuck-interpreter-program = fetchurl {
url = "https://www.dangermouse.net/esoteric/piet/piet_bfi.gif";
hash = "sha256-LIfOG0KFpr4nxAtLLeIsPQl+8Ujyvfz/YnEm/HRoVjY=";
};
in
{
hello = callPackage ./run-test.nix {
testName = "hello";
programPath = hello-program;
expectedOutput = "Hello, world!";
};
prime = callPackage ./run-test.nix {
testName = "prime";
programPath = prime-tester-program;
programInput = "2069";
expectedOutput = "Y";
};
no-prime = callPackage ./run-test.nix {
testName = "no-prime";
programPath = prime-tester-program;
programInput = "2070";
expectedOutput = "N";
};
brainfuck = callPackage ./run-test.nix {
testName = "brainfuck";
programPath = brainfuck-interpreter-program;
programInput = ",+>,+>,+>,+.<.<.<.|sdhO";
expectedOutput = "Piet";
};
}

View File

@ -0,0 +1,19 @@
{
runCommand,
lib,
npiet,
testName,
programPath,
programInput ? "",
expectedOutput,
}:
runCommand "npiet-test-${testName}" { } ''
actual_output="$(echo '${programInput}' | '${lib.getExe npiet}' -q -w -e 100000 '${programPath}')"
if [ "$actual_output" != '${expectedOutput}' ]; then
echo "npiet failed to run the program correctly. The output should be ${expectedOutput} but is $actual_output."
exit 1
fi
echo "The program successfully output $actual_output"
touch "$out"
''

View File

@ -1,45 +0,0 @@
{ lib
, stdenv
, fetchurl
, gd
, giflib
, groff
, libpng
, tk
}:
stdenv.mkDerivation rec {
pname = "npiet";
version = "1.3f";
src = fetchurl {
url = "https://www.bertnase.de/npiet/npiet-${version}.tar.gz";
sha256 = "sha256-Le2FYGKr1zWZ6F4edozmvGC6LbItx9aptidj3KBLhVo=";
};
buildInputs = [ gd giflib libpng ];
nativeBuildInputs = [ groff ];
postPatch = ''
# malloc.h is not needed because stdlib.h is already included.
# On macOS, malloc.h does not even exist, resulting in an error.
substituteInPlace npiet-foogol.c \
--replace '#include <malloc.h>' ""
substituteInPlace npietedit \
--replace 'exec wish' 'exec ${tk}/bin/wish'
'';
meta = with lib; {
description = "Interpreter for piet programs. Also includes npietedit and npiet-foogol";
longDescription = ''
npiet is an interpreter for the piet programming language.
Instead of text, piet programs are pictures. Commands are determined based on changes in color.
'';
homepage = "https://www.bertnase.de/npiet/";
license = licenses.gpl2Only;
platforms = platforms.unix;
maintainers = with maintainers; [ Luflosi ];
};
}

View File

@ -10833,8 +10833,6 @@ with pkgs;
npapi_sdk = callPackage ../development/libraries/npapi-sdk { };
npiet = callPackage ../development/interpreters/npiet { };
npth = callPackage ../development/libraries/npth { };
nmap-formatter = callPackage ../tools/security/nmap-formatter { };