From 3ea4ae05a309bdcdf2190dc1c299050cba369a25 Mon Sep 17 00:00:00 2001 From: retropikzel Date: Fri, 27 Feb 2026 12:27:40 +0200 Subject: [PATCH] Improve tests --- .gitignore | 3 +++ Dockerfile.jenkins | 2 ++ Jenkinsfile | 55 +++++++++++++++++----------------------------- Makefile | 41 ++++++++++++++++++++++------------ srfi/106.rkt | 3 +++ 5 files changed, 55 insertions(+), 49 deletions(-) create mode 100644 Dockerfile.jenkins create mode 100644 srfi/106.rkt diff --git a/.gitignore b/.gitignore index 6082278..1f45afb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ venv *.html *.log +foreign +run-test* + diff --git a/Dockerfile.jenkins b/Dockerfile.jenkins new file mode 100644 index 0000000..91b0707 --- /dev/null +++ b/Dockerfile.jenkins @@ -0,0 +1,2 @@ +FROM debian:trixie +RUN apt-get update && apt-get -y install make docker.io git diff --git a/Jenkinsfile b/Jenkinsfile index a03571c..fc09848 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,8 +1,8 @@ pipeline { agent { - docker { + dockerfile { + filename 'Dockerfile.jenkins' label 'docker-x86_64' - image 'debian' args '--user=root --privileged -v /var/run/docker.sock:/var/run/docker.sock' } } @@ -15,56 +15,41 @@ pipeline { parameters { string(name: 'R7RS_SCHEMES', defaultValue: 'chibi chicken gauche guile kawa mosh racket sagittarius stklos ypsilon', description: '') string(name: 'R6RS_SCHEMES', defaultValue: 'chezscheme guile ikarus ironscheme mosh racket sagittarius ypsilon', description: '') - string(name: 'SRFIS', defaultValue: '160 170', description: '') + string(name: 'SRFIS', defaultValue: '106 170', description: '') } stages { - stage('Init') { - steps { - sh "apt-get update && apt-get install -y make docker.io git" - } - } - stage('Tests') { - parallel { - stage('R6RS x86_64 Debian') { - steps { - script { - params.SRFIS.split().each { SRFI -> - params.R6RS_SCHEMES.split().each { SCHEME -> - def IMG="${SCHEME}:head" - stage("${SCHEME} - ${SRFI}") { - catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { - sh "timeout 600 make SCHEME=${SCHEME} SRFI=${SRFI} test-r6rs-docker" - } + stage('R6RS x86_64 Debian') { + steps { + script { + params.SRFIS.split().each { SRFI -> + params.R6RS_SCHEMES.split().each { SCHEME -> + stage("${SCHEME} - ${SRFI}") { + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh "timeout 600 make SCHEME=${SCHEME} SRFI=${SRFI} RNRS=r6rs run-test-docker" } } } } } } - stage('R7RS x86_64 Debian') { - steps { - script { - params.SRFIS.split().each { SRFI -> - params.R7RS_SCHEMES.split().each { SCHEME -> - def IMG="${SCHEME}:head" - if("${SCHEME}" == "chicken") { - IMG="${SCHEME}:5" - } - stage("${SCHEME} - ${SRFI}") { - catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { - sh "timeout 600 make SCHEME=${SCHEME} SRFI=${SRFI} test-r7rs-docker" - } + } + stage('R7RS x86_64 Debian') { + steps { + script { + params.SRFIS.split().each { SRFI -> + params.R7RS_SCHEMES.split().each { SCHEME -> + stage("${SCHEME} - ${SRFI}") { + catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { + sh "timeout 600 make SCHEME=${SCHEME} SRFI=${SRFI} RNRS=r6rs run-test-docker" } } } } } } - } } - } } diff --git a/Makefile b/Makefile index 7dba64a..e91b09c 100644 --- a/Makefile +++ b/Makefile @@ -29,27 +29,40 @@ install: uninstall: -snow-chibi remove --impls=${SCHEME} ${PKG} -run-test-venv: build +testfiles: + printf "#!r6rs\n(import (rnrs) (srfi :64) (foreign c) (srfi :${SRFI}))" > run-test.sps + cat ${TESTFILE} >> run-test.sps + echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (srfi 64) (foreign c) (srfi ${SRFI}))" > run-test.scm + cat ${TESTFILE} >> run-test.scm + +run-test-venv: testfiles build rm -rf venv scheme-venv ${SCHEME} ${RNRS} venv mkdir -p venv/lib/srfi - echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (srfi 64) (foreign c) (srfi ${SRFI}))" > venv/test.scm - printf "#!r6rs\n(import (rnrs) (srfi :64) (foreign c) (srfi :${SRFI}))" > venv/test.sps - cat ${TESTFILE} >> venv/test.scm - cat ${TESTFILE} >> venv/test.sps + cp run-test.sps venv/ + cp run-test.scm venv/ if [ "${RNRS}" = "r6rs" ]; then if [ -d ../foreign-c ]; then cp -r ../foreign-c/foreign venv/lib/; fi; fi if [ "${RNRS}" = "r6rs" ]; then cp -r srfi/${SRFI}.* venv/lib/srfi/; fi - #if [ "${SCHEME}" = "chezscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi - #if [ "${SCHEME}" = "ikarus" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi - #if [ "${SCHEME}" = "ironscheme" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi - #if [ "${SCHEME}" = "racket" ]; then ./venv/bin/akku install akku-r7rs chez-srfi; fi if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/akku install akku-r7rs; fi - if [ "${SCHEME}" = "chicken" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi - if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi + if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install ${PKG}; fi - if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/scheme-compile venv/test.sps; fi - if [ "${RNRS}" = "r7rs" ]; then CSC_OPTIONS="-L -lcurl" ./venv/bin/scheme-compile venv/test.scm; fi - ./venv/test + if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/scheme-compile venv/run-test.sps; fi + if [ "${RNRS}" = "r7rs" ]; then CSC_OPTIONS="-L -lcurl" ./venv/bin/scheme-compile venv/run-test.scm; fi + ./venv/run-test + +run-test-system: testfiles build + if [ "${RNRS}" = "r6rs" ]; then if [ -d ../foreign-c ]; then cp -r ../foreign-c/foreign .; fi; fi + if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/akku install akku-r7rs; fi + if [ "${SCHEME}" = "chicken" ]; then snow-chibi install --always-yes srfi.64; fi + if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then snow-chibi install --always-yes srfi.64; fi + if [ "${RNRS}" = "r7rs" ]; then snow-chibi install ${PKG}; fi + if [ "${RNRS}" = "r6rs" ]; then COMPILE_R7RS=${SCHEME} compile-scheme test.sps; fi + if [ "${RNRS}" = "r7rs" ]; then COMPILE_R7RS=${SCHEME} compile-scheme test.scm; fi + ./test + +run-test-docker: + docker build --build-arg IMAGE=${DOCKERIMG} -f Dockerfile.test --tag=foreign-c-${SCHEME}-${RNRS} . + docker run -v "${PWD}/logs:/workdir/logs" -w /workdir foreign-c-${SCHEME}-${RNRS} sh -c "make SCHEME=${SCHEME} RNRS=${RNRS} TEST=${TEST} run-test-system; mv *.json logs/ || true" test-r7rs: tmpdir @if [ "${SCHEME}" = "chibi" ]; then rm -rf ${TMPDIR}/srfi/98.*; fi diff --git a/srfi/106.rkt b/srfi/106.rkt new file mode 100644 index 0000000..deb74e6 --- /dev/null +++ b/srfi/106.rkt @@ -0,0 +1,3 @@ +#lang r7rs +(import (except (scheme base) let let-values let*-values string-copy string-copy! string-for-each string-map string-fill! string->list)) +(include "106.sld")