Checked R7RS Scheme source for Lesson 0.
(import (scheme base)
(scheme write)
(scheme process-context))
(define failures '())
(define (record-failure label expected actual)
(set! failures (cons (list label expected actual) failures)))
(define (check-equal label expected actual)
(unless (equal? expected actual)
(record-failure label expected actual)))
(define two-plus-three (+ 2 3))
(define (large? n)
(> n 10))
(define (list->label items)
(if (null? items)
'empty-list
'nonempty-list))
; A semicolon starts a comment that continues to the end of the line.
(define begin-result
(begin
(+ 1 2) ; This value is evaluated, then ignored.
(* 3 4))) ; This final value is the value of the begin form.
(define quoted-symbol (quote finish!))
(define quoted-list '(+ 2 3))
(define name 'Ada)
(define quasiquoted-list `(hello ,name))
(check-equal 'prefix-call 5 (+ 2 3))
(check-equal 'identifier-with-signs 5 two-plus-three)
(check-equal 'predicate-name #t (large? 12))
(check-equal 'arrow-name 'empty-list (list->label '()))
(check-equal 'symbol-literal 'finish! 'finish!)
(check-equal 'symbol-with-arrow 'list->vector 'list->vector)
(check-equal 'self-evaluating-number 42 42)
(check-equal 'self-evaluating-string "Scheme" "Scheme")
(check-equal 'begin-last-value 12 begin-result)
(check-equal 'quote-word 'finish! quoted-symbol)
(check-equal 'quoted-list '(+ 2 3) quoted-list)
(check-equal 'quote-spelling 'finish! (quote finish!))
(check-equal 'quasiquote-preview '(hello Ada) quasiquoted-list)
(check-equal 'procedure-object #t (procedure? +))
(if (null? failures)
(begin
(display "Intro lesson 00 tests passed")
(newline)
(exit 0))
(begin
(display "Intro lesson 00 tests failed")
(newline)
(for-each (lambda (failure)
(write failure)
(newline))
(reverse failures))
(exit 1)))