#lang scheme (require scheme/mpair) (require "describe.ss") ;;; Booleans (printf "~n--- Booleans ---~n") (describe #t) (describe #f) ;;; Numbers (printf "~n--- Numbers ---~n") (define (! n) (if (= n 0) 1 (* n (! (sub1 n))))) (describe +inf.0) (describe -inf.0) (describe +nan.0) (describe 0) (describe (! 10)) (describe (! 40)) (describe (- (! 40) (! 41))) (describe (! 100)) (describe (/ (! 10) (add1 (! 11)))) (describe -1+3i) (describe 0.0) (describe (* (! 10) 1.0)) (describe (exact->inexact (! 40))) (describe (sqrt 10)) (describe (sqrt -10)) (describe (+ (sqrt 10) (sqrt -10))) ;;; Strings (printf "~n--- Strings ---~n") (describe "abc") (describe (string #\1 #\2 #\3)) ;;; Byte Strings (printf "~n--- Byte Strings ---~n") (describe #"abc") (describe (bytes 48 49 50)) ;;; Characters (printf "~n--- Characters ---~n") (describe #\a) (describe #\A) (describe #\0) (describe #\() ;;; Symbols (printf "~n--- Symbols ---~n") (describe 'abc) (describe '|(a + b)|) (describe (gensym)) ;;; Regular Expressions (printf "~n--- Regular Expressions ---~n") (describe #rx"Ap*le") (describe #px"Ap*le") ;;; Byte Regular Expressions (printf "~n--- Byte Regular Expressions ---~n") (describe #rx#"Ap*le") (describe #px#"Ap*le") ;;; Keywords (printf "~n--- Keywords ---~n") (describe '#:key) ;;; Lists and Pairs (printf "~n--- Lists and Pairs ---~n") (describe '(this is a proper list)) (describe '(this is an improper . list)) (describe (list '(this . is) '(also . a) '(proper . list))) ;;; Mutable Lists and Pairs (printf "~n--- Mutable Lists and Pairs ---~n") (describe (mlist 'this 'is 'a 'proper 'list)) (describe (mcons 'this (mcons 'is (mcons 'an (mcons 'improper 'list))))) (describe (mlist '(this . is) '(also . a) '(proper . list))) ;;; Vectors (printf "~n--- Vectors ---~n") (describe #(1 2 3)) ;;; Boxes (printf "~n--- Boxes ---~n") (describe (box 12)) (describe (box (box 'a))) (describe (box (sqrt 10))) ;;; Hashes (printf "~n--- Hashes ---~n") (describe #hash((a . 12) (b . 14) (c . 16))) (describe #hasheq((a . a) (b . b) (c . c))) (describe #hasheqv((a . #\a) (b . #\b) (c . #\c))) (define ht (make-hash)) (hash-set! ht 'a 12) (hash-set! ht 'b 14) (hash-set! ht 'c 16) (describe ht) (define wht (make-weak-hash)) (hash-set! wht 'a 12) (hash-set! wht 'b 14) (hash-set! wht 'c 16) (describe wht) ;;; Procedures (printf "~n--- Procedures ---~n") (describe car) (describe open-output-file) (describe current-input-port) (describe (lambda (x) x)) ;;; Void (printf "~n--- Void ---~n") (describe (void)) ;;; Structures (printf "~n--- Structures ---~n") (define-struct transparent-struct (a b c) #:transparent) (define ts-1 (make-transparent-struct 'a 'b 'c)) (describe ts-1) ;;; Other Named Things (I.E., Opaque Structures) (printf "~n--- Other Named Things ---~n") (define-struct opaque-struct (a b c)) (define os-1 (make-opaque-struct 'a 'b 'c)) (describe os-1)