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