- add sources.
[platform/framework/web/crosswalk.git] / src / third_party / sqlite / src / test / boundary4.tcl
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}