(require-library cells simple-tests) (import cells chicken simple-tests) (define (push st% val) (st% (cons val (st%)))) (define (top st%) (car (st%))) (define (pop st%) (st% (cdr (st%)))) (define-test (CELLS) (check (define cell% (cell 5)) (cell? cell%) (not (cell? 5)) ((cell-of? number?) cell%) (not ((cell-of? list?) cell%)) (= (cell%) 5) (= (cell-ref cell%) 5) (cell% 50) (= (cell%) 50) (cell-set! cell% 500) (= (cell-ref cell%) 500) (condition-case (cell-ref 500) ((exn) #t)) )) (define-test (STACKS) (check (define stack% (cell '()));'#,(% ())) (cell? stack%) ((cell-of? list?) stack%) (not ((cell-of? number?) stack%)) (null? (stack%)) (push stack% 5) (push stack% 50) (push stack% 500) (= 500 (top stack%)) (pop stack%) (= 50 (top stack%)) (pop stack%) (= 5 (top stack%)))) (CELLS) (STACKS)