(use test) (use data-structures) (use list-utils) (test-group "Skip+" (test '(() -1) (receive (skip+ '() -1))) (test '(() 0) (receive (skip+ '() 0))) (test '(() 1) (receive (skip+ '() 1))) (test '((1) -1) (receive (skip+ '(1) -1))) (test '((1) 0) (receive (skip+ '(1) 0))) (test '(() 0) (receive (skip+ '(1) 1))) (test '(() 1) (receive (skip+ '(1) 2))) (test '((1 2) -1) (receive (skip+ '(1 2) -1))) (test '((1 2) 0) (receive (skip+ '(1 2) 0))) (test '((2) 0) (receive (skip+ '(1 2) 1))) (test '(() 0) (receive (skip+ '(1 2) 2))) ) (test-group "Split-at+" (test '(() ()) (receive (split-at+ '() -1 #f))) (test '(() ()) (receive (split-at+ '() 0 #f))) (test '(() ()) (receive (split-at+ '() 1 #f))) (test '(() ()) (receive (split-at+ '() -1 '()))) (test '(() ()) (receive (split-at+ '() 0 '()))) (test '(() ()) (receive (split-at+ '() 1 '()))) (test '(() ()) (receive (split-at+ '() -1 '(1)))) (test '(() ()) (receive (split-at+ '() 0 '(1)))) (test '(() ()) (receive (split-at+ '() 1 '(1)))) (test '(() (1)) (receive (split-at+ '(1) -1 #f))) (test '(() (1)) (receive (split-at+ '(1) 0 #f))) (test '((1) ()) (receive (split-at+ '(1) 1 #f))) (test '(() ()) (receive (split-at+ '(1) 2 #f))) (test '(() (1)) (receive (split-at+ '(1) -1 '()))) (test '(() (1)) (receive (split-at+ '(1) 0 '()))) (test '((1) ()) (receive (split-at+ '(1) 1 '()))) (test '((1) ()) (receive (split-at+ '(1) 2 '()))) (test '(() (1)) (receive (split-at+ '(1) -1 '(2)))) (test '(() (1)) (receive (split-at+ '(1) 0 '(2)))) (test '((1) ()) (receive (split-at+ '(1) 1 '(2)))) (test '((1 2) ()) (receive (split-at+ '(1) 2 '(2)))) ) (test-group "Section" ;(section LIST SIZE [STEP [PADS]]) ;Needs more tests (test-error "size <= 0" (section '(1 2) -1 1 #f)) (test-error "size <= 0" (section '(1 2) 0 1 #f)) (test-error "step <= 0" (section '(1 2) 1 -1 #f)) (test-error "step <= 0" (section '(1 2) 1 0 #f)) (test "null primary" '() (section '() 1 1 #f)) (test "size > length primary & no pad" '() (section '(1) 2 2 #f)) (test '((1) (2)) (section '(1 2) 1 1 #f)) (test '((1 2)) (section '(1 2) 2 2 #f)) (test "size > length primary & clip" '((1 2)) (section '(1 2) 3 3 '())) (test "size > length primary & pad" '((1 2 3)) (section '(1 2) 3 3 '(3 4 5))) (test "size > step" '((1 2) (2 3)) (section '(1 2 3) 2 1)) (test "size < step" '((1) (3)) (section '(1 2 3) 1 2)) (test '((1 2) (2 3)) (section '(1 2 3) 2 1 '(a b c))) (test '((1 2 a)) (section '(1 2) 3 3 '(a b c))) (test '((1 2) (3 a)) (section '(1 2 3) 2 2 '(a b c))) (test '((1 2) (3)) (section '(1 2 3) 2 2)) ) (define alst1 '((a 1) (b 2) (b 3) (c 4) (b 5) (a 6) (d 7))) (define alst2 '((a . 1) (b . 2) (b . 3) (c . 4) (b . 5) (a . 6) (d . 7))) (test-group "Length" (test-assert (length=0? '())) (test-assert (not (length=0? '(1)))) (test-assert (length=1? '(1))) (test-assert (not (length=1? '()))) (test-assert (not (length=1? '(1 2)))) (test-assert (length=2? '(1 2))) (test-assert (not (length=2? '()))) (test-assert (not (length=2? '(1)))) (test-assert (not (length=2? '(1 2 3)))) (test-assert (length>1? '(1 2))) (test-assert (not (length>1? '()))) (test-assert (not (length>1? '(1)))) ) (test-group "Null Stuff" (test '(1) (ensure-list '(1))) (test '(1) (ensure-list 1)) (test '(1) (not-null? '(1))) (test-assert (not (not-null? '()))) ) (test-group "Shift Set" (let ((lst '(1 2))) (test 1 (shift!/set lst)) (test '(2) (identity lst)) (test 2 (shift!/set lst)) (test '() (identity lst)) (test-assert (not (shift!/set lst))) (test '() (identity lst)) ) ) (test-group "Alist Zip" (test '((a b) ((1) (2))) (receive (unzip-alist '((a 1) (b 2))))) (test '((a . 1) (b . 2)) (zip-alist '(a b) '(1 2))) (test '((a 1) (b 2)) (zip-alist '(a b) '((1) (2)))) (test '((a . 1) (b . 2)) (zip-alist '(a b) '(1 2))) ) (test-group "Plist <-> Alist" (test '(a (1) b (2) b (3) c (4) b (5) a (6) d (7)) (alist->plist alst1)) (test '(a 1 b 2 b 3 c 4 b 5 a 6 d 7) (alist->plist alst2)) (test alst1 (plist->alist '(a (1) b (2) b (3) c (4) b (5) a (6) d (7)))) (test alst2 (plist->alist '(a 1 b 2 b 3 c 4 b 5 a 6 d 7))) ) (test-group "Alist Delete" (test '((a 1) (c 4) (b 5) (a 6) (d 7)) (alist-delete-duplicates 'b alst1 eq? 2)) (test '((a 1) (c 4) (a 6) (d 7)) (alist-delete-duplicates 'b alst1 eq?)) (test '((a 1) (b 2) (b 3) (c 4) (b 5) (a 6)) (alist-delete-duplicates 'd alst1 eq?)) (test '((a 1) (b 2) (b 3) (b 5) (a 6) (d 7)) (alist-delete-duplicates 'c alst1 eq?)) (test '((b 2) (b 3) (c 4) (b 5) (a 6) (d 7)) (alist-delete-duplicates 'a alst1 eq? 1)) (test '((a 1) (c 4) (b 5) (a 6) (d 7)) (alist-delete-duplicates! 'b alst1 eq? 2)) (test '((a 1) (c 4) (a 6) (d 7)) (alist-delete-duplicates! 'b alst1 eq?)) (test '((a 1) (c 4) (a 6)) (alist-delete-duplicates! 'd alst1 eq?)) (test '((a 1) (a 6)) (alist-delete-duplicates! 'c alst1 eq?)) (test '((a 6)) (alist-delete-duplicates! 'a alst1 eq? 1)) ) (test-group "Extensions" (test '(b c) (pair-ref '(a b c) 1)) (test '() (pair-ref '(a b c) 3)) (let ((ls (list 1 2 3))) (list-set! ls 1 'foo) (test "list-set!" 'foo (list-ref ls 1)) ) (test '(a b c) (list-copy* '(a b c))) (test '(b c) (list-copy* '(a b c) 1)) (test '(b c z) (list-copy* '(a b c) 1 4 'z)) ) (test-exit)