git @ Cat's Eye Technologies Treacle / master src / utils.scm
master

Tree @master (Download .tar.gz)

utils.scm @masterraw · history · blame

;
; Utility functions used by Treacle
; Chris Pressey, March 2008
;

; Copyright (c)2008 Cat's Eye Technologies.  All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions
; are met:
;
; 1. Redistributions of source code must retain the above copyright
;    notices, this list of conditions and the following disclaimer.
; 2. Redistributions in binary form must reproduce the above copyright
;    notices, this list of conditions, and the following disclaimer in
;    the documentation and/or other materials provided with the
;    distribution.
; 3. Neither the names of the copyright holders nor the names of their
;    contributors may be used to endorse or promote products derived
;    from this software without specific prior written permission. 
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
; ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES INCLUDING, BUT NOT
; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
; FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
; COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
; BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
; ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
; POSSIBILITY OF SUCH DAMAGE.

;
; Debugging output.
;
(define-syntax print
  (syntax-rules ()
    ((print e)
      (display e))
    ((print e1 e2 ...)
      (begin (display e1)
             (print e2 ...)))))

(define-syntax println
  (syntax-rules ()
    ((println e)
      (begin (display e)
             (newline)))
    ((println e1 e2 ...)
      (begin (display e1)
             (println e2 ...)))))

;
; Testing framework.
;
(define-syntax test
  (syntax-rules ()
    ((test test-name expr expected)
      (begin
        (print "Running test: " (quote test-name) "... ")
        (let ((result expr))
          (cond
            ((equal? result expected)
              (println "passed."))
            (else
              (println "FAILED!")
              (println "Expected: " expected)
              (println "Actual:   " result))))))))