(with_import "./rb.kp"
(let (
    first set-empty
    _ (println first " set-contains? " 1 " ? " (set-contains? first 1) " size " (size first))
    second (set-insert first 1)
    _ (println second " set-contains? " 1 " ? " (set-contains? second 1) " size " (size second))
    third (set-insert second 2)
    _ (println third " set-contains? " 1 " ? " (set-contains? third 1) " size " (size third))
    _ (println third " set-contains? " 2 " ? " (set-contains? third 2) " size " (size third))
    fourth (set-insert third 3)
    _ (println fourth " set-contains? " 1 " ? " (set-contains? fourth 1) " size " (size fourth))
    _ (println fourth " set-contains? " 2 " ? " (set-contains? fourth 2) " size " (size fourth))
    _ (println fourth " set-contains? " 3 " ? " (set-contains? fourth 3) " size " (size fourth))
    _ (println fourth " set-contains? " 4 " ? " (set-contains? fourth 4) " size " (size fourth))
    _ (println fourth " foldl with + " (set-foldl + 0 fourth))
    fifth (set-remove fourth 1)
    _ (println fifth " set-contains? " 1 " ? " (set-contains? fifth 1) " size " (size fifth))
    _ (println fifth " set-contains? " 2 " ? " (set-contains? fifth 2) " size " (size fifth))
    _ (println fifth " set-contains? " 3 " ? " (set-contains? fifth 3) " size " (size fifth))
    _ (println fifth " set-contains? " 4 " ? " (set-contains? fifth 4) " size " (size fifth))
    sixth (set-remove fifth 3)
    _ (println sixth " set-contains? " 1 " ? " (set-contains? sixth 1) " size " (size sixth))
    _ (println sixth " set-contains? " 2 " ? " (set-contains? sixth 2) " size " (size sixth))
    _ (println sixth " set-contains? " 3 " ? " (set-contains? sixth 3) " size " (size sixth))
    _ (println sixth " set-contains? " 4 " ? " (set-contains? sixth 4) " size " (size sixth))
    seventh (set-remove sixth 2)
    _ (println seventh " set-contains? " 1 " ? " (set-contains? seventh 1) " size " (size seventh))
    _ (println seventh " set-contains? " 2 " ? " (set-contains? seventh 2) " size " (size seventh))
    _ (println seventh " set-contains? " 3 " ? " (set-contains? seventh 3) " size " (size seventh))
    _ (println seventh " set-contains? " 4 " ? " (set-contains? seventh 4) " size " (size seventh))

    first map-empty
    _ (println first " map-contains-key? " 1 " ? " (map-contains-key? first 1) " size " (size first))
    second (map-insert first 1 "hello")
    _ (println second " map-contains-key? " 1 " ? " (map-contains-key? second 1) " size " (size second))
    _ (println second " map-get " 1 " ? " (map-get second 1) " size " (size second))
    third (map-insert second 1 "goodbye")
    _ (println third " map-contains-key? " 1 " ? " (map-contains-key? third 1) " size " (size third))
    _ (println third " map-get " 1 " ? " (map-get third 1) " size " (size third))
    fourth (map-insert third 2 "hmmm")
    _ (println fourth " map-contains-key? " 2 " ? " (map-contains-key? fourth 2) " size " (size fourth))
    _ (println fourth " map-get " 2 " ? " (map-get fourth 2) " size " (size fourth))
    _ (println fourth " map-contains-key? " 1 " ? " (map-contains-key? fourth 1) " size " (size fourth))
    _ (println fourth " map-get " 1 " ? " (map-get fourth 1) " size " (size fourth))
    _ (println fourth " map-contains-key? " 3 " ? " (map-contains-key? fourth 3) " size " (size fourth))
    _ (println fourth " map-get-or-default " 3 " 'hi ? " (map-get-or-default fourth 3 'hi) " size " (size fourth))
    _ (println fourth " map-get-with-default " 3 " (lambda () 'bye) ? " (map-get-with-default fourth 3 (lambda () 'bye)) " size " (size fourth))
    fifth (map-remove fourth 2)
    _ (println fifth " map-contains-key? " 2 " ? " (map-contains-key? fifth 2) " size " (size fifth))
) nil))
