Commit 0423aeaf authored by pfdietz's avatar pfdietz

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)
(deftest loop.16.44
(loop #:for x #:in '(10 20 30) #:maximize x)
30)
(deftest loop.16.45
(loop #:for x #:in '(10 20 30) #:maximizing x)
30)
(deftest loop.16.46
(loop #:for x #:in '(10 20 30) #:minimize x)
10)
(deftest loop.16.47
(loop #:for x #:in '(10 20 30) #:minimizing x)
10)
(deftest loop.16.48
(loop #:for x #:in '(1 2 3 4) #:sum x #:into foo #:of-type fixnum
#:finally (return foo))
10)
(deftest loop.16.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.16.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.16.51
(loop #:for x #:in '(a b nil c d nil)
#:unless x #:count t)
2)
(deftest loop.16.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.16.53
(loop #:for x #:in '(nil nil a b nil c nil)
#:collect x
#:until x)
(nil nil a))
(deftest loop.16.54
(loop #:for x #:in '(a b nil c nil)
#:while x #:collect x)
(a b))
(deftest loop.16.55
(loop #:for x #:in '(nil nil a b nil c nil)
#:thereis x)
a)
(deftest loop.16.56
(loop #:for x #:in '(nil nil a b nil c nil)
#:never x)
nil)
(deftest loop.16.57
(loop #:for x #:in '(a b c d e)
#:always x)
t)
(deftest loop.16.58
(loop #:as x #:in '(a b c) #:count t)
3)
(deftest loop.16.59
(loop #:for i #:from 10 #:downto 5 #:collect i)
(10 9 8 7 6 5))
(deftest loop.16.60
(loop #:for i #:from 0 #:upto 5 #:collect i)
(0 1 2 3 4 5))
(deftest loop.16.61
(loop #:for x #:on '(a b c) #:collecting (car x))
(a b c))
(deftest loop.16.62
(loop #:for x = '(a b c) #:then (cdr x)
#:while x
#:collect (car x))
(a b c))
(deftest loop.16.63
(loop #:for x #:across #(a b c) #:collect x)
(a b c))
(deftest loop.16.64
(loop #:for x #:being #:the #:hash-keys #:of (make-hash-table)
#:count t)
0)
(deftest loop.16.65
(loop #:for x #:being #:each #:hash-key #:in (make-hash-table)
#:count t)
0)
(deftest loop.16.66
(loop #:for x #:being #:each #:hash-value #:of (make-hash-table)
#:count t)
0)
(deftest loop.16.67
(loop #:for x #:being #:the #:hash-values #:in (make-hash-table)
#:count t)
0)
(deftest loop.16.68
(loop #:for x #:being #:the #:hash-values #:in (make-hash-table)
#:using (#:hash-key k)
#:count t)
0)
(deftest loop.16.69
(loop #:for x #:being #:the #:hash-keys #:in (make-hash-table)
#:using (#:hash-value v)
#:count t)
0)