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: boundary2.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 } | |
24 | |
25 expr srand(0) | |
26 | |
27 # Generate interesting boundary numbers | |
28 # | |
29 foreach x { | |
30 0 | |
31 1 | |
32 0x7f | |
33 0x7fff | |
34 0x7fffff | |
35 0x7fffffff | |
36 0x7fffffffff | |
37 0x7fffffffffff | |
38 0x7fffffffffffff | |
39 0x7fffffffffffffff | |
40 } { | |
41 set x [expr {wide($x)}] | |
42 set boundarynum($x) 1 | |
43 set boundarynum([expr {$x+1}]) 1 | |
44 set boundarynum([expr {-($x+1)}]) 1 | |
45 set boundarynum([expr {-($x+2)}]) 1 | |
46 set boundarynum([expr {$x+$x+1}]) 1 | |
47 set boundarynum([expr {$x+$x+2}]) 1 | |
48 } | |
49 set x [expr {wide(127)}] | |
50 for {set i 1} {$i<=9} {incr i} { | |
51 set boundarynum($x) 1 | |
52 set boundarynum([expr {$x+1}]) 1 | |
53 set x [expr {wide($x*128 + 127)}] | |
54 } | |
55 | |
56 # Scramble the $inlist into a random order. | |
57 # | |
58 proc scramble {inlist} { | |
59 set y {} | |
60 foreach x $inlist { | |
61 lappend y [list [expr {rand()}] $x] | |
62 } | |
63 set y [lsort $y] | |
64 set outlist {} | |
65 foreach x $y { | |
66 lappend outlist [lindex $x 1] | |
67 } | |
68 return $outlist | |
69 } | |
70 | |
71 # A simple selection sort. Not trying to be efficient. | |
72 # | |
73 proc sort {inlist} { | |
74 set outlist {} | |
75 set mn [lindex $inlist 0] | |
76 foreach x $inlist { | |
77 if {$x<$mn} {set mn $x} | |
78 } | |
79 set outlist $mn | |
80 set mx $mn | |
81 while {1} { | |
82 set valid 0 | |
83 foreach x $inlist { | |
84 if {$x>$mx && (!$valid || $mn>$x)} { | |
85 set mn $x | |
86 set valid 1 | |
87 } | |
88 } | |
89 if {!$valid} break | |
90 lappend outlist $mn | |
91 set mx $mn | |
92 } | |
93 return $outlist | |
94 } | |
95 | |
96 # Reverse the order of a list | |
97 # | |
98 proc reverse {inlist} { | |
99 set i [llength $inlist] | |
100 set outlist {} | |
101 for {incr i -1} {$i>=0} {incr i -1} { | |
102 lappend outlist [lindex $inlist $i] | |
103 } | |
104 return $outlist | |
105 } | |
106 | |
107 set nums1 [scramble [array names boundarynum]] | |
108 set nums2 [scramble [array names boundarynum]] | |
109 | |
110 set tname boundary2 | |
111 puts "do_test $tname-1.1 \173" | |
112 puts " db eval \173" | |
113 puts " CREATE TABLE t1(r INTEGER, a INTEGER, x TEXT);" | |
114 set a 0 | |
115 foreach r $nums1 { | |
116 incr a | |
117 set t1ra($r) $a | |
118 set t1ar($a) $r | |
119 set x [format %08x%08x [expr {wide($r)>>32}] $r] | |
120 set t1rx($r) $x | |
121 set t1xr($x) $r | |
122 puts " INSERT INTO t1 VALUES($r,$a,'$x');" | |
123 } | |
124 puts " CREATE INDEX t1i1 ON t1(r);" | |
125 puts " CREATE INDEX t1i2 ON t1(a);" | |
126 puts " CREATE INDEX t1i3 ON t1(x);" | |
127 puts " \175" | |
128 puts "\175 {}" | |
129 | |
130 puts "do_test $tname-1.2 \173" | |
131 puts " db eval \173" | |
132 puts " SELECT count(*) FROM t1" | |
133 puts " \175" | |
134 puts "\175 {64}" | |
135 | |
136 set nums3 $nums2 | |
137 lappend nums3 9.22337303685477580800e+18 | |
138 lappend nums3 -9.22337303685477580800e+18 | |
139 | |
140 set i 0 | |
141 foreach r $nums3 { | |
142 incr i | |
143 | |
144 if {abs($r)<9.22337203685477580800e+18} { | |
145 set x $t1rx($r) | |
146 set a $t1ra($r) | |
147 set r5 $r.5 | |
148 set r0 $r.0 | |
149 puts "do_test $tname-2.$i.1 \173" | |
150 puts " db eval \173" | |
151 puts " SELECT * FROM t1 WHERE r=$r" | |
152 puts " \175" | |
153 puts "\175 {$r $a $x}" | |
154 puts "do_test $tname-2.$i.2 \173" | |
155 puts " db eval \173" | |
156 puts " SELECT r, a FROM t1 WHERE x='$x'" | |
157 puts " \175" | |
158 puts "\175 {$r $a}" | |
159 puts "do_test $tname-2.$i.3 \173" | |
160 puts " db eval \173" | |
161 puts " SELECT r, x FROM t1 WHERE a=$a" | |
162 puts " \175" | |
163 puts "\175 {$r $x}" | |
164 } | |
165 | |
166 foreach op {> >= < <=} subno {gt ge lt le} { | |
167 | |
168 ################################################################ 2.x.y.1 | |
169 set rset {} | |
170 set aset {} | |
171 foreach rx $nums2 { | |
172 if "\$rx $op \$r" { | |
173 lappend rset $rx | |
174 lappend aset $t1ra($rx) | |
175 } | |
176 } | |
177 puts "do_test $tname-2.$i.$subno.1 \173" | |
178 puts " db eval \173" | |
179 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a" | |
180 puts " \175" | |
181 puts "\175 {[sort $aset]}" | |
182 | |
183 ################################################################ 2.x.y.2 | |
184 puts "do_test $tname-2.$i.$subno.2 \173" | |
185 puts " db eval \173" | |
186 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a DESC" | |
187 puts " \175" | |
188 puts "\175 {[reverse [sort $aset]]}" | |
189 | |
190 ################################################################ 2.x.y.3 | |
191 set aset {} | |
192 foreach rx [sort $rset] { | |
193 lappend aset $t1ra($rx) | |
194 } | |
195 puts "do_test $tname-2.$i.$subno.3 \173" | |
196 puts " db eval \173" | |
197 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r" | |
198 puts " \175" | |
199 puts "\175 {$aset}" | |
200 | |
201 ################################################################ 2.x.y.4 | |
202 set aset {} | |
203 foreach rx [reverse [sort $rset]] { | |
204 lappend aset $t1ra($rx) | |
205 } | |
206 puts "do_test $tname-2.$i.$subno.4 \173" | |
207 puts " db eval \173" | |
208 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r DESC" | |
209 puts " \175" | |
210 puts "\175 {$aset}" | |
211 | |
212 ################################################################ 2.x.y.5 | |
213 set aset {} | |
214 set xset {} | |
215 foreach rx $rset { | |
216 lappend xset $t1rx($rx) | |
217 } | |
218 foreach x [sort $xset] { | |
219 set rx $t1xr($x) | |
220 lappend aset $t1ra($rx) | |
221 } | |
222 puts "do_test $tname-2.$i.$subno.5 \173" | |
223 puts " db eval \173" | |
224 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY x" | |
225 puts " \175" | |
226 puts "\175 {$aset}" | |
227 | |
228 ################################################################ 2.x.y.10 | |
229 if {abs($r)>9223372036854775808 || [string length $r5]>15} continue | |
230 set rset {} | |
231 set aset {} | |
232 foreach rx $nums2 { | |
233 if "\$rx $op \$r0" { | |
234 lappend rset $rx | |
235 } | |
236 } | |
237 foreach rx [sort $rset] { | |
238 lappend aset $t1ra($rx) | |
239 } | |
240 puts "do_test $tname-2.$i.$subno.10 \173" | |
241 puts " db eval \173" | |
242 puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r" | |
243 puts " \175" | |
244 puts "\175 {$aset}" | |
245 | |
246 ################################################################ 2.x.y.11 | |
247 set aset {} | |
248 foreach rx [reverse [sort $rset]] { | |
249 lappend aset $t1ra($rx) | |
250 } | |
251 puts "do_test $tname-2.$i.$subno.11 \173" | |
252 puts " db eval \173" | |
253 puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r DESC" | |
254 puts " \175" | |
255 puts "\175 {$aset}" | |
256 | |
257 | |
258 ################################################################ 2.x.y.12 | |
259 set rset {} | |
260 set aset {} | |
261 foreach rx $nums2 { | |
262 if "\$rx $op \$r5" { | |
263 lappend rset $rx | |
264 } | |
265 } | |
266 foreach rx [sort $rset] { | |
267 lappend aset $t1ra($rx) | |
268 } | |
269 puts "do_test $tname-2.$i.$subno.12 \173" | |
270 puts " db eval \173" | |
271 puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r" | |
272 puts " \175" | |
273 puts "\175 {$aset}" | |
274 | |
275 ################################################################ 2.x.y.13 | |
276 set aset {} | |
277 foreach rx [reverse [sort $rset]] { | |
278 lappend aset $t1ra($rx) | |
279 } | |
280 puts "do_test $tname-2.$i.$subno.13 \173" | |
281 puts " db eval \173" | |
282 puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r DESC" | |
283 puts " \175" | |
284 puts "\175 {$aset}" | |
285 } | |
286 } | |
287 | |
288 puts "do_test $tname-3.1 \173" | |
289 puts " db eval \173" | |
290 puts " DROP INDEX t1i1;" | |
291 puts " DROP INDEX t1i2;" | |
292 puts " DROP INDEX t1i3;" | |
293 puts " \175" | |
294 puts "\175 {}" | |
295 | |
296 set i 0 | |
297 foreach r $nums3 { | |
298 incr i | |
299 | |
300 if {abs($r)<9.22337203685477580800e+18} { | |
301 set x $t1rx($r) | |
302 set a $t1ra($r) | |
303 set r5 $r.5 | |
304 set r0 $r.0 | |
305 puts "do_test $tname-4.$i.1 \173" | |
306 puts " db eval \173" | |
307 puts " SELECT * FROM t1 WHERE r=$r" | |
308 puts " \175" | |
309 puts "\175 {$r $a $x}" | |
310 puts "do_test $tname-4.$i.2 \173" | |
311 puts " db eval \173" | |
312 puts " SELECT r, a FROM t1 WHERE x='$x'" | |
313 puts " \175" | |
314 puts "\175 {$r $a}" | |
315 puts "do_test $tname-4.$i.3 \173" | |
316 puts " db eval \173" | |
317 puts " SELECT r, x FROM t1 WHERE a=$a" | |
318 puts " \175" | |
319 puts "\175 {$r $x}" | |
320 } | |
321 | |
322 foreach op {> >= < <=} subno {gt ge lt le} { | |
323 | |
324 ################################################################ 2.x.y.1 | |
325 set rset {} | |
326 set aset {} | |
327 foreach rx $nums2 { | |
328 if "\$rx $op \$r" { | |
329 lappend rset $rx | |
330 lappend aset $t1ra($rx) | |
331 } | |
332 } | |
333 puts "do_test $tname-4.$i.$subno.1 \173" | |
334 puts " db eval \173" | |
335 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a" | |
336 puts " \175" | |
337 puts "\175 {[sort $aset]}" | |
338 | |
339 ################################################################ 2.x.y.2 | |
340 puts "do_test $tname-4.$i.$subno.2 \173" | |
341 puts " db eval \173" | |
342 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY a DESC" | |
343 puts " \175" | |
344 puts "\175 {[reverse [sort $aset]]}" | |
345 | |
346 ################################################################ 2.x.y.3 | |
347 set aset {} | |
348 foreach rx [sort $rset] { | |
349 lappend aset $t1ra($rx) | |
350 } | |
351 puts "do_test $tname-4.$i.$subno.3 \173" | |
352 puts " db eval \173" | |
353 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r" | |
354 puts " \175" | |
355 puts "\175 {$aset}" | |
356 | |
357 ################################################################ 2.x.y.4 | |
358 set aset {} | |
359 foreach rx [reverse [sort $rset]] { | |
360 lappend aset $t1ra($rx) | |
361 } | |
362 puts "do_test $tname-4.$i.$subno.4 \173" | |
363 puts " db eval \173" | |
364 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY r DESC" | |
365 puts " \175" | |
366 puts "\175 {$aset}" | |
367 | |
368 ################################################################ 2.x.y.5 | |
369 set aset {} | |
370 set xset {} | |
371 foreach rx $rset { | |
372 lappend xset $t1rx($rx) | |
373 } | |
374 foreach x [sort $xset] { | |
375 set rx $t1xr($x) | |
376 lappend aset $t1ra($rx) | |
377 } | |
378 puts "do_test $tname-4.$i.$subno.5 \173" | |
379 puts " db eval \173" | |
380 puts " SELECT a FROM t1 WHERE r $op $r ORDER BY x" | |
381 puts " \175" | |
382 puts "\175 {$aset}" | |
383 | |
384 ################################################################ 2.x.y.10 | |
385 if {abs($r)>9223372036854775808 || [string length $r5]>15} continue | |
386 set rset {} | |
387 set aset {} | |
388 foreach rx $nums2 { | |
389 if "\$rx $op \$r0" { | |
390 lappend rset $rx | |
391 } | |
392 } | |
393 foreach rx [sort $rset] { | |
394 lappend aset $t1ra($rx) | |
395 } | |
396 puts "do_test $tname-4.$i.$subno.10 \173" | |
397 puts " db eval \173" | |
398 puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r" | |
399 puts " \175" | |
400 puts "\175 {$aset}" | |
401 | |
402 ################################################################ 2.x.y.11 | |
403 set aset {} | |
404 foreach rx [reverse [sort $rset]] { | |
405 lappend aset $t1ra($rx) | |
406 } | |
407 puts "do_test $tname-4.$i.$subno.11 \173" | |
408 puts " db eval \173" | |
409 puts " SELECT a FROM t1 WHERE r $op $r0 ORDER BY r DESC" | |
410 puts " \175" | |
411 puts "\175 {$aset}" | |
412 | |
413 | |
414 ################################################################ 2.x.y.12 | |
415 set rset {} | |
416 set aset {} | |
417 foreach rx $nums2 { | |
418 if "\$rx $op \$r5" { | |
419 lappend rset $rx | |
420 } | |
421 } | |
422 foreach rx [sort $rset] { | |
423 lappend aset $t1ra($rx) | |
424 } | |
425 puts "do_test $tname-4.$i.$subno.12 \173" | |
426 puts " db eval \173" | |
427 puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r" | |
428 puts " \175" | |
429 puts "\175 {$aset}" | |
430 | |
431 ################################################################ 2.x.y.13 | |
432 set aset {} | |
433 foreach rx [reverse [sort $rset]] { | |
434 lappend aset $t1ra($rx) | |
435 } | |
436 puts "do_test $tname-4.$i.$subno.13 \173" | |
437 puts " db eval \173" | |
438 puts " SELECT a FROM t1 WHERE r $op $r5 ORDER BY r DESC" | |
439 puts " \175" | |
440 puts "\175 {$aset}" | |
441 } | |
442 } | |
443 | |
444 | |
445 puts {finish_test} | |
OLD | NEW |