Commit 0423aeaf authored by pfdietz's avatar pfdietz
Browse files

Last of the loop tests. Conditional clauses, 'IT', loop keyword tests,...

Last of the loop tests.  Conditional clauses, 'IT', loop keyword tests, initially/finally tests, and miscellaneous.
parent 39e632e0
......@@ -87,6 +87,10 @@
(load "loop11.lsp")
(load "loop12.lsp")
(load "loop13.lsp")
(load "loop14.lsp")
(load "loop15.lsp")
(load "loop16.lsp")
(load "loop17.lsp")
;;; Tests of conses
......
;-*- Mode: Lisp -*-
;;;; Author: Paul Dietz
;;;; Created: Wed Nov 20 06:33:21 2002
;;;; Contains: Tests of LOOP conditional execution clauses
(in-package :cl-test)
(deftest loop.14.1
(loop for x from 1 to 6
when (evenp x)
collect x)
(2 4 6))
(deftest loop.14.2
(loop for x from 1 to 6
unless (evenp x)
collect x)
(1 3 5))
(deftest loop.14.3
(loop for x from 1 to 10
when (evenp x)
collect x into foo
and count t into bar
finally (return (values foo bar)))
(2 4 6 8 10)
5)
(deftest loop.14.4
(loop for x from 1 to 10
when (evenp x) collect x end)
(2 4 6 8 10))
(deftest loop.14.5
(loop for x from 1 to 10
when (evenp x) collect x into evens
else collect x into odds
end
finally (return (values evens odds)))
(2 4 6 8 10)
(1 3 5 7 9))
(deftest loop.14.6
(loop for x from 1 to 10
unless (oddp x)
collect x into foo
and count t into bar
finally (return (values foo bar)))
(2 4 6 8 10)
5)
(deftest loop.14.7
(loop for x from 1 to 10
unless (oddp x) collect x end)
(2 4 6 8 10))
(deftest loop.14.8
(loop for x from 1 to 10
unless (oddp x) collect x into evens
else collect x into odds
end
finally (return (values evens odds)))
(2 4 6 8 10)
(1 3 5 7 9))
(deftest loop.14.9
(loop for x from 1 to 6
if (evenp x)
collect x)
(2 4 6))
(deftest loop.14.10
(loop for x from 1 to 10
if (evenp x)
collect x into foo
and count t into bar
finally (return (values foo bar)))
(2 4 6 8 10)
5)
(deftest loop.14.11
(loop for x from 1 to 10
if (evenp x) collect x end)
(2 4 6 8 10))
(deftest loop.14.12
(loop for x from 1 to 10
if (evenp x) collect x into evens
else collect x into odds
end
finally (return (values evens odds)))
(2 4 6 8 10)
(1 3 5 7 9))
;;; Test that else associates with the nearest conditional unclosed
;;; by end
(deftest loop.14.13
(loop for i from 1 to 20
if (evenp i)
if (= (mod i 3) 0)
collect i into list1
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(2 4 8 10 14 16 20))
(deftest loop.14.14
(loop for i from 1 to 20
when (evenp i)
if (= (mod i 3) 0)
collect i into list1
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(2 4 8 10 14 16 20))
(deftest loop.14.15
(loop for i from 1 to 20
if (evenp i)
when (= (mod i 3) 0)
collect i into list1
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(2 4 8 10 14 16 20))
(deftest loop.14.16
(loop for i from 1 to 20
if (evenp i)
if (= (mod i 3) 0)
collect i into list1
end
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(1 3 5 7 9 11 13 15 17 19))
(deftest loop.14.17
(loop for i from 1 to 20
when (evenp i)
if (= (mod i 3) 0)
collect i into list1
end
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(1 3 5 7 9 11 13 15 17 19))
(deftest loop.14.18
(loop for i from 1 to 20
if (evenp i)
when (= (mod i 3) 0)
collect i into list1
end
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(1 3 5 7 9 11 13 15 17 19))
(deftest loop.14.19
(loop for i from 1 to 20
when (evenp i)
when (= (mod i 3) 0)
collect i into list1
end
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(1 3 5 7 9 11 13 15 17 19))
(deftest loop.14.20
(loop for i from 1 to 20
unless (oddp i)
if (= (mod i 3) 0)
collect i into list1
end
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(1 3 5 7 9 11 13 15 17 19))
(deftest loop.14.21
(loop for i from 1 to 20
if (evenp i)
unless (/= (mod i 3) 0)
collect i into list1
end
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(1 3 5 7 9 11 13 15 17 19))
(deftest loop.14.22
(loop for i from 1 to 20
unless (oddp i)
unless (/= (mod i 3) 0)
collect i into list1
end
else collect i into list2
finally (return (values list1 list2)))
(6 12 18)
(1 3 5 7 9 11 13 15 17 19))
;;; More tests conditionals
(deftest loop.14.23
(loop for i from 1 to 20
if (evenp i)
collect i into list1
else if (= (mod i 3) 0)
collect i into list2
else collect i into list3
finally (return (values list1 list2 list3)))
(2 4 6 8 10 12 14 16 18 20)
(3 9 15)
(1 5 7 11 13 17 19))
;;; Tests of 'IT'
(deftest loop.14.24
(loop for x in '((a) nil (b) (c) (nil) (d))
when (car x) collect it)
(a b c d))
(deftest loop.14.25
(loop for x in '((a) nil (b) (c) (nil) (d))
if (car x) collect it)
(a b c d))
(deftest loop.14.26
(loop for x in '(nil (a) nil (b) (c) (nil) (d))
when (car x) return it)
a)
(deftest loop.14.27
(loop for x in '(nil (a) nil (b) (c) (nil) (d))
if (car x) return it)
a)
(deftest loop.14.28
(loop for x in '((a) nil (b) (c) (nil) (d))
when (car x) collect it and collect 'foo)
(a foo b foo c foo d foo))
(deftest loop.14.29
(let ((it 'z))
(loop for x in '(a b c d)
when x collect it and collect it))
(a z b z c z d z))
(deftest loop.14.30
(let ((it 'z))
(loop for x in '(a b c d)
if x collect it end
collect it))
(a z b z c z d z))
(deftest loop.14.31
(loop for it on '(a b c d)
when (car it) collect it)
(a b c d))
(deftest loop.14.32
(loop for x in '(a b nil c d nil e)
when x collecting it)
(a b c d e))
(deftest loop.14.33
(loop for x in '(a b nil c d nil e)
when x append (list x))
(a b c d e))
(deftest loop.14.34
(loop for x in '(a b nil c d nil e)
when x appending (list x))
(a b c d e))
(deftest loop.14.35
(loop for x in '(a b nil c d nil e)
when x nconc (list x))
(a b c d e))
(deftest loop.14.36
(loop for x in '(a b nil c d nil e)
when x nconcing (list x))
(a b c d e))
(deftest loop.14.37
(loop for it on '(a b c d)
when (car it) collect it into foo
finally (return foo))
(a b c d))
(deftest loop.14.38
(loop for x in '(1 2 nil 3 4 nil 5 nil)
when x count it)
5)
(deftest loop.14.39
(loop for x in '(1 2 nil 3 4 nil 5 nil)
when x counting it)
5)
(deftest loop.14.40
(loop for x in '(1 2 nil 3 4 nil 6 nil)
when x maximize it)
6)
(deftest loop.14.41
(loop for x in '(1 2 nil 3 4 nil 6 nil)
when x maximizing it)
6)
(deftest loop.14.42
(loop for x in '(1 2 nil 3 4 nil 6 nil)
when x minimize it)
1)
(deftest loop.14.43
(loop for x in '(1 2 nil 3 4 nil 6 nil)
when x minimizing it)
1)
(deftest loop.14.44
(loop for x in '(1 2 nil 3 4 nil 6 nil)
when x sum it)
16)
(deftest loop.14.45
(loop for x in '(1 2 nil 3 4 nil 6 nil)
when x summing it)
16)
;-*- Mode: Lisp -*-
;;;; Author: Paul Dietz
;;;; Created: Thu Nov 21 07:08:21 2002
;;;; Contains: Tests that keywords can be loop keywords
(in-package :cl-test)
;;; Tests of loop keywords
(deftest loop.15.30
(loop :for i :from 1 :to 10 :collect i)
(1 2 3 4 5 6 7 8 9 10))
(deftest loop.15.31
(loop :for i :upfrom 1 :below 10 :by 2 :collect i)
(1 3 5 7 9))
(deftest loop.15.32
(loop :with x = 1 :and y = 2 :return (values x y))
1 2)
(deftest loop.15.33
(loop :named foo :doing (return-from foo 1))
1)
(deftest loop.15.34
(let ((x 0))
(loop
:initially (setq x 2)
:until t
:finally (return x)))
2)
(deftest loop.15.35
(loop :for x :in '(a b c) :collecting x)
(a b c))
(deftest loop.15.36
(loop :for x :in '(a b c) :append (list x))
(a b c))
(deftest loop.15.37
(loop :for x :in '(a b c) :appending (list x))
(a b c))
(deftest loop.15.38
(loop :for x :in '(a b c) :nconc (list x))
(a b c))
(deftest loop.15.39
(loop :for x :in '(a b c) :nconcing (list x))
(a b c))
(deftest loop.15.40
(loop :for x :in '(1 2 3) :count x)
3)
(deftest loop.15.41
(loop :for x :in '(1 2 3) :counting x)
3)
(deftest loop.15.42
(loop :for x :in '(1 2 3) :sum x)
6)
(deftest loop.15.43
(loop :for x :in '(1 2 3) :summing x)
6)
(deftest loop.15.44
(loop :for x :in '(10 20 30) :maximize x)
30)
(deftest loop.15.45
(loop :for x :in '(10 20 30) :maximizing x)
30)
(deftest loop.15.46
(loop :for x :in '(10 20 30) :minimize x)
10)
(deftest loop.15.47
(loop :for x :in '(10 20 30) :minimizing x)
10)
(deftest loop.15.48
(loop :for x :in '(1 2 3 4) :sum x :into foo :of-type fixnum
:finally (return foo))
10)
(deftest loop.15.49
(loop :for x :upfrom 1 :to 10
:if (evenp x) :sum x :into foo
:else :sum x :into bar
:end
:finally (return (values foo bar)))
30 25)
(deftest loop.15.50
(loop :for x :downfrom 10 :above 0
:when (evenp x) :sum x :into foo
:else :sum x :into bar
:end
:finally (return (values foo bar)))
30 25)
(deftest loop.15.51
(loop :for x :in '(a b nil c d nil)
:unless x :count t)
2)
(deftest loop.15.52
(loop :for x :in '(a b nil c d nil)
:unless x :collect x :into bar :and :count t :into foo
:end
finally (return (values bar foo)))
(nil nil)
2)
(deftest loop.15.53
(loop :for x :in '(nil nil a b nil c nil)
:collect x
:until x)
(nil nil a))
(deftest loop.15.54
(loop :for x :in '(a b nil c nil)
:while x :collect x)
(a b))
(deftest loop.15.55
(loop :for x :in '(nil nil a b nil c nil)
:thereis x)
a)
(deftest loop.15.56
(loop :for x :in '(nil nil a b nil c nil)
:never x)
nil)
(deftest loop.15.57
(loop :for x :in '(a b c d e)
:always x)
t)
(deftest loop.15.58
(loop :as x :in '(a b c) :count t)
3)
(deftest loop.15.59
(loop :for i :from 10 :downto 5 :collect i)
(10 9 8 7 6 5))
(deftest loop.15.60
(loop :for i :from 0 :upto 5 :collect i)
(0 1 2 3 4 5))
(deftest loop.15.61
(loop :for x :on '(a b c) :collecting (car x))
(a b c))
(deftest loop.15.62
(loop :for x = '(a b c) :then (cdr x)
:while x
:collect (car x))
(a b c))
(deftest loop.15.63
(loop :for x :across #(a b c) :collect x)
(a b c))
(deftest loop.15.64
(loop :for x :being :the :hash-keys :of (make-hash-table)
:count t)
0)
(deftest loop.15.65
(loop :for x :being :each :hash-key :in (make-hash-table)
:count t)
0)
(deftest loop.15.66
(loop :for x :being :each :hash-value :of (make-hash-table)
:count t)
0)
(deftest loop.15.67
(loop :for x :being :the :hash-values :in (make-hash-table)
:count t)
0)
(deftest loop.15.68
(loop :for x :being :the :hash-values :in (make-hash-table)
:using (:hash-key k)
:count t)
0)
(deftest loop.15.69
(loop :for x :being :the :hash-keys :in (make-hash-table)
:using (:hash-value v)
:count t)
0)
(deftest loop.15.70
(progn
(ignore-errors (delete-package "LOOP.15.PACKAGE"))
(let ((p (make-package "LOOP.15.PACKAGE" :use nil)))
(loop :for x :being :the :symbols :of p :count t)))
0)
(deftest loop.15.71
(progn
(ignore-errors (delete-package "LOOP.15.PACKAGE"))
(let ((p (make-package "LOOP.15.PACKAGE" :use nil)))
(loop :for x :being :each :symbol :of p :count t)))
0)
(deftest loop.15.72
(progn
(ignore-errors (delete-package "LOOP.15.PACKAGE"))
(let ((p (make-package "LOOP.15.PACKAGE" :use nil)))
(loop :for x :being :the :external-symbols :of p :count t)))
0)
(deftest loop.15.73
(progn
(ignore-errors (delete-package "LOOP.15.PACKAGE"))
(let ((p (make-package "LOOP.15.PACKAGE" :use nil)))
(loop :for x :being :each :external-symbol :of p :count t)))
0)
(deftest loop.15.74
(progn
(ignore-errors (delete-package "LOOP.15.PACKAGE"))
(let ((p (make-package "LOOP.15.PACKAGE" :use nil)))
(loop :for x :being :the :present-symbols :of p :count t)))
0)
(deftest loop.15.75
(progn
(ignore-errors (delete-package "LOOP.15.PACKAGE"))
(let ((p (make-package "LOOP.15.PACKAGE" :use nil)))
(loop :for x :being :each :present-symbol :of p :count t)))
0)
;-*- Mode: Lisp -*-
;;;; Author: Paul Dietz
;;;; Created: Thu Nov 21 09:46:27 2002
;;;; Contains: Tests that uninterned symbols can be loop keywords
(in-package :cl-test)
(deftest loop.16.30
(loop #:for i #:from 1 #:to 10 #:collect i)
(1 2 3 4 5 6 7 8 9 10))
(deftest loop.16.31
(loop #:for i #:upfrom 1 #:below 10 #:by 2 #:collect i)
(1 3 5 7 9))
(deftest loop.16.32
(loop #:with x = 1 #:and y = 2 #:return (values x y))
1 2)
(deftest loop.16.33
(loop #:named foo #:doing (return-from foo 1))
1)
(deftest loop.16.34
(let ((x 0))
(loop
#:initially (setq x 2)
#:until t
#:finally (return x)))
2)
(deftest loop.16.35
(loop #:for x #:in '(a b c) #:collecting x)
(a b c))
(deftest loop.16.36
(loop #:for x #:in '(a b c) #:append (list x))
(a b c))
(deftest loop.16.37
(loop #:for x #:in '(a b c) #:appending (list x))
(a b c))
(deftest loop.16.38
(loop #:for x #:in '(a b c) #:nconc (list x))
(a b c))
(deftest loop.16.39
(loop #:for x #:in '(a b c) #:nconcing (list x))
(a b c))
(deftest loop.16.40
(loop #:for x #:in '(1 2 3) #:count x)
3)
(deftest loop.16.41
(loop #:for x #:in '(1 2 3) #:counting x)
3)
(deftest loop.16.42
(loop #:for x #:in '(1 2 3) #:sum x)
6)
(deftest loop.16.43
(loop #:for x #:in '(1 2 3) #:summing x)
6)