~ubuntu-branches/ubuntu/quantal/gclcvs/quantal

« back to all changes in this revision

Viewing changes to ansi-tests/expt.lsp

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2004-06-24 15:13:46 UTC
  • Revision ID: james.westby@ubuntu.com-20040624151346-xh0xaaktyyp7aorc
Tags: 2.7.0-26
C_GC_OFFSET is 2 on m68k-linux

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;-*- Mode:     Lisp -*-
 
2
;;;; Author:   Paul Dietz
 
3
;;;; Created:  Tue Sep  2 19:36:22 2003
 
4
;;;; Contains: Tests of EXPT
 
5
 
 
6
(in-package :cl-test)
 
7
 
 
8
;;; Error tests
 
9
 
 
10
(deftest expt.error.1
 
11
  (signals-error (expt) program-error)
 
12
  t)
 
13
 
 
14
(deftest expt.error.2
 
15
  (signals-error (expt 1 1 1) program-error)
 
16
  t)
 
17
 
 
18
(deftest expt.error.3
 
19
  (signals-error (expt 1 1 nil nil) program-error)
 
20
  t)
 
21
 
 
22
;;; Non-error tests
 
23
 
 
24
(deftest expt.1
 
25
  (expt 0 0)
 
26
  1)
 
27
 
 
28
(deftest expt.2
 
29
  (loop for i from -1000 to 1000
 
30
        always (eql (expt i 0) 1))
 
31
  t)
 
32
 
 
33
(deftest expt.3
 
34
  (loop for i = (random 1.0s3)
 
35
        repeat 1000
 
36
        always (eql (expt i 0) 1.0s0))
 
37
  t)
 
38
 
 
39
(deftest expt.4
 
40
  (loop for i = (random 1.0f6)
 
41
        repeat 1000
 
42
        always (eql (expt i 0) 1.0f0))
 
43
  t)
 
44
 
 
45
(deftest expt.5
 
46
  (loop for i = (random 1.0d10)
 
47
        repeat 1000
 
48
        always (eql (expt i 0) 1.0d0))
 
49
  t)
 
50
 
 
51
(deftest expt.6
 
52
  (loop for i = (random 1.0l10)
 
53
        repeat 1000
 
54
        always (eql (expt i 0) 1.0l0))
 
55
  t)
 
56
 
 
57
(deftest expt.7
 
58
  (loop for i from -1000 to 1000
 
59
        for c = (complex i i)
 
60
        always (eql (expt c 0) 1))
 
61
  t)
 
