PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/test/boundary4.tcl

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