(import "alist.slime") (define a (make-alist)) ;; a == (()) (assert (= (first a) ())) (alist-set! a 'key1 'value1) ;; a == (key1: value1) (assert (= (alist-get a 'key1) 'value1)) (assert (alist-key-exists? a 'key1)) (assert (not (alist-key-exists? a 'key2))) (alist-set! a 'key2 'value2) ;; a == (key2: value2, ;; key1: value1) (assert (= (alist-get a 'key2) 'value2)) (assert (alist-key-exists? a 'key2)) (assert (= (alist-find a 'key2) 0)) (assert (= (alist-find a 'key1) 1)) (assert (= (length (first a)) 2)) (alist-set! a 'key1 'value3) ;; a == (key1: value3, ;; key2: value2, ;; key1: value1) (assert (= (length (first a)) 3)) (assert (= (alist-get a 'key1) 'value3)) (alist-set-overwrite! a 'key1 'value4) ;; a == (key1: value4, ;; key2: value2, ;; key1: value1) (assert (= (length (first a)) 3)) (assert (= (alist-get a 'key1) 'value4)) (alist-remove! a 'key1) ;; a == (key2: value2, ;; key1: value1) (assert (= (length (first a)) 2)) (assert (= (alist-get a 'key1) 'value1)) (assert (= (alist-get a 'key2) 'value2)) ;; ------------- ;; ;; PLISTS ;; ;; ------------- (define p (make-plist)) ;; p == (()) (assert (= (first p) ())) (plist-set! p :key1 'value1) ;; p == ((:key1 value1)) (assert (= (plist-get p :key1) 'value1)) (assert (plist-prop-exists? p :key1)) (assert (not (plist-prop-exists? p :key2))) (plist-set! p :key2 'value2) ;; p == ((:key2 value2, ;; :key1 value1)) (assert (= (plist-get p :key2) 'value2)) (assert (plist-prop-exists? p :key2)) (assert (= (plist-find p :key2) 0)) (assert (= (plist-find p :key1) 1)) (assert (= (length (first p)) 4)) (plist-set! p :key1 'value3) ;; p == ((:key1 value3, ;; :key2 value2, ;; :key1 value1)) (assert (= (length (first p)) 6)) (assert (= (plist-get p :key1) 'value3)) (plist-set-overwrite! p :key1 'value4) ;; p == ((:key1 value4, ;; :key2 value2, ;; :key1 value1)) (assert (= (length (first p)) 6)) (assert (= (plist-get p :key1) 'value4)) (plist-remove! p :key1) ;; p == ((:key2 value2, ;; :key1 value1)) (assert (= (length (first p)) 4)) (assert (= (plist-get p :key1) 'value1)) (assert (= (plist-get p :key2) 'value2))