62
 
 
63
(deftest expt.8
 
64
  (loop for i = (random 1.0s3)
 
65
        for c = (complex i i)
 
66
        repeat 1000
 
67
        always (eql (expt c 0) #c(1.0s0 0.0s0)))
 
68
  t)
 
69
 
 
70
(deftest expt.9
 
71
  (loop for i = (random 1.0f6)
 
72
        for c = (complex i i)
 
73
        repeat 1000
 
74
        always (eql (expt c 0) #c(1.0f0 0.0f0)))
 
75
  t)
 
76
 
 
77
(deftest expt.10
 
78
  (loop for i = (random 1.0d10)
 
79
        for c = (complex i i)
 
80
        repeat 1000
 
81
        always (eql (expt c 0) #c(1.0d0 0.0d0)))
 
82
  t)
 
83
 
 
84
(deftest expt.11
 
85
  (loop for i = (random 1.0l10)
 
86
        for c = (complex i i)
 
87
        repeat 1000
 
88
        always (eql (expt c 0) #c(1.0l0 0.0l0)))
 
89
  t)
 
90
 
 
91
(deftest expt.12
 
92
  (loop for x in *numbers*
 
93
        unless (or (floatp (realpart x))
 
94
                   (eql (expt x 1) x))
 
95
        collect x)
 
96
  nil)
 
97
 
 
98
(deftest expt.13
 
99
  (loop for x in *rationals*
 
100
        unless (and (eql (expt x 2) (* x x))
 
101
                    (or (zerop x)
 
102
                        (eql (expt x -1) (/ x))))
 
103
        collect x)
 
104
  nil)
 
105
 
 
106
(deftest expt.14
 
107
  (expt #c(0 2) 2)
 
108
  -4)
 
109
 
 
110
(deftest expt.15
 
111
  (expt #c(1 1) 2)
 
112
  #c(0 2))
 
113
 
 
114
(deftest expt.16
 
115
  (expt #c(1/2 1/3) 3)
 
116
  #c(-1/24 23/108))
 
117
 
 
118
(deftest expt.17
 
119
  (expt #c(1 1) -2)
 
120
  #c(0 -1/2))
 
121
 
 
122
(deftest expt.18
 
123
  (loop
 
124
   for zero in '(0.0s0 0.0f0 0.0d0 0.0l0)
 
125
   always
 
126
   (loop for i from -1000 to 1000
 
127
         always (or (zerop i)
 
128
                    (eql (expt i zero) (float 1 zero)))))
 
129
  t)
 
130
 
 
131
(deftest expt.19
 
132
  (loop
 
133
   for zero in '(0.0s0 0.0f0 0.0d0 0.0l0)
 
134
   always
 
135
   (loop for i from -1000 to 1000
 
136
         always (or (zerop i)
 
137
                    (eql (expt (float i 0.0s0) zero) (float 1 zero)))))
 
138
  t)
 
139
 
 
140
(deftest expt.20
 
141
  (loop
 
142
   for zero in '(0.0f0 0.0d0 0.0l0)
 
143
   always
 
144
   (loop for i from -1000 to 1000
 
145
         always (or (zerop i)
 
146
                    (eql (expt (float i 0.0f0) zero) (float 1 zero)))))
 
147
  t)
 
148
 
 
149
(deftest expt.21
 
150
  (loop
 
151
   for zero in '(0.0d0 0.0l0)
 
152
   always
 
153
   (loop for i from -1000 to 1000
 
154
         always (or (zerop i)
 
155
                    (eql (expt (float i 0.0d0) zero) (float 1 zero)))))
 
156
  t)
 
157
 
 
158
(deftest expt.22
 
159
  (expt 2.0f0 0.0s0)
 
160
  1.0f0)
 
161
 
 
162
(deftest expt.23
 
163
  (expt 2.0d0 0.0s0)
 
164
  1.0d0)
 
165
 
 
166
(deftest expt.24
 
167
  (expt 2.0l0 0.0s0)
 
168
  1.0l0)
 
169
 
 
170
(deftest expt.25
 
171
  (expt 2.0d0 0.0f0)
 
172
  1.0d0)
 
173
 
 
174
(deftest expt.26
 
175
  (expt 2.0l0 0.0f0)
 
176
  1.0l0)
 
177
 
 
178
(deftest expt.27
 
179
  (expt 2.0l0 0.0d0)
 
180
  1.0l0)
 
181
 
 
182
(deftest expt.28
 
183
  (<= (realpart (expt -8 1/3)) 0.0)
 
184
  nil)
 
185
 
 
186
#|
 
187
;;; FIXME
 
188
;;; I need to think more about how to do approximate float
 
189
;;; equality in a principled way.
 
190
 
 
191
(deftest expt.29
 
192
  (loop for bound in '(1.0s4 1.0f6 1.0d8 1.0l8)
 
193
        for ebound in (list short-float-epsilon single-float-epsilon
 
194
                            double-float-epsilon long-float-epsilon)
 
195
        for ebound2 = (max (* 2 ebound) (/ bound))
 
196
        nconc
 
197
        (loop for x = (1+ (random 1.0f6))
 
198
              for s1 = (sqrt x)
 
199
              for s2 = (expt x 1/2)
 
200
              for error = (/ (abs (- s2 s2)) x)
 
201
              repeat 1000
 
202
              unless (< error ebound2)
 
203
              collect (list x s1 s2)))
 
204
  nil)
 
205
 
 
206
(deftest expt.30
 
207
  (loop for bound in '(1.0s4 1.0f6 1.0d8 1.0l8)
 
208
        for ebound in (list short-float-epsilon single-float-epsilon
 
209
                            double-float-epsilon long-float-epsilon)
 
210
        for ebound2 = (max (* 2 ebound) (/ bound))
 
211
        nconc
 
212
        (loop for x = (- (1+ (random 1.0f6)))
 
213
              for s1 = (sqrt x)
 
214
              for s2 = (expt x 1/2)
 
215
              for error = (/ (abs (- s2 s2)) x)
 
216
              repeat 1000
 
217
              unless (< error ebound2)
 
218
              collect (list x s1 s2)))
 
219
  nil)
 
220
|#