(module zip-test mzscheme
(require "zip.ss")
(print-struct #t)
(define-struct tree () (make-inspector))
(define-struct (tree:empty tree) () (make-inspector))
(define-struct (tree:node tree) (left alpha right) (make-inspector))
(define-struct (tree:leaf tree) (beta) (make-inspector))
(define (test i)
(cond
[(>= 0 i)
(make-tree:empty)]
[(= 1 i)
(make-tree:leaf (gensym))]
[else
(make-tree:node (test (sub1 i))
i
(test (sub1 i)))]))
(define test-data (test 4))
(define (test1)
(change test-data
([tree:node right]
[tree:node left]
[tree:node right]
(make-tree:empty))))
(define (test2)
(change
(change test-data
([tree:node right]
[tree:node left]
[tree:node right]
(make-tree:empty)))
([tree:node right]
[tree:node left]
[tree:node left]
[tree:leaf beta]
'got-em)))
(define (test3)
(change test-data
([tree:node right]
[tree:node left]
(change
(change (tree:node-left (tree:node-right test-data))
([tree:node right]
(make-tree:empty)))
([tree:node left]
[tree:leaf beta]
'got-em)))))
(define (test4)
(change test-data
([tree:node right]
[tree:node left]
[tree:node right]
(make-tree:empty))
([tree:node right]
[tree:node left]
[tree:node left]
[tree:leaf beta]
'got-em)))
(define (test5)
(change test-data
([tree:node right]
[tree:node left]
[tree:node right]
(make-tree:empty))
([tree:node right]
[tree:node left]
[tree:node left]
[tree:leaf beta]
'got-em)
([tree:node left]
(make-tree:empty))))
(define (test6)
(update test-data
([tree:node right]
[tree:node left]
[tree:node left]
[tree:leaf beta]
(lambda (old) (symbol->string old))))))