OLD | NEW |
| (Empty) |
1 puts {# 2008 December 11 | |
2 # | |
3 # The author disclaims copyright to this source code. In place of | |
4 # a legal notice, here is a blessing: | |
5 # | |
6 # May you do good and not evil. | |
7 # May you find forgiveness for yourself and forgive others. | |
8 # May you share freely, never taking more than you give. | |
9 # | |
10 #*********************************************************************** | |
11 # This file implements regression tests for SQLite library. | |
12 # | |
13 # This file is automatically generated from a separate TCL script. | |
14 # This file seeks to exercise integer boundary values. | |
15 # | |
16 # $Id: boundary4.tcl,v 1.3 2009/01/02 15:45:48 shane Exp $ | |
17 | |
18 set testdir [file dirname $argv0] | |
19 source $testdir/tester.tcl | |
20 | |
21 # Many of the boundary tests depend on a working 64-bit implementation. | |
22 if {![working_64bit_int]} { finish_test; return } | |
23 ifcapable !altertable { finish_test; return } | |
24 } | |
25 | |
26 expr srand(0) | |
27 | |
28 # Generate interesting boundary numbers | |
29 # | |
30 foreach x { | |
31 0x7f | |
32 0x7fff | |
33 0x7fffff | |
34 0x7fffffff | |
35 0x7fffffffff | |
36 0x7fffffffffff | |
37 0x7fffffffffffff | |
38 0x7fffffffffffffff | |
39 } { | |
40 set x [expr {wide($x)}] | |
41 set boundarynum($x) 1 | |
42 set boundarynum([expr {$x+1}]) 1 | |
43 set boundarynum([expr {-($x+1)}]) 1 | |
44 set boundarynum([expr {-($x+2)}]) 1 | |
45 set boundarynum([expr {$x+$x+1}]) 1 | |
46 set boundarynum([expr {$x+$x+2}]) 1 | |
47 } | |
48 set x [expr {wide(127)}] | |
49 for {set i 127} {$i<=9} {incr i} { | |
50 set boundarynum($x) 1 | |
51 set boundarynum([expr {$x+1}]) 1 | |
52 set x [expr {wide($x*128 + 127)}] | |
53 } | |
54 | |
55 # Scramble the $inlist into a random order. | |
56 # | |
57 proc scramble {inlist} { | |
58 set y {} | |
59 foreach x $inlist { | |
60 lappend y [list [expr {rand()}] $x] | |
61 } | |
62 set y [lsort $y] | |
63 set outlist {} | |
64 foreach x $y { | |
65 lappend outlist [lindex $x 1] | |
66 } | |
67 return $outlist | |
68 } | |
69 | |
70 # A simple selection sort. Not trying to be efficient. | |
71 # | |
72 proc sort {inlist} { | |
73 set outlist {} | |
74 set mn [lindex $inlist 0] | |
75 foreach x $inlist { | |
76 if {$x<$mn} {set mn $x} | |
77 } | |
78 set outlist $mn | |
79 set mx $mn | |
80 while {1} { | |
81 set valid 0 | |
82 foreach x $inlist { | |
83 if {$x>$mx && (!$valid || $mn>$x)} { | |
84 set mn $x | |
85 set valid 1 | |
86 } | |
87 } | |
88 if {!$valid} break | |
89 lappend outlist $mn | |
90 set mx $mn | |
91 } | |
92 return $outlist | |
93 } | |
94 | |
95 # Reverse the order of a list | |
96 # | |
97 proc reverse {inlist} { | |
98 set i [llength $inlist] | |
99 set outlist {} | |
100 for {incr i -1} {$i>=0} {incr i -1} { | |
101 lappend outlist [lindex $inlist $i] | |
102 } | |
103 return $outlist | |
104 } | |
105 | |
106 set nums1 [scramble [array names boundarynum]] | |
107 set nums2 [scramble [array names boundarynum]] | |
108 | |
109 set tname boundary4 | |
110 puts "do_test $tname-1.1 \173" | |
111 puts " db eval \173" | |
112 puts " CREATE TABLE t1(a,x);" | |
113 set a 0 | |
114 set all_rowid {} | |
115 set all_a {} | |
116 set all_x {} | |
117 foreach r $nums1 { | |
118 incr a | |
119 set t1ra($r) $a | |
120 set t1ar($a) $r | |
121 set x [format %08x%08x [expr {wide($r)>>32}] $r] | |
122 set t1rx($r) $x | |
123 set t1xr($x) $r | |
124 puts " INSERT INTO t1(oid,a,x) VALUES($r,$a,'$x');" | |
125 lappend all_rowid $r | |
126 lappend all_a $a | |
127 lappend all_x $x | |
128 } | |
129 puts " CREATE INDEX t1i1 ON t1(a);" | |
130 puts " CREATE INDEX t1i2 ON t1(x);" | |
131 puts " \175" | |
132 puts "\175 {}" | |
133 | |
134 puts "do_test $tname-1.2 \173" | |
135 puts " db eval \173" | |
136 puts " SELECT count(*) FROM t1" | |
137 puts " \175" | |
138 puts "\175 {[llength $nums1]}" | |
139 | |
140 proc maketest {tnum sql answer} { | |
141 puts "do_test $::tname-$tnum \173" | |
142 puts " db eval \173" | |
143 puts " $sql" | |
144 puts " \175" | |
145 puts "\175 {$answer}" | |
146 } | |
147 | |
148 set ans {} | |
149 foreach r [sort $all_rowid] { | |
150 lappend ans $r $t1ra($r) $t1rx($r) | |
151 } | |
152 maketest 1.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans | |
153 maketest 1.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans | |
154 | |
155 set ans {} | |
156 foreach r [reverse [sort $all_rowid]] { | |
157 lappend ans $r $t1ra($r) $t1rx($r) | |
158 } | |
159 maketest 1.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans | |
160 maketest 1.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans | |
161 | |
162 set ans {} | |
163 foreach a [sort $all_a] { | |
164 set r $t1ar($a) | |
165 lappend ans $r $a $t1rx($r) | |
166 } | |
167 maketest 1.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans | |
168 maketest 1.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans | |
169 | |
170 set ans {} | |
171 foreach a [reverse [sort $all_a]] { | |
172 set r $t1ar($a) | |
173 lappend ans $r $a $t1rx($r) | |
174 } | |
175 maketest 1.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans | |
176 maketest 1.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans | |
177 | |
178 set ans {} | |
179 foreach x [sort $all_x] { | |
180 set r $t1xr($x) | |
181 lappend ans $r $t1ra($r) $x | |
182 } | |
183 maketest 1.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans | |
184 maketest 1.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans | |
185 | |
186 set ans {} | |
187 foreach x [reverse [sort $all_x]] { | |
188 set r $t1xr($x) | |
189 lappend ans $r $t1ra($r) $x | |
190 } | |
191 maketest 1.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans | |
192 maketest 1.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans | |
193 | |
194 maketest 2.1 {UPDATE t1 SET rowid=a, a=rowid} {} | |
195 | |
196 set ans {} | |
197 foreach r [sort $all_rowid] { | |
198 lappend ans $r $t1ra($r) $t1rx($r) | |
199 } | |
200 maketest 2.3 {SELECT a, rowid, x FROM t1 ORDER BY +a} $ans | |
201 maketest 2.4 {SELECT a, rowid, x FROM t1 ORDER BY a} $ans | |
202 | |
203 set ans {} | |
204 foreach r [reverse [sort $all_rowid]] { | |
205 lappend ans $r $t1ra($r) $t1rx($r) | |
206 } | |
207 maketest 2.5 {SELECT a, rowid, x FROM t1 ORDER BY +a DESC} $ans | |
208 maketest 2.6 {SELECT a, rowid, x FROM t1 ORDER BY a DESC} $ans | |
209 | |
210 set ans {} | |
211 foreach a [sort $all_a] { | |
212 set r $t1ar($a) | |
213 lappend ans $r $a $t1rx($r) | |
214 } | |
215 maketest 2.7 {SELECT a, rowid, x FROM t1 ORDER BY +rowid} $ans | |
216 maketest 2.8 {SELECT a, rowid, x FROM t1 ORDER BY rowid} $ans | |
217 | |
218 set ans {} | |
219 foreach a [reverse [sort $all_a]] { | |
220 set r $t1ar($a) | |
221 lappend ans $r $a $t1rx($r) | |
222 } | |
223 maketest 2.9 {SELECT a, rowid, x FROM t1 ORDER BY +rowid DESC} $ans | |
224 maketest 2.10 {SELECT a, rowid, x FROM t1 ORDER BY rowid DESC} $ans | |
225 | |
226 set ans {} | |
227 foreach x [sort $all_x] { | |
228 set r $t1xr($x) | |
229 lappend ans $r $t1ra($r) $x | |
230 } | |
231 maketest 2.11 {SELECT a, rowid, x FROM t1 ORDER BY +x} $ans | |
232 maketest 2.12 {SELECT a, rowid, x FROM t1 ORDER BY x} $ans | |
233 | |
234 set ans {} | |
235 foreach x [reverse [sort $all_x]] { | |
236 set r $t1xr($x) | |
237 lappend ans $r $t1ra($r) $x | |
238 } | |
239 maketest 2.13 {SELECT a, rowid, x FROM t1 ORDER BY +x DESC} $ans | |
240 maketest 2.14 {SELECT a, rowid, x FROM t1 ORDER BY x DESC} $ans | |
241 | |
242 maketest 3.1 {UPDATE t1 SET rowid=a, a=rowid} {} | |
243 maketest 3.2 {ALTER TABLE t1 ADD COLUMN z; UPDATE t1 SET z=zeroblob(600)} {} | |
244 | |
245 set ans {} | |
246 foreach r [sort $all_rowid] { | |
247 lappend ans $r $t1ra($r) $t1rx($r) | |
248 } | |
249 maketest 3.3 {SELECT rowid, a, x FROM t1 ORDER BY +rowid} $ans | |
250 maketest 3.4 {SELECT rowid, a, x FROM t1 ORDER BY rowid} $ans | |
251 | |
252 set ans {} | |
253 foreach r [reverse [sort $all_rowid]] { | |
254 lappend ans $r $t1ra($r) $t1rx($r) | |
255 } | |
256 maketest 3.5 {SELECT rowid, a, x FROM t1 ORDER BY +rowid DESC} $ans | |
257 maketest 3.6 {SELECT rowid, a, x FROM t1 ORDER BY rowid DESC} $ans | |
258 | |
259 set ans {} | |
260 foreach a [sort $all_a] { | |
261 set r $t1ar($a) | |
262 lappend ans $r $a $t1rx($r) | |
263 } | |
264 maketest 3.7 {SELECT rowid, a, x FROM t1 ORDER BY +a} $ans | |
265 maketest 3.8 {SELECT rowid, a, x FROM t1 ORDER BY a} $ans | |
266 | |
267 set ans {} | |
268 foreach a [reverse [sort $all_a]] { | |
269 set r $t1ar($a) | |
270 lappend ans $r $a $t1rx($r) | |
271 } | |
272 maketest 3.9 {SELECT rowid, a, x FROM t1 ORDER BY +a DESC} $ans | |
273 maketest 3.10 {SELECT rowid, a, x FROM t1 ORDER BY a DESC} $ans | |
274 | |
275 set ans {} | |
276 foreach x [sort $all_x] { | |
277 set r $t1xr($x) | |
278 lappend ans $r $t1ra($r) $x | |
279 } | |
280 maketest 3.11 {SELECT rowid, a, x FROM t1 ORDER BY +x} $ans | |
281 maketest 3.12 {SELECT rowid, a, x FROM t1 ORDER BY x} $ans | |
282 | |
283 set ans {} | |
284 foreach x [reverse [sort $all_x]] { | |
285 set r $t1xr($x) | |
286 lappend ans $r $t1ra($r) $x | |
287 } | |
288 maketest 3.13 {SELECT rowid, a, x FROM t1 ORDER BY +x DESC} $ans | |
289 maketest 3.14 {SELECT rowid, a, x FROM t1 ORDER BY x DESC} $ans | |
290 | |
291 | |
292 maketest 4.1 {UPDATE t1 SET rowid=a, a=rowid, x=z, z=x} {} | |
293 | |
294 set ans {} | |
295 foreach r [sort $all_rowid] { | |
296 lappend ans $r $t1ra($r) $t1rx($r) | |
297 } | |
298 maketest 4.3 {SELECT a, rowid, z FROM t1 ORDER BY +a} $ans | |
299 maketest 4.4 {SELECT a, rowid, z FROM t1 ORDER BY a} $ans | |
300 | |
301 set ans {} | |
302 foreach r [reverse [sort $all_rowid]] { | |
303 lappend ans $r $t1ra($r) $t1rx($r) | |
304 } | |
305 maketest 4.5 {SELECT a, rowid, z FROM t1 ORDER BY +a DESC} $ans | |
306 maketest 4.6 {SELECT a, rowid, z FROM t1 ORDER BY a DESC} $ans | |
307 | |
308 set ans {} | |
309 foreach a [sort $all_a] { | |
310 set r $t1ar($a) | |
311 lappend ans $r $a $t1rx($r) | |
312 } | |
313 maketest 4.7 {SELECT a, rowid, z FROM t1 ORDER BY +rowid} $ans | |
314 maketest 4.8 {SELECT a, rowid, z FROM t1 ORDER BY rowid} $ans | |
315 | |
316 set ans {} | |
317 foreach a [reverse [sort $all_a]] { | |
318 set r $t1ar($a) | |
319 lappend ans $r $a $t1rx($r) | |
320 } | |
321 maketest 4.9 {SELECT a, rowid, z FROM t1 ORDER BY +rowid DESC} $ans | |
322 maketest 4.10 {SELECT a, rowid, z FROM t1 ORDER BY rowid DESC} $ans | |
323 | |
324 set ans {} | |
325 foreach x [sort $all_x] { | |
326 set r $t1xr($x) | |
327 lappend ans $r $t1ra($r) $x | |
328 } | |
329 maketest 4.11 {SELECT a, rowid, z FROM t1 ORDER BY +z} $ans | |
330 maketest 4.12 {SELECT a, rowid, z FROM t1 ORDER BY z} $ans | |
331 | |
332 set ans {} | |
333 foreach x [reverse [sort $all_x]] { | |
334 set r $t1xr($x) | |
335 lappend ans $r $t1ra($r) $x | |
336 } | |
337 maketest 4.13 {SELECT a, rowid, z FROM t1 ORDER BY +z DESC} $ans | |
338 maketest 4.14 {SELECT a, rowid, z FROM t1 ORDER BY z DESC} $ans | |
339 | |
340 puts {finish_test} | |
OLD | NEW |