From 294d8a9737c9d6e6f01d642abc8a0c5d43c40487 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Thu, 24 Aug 2023 19:06:40 +0200 Subject: [PATCH] mes: iota: Make compatible with Guile. * mes/module/mes/scm.mes (iota): Throw exception when n < 0. * tests/scm.test: Import (mes catch). ("iota -1"): Rewrite with exception handling. --- mes/module/mes/scm.mes | 7 +++++-- tests/scm.test | 10 +++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/mes/module/mes/scm.mes b/mes/module/mes/scm.mes index dadd3589..5700e179 100644 --- a/mes/module/mes/scm.mes +++ b/mes/module/mes/scm.mes @@ -2,6 +2,7 @@ ;;; GNU Mes --- Maxwell Equations of Software ;;; Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen +;;; Copyright © 2023 Ekaitz Zarraga ;;; ;;; This file is part of GNU Mes. ;;; @@ -164,8 +165,10 @@ (list-tail (cdr x) (- n 1)))) (define (iota n) - (if (<= n 0) '() - (append2 (iota (- n 1)) (list (- n 1))))) + (cond + ((< n 0) (throw 'wrong-type-arg n)) + ((= n 0) '()) + (else (append2 (iota (- n 1)) (list (- n 1)))))) (define (reverse lst) (let loop ((lst lst) (r '())) diff --git a/tests/scm.test b/tests/scm.test index a19fcd16..a3b14a59 100755 --- a/tests/scm.test +++ b/tests/scm.test @@ -10,6 +10,7 @@ exec ${MES-bin/mes} --no-auto-compile -L ${0%/*} -L module -C module -e '(tests ;;; GNU Mes --- Maxwell Equations of Software ;;; Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen +;;; Copyright © 2023 Ekaitz Zarraga ;;; ;;; This file is part of GNU Mes. ;;; @@ -30,6 +31,8 @@ exec ${MES-bin/mes} --no-auto-compile -L ${0%/*} -L module -C module -e '(tests #:use-module (mes mes-0) #:use-module (mes test)) +(mes-use-module (mes catch)) + (cond-expand (mes (primitive-load "module/mes/test.scm")) @@ -131,7 +134,12 @@ exec ${MES-bin/mes} --no-auto-compile -L ${0%/*} -L module -C module -e '(tests '() (iota 0)) (pass-if-equal "iota -1" - '() (iota -1)) + 'iota-negative-length + (catch 'wrong-type-arg + (lambda () + (iota -1)) + (lambda (key . args) + 'iota-negative-length))) (pass-if "cond-expand" (sequal? (cond-expand (foobar #f) (mes (display ": pass: *YAY*") 'mes) (guile (display ": pass: *GUILE*") 'mes)) 'mes))