X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=guile18%2Ftest-suite%2Ftests%2Fcontinuations.test;fp=guile18%2Ftest-suite%2Ftests%2Fcontinuations.test;h=7d76b762ba7b539b28e46f201e54d1bea3088fe2;hb=139c38d9204dd07f6b235f83bae644faedbc63fd;hp=0000000000000000000000000000000000000000;hpb=652ed35a2013489d0a14fede6307cd2595abb2c4;p=lilypond.git diff --git a/guile18/test-suite/tests/continuations.test b/guile18/test-suite/tests/continuations.test new file mode 100644 index 0000000000..7d76b762ba --- /dev/null +++ b/guile18/test-suite/tests/continuations.test @@ -0,0 +1,68 @@ +;;;; -*- scheme -*- +;;;; continuations.test --- test suite for continutations +;;;; +;;;; Copyright (C) 2003, 2006 Free Software Foundation, Inc. +;;;; +;;;; This program is free software; you can redistribute it and/or modify +;;;; it under the terms of the GNU General Public License as published by +;;;; the Free Software Foundation; either version 2, or (at your option) +;;;; any later version. +;;;; +;;;; This program is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with this software; see the file COPYING. If not, write to +;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;;;; Boston, MA 02110-1301 USA + +(define-module (test-suite test-continuations) + :use-module (test-suite lib)) + +(define (block-reentry body) + (let ((active #f)) + (dynamic-wind + (lambda () + (if active + (throw 'no-reentry))) + (lambda () + (set! active #t) + (body)) + (lambda () #f)))) + +(define (catch-tag body) + (catch #t + body + (lambda (tag . args) tag))) + +(define (check-cont) + (catch-tag + (lambda () + (block-reentry (lambda () (call/cc identity)))))) + +(define (dont-crash-please) + (let ((k (check-cont))) + (if (procedure? k) + (k 12) + k))) + +(with-test-prefix "continuations" + + (pass-if "throwing to a rewound catch context" + (eq? (dont-crash-please) 'no-reentry)) + + (with-debugging-evaluator + + (pass-if "make a stack from a continuation" + (stack? (call-with-current-continuation make-stack))) + + (pass-if "get a continuation's stack ID" + (let ((id (call-with-current-continuation stack-id))) + (or (boolean? id) (symbol? id)))) + + (pass-if "get a continuation's innermost frame" + (pair? (call-with-current-continuation last-stack-frame)))) + +)