/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 89335d48dd350161cdc4a83ece83a54e9e5c6fc2:


0000: 23 20 32 30 30 38 20 4a 75 6e 65 20 32 31 0a 23  # 2008 June 21.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 0a 0a 73 65 74 20 74 65 73 74  ****.#..set test
0170: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0180: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0190: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
01a0: 2e 74 63 6c 0a 64 62 20 63 6c 6f 73 65 0a 0a 23  .tcl.db close..#
01b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 74 65 73 74  ---------.# test
0200: 5f 73 75 69 74 65 20 4e 41 4d 45 20 4f 50 54 49  _suite NAME OPTI
0210: 4f 4e 53 0a 23 0a 23 20 77 68 65 72 65 20 61 76  ONS.#.# where av
0220: 61 69 6c 61 62 6c 65 20 6f 70 74 69 6f 6e 73 20  ailable options 
0230: 61 72 65 3a 20 20 0a 23 0a 23 20 20 20 20 20 20  are:  .#.#      
0240: 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 54 49   -description TI
0250: 54 4c 45 20 20 20 20 20 20 20 20 20 20 20 20 20  TLE             
0260: 20 20 20 20 20 28 64 65 66 61 75 6c 74 20 22 22       (default ""
0270: 29 0a 23 20 20 20 20 20 20 20 2d 69 6e 69 74 69  ).#       -initi
0280: 61 6c 69 7a 65 20 20 53 43 52 49 50 54 20 20 20  alize  SCRIPT   
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
02a0: 65 66 61 75 6c 74 20 22 22 29 0a 23 20 20 20 20  efault "").#    
02b0: 20 20 20 2d 73 68 75 74 64 6f 77 6e 20 20 20 20     -shutdown    
02c0: 53 43 52 49 50 54 20 20 20 20 20 20 20 20 20 20  SCRIPT          
02d0: 20 20 20 20 20 20 20 28 64 65 66 61 75 6c 74 20         (default 
02e0: 22 22 29 0a 23 20 20 20 20 20 20 20 2d 70 72 65  "").#       -pre
02f0: 73 71 6c 20 20 20 20 20 20 53 51 4c 20 20 20 20  sql      SQL    
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 28 64 65 66 61 75 6c 74 20 22 22 29 0a 23 20 20  (default "").#  
0320: 20 20 20 20 20 2d 66 69 6c 65 73 20 20 20 20 20       -files     
0330: 20 20 4c 49 53 54 2d 4f 46 2d 46 49 4c 45 53 20    LIST-OF-FILES 
0340: 20 20 20 20 20 20 20 20 20 28 64 65 66 61 75 6c           (defaul
0350: 74 20 24 3a 3a 41 4c 4c 54 45 53 54 53 29 0a 23  t $::ALLTESTS).#
0360: 20 20 20 20 20 20 20 2d 70 72 65 66 69 78 20 20         -prefix  
0370: 20 20 20 20 4e 41 4d 45 20 20 20 20 20 20 20 20      NAME        
0380: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 66 61             (defa
0390: 75 6c 74 20 22 24 3a 3a 4e 41 4d 45 2e 22 29 0a  ult "$::NAME.").
03a0: 23 0a 70 72 6f 63 20 74 65 73 74 5f 73 75 69 74  #.proc test_suit
03b0: 65 20 7b 6e 61 6d 65 20 61 72 67 73 7d 20 7b 0a  e {name args} {.
03c0: 0a 20 20 73 65 74 20 64 65 66 61 75 6c 74 28 2d  .  set default(-
03d0: 73 68 75 74 64 6f 77 6e 29 20 20 20 20 22 22 0a  shutdown)    "".
03e0: 20 20 73 65 74 20 64 65 66 61 75 6c 74 28 2d 69    set default(-i
03f0: 6e 69 74 69 61 6c 69 7a 65 29 20 20 22 22 0a 20  nitialize)  "". 
0400: 20 73 65 74 20 64 65 66 61 75 6c 74 28 2d 70 72   set default(-pr
0410: 65 73 71 6c 29 20 20 20 20 20 20 22 22 0a 20 20  esql)      "".  
0420: 73 65 74 20 64 65 66 61 75 6c 74 28 2d 64 65 73  set default(-des
0430: 63 72 69 70 74 69 6f 6e 29 20 22 6e 6f 20 64 65  cription) "no de
0440: 73 63 72 69 70 74 69 6f 6e 20 73 75 70 70 6c 69  scription suppli
0450: 65 64 20 28 66 69 78 6d 65 29 22 0a 20 20 73 65  ed (fixme)".  se
0460: 74 20 64 65 66 61 75 6c 74 28 2d 66 69 6c 65 73  t default(-files
0470: 29 20 20 20 20 20 20 20 22 22 0a 20 20 73 65 74  )       "".  set
0480: 20 64 65 66 61 75 6c 74 28 2d 70 72 65 66 69 78   default(-prefix
0490: 29 20 20 20 20 20 20 22 24 7b 6e 61 6d 65 7d 2e  )      "${name}.
04a0: 22 0a 0a 20 20 61 72 72 61 79 20 73 65 74 20 6f  "..  array set o
04b0: 70 74 69 6f 6e 73 20 5b 61 72 72 61 79 20 67 65  ptions [array ge
04c0: 74 20 64 65 66 61 75 6c 74 5d 0a 20 20 69 66 20  t default].  if 
04d0: 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 5d  {[llength $args]
04e0: 25 32 7d 20 7b 0a 20 20 20 20 65 72 72 6f 72 20  %2} {.    error 
04f0: 22 75 6e 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f  "uneven number o
0500: 66 20 6f 70 74 69 6f 6e 73 2f 73 77 69 74 63 68  f options/switch
0510: 65 73 20 70 61 73 73 65 64 20 74 6f 20 74 65 73  es passed to tes
0520: 74 5f 73 75 69 74 65 22 0a 20 20 7d 0a 20 20 66  t_suite".  }.  f
0530: 6f 72 65 61 63 68 20 7b 6b 20 76 7d 20 24 61 72  oreach {k v} $ar
0540: 67 73 20 7b 0a 20 20 20 20 73 65 74 20 6f 20 5b  gs {.    set o [
0550: 61 72 72 61 79 20 6e 61 6d 65 73 20 6f 70 74 69  array names opti
0560: 6f 6e 73 20 24 7b 6b 7d 2a 5d 0a 20 20 20 20 69  ons ${k}*].    i
0570: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6f 5d 3e  f {[llength $o]>
0580: 31 7d 20 20 7b 20 65 72 72 6f 72 20 22 61 6d 62  1}  { error "amb
0590: 69 67 75 6f 75 73 20 6f 70 74 69 6f 6e 3a 20 24  iguous option: $
05a0: 6b 22 20 7d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c  k" }.    if {[ll
05b0: 65 6e 67 74 68 20 24 6f 5d 3d 3d 30 7d 20 7b 20  ength $o]==0} { 
05c0: 65 72 72 6f 72 20 22 75 6e 6b 6e 6f 77 6e 20 6f  error "unknown o
05d0: 70 74 69 6f 6e 3a 20 24 6b 22 20 7d 0a 20 20 20  ption: $k" }.   
05e0: 20 73 65 74 20 6f 70 74 69 6f 6e 73 28 5b 6c 69   set options([li
05f0: 6e 64 65 78 20 24 6f 20 30 5d 29 20 24 76 0a 20  ndex $o 0]) $v. 
0600: 20 7d 0a 0a 20 20 73 65 74 20 20 20 20 20 3a 3a   }..  set     ::
0610: 74 65 73 74 73 70 65 63 28 24 6e 61 6d 65 29 20  testspec($name) 
0620: 5b 61 72 72 61 79 20 67 65 74 20 6f 70 74 69 6f  [array get optio
0630: 6e 73 5d 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a  ns].  lappend ::
0640: 74 65 73 74 73 75 69 74 65 6c 69 73 74 20 24 6e  testsuitelist $n
0650: 61 6d 65 0a 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ame..}..#-------
0660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06a0: 2d 2d 0a 23 20 74 65 73 74 5f 73 65 74 20 41 52  --.# test_set AR
06b0: 47 53 2e 2e 2e 0a 23 0a 70 72 6f 63 20 74 65 73  GS....#.proc tes
06c0: 74 5f 73 65 74 20 7b 61 72 67 73 7d 20 7b 0a 20  t_set {args} {. 
06d0: 20 73 65 74 20 69 73 45 78 63 6c 75 64 65 20 30   set isExclude 0
06e0: 0a 20 20 66 6f 72 65 61 63 68 20 61 20 24 61 72  .  foreach a $ar
06f0: 67 73 20 7b 0a 20 20 20 20 69 66 20 7b 5b 73 74  gs {.    if {[st
0700: 72 69 6e 67 20 6d 61 74 63 68 20 2d 2a 20 24 61  ring match -* $a
0710: 5d 7d 20 7b 0a 20 20 20 20 20 20 73 77 69 74 63  ]} {.      switc
0720: 68 20 2d 2d 20 24 61 20 7b 0a 20 20 20 20 20 20  h -- $a {.      
0730: 20 20 2d 69 6e 63 6c 75 64 65 20 7b 20 73 65 74    -include { set
0740: 20 69 73 45 78 63 6c 75 64 65 20 30 20 7d 0a 20   isExclude 0 }. 
0750: 20 20 20 20 20 20 20 2d 65 78 63 6c 75 64 65 20         -exclude 
0760: 7b 20 73 65 74 20 69 73 45 78 63 6c 75 64 65 20  { set isExclude 
0770: 31 20 7d 0a 20 20 20 20 20 20 20 20 64 65 66 61  1 }.        defa
0780: 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ult {.          
0790: 65 72 72 6f 72 20 22 55 6e 6b 6e 6f 77 6e 20 73  error "Unknown s
07a0: 77 69 74 63 68 3a 20 24 61 22 0a 20 20 20 20 20  witch: $a".     
07b0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
07c0: 20 7d 20 65 6c 73 65 69 66 20 7b 24 69 73 45 78   } elseif {$isEx
07d0: 63 6c 75 64 65 20 3d 3d 20 30 7d 20 7b 0a 20 20  clude == 0} {.  
07e0: 20 20 20 20 66 6f 72 65 61 63 68 20 66 20 24 61      foreach f $a
07f0: 20 7b 20 73 65 74 20 74 28 24 66 29 20 31 20 7d   { set t($f) 1 }
0800: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
0810: 20 20 20 20 66 6f 72 65 61 63 68 20 66 20 24 61      foreach f $a
0820: 20 7b 20 61 72 72 61 79 20 75 6e 73 65 74 20 74   { array unset t
0830: 20 24 66 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a   $f }.    }.  }.
0840: 0a 20 20 72 65 74 75 72 6e 20 5b 61 72 72 61 79  .  return [array
0850: 20 6e 61 6d 65 73 20 74 5d 0a 7d 0a 0a 23 2d 2d   names t].}..#--
0860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08a0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 53 65 74 20 75 70  -------.# Set up
08b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67   the following g
08c0: 6c 6f 62 61 6c 20 6c 69 73 74 20 76 61 72 69 61  lobal list varia
08d0: 62 6c 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20  bles containing 
08e0: 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 0a 23 20  the names of .# 
08f0: 76 61 72 69 6f 75 73 20 74 65 73 74 20 73 63 72  various test scr
0900: 69 70 74 73 3a 0a 23 0a 23 20 20 20 24 61 6c 6c  ipts:.#.#   $all
0910: 74 65 73 74 73 0a 23 20 20 20 24 61 6c 6c 71 75  tests.#   $allqu
0920: 69 63 6b 74 65 73 74 73 0a 23 0a 73 65 74 20 61  icktests.#.set a
0930: 6c 6c 74 65 73 74 73 20 5b 6c 69 73 74 5d 0a 66  lltests [list].f
0940: 6f 72 65 61 63 68 20 66 20 5b 67 6c 6f 62 20 24  oreach f [glob $
0950: 74 65 73 74 64 69 72 2f 2a 2e 74 65 73 74 5d 20  testdir/*.test] 
0960: 7b 20 6c 61 70 70 65 6e 64 20 61 6c 6c 74 65 73  { lappend alltes
0970: 74 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  ts [file tail $f
0980: 5d 20 7d 0a 69 66 20 7b 24 3a 3a 74 63 6c 5f 70  ] }.if {$::tcl_p
0990: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d  latform(platform
09a0: 29 21 3d 22 75 6e 69 78 22 7d 20 7b 0a 20 20 73  )!="unix"} {.  s
09b0: 65 74 20 61 6c 6c 74 65 73 74 73 20 5b 74 65 73  et alltests [tes
09c0: 74 5f 73 65 74 20 24 61 6c 6c 74 65 73 74 73 20  t_set $alltests 
09d0: 2d 65 78 63 6c 75 64 65 20 63 72 61 73 68 2e 74  -exclude crash.t
09e0: 65 73 74 20 63 72 61 73 68 32 2e 74 65 73 74 5d  est crash2.test]
09f0: 0a 7d 0a 73 65 74 20 61 6c 6c 74 65 73 74 73 20  .}.set alltests 
0a00: 5b 74 65 73 74 5f 73 65 74 20 24 61 6c 6c 74 65  [test_set $allte
0a10: 73 74 73 20 2d 65 78 63 6c 75 64 65 20 7b 0a 20  sts -exclude {. 
0a20: 20 61 6c 6c 2e 74 65 73 74 20 20 20 20 20 20 20   all.test       
0a30: 20 61 73 79 6e 63 2e 74 65 73 74 20 20 20 20 20   async.test     
0a40: 20 20 20 20 71 75 69 63 6b 2e 74 65 73 74 20 20      quick.test  
0a50: 76 65 72 79 71 75 69 63 6b 2e 74 65 73 74 0a 20  veryquick.test. 
0a60: 20 6d 65 6d 6c 65 61 6b 2e 74 65 73 74 20 20 20   memleak.test   
0a70: 20 70 65 72 6d 75 74 61 74 69 6f 6e 73 2e 74 65   permutations.te
0a80: 73 74 20 20 73 6f 61 6b 2e 74 65 73 74 20 20 20  st  soak.test   
0a90: 66 74 73 33 2e 74 65 73 74 0a 20 20 6d 61 6c 6c  fts3.test.  mall
0aa0: 6f 63 41 6c 6c 2e 74 65 73 74 0a 7d 5d 0a 0a 73  ocAll.test.}]..s
0ab0: 65 74 20 61 6c 6c 71 75 69 63 6b 74 65 73 74 73  et allquicktests
0ac0: 20 5b 74 65 73 74 5f 73 65 74 20 24 61 6c 6c 74   [test_set $allt
0ad0: 65 73 74 73 20 2d 65 78 63 6c 75 64 65 20 7b 0a  ests -exclude {.
0ae0: 20 20 61 73 79 6e 63 32 2e 74 65 73 74 20 61 73    async2.test as
0af0: 79 6e 63 33 2e 74 65 73 74 20 62 61 63 6b 75 70  ync3.test backup
0b00: 5f 69 6f 65 72 72 2e 74 65 73 74 20 63 6f 72 72  _ioerr.test corr
0b10: 75 70 74 2e 74 65 73 74 0a 20 20 63 6f 72 72 75  upt.test.  corru
0b20: 70 74 43 2e 74 65 73 74 20 63 72 61 73 68 2e 74  ptC.test crash.t
0b30: 65 73 74 20 63 72 61 73 68 32 2e 74 65 73 74 20  est crash2.test 
0b40: 63 72 61 73 68 33 2e 74 65 73 74 20 63 72 61 73  crash3.test cras
0b50: 68 34 2e 74 65 73 74 20 63 72 61 73 68 35 2e 74  h4.test crash5.t
0b60: 65 73 74 0a 20 20 63 72 61 73 68 36 2e 74 65 73  est.  crash6.tes
0b70: 74 20 63 72 61 73 68 37 2e 74 65 73 74 20 64 65  t crash7.test de
0b80: 6c 65 74 65 33 2e 74 65 73 74 20 65 5f 66 74 73  lete3.test e_fts
0b90: 33 2e 74 65 73 74 20 66 74 73 33 72 6e 64 2e 74  3.test fts3rnd.t
0ba0: 65 73 74 0a 20 20 66 6b 65 79 5f 6d 61 6c 6c 6f  est.  fkey_mallo
0bb0: 63 2e 74 65 73 74 20 66 75 7a 7a 2e 74 65 73 74  c.test fuzz.test
0bc0: 20 66 75 7a 7a 33 2e 74 65 73 74 20 66 75 7a 7a   fuzz3.test fuzz
0bd0: 5f 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 69 6e 32  _malloc.test in2
0be0: 2e 74 65 73 74 20 6c 6f 61 64 65 78 74 2e 74 65  .test loadext.te
0bf0: 73 74 0a 20 20 6d 69 73 63 37 2e 74 65 73 74 20  st.  misc7.test 
0c00: 6d 75 74 65 78 32 2e 74 65 73 74 20 6e 6f 74 69  mutex2.test noti
0c10: 66 79 32 2e 74 65 73 74 20 6f 6e 65 66 69 6c 65  fy2.test onefile
0c20: 2e 74 65 73 74 20 70 61 67 65 72 66 61 75 6c 74  .test pagerfault
0c30: 32 2e 74 65 73 74 20 0a 20 20 73 61 76 65 70 6f  2.test .  savepo
0c40: 69 6e 74 34 2e 74 65 73 74 20 73 61 76 65 70 6f  int4.test savepo
0c50: 69 6e 74 36 2e 74 65 73 74 20 73 65 6c 65 63 74  int6.test select
0c60: 39 2e 74 65 73 74 20 0a 20 20 73 70 65 65 64 31  9.test .  speed1
0c70: 2e 74 65 73 74 20 73 70 65 65 64 31 70 2e 74 65  .test speed1p.te
0c80: 73 74 20 73 70 65 65 64 32 2e 74 65 73 74 20 73  st speed2.test s
0c90: 70 65 65 64 33 2e 74 65 73 74 20 73 70 65 65 64  peed3.test speed
0ca0: 34 2e 74 65 73 74 20 0a 20 20 73 70 65 65 64 34  4.test .  speed4
0cb0: 70 2e 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  p.test sqllimits
0cc0: 31 2e 74 65 73 74 20 74 6b 74 32 36 38 36 2e 74  1.test tkt2686.t
0cd0: 65 73 74 20 74 68 72 65 61 64 30 30 31 2e 74 65  est thread001.te
0ce0: 73 74 20 74 68 72 65 61 64 30 30 32 2e 74 65 73  st thread002.tes
0cf0: 74 0a 20 20 74 68 72 65 61 64 30 30 33 2e 74 65  t.  thread003.te
0d00: 73 74 20 74 68 72 65 61 64 30 30 34 2e 74 65 73  st thread004.tes
0d10: 74 20 74 68 72 65 61 64 30 30 35 2e 74 65 73 74  t thread005.test
0d20: 20 74 72 61 6e 73 32 2e 74 65 73 74 20 76 61 63   trans2.test vac
0d30: 75 75 6d 33 2e 74 65 73 74 20 0a 20 20 69 6e 63  uum3.test .  inc
0d40: 72 76 61 63 75 75 6d 5f 69 6f 65 72 72 2e 74 65  rvacuum_ioerr.te
0d50: 73 74 20 61 75 74 6f 76 61 63 75 75 6d 5f 63 72  st autovacuum_cr
0d60: 61 73 68 2e 74 65 73 74 20 62 74 72 65 65 38 2e  ash.test btree8.
0d70: 74 65 73 74 20 73 68 61 72 65 64 5f 65 72 72 2e  test shared_err.
0d80: 74 65 73 74 0a 20 20 76 74 61 62 5f 65 72 72 2e  test.  vtab_err.
0d90: 74 65 73 74 20 77 61 6c 73 6c 6f 77 2e 74 65 73  test walslow.tes
0da0: 74 20 77 61 6c 63 72 61 73 68 2e 74 65 73 74 20  t walcrash.test 
0db0: 0a 20 20 77 61 6c 74 68 72 65 61 64 2e 74 65 73  .  walthread.tes
0dc0: 74 20 0a 7d 5d 0a 69 66 20 7b 5b 69 6e 66 6f 20  t .}].if {[info 
0dd0: 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 51 55 49  exists ::env(QUI
0de0: 43 4b 54 45 53 54 5f 49 4e 43 4c 55 44 45 29 5d  CKTEST_INCLUDE)]
0df0: 7d 20 7b 0a 20 20 73 65 74 20 61 6c 6c 71 75 69  } {.  set allqui
0e00: 63 6b 74 65 73 74 73 20 5b 63 6f 6e 63 61 74 20  cktests [concat 
0e10: 24 61 6c 6c 71 75 69 63 6b 74 65 73 74 73 20 24  $allquicktests $
0e20: 3a 3a 65 6e 76 28 51 55 49 43 4b 54 45 53 54 5f  ::env(QUICKTEST_
0e30: 49 4e 43 4c 55 44 45 29 5d 0a 7d 0a 0a 23 23 23  INCLUDE)].}..###
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e80: 23 23 23 23 23 23 23 23 23 23 0a 23 20 53 74 61  ##########.# Sta
0e90: 72 74 20 6f 66 20 74 65 73 74 73 0a 23 0a 0a 23  rt of tests.#..#
0ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 44 65 66 69  ---------.# Defi
0ef0: 6e 65 20 74 68 65 20 67 65 6e 65 72 69 63 20 74  ne the generic t
0f00: 65 73 74 20 73 75 69 74 65 73 3a 0a 23 0a 23 20  est suites:.#.# 
0f10: 20 20 76 65 72 79 71 75 69 63 6b 0a 23 20 20 20    veryquick.#   
0f20: 71 75 69 63 6b 0a 23 20 20 20 66 75 6c 6c 0a 23  quick.#   full.#
0f30: 0a 6c 61 70 70 65 6e 64 20 3a 3a 74 65 73 74 73  .lappend ::tests
0f40: 75 69 74 65 6c 69 73 74 20 78 78 78 0a 0a 74 65  uitelist xxx..te
0f50: 73 74 5f 73 75 69 74 65 20 22 76 65 72 79 71 75  st_suite "veryqu
0f60: 69 63 6b 22 20 2d 70 72 65 66 69 78 20 22 22 20  ick" -prefix "" 
0f70: 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20  -description {. 
0f80: 20 22 56 65 72 79 22 20 71 75 69 63 6b 20 74 65   "Very" quick te
0f90: 73 74 20 73 75 69 74 65 2e 20 52 75 6e 73 20 69  st suite. Runs i
0fa0: 6e 20 6c 65 73 73 20 74 68 61 6e 20 35 20 6d 69  n less than 5 mi
0fb0: 6e 75 74 65 73 20 6f 6e 20 61 20 77 6f 72 6b 73  nutes on a works
0fc0: 74 61 74 69 6f 6e 2e 20 0a 20 20 54 68 69 73 20  tation. .  This 
0fd0: 74 65 73 74 20 73 75 69 74 65 20 69 73 20 74 68  test suite is th
0fe0: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 22 71  e same as the "q
0ff0: 75 69 63 6b 22 20 74 65 73 74 73 2c 20 65 78 63  uick" tests, exc
1000: 65 70 74 20 74 68 61 74 20 73 6f 6d 65 20 66 69  ept that some fi
1010: 6c 65 73 0a 20 20 74 68 61 74 20 74 65 73 74 20  les.  that test 
1020: 6d 61 6c 6c 6f 63 20 61 6e 64 20 49 4f 20 65 72  malloc and IO er
1030: 72 6f 72 73 20 61 72 65 20 6f 6d 69 74 74 65 64  rors are omitted
1040: 2e 0a 7d 20 2d 66 69 6c 65 73 20 5b 0a 20 20 74  ..} -files [.  t
1050: 65 73 74 5f 73 65 74 20 24 61 6c 6c 71 75 69 63  est_set $allquic
1060: 6b 74 65 73 74 73 20 2d 65 78 63 6c 75 64 65 20  ktests -exclude 
1070: 2a 6d 61 6c 6c 6f 63 2a 20 2a 69 6f 65 72 72 2a  *malloc* *ioerr*
1080: 20 2a 66 61 75 6c 74 2a 20 0a 5d 0a 0a 74 65 73   *fault* .]..tes
1090: 74 5f 73 75 69 74 65 20 22 71 75 69 63 6b 22 20  t_suite "quick" 
10a0: 2d 70 72 65 66 69 78 20 22 22 20 2d 64 65 73 63  -prefix "" -desc
10b0: 72 69 70 74 69 6f 6e 20 7b 0a 20 20 51 75 69 63  ription {.  Quic
10c0: 6b 20 74 65 73 74 20 73 75 69 74 65 2e 20 52 75  k test suite. Ru
10d0: 6e 73 20 69 6e 20 61 72 6f 75 6e 64 20 31 30 20  ns in around 10 
10e0: 6d 69 6e 75 74 65 73 20 6f 6e 20 61 20 77 6f 72  minutes on a wor
10f0: 6b 73 74 61 74 69 6f 6e 2e 0a 7d 20 2d 66 69 6c  kstation..} -fil
1100: 65 73 20 5b 0a 20 20 74 65 73 74 5f 73 65 74 20  es [.  test_set 
1110: 24 61 6c 6c 71 75 69 63 6b 74 65 73 74 73 0a 5d  $allquicktests.]
1120: 0a 0a 74 65 73 74 5f 73 75 69 74 65 20 22 66 75  ..test_suite "fu
1130: 6c 6c 22 20 2d 70 72 65 66 69 78 20 22 22 20 2d  ll" -prefix "" -
1140: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20  description {.  
1150: 46 75 6c 6c 20 74 65 73 74 20 73 75 69 74 65 2e  Full test suite.
1160: 20 54 61 6b 65 73 20 61 20 6c 6f 6e 67 20 74 69   Takes a long ti
1170: 6d 65 2e 0a 7d 20 2d 66 69 6c 65 73 20 5b 20 0a  me..} -files [ .
1180: 20 20 74 65 73 74 5f 73 65 74 20 24 61 6c 6c 74    test_set $allt
1190: 65 73 74 73 20 0a 5d 20 2d 69 6e 69 74 69 61 6c  ests .] -initial
11a0: 69 7a 65 20 7b 0a 20 20 75 6e 73 65 74 20 2d 6e  ize {.  unset -n
11b0: 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 47 28 69 73  ocomplain ::G(is
11c0: 71 75 69 63 6b 29 0a 7d 0a 0a 74 65 73 74 5f 73  quick).}..test_s
11d0: 75 69 74 65 20 22 74 68 72 65 61 64 73 22 20 2d  uite "threads" -
11e0: 70 72 65 66 69 78 20 22 22 20 2d 64 65 73 63 72  prefix "" -descr
11f0: 69 70 74 69 6f 6e 20 7b 0a 20 20 41 6c 6c 20 6d  iption {.  All m
1200: 75 6c 74 69 2d 74 68 72 65 61 64 65 64 20 74 65  ulti-threaded te
1210: 73 74 73 2e 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a  sts..} -files {.
1220: 20 20 6e 6f 74 69 66 79 32 2e 74 65 73 74 20 20    notify2.test  
1230: 20 74 68 72 65 61 64 30 30 31 2e 74 65 73 74 20   thread001.test 
1240: 74 68 72 65 61 64 30 30 32 2e 74 65 73 74 20 74  thread002.test t
1250: 68 72 65 61 64 30 30 33 2e 74 65 73 74 20 0a 20  hread003.test . 
1260: 20 74 68 72 65 61 64 30 30 34 2e 74 65 73 74 20   thread004.test 
1270: 74 68 72 65 61 64 30 30 35 2e 74 65 73 74 20 77  thread005.test w
1280: 61 6c 74 68 72 65 61 64 2e 74 65 73 74 0a 7d 0a  althread.test.}.
1290: 0a 0a 6c 61 70 70 65 6e 64 20 3a 3a 74 65 73 74  ..lappend ::test
12a0: 73 75 69 74 65 6c 69 73 74 20 78 78 78 0a 23 2d  suitelist xxx.#-
12b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12f0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 44 65 66 69 6e  --------.# Defin
1300: 65 20 74 68 65 20 63 6f 76 65 72 61 67 65 20 72  e the coverage r
1310: 65 6c 61 74 65 64 20 74 65 73 74 20 73 75 69 74  elated test suit
1320: 65 73 3a 0a 23 0a 23 20 20 20 63 6f 76 65 72 61  es:.#.#   covera
1330: 67 65 2d 77 61 6c 0a 23 0a 74 65 73 74 5f 73 75  ge-wal.#.test_su
1340: 69 74 65 20 22 63 6f 76 65 72 61 67 65 2d 77 61  ite "coverage-wa
1350: 6c 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20  l" -description 
1360: 7b 0a 20 20 43 6f 76 65 72 61 67 65 20 74 65 73  {.  Coverage tes
1370: 74 73 20 66 6f 72 20 66 69 6c 65 20 77 61 6c 2e  ts for file wal.
1380: 63 2e 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20  c..} -files {.  
1390: 77 61 6c 2e 74 65 73 74 20 20 20 20 20 20 20 77  wal.test       w
13a0: 61 6c 32 2e 74 65 73 74 20 20 20 20 20 77 61 6c  al2.test     wal
13b0: 33 2e 74 65 73 74 20 20 20 20 20 20 20 77 61 6c  3.test       wal
13c0: 6d 6f 64 65 2e 74 65 73 74 20 20 20 20 0a 20 20  mode.test    .  
13d0: 77 61 6c 62 61 6b 2e 74 65 73 74 20 20 20 20 77  walbak.test    w
13e0: 61 6c 68 6f 6f 6b 2e 74 65 73 74 20 20 77 61 6c  alhook.test  wal
13f0: 63 72 61 73 68 32 2e 74 65 73 74 20 20 77 61 6c  crash2.test  wal
1400: 63 6b 73 75 6d 2e 74 65 73 74 0a 20 20 77 61 6c  cksum.test.  wal
1410: 66 61 75 6c 74 2e 74 65 73 74 20 20 77 61 6c 62  fault.test  walb
1420: 69 67 2e 74 65 73 74 0a 7d 20 0a 0a 74 65 73 74  ig.test.} ..test
1430: 5f 73 75 69 74 65 20 22 63 6f 76 65 72 61 67 65  _suite "coverage
1440: 2d 70 61 67 65 72 22 20 2d 64 65 73 63 72 69 70  -pager" -descrip
1450: 74 69 6f 6e 20 7b 0a 20 20 43 6f 76 65 72 61 67  tion {.  Coverag
1460: 65 20 74 65 73 74 73 20 66 6f 72 20 66 69 6c 65  e tests for file
1470: 20 70 61 67 65 72 2e 63 2e 0a 7d 20 2d 66 69 6c   pager.c..} -fil
1480: 65 73 20 7b 0a 20 20 70 61 67 65 72 31 2e 74 65  es {.  pager1.te
1490: 73 74 20 20 20 20 70 61 67 65 72 32 2e 74 65 73  st    pager2.tes
14a0: 74 20 20 70 61 67 65 72 66 61 75 6c 74 2e 74 65  t  pagerfault.te
14b0: 73 74 20 20 70 61 67 65 72 66 61 75 6c 74 32 2e  st  pagerfault2.
14c0: 74 65 73 74 0a 20 20 77 61 6c 66 61 75 6c 74 2e  test.  walfault.
14d0: 74 65 73 74 20 20 77 61 6c 62 61 6b 2e 74 65 73  test  walbak.tes
14e0: 74 20 20 6a 6f 75 72 6e 61 6c 32 2e 74 65 73 74  t  journal2.test
14f0: 20 20 20 20 74 6b 74 2d 39 64 36 38 63 38 38 33      tkt-9d68c883
1500: 2e 74 65 73 74 0a 7d 20 0a 0a 0a 6c 61 70 70 65  .test.} ...lappe
1510: 6e 64 20 3a 3a 74 65 73 74 73 75 69 74 65 6c 69  nd ::testsuiteli
1520: 73 74 20 78 78 78 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  st xxx.#--------
1530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1540: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1570: 2d 0a 23 20 44 65 66 69 6e 65 20 74 68 65 20 70  -.# Define the p
1580: 65 72 6d 75 74 61 74 69 6f 6e 20 74 65 73 74 20  ermutation test 
1590: 73 75 69 74 65 73 3a 0a 23 0a 0a 23 20 52 75 6e  suites:.#..# Run
15a0: 20 73 6f 6d 65 20 74 65 73 74 73 20 75 73 69 6e   some tests usin
15b0: 67 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64 20  g pre-allocated 
15c0: 70 61 67 65 20 61 6e 64 20 73 63 72 61 74 63 68  page and scratch
15d0: 20 62 6c 6f 63 6b 73 2e 0a 23 0a 74 65 73 74 5f   blocks..#.test_
15e0: 73 75 69 74 65 20 22 6d 65 6d 73 75 62 73 79 73  suite "memsubsys
15f0: 31 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20  1" -description 
1600: 7b 0a 20 20 54 65 73 74 73 20 75 73 69 6e 67 20  {.  Tests using 
1610: 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64 20 70 61  pre-allocated pa
1620: 67 65 20 61 6e 64 20 73 63 72 61 74 63 68 20 62  ge and scratch b
1630: 6c 6f 63 6b 73 0a 7d 20 2d 66 69 6c 65 73 20 5b  locks.} -files [
1640: 0a 20 20 74 65 73 74 5f 73 65 74 20 24 3a 3a 61  .  test_set $::a
1650: 6c 6c 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78  llquicktests -ex
1660: 63 6c 75 64 65 20 69 6f 65 72 72 35 2e 74 65 73  clude ioerr5.tes
1670: 74 20 6d 61 6c 6c 6f 63 35 2e 74 65 73 74 0a 5d  t malloc5.test.]
1680: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 7b 0a 20   -initialize {. 
1690: 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65   catch {db close
16a0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74  }.  sqlite3_shut
16b0: 64 6f 77 6e 0a 20 20 73 71 6c 69 74 65 33 5f 63  down.  sqlite3_c
16c0: 6f 6e 66 69 67 5f 70 61 67 65 63 61 63 68 65 20  onfig_pagecache 
16d0: 34 30 39 36 20 32 34 0a 20 20 73 71 6c 69 74 65  4096 24.  sqlite
16e0: 33 5f 63 6f 6e 66 69 67 5f 73 63 72 61 74 63 68  3_config_scratch
16f0: 20 32 35 30 30 30 20 31 0a 20 20 73 71 6c 69 74   25000 1.  sqlit
1700: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20  e3_initialize.  
1710: 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74  autoinstall_test
1720: 5f 66 75 6e 63 74 69 6f 6e 73 0a 7d 20 2d 73 68  _functions.} -sh
1730: 75 74 64 6f 77 6e 20 7b 0a 20 20 63 61 74 63 68  utdown {.  catch
1740: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 73 71   {db close}.  sq
1750: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
1760: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f   sqlite3_config_
1770: 70 61 67 65 63 61 63 68 65 20 30 20 30 0a 20 20  pagecache 0 0.  
1780: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 73  sqlite3_config_s
1790: 63 72 61 74 63 68 20 30 20 30 0a 20 20 73 71 6c  cratch 0 0.  sql
17a0: 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a  ite3_initialize.
17b0: 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65    autoinstall_te
17c0: 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 7d 0a 0a  st_functions.}..
17d0: 23 20 52 75 6e 20 73 6f 6d 65 20 74 65 73 74 73  # Run some tests
17e0: 20 75 73 69 6e 67 20 70 72 65 2d 61 6c 6c 6f 63   using pre-alloc
17f0: 61 74 65 64 20 70 61 67 65 20 61 6e 64 20 73 63  ated page and sc
1800: 72 61 74 63 68 20 62 6c 6f 63 6b 73 2e 20 54 68  ratch blocks. Th
1810: 69 73 20 74 69 6d 65 0a 23 20 74 68 65 20 61 6c  is time.# the al
1820: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 74 6f  locations are to
1830: 6f 20 73 6d 61 6c 6c 20 74 6f 20 75 73 65 20 69  o small to use i
1840: 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 0a 23 0a  n most cases..#.
1850: 23 20 42 6f 74 68 20 69 6f 65 72 72 35 2e 74 65  # Both ioerr5.te
1860: 73 74 20 61 6e 64 20 6d 61 6c 6c 6f 63 35 2e 74  st and malloc5.t
1870: 65 73 74 20 61 72 65 20 65 78 63 6c 75 64 65 64  est are excluded
1880: 20 62 65 63 61 75 73 65 20 74 68 65 79 20 74 65   because they te
1890: 73 74 20 74 68 65 0a 23 20 73 71 6c 69 74 65 33  st the.# sqlite3
18a0: 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
18b0: 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 72  () and sqlite3_r
18c0: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
18d0: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a 23  functionality..#
18e0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 61 6c   This functional
18f0: 69 74 79 20 69 73 20 64 69 73 61 62 6c 65 64 20  ity is disabled 
1900: 69 66 20 61 20 70 72 65 2d 61 6c 6c 6f 63 61 74  if a pre-allocat
1910: 65 64 20 70 61 67 65 20 62 6c 6f 63 6b 20 69 73  ed page block is
1920: 20 70 72 6f 76 69 64 65 64 2e 0a 23 0a 74 65 73   provided..#.tes
1930: 74 5f 73 75 69 74 65 20 22 6d 65 6d 73 75 62 73  t_suite "memsubs
1940: 79 73 32 22 20 2d 64 65 73 63 72 69 70 74 69 6f  ys2" -descriptio
1950: 6e 20 7b 0a 20 20 54 65 73 74 73 20 75 73 69 6e  n {.  Tests usin
1960: 67 20 73 6d 61 6c 6c 20 70 72 65 2d 61 6c 6c 6f  g small pre-allo
1970: 63 61 74 65 64 20 70 61 67 65 20 61 6e 64 20 73  cated page and s
1980: 63 72 61 74 63 68 20 62 6c 6f 63 6b 73 0a 7d 20  cratch blocks.} 
1990: 2d 66 69 6c 65 73 20 5b 0a 20 20 74 65 73 74 5f  -files [.  test_
19a0: 73 65 74 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74  set $::allquickt
19b0: 65 73 74 73 20 2d 65 78 63 6c 75 64 65 20 69 6f  ests -exclude io
19c0: 65 72 72 35 2e 74 65 73 74 20 6d 61 6c 6c 6f 63  err5.test malloc
19d0: 35 2e 74 65 73 74 0a 5d 20 2d 69 6e 69 74 69 61  5.test.] -initia
19e0: 6c 69 7a 65 20 7b 0a 20 20 63 61 74 63 68 20 7b  lize {.  catch {
19f0: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 73 71 6c 69  db close}.  sqli
1a00: 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 73  te3_shutdown.  s
1a10: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 70 61  qlite3_config_pa
1a20: 67 65 63 61 63 68 65 20 35 31 32 20 35 0a 20 20  gecache 512 5.  
1a30: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 73  sqlite3_config_s
1a40: 63 72 61 74 63 68 20 31 30 30 30 20 31 0a 20 20  cratch 1000 1.  
1a50: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1a60: 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c  ze.  autoinstall
1a70: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a  _test_functions.
1a80: 7d 20 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20  } -shutdown {.  
1a90: 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d  catch {db close}
1aa0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64  .  sqlite3_shutd
1ab0: 6f 77 6e 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  own.  sqlite3_co
1ac0: 6e 66 69 67 5f 70 61 67 65 63 61 63 68 65 20 30  nfig_pagecache 0
1ad0: 20 30 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e   0.  sqlite3_con
1ae0: 66 69 67 5f 73 63 72 61 74 63 68 20 30 20 30 0a  fig_scratch 0 0.
1af0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61    sqlite3_initia
1b00: 6c 69 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61  lize.  autoinsta
1b10: 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  ll_test_function
1b20: 73 0a 7d 0a 0a 23 20 52 75 6e 20 61 6c 6c 20 74  s.}..# Run all t
1b30: 65 73 74 73 20 77 69 74 68 20 74 68 65 20 6c 6f  ests with the lo
1b40: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 6f  okaside allocato
1b50: 72 20 64 69 73 61 62 6c 65 64 2e 0a 23 0a 74 65  r disabled..#.te
1b60: 73 74 5f 73 75 69 74 65 20 22 6e 6f 6c 6f 6f 6b  st_suite "nolook
1b70: 61 73 69 64 65 22 20 2d 64 65 73 63 72 69 70 74  aside" -descript
1b80: 69 6f 6e 20 7b 0a 20 20 4f 4f 4d 20 74 65 73 74  ion {.  OOM test
1b90: 73 20 77 69 74 68 20 6c 6f 6f 6b 61 73 69 64 65  s with lookaside
1ba0: 20 64 69 73 61 62 6c 65 64 0a 7d 20 2d 69 6e 69   disabled.} -ini
1bb0: 74 69 61 6c 69 7a 65 20 7b 0a 20 20 63 61 74 63  tialize {.  catc
1bc0: 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 73  h {db close}.  s
1bd0: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a  qlite3_shutdown.
1be0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
1bf0: 5f 6c 6f 6f 6b 61 73 69 64 65 20 30 20 30 0a 20  _lookaside 0 0. 
1c00: 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
1c10: 69 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c  ize.  autoinstal
1c20: 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73  l_test_functions
1c30: 0a 7d 20 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 20  .} -shutdown {. 
1c40: 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65   catch {db close
1c50: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74  }.  sqlite3_shut
1c60: 64 6f 77 6e 0a 20 20 73 71 6c 69 74 65 33 5f 63  down.  sqlite3_c
1c70: 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20  onfig_lookaside 
1c80: 31 30 30 20 35 30 30 0a 20 20 73 71 6c 69 74 65  100 500.  sqlite
1c90: 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 61  3_initialize.  a
1ca0: 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f  utoinstall_test_
1cb0: 66 75 6e 63 74 69 6f 6e 73 0a 7d 20 2d 66 69 6c  functions.} -fil
1cc0: 65 73 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74 65  es $::allquickte
1cd0: 73 74 73 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20  sts..# Run some 
1ce0: 74 65 73 74 73 20 69 6e 20 53 51 4c 49 54 45 5f  tests in SQLITE_
1cf0: 43 4f 4e 46 49 47 5f 53 49 4e 47 4c 45 54 48 52  CONFIG_SINGLETHR
1d00: 45 41 44 20 6d 6f 64 65 2e 0a 23 0a 74 65 73 74  EAD mode..#.test
1d10: 5f 73 75 69 74 65 20 22 73 69 6e 67 6c 65 74 68  _suite "singleth
1d20: 72 65 61 64 22 20 2d 64 65 73 63 72 69 70 74 69  read" -descripti
1d30: 6f 6e 20 7b 0a 20 20 54 65 73 74 73 20 72 75 6e  on {.  Tests run
1d40: 20 69 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49   in SQLITE_CONFI
1d50: 47 5f 53 49 4e 47 4c 45 54 48 52 45 41 44 20 6d  G_SINGLETHREAD m
1d60: 6f 64 65 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a  ode.} -initializ
1d70: 65 20 7b 0a 20 20 63 61 74 63 68 20 7b 64 62 20  e {.  catch {db 
1d80: 63 6c 6f 73 65 7d 0a 20 20 73 71 6c 69 74 65 33  close}.  sqlite3
1d90: 5f 73 68 75 74 64 6f 77 6e 0a 20 20 63 61 74 63  _shutdown.  catc
1da0: 68 20 7b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  h {sqlite3_confi
1db0: 67 20 73 69 6e 67 6c 65 74 68 72 65 61 64 7d 0a  g singlethread}.
1dc0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61    sqlite3_initia
1dd0: 6c 69 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61  lize.  autoinsta
1de0: 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  ll_test_function
1df0: 73 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 64  s.} -files {.  d
1e00: 65 6c 65 74 65 2e 74 65 73 74 20 20 20 64 65 6c  elete.test   del
1e10: 65 74 65 32 2e 74 65 73 74 20 20 69 6e 73 65 72  ete2.test  inser
1e20: 74 2e 74 65 73 74 20 20 72 6f 6c 6c 62 61 63 6b  t.test  rollback
1e30: 2e 74 65 73 74 20 20 73 65 6c 65 63 74 31 2e 74  .test  select1.t
1e40: 65 73 74 0a 20 20 73 65 6c 65 63 74 32 2e 74 65  est.  select2.te
1e50: 73 74 20 20 74 72 61 6e 73 2e 74 65 73 74 20 20  st  trans.test  
1e60: 20 20 75 70 64 61 74 65 2e 74 65 73 74 20 20 76    update.test  v
1e70: 61 63 75 75 6d 2e 74 65 73 74 20 20 20 20 74 79  acuum.test    ty
1e80: 70 65 73 2e 74 65 73 74 0a 20 20 74 79 70 65 73  pes.test.  types
1e90: 32 2e 74 65 73 74 20 20 20 74 79 70 65 73 33 2e  2.test   types3.
1ea0: 74 65 73 74 0a 7d 20 2d 73 68 75 74 64 6f 77 6e  test.} -shutdown
1eb0: 20 7b 0a 20 20 63 61 74 63 68 20 7b 64 62 20 63   {.  catch {db c
1ec0: 6c 6f 73 65 7d 0a 20 20 73 71 6c 69 74 65 33 5f  lose}.  sqlite3_
1ed0: 73 68 75 74 64 6f 77 6e 0a 20 20 63 61 74 63 68  shutdown.  catch
1ee0: 20 7b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67   {sqlite3_config
1ef0: 20 73 65 72 69 61 6c 69 7a 65 64 7d 0a 20 20 73   serialized}.  s
1f00: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1f10: 65 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c 5f  e.  autoinstall_
1f20: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 7d  test_functions.}
1f30: 0a 0a 74 65 73 74 5f 73 75 69 74 65 20 22 6e 6f  ..test_suite "no
1f40: 6d 75 74 65 78 22 20 2d 64 65 73 63 72 69 70 74  mutex" -descript
1f50: 69 6f 6e 20 7b 0a 20 20 54 65 73 74 73 20 72 75  ion {.  Tests ru
1f60: 6e 20 77 69 74 68 20 74 68 65 20 53 51 4c 49 54  n with the SQLIT
1f70: 45 5f 4f 50 45 4e 5f 4d 55 4c 54 49 54 48 52 45  E_OPEN_MULTITHRE
1f80: 41 44 45 44 20 66 6c 61 67 20 70 61 73 73 65 64  ADED flag passed
1f90: 20 74 6f 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e   to sqlite3_open
1fa0: 28 29 2e 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a  ()..} -initializ
1fb0: 65 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c  e {.  rename sql
1fc0: 69 74 65 33 20 73 71 6c 69 74 65 33 5f 6e 6f 6d  ite3 sqlite3_nom
1fd0: 75 74 65 78 0a 20 20 70 72 6f 63 20 73 71 6c 69  utex.  proc sqli
1fe0: 74 65 33 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20  te3 {args} {.   
1ff0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 72 61 6e   if {[string ran
2000: 67 65 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73  ge [lindex $args
2010: 20 30 5d 20 30 20 30 5d 20 6e 65 20 22 2d 22 7d   0] 0 0] ne "-"}
2020: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
2030: 20 61 72 67 73 20 2d 66 75 6c 6c 6d 75 74 65 78   args -fullmutex
2040: 20 30 20 2d 6e 6f 6d 75 74 65 78 20 31 0a 20 20   0 -nomutex 1.  
2050: 20 20 7d 0a 20 20 20 20 75 70 6c 65 76 65 6c 20    }.    uplevel 
2060: 5b 63 6f 6e 63 61 74 20 73 71 6c 69 74 65 33 5f  [concat sqlite3_
2070: 6e 6f 6d 75 74 65 78 20 24 61 72 67 73 5d 0a 20  nomutex $args]. 
2080: 20 7d 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20   }.} -files {.  
2090: 64 65 6c 65 74 65 2e 74 65 73 74 20 20 20 64 65  delete.test   de
20a0: 6c 65 74 65 32 2e 74 65 73 74 20 20 69 6e 73 65  lete2.test  inse
20b0: 72 74 2e 74 65 73 74 20 20 72 6f 6c 6c 62 61 63  rt.test  rollbac
20c0: 6b 2e 74 65 73 74 20 20 73 65 6c 65 63 74 31 2e  k.test  select1.
20d0: 74 65 73 74 0a 20 20 73 65 6c 65 63 74 32 2e 74  test.  select2.t
20e0: 65 73 74 20 20 74 72 61 6e 73 2e 74 65 73 74 20  est  trans.test 
20f0: 20 20 20 75 70 64 61 74 65 2e 74 65 73 74 20 20     update.test  
2100: 76 61 63 75 75 6d 2e 74 65 73 74 20 20 20 20 74  vacuum.test    t
2110: 79 70 65 73 2e 74 65 73 74 0a 20 20 74 79 70 65  ypes.test.  type
2120: 73 32 2e 74 65 73 74 20 20 20 74 79 70 65 73 33  s2.test   types3
2130: 2e 74 65 73 74 0a 7d 20 2d 73 68 75 74 64 6f 77  .test.} -shutdow
2140: 6e 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c  n {.  rename sql
2150: 69 74 65 33 20 7b 7d 0a 20 20 72 65 6e 61 6d 65  ite3 {}.  rename
2160: 20 73 71 6c 69 74 65 33 5f 6e 6f 6d 75 74 65 78   sqlite3_nomutex
2170: 20 73 71 6c 69 74 65 33 0a 7d 0a 0a 23 20 52 75   sqlite3.}..# Ru
2180: 6e 20 73 6f 6d 65 20 74 65 73 74 73 20 69 6e 20  n some tests in 
2190: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55  SQLITE_CONFIG_MU
21a0: 4c 54 49 54 48 52 45 41 44 20 6d 6f 64 65 2e 0a  LTITHREAD mode..
21b0: 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22 6d 75  #.test_suite "mu
21c0: 6c 74 69 74 68 72 65 61 64 22 20 2d 64 65 73 63  ltithread" -desc
21d0: 72 69 70 74 69 6f 6e 20 7b 0a 20 20 54 65 73 74  ription {.  Test
21e0: 73 20 72 75 6e 20 69 6e 20 53 51 4c 49 54 45 5f  s run in SQLITE_
21f0: 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45  CONFIG_MULTITHRE
2200: 41 44 20 6d 6f 64 65 0a 7d 20 2d 69 6e 69 74 69  AD mode.} -initi
2210: 61 6c 69 7a 65 20 7b 0a 20 20 63 61 74 63 68 20  alize {.  catch 
2220: 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 73 71 6c  {db close}.  sql
2230: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20  ite3_shutdown.  
2240: 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 63  catch {sqlite3_c
2250: 6f 6e 66 69 67 20 6d 75 6c 74 69 74 68 72 65 61  onfig multithrea
2260: 64 7d 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 69  d}.  sqlite3_ini
2270: 74 69 61 6c 69 7a 65 0a 20 20 61 75 74 6f 69 6e  tialize.  autoin
2280: 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74  stall_test_funct
2290: 69 6f 6e 73 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a  ions.} -files {.
22a0: 20 20 64 65 6c 65 74 65 2e 74 65 73 74 20 20 20    delete.test   
22b0: 64 65 6c 65 74 65 32 2e 74 65 73 74 20 20 69 6e  delete2.test  in
22c0: 73 65 72 74 2e 74 65 73 74 20 20 72 6f 6c 6c 62  sert.test  rollb
22d0: 61 63 6b 2e 74 65 73 74 20 20 73 65 6c 65 63 74  ack.test  select
22e0: 31 2e 74 65 73 74 0a 20 20 73 65 6c 65 63 74 32  1.test.  select2
22f0: 2e 74 65 73 74 20 20 74 72 61 6e 73 2e 74 65 73  .test  trans.tes
2300: 74 20 20 20 20 75 70 64 61 74 65 2e 74 65 73 74  t    update.test
2310: 20 20 76 61 63 75 75 6d 2e 74 65 73 74 20 20 20    vacuum.test   
2320: 20 74 79 70 65 73 2e 74 65 73 74 0a 20 20 74 79   types.test.  ty
2330: 70 65 73 32 2e 74 65 73 74 20 20 20 74 79 70 65  pes2.test   type
2340: 73 33 2e 74 65 73 74 0a 7d 20 2d 73 68 75 74 64  s3.test.} -shutd
2350: 6f 77 6e 20 7b 0a 20 20 63 61 74 63 68 20 7b 64  own {.  catch {d
2360: 62 20 63 6c 6f 73 65 7d 0a 20 20 73 71 6c 69 74  b close}.  sqlit
2370: 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 63 61  e3_shutdown.  ca
2380: 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 63 6f 6e  tch {sqlite3_con
2390: 66 69 67 20 73 65 72 69 61 6c 69 7a 65 64 7d 0a  fig serialized}.
23a0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61    sqlite3_initia
23b0: 6c 69 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61  lize.  autoinsta
23c0: 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  ll_test_function
23d0: 73 0a 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20  s.}..# Run some 
23e0: 74 65 73 74 73 20 69 6e 20 53 51 4c 49 54 45 5f  tests in SQLITE_
23f0: 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45 58 20 6d  OPEN_FULLMUTEX m
2400: 6f 64 65 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74  ode..#.test_suit
2410: 65 20 22 66 75 6c 6c 6d 75 74 65 78 22 20 2d 64  e "fullmutex" -d
2420: 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 54  escription {.  T
2430: 65 73 74 73 20 72 75 6e 20 69 6e 20 53 51 4c 49  ests run in SQLI
2440: 54 45 5f 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45  TE_OPEN_FULLMUTE
2450: 58 20 6d 6f 64 65 0a 7d 20 2d 69 6e 69 74 69 61  X mode.} -initia
2460: 6c 69 7a 65 20 7b 0a 20 20 72 65 6e 61 6d 65 20  lize {.  rename 
2470: 73 71 6c 69 74 65 33 20 73 71 6c 69 74 65 33 5f  sqlite3 sqlite3_
2480: 66 75 6c 6c 6d 75 74 65 78 0a 20 20 70 72 6f 63  fullmutex.  proc
2490: 20 73 71 6c 69 74 65 33 20 7b 61 72 67 73 7d 20   sqlite3 {args} 
24a0: 7b 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e  {.    if {[strin
24b0: 67 20 72 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20  g range [lindex 
24c0: 24 61 72 67 73 20 30 5d 20 30 20 30 5d 20 6e 65  $args 0] 0 0] ne
24d0: 20 22 2d 22 7d 20 7b 0a 20 20 20 20 20 20 6c 61   "-"} {.      la
24e0: 70 70 65 6e 64 20 61 72 67 73 20 2d 6e 6f 6d 75  ppend args -nomu
24f0: 74 65 78 20 30 20 2d 66 75 6c 6c 6d 75 74 65 78  tex 0 -fullmutex
2500: 20 31 0a 20 20 20 20 7d 0a 20 20 20 20 75 70 6c   1.    }.    upl
2510: 65 76 65 6c 20 5b 63 6f 6e 63 61 74 20 73 71 6c  evel [concat sql
2520: 69 74 65 33 5f 66 75 6c 6c 6d 75 74 65 78 20 24  ite3_fullmutex $
2530: 61 72 67 73 5d 0a 20 20 7d 0a 7d 20 2d 66 69 6c  args].  }.} -fil
2540: 65 73 20 7b 0a 20 20 64 65 6c 65 74 65 2e 74 65  es {.  delete.te
2550: 73 74 20 20 20 64 65 6c 65 74 65 32 2e 74 65 73  st   delete2.tes
2560: 74 20 20 69 6e 73 65 72 74 2e 74 65 73 74 20 20  t  insert.test  
2570: 72 6f 6c 6c 62 61 63 6b 2e 74 65 73 74 20 20 73  rollback.test  s
2580: 65 6c 65 63 74 31 2e 74 65 73 74 0a 20 20 73 65  elect1.test.  se
2590: 6c 65 63 74 32 2e 74 65 73 74 20 20 74 72 61 6e  lect2.test  tran
25a0: 73 2e 74 65 73 74 20 20 20 20 75 70 64 61 74 65  s.test    update
25b0: 2e 74 65 73 74 20 20 76 61 63 75 75 6d 2e 74 65  .test  vacuum.te
25c0: 73 74 20 20 20 20 74 79 70 65 73 2e 74 65 73 74  st    types.test
25d0: 0a 20 20 74 79 70 65 73 32 2e 74 65 73 74 20 20  .  types2.test  
25e0: 20 74 79 70 65 73 33 2e 74 65 73 74 0a 7d 20 2d   types3.test.} -
25f0: 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20 72 65 6e  shutdown {.  ren
2600: 61 6d 65 20 73 71 6c 69 74 65 33 20 7b 7d 0a 20  ame sqlite3 {}. 
2610: 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f   rename sqlite3_
2620: 66 75 6c 6c 6d 75 74 65 78 20 73 71 6c 69 74 65  fullmutex sqlite
2630: 33 0a 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20  3.}..# Run some 
2640: 74 65 73 74 73 20 75 73 69 6e 67 20 74 68 65 20  tests using the 
2650: 22 6f 6e 65 66 69 6c 65 22 20 64 65 6d 6f 2e 0a  "onefile" demo..
2660: 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22 6f 6e  #.test_suite "on
2670: 65 66 69 6c 65 22 20 2d 64 65 73 63 72 69 70 74  efile" -descript
2680: 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 73 6f 6d 65  ion {.  Run some
2690: 20 74 65 73 74 73 20 75 73 69 6e 67 20 74 68 65   tests using the
26a0: 20 22 74 65 73 74 5f 6f 6e 65 66 69 6c 65 2e 63   "test_onefile.c
26b0: 22 20 64 65 6d 6f 0a 7d 20 2d 69 6e 69 74 69 61  " demo.} -initia
26c0: 6c 69 7a 65 20 7b 0a 20 20 72 65 6e 61 6d 65 20  lize {.  rename 
26d0: 73 71 6c 69 74 65 33 20 73 71 6c 69 74 65 33 5f  sqlite3 sqlite3_
26e0: 6f 6e 65 66 69 6c 65 0a 20 20 70 72 6f 63 20 73  onefile.  proc s
26f0: 71 6c 69 74 65 33 20 7b 61 72 67 73 7d 20 7b 0a  qlite3 {args} {.
2700: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string 
2710: 72 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 61  range [lindex $a
2720: 72 67 73 20 30 5d 20 30 20 30 5d 20 6e 65 20 22  rgs 0] 0 0] ne "
2730: 2d 22 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70  -"} {.      lapp
2740: 65 6e 64 20 61 72 67 73 20 2d 76 66 73 20 66 73  end args -vfs fs
2750: 0a 20 20 20 20 7d 0a 20 20 20 20 75 70 6c 65 76  .    }.    uplev
2760: 65 6c 20 5b 63 6f 6e 63 61 74 20 73 71 6c 69 74  el [concat sqlit
2770: 65 33 5f 6f 6e 65 66 69 6c 65 20 24 61 72 67 73  e3_onefile $args
2780: 5d 0a 20 20 7d 0a 7d 20 2d 66 69 6c 65 73 20 7b  ].  }.} -files {
2790: 0a 20 20 63 6f 6e 66 6c 69 63 74 2e 74 65 73 74  .  conflict.test
27a0: 20 20 69 6e 73 65 72 74 2e 74 65 73 74 20 20 20    insert.test   
27b0: 69 6e 73 65 72 74 32 2e 74 65 73 74 20 20 69 6e  insert2.test  in
27c0: 73 65 72 74 33 2e 74 65 73 74 0a 20 20 72 6f 6c  sert3.test.  rol
27d0: 6c 62 61 63 6b 2e 74 65 73 74 20 20 73 65 6c 65  lback.test  sele
27e0: 63 74 31 2e 74 65 73 74 20 20 73 65 6c 65 63 74  ct1.test  select
27f0: 32 2e 74 65 73 74 20 20 73 65 6c 65 63 74 33 2e  2.test  select3.
2800: 74 65 73 74 0a 7d 20 2d 73 68 75 74 64 6f 77 6e  test.} -shutdown
2810: 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c 69   {.  rename sqli
2820: 74 65 33 20 7b 7d 0a 20 20 72 65 6e 61 6d 65 20  te3 {}.  rename 
2830: 73 71 6c 69 74 65 33 5f 6f 6e 65 66 69 6c 65 20  sqlite3_onefile 
2840: 73 71 6c 69 74 65 33 0a 7d 0a 0a 23 20 52 75 6e  sqlite3.}..# Run
2850: 20 73 6f 6d 65 20 74 65 73 74 73 20 75 73 69 6e   some tests usin
2860: 67 20 55 54 46 2d 31 36 20 64 61 74 61 62 61 73  g UTF-16 databas
2870: 65 73 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65  es..#.test_suite
2880: 20 22 75 74 66 31 36 22 20 2d 64 65 73 63 72 69   "utf16" -descri
2890: 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65  ption {.  Run te
28a0: 73 74 73 20 75 73 69 6e 67 20 55 54 46 2d 31 36  sts using UTF-16
28b0: 20 64 61 74 61 62 61 73 65 73 0a 7d 20 2d 70 72   databases.} -pr
28c0: 65 73 71 6c 20 7b 0a 20 20 70 72 61 67 6d 61 20  esql {.  pragma 
28d0: 65 6e 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d  encoding = 'UTF-
28e0: 31 36 27 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20  16'.} -files {. 
28f0: 20 20 20 61 6c 74 65 72 2e 74 65 73 74 20 61 6c     alter.test al
2900: 74 65 72 33 2e 74 65 73 74 0a 20 20 20 20 61 75  ter3.test.    au
2910: 74 68 2e 74 65 73 74 20 62 69 6e 64 2e 74 65 73  th.test bind.tes
2920: 74 20 62 6c 6f 62 2e 74 65 73 74 20 63 61 70 69  t blob.test capi
2930: 32 2e 74 65 73 74 20 63 61 70 69 33 2e 74 65 73  2.test capi3.tes
2940: 74 20 63 6f 6c 6c 61 74 65 31 2e 74 65 73 74 0a  t collate1.test.
2950: 20 20 20 20 63 6f 6c 6c 61 74 65 32 2e 74 65 73      collate2.tes
2960: 74 20 63 6f 6c 6c 61 74 65 33 2e 74 65 73 74 20  t collate3.test 
2970: 63 6f 6c 6c 61 74 65 34 2e 74 65 73 74 20 63 6f  collate4.test co
2980: 6c 6c 61 74 65 35 2e 74 65 73 74 20 63 6f 6c 6c  llate5.test coll
2990: 61 74 65 36 2e 74 65 73 74 0a 20 20 20 20 63 6f  ate6.test.    co
29a0: 6e 66 6c 69 63 74 2e 74 65 73 74 20 64 61 74 65  nflict.test date
29b0: 2e 74 65 73 74 20 64 65 6c 65 74 65 2e 74 65 73  .test delete.tes
29c0: 74 20 65 78 70 72 2e 74 65 73 74 20 66 6b 65 79  t expr.test fkey
29d0: 31 2e 74 65 73 74 20 66 75 6e 63 2e 74 65 73 74  1.test func.test
29e0: 0a 20 20 20 20 68 6f 6f 6b 2e 74 65 73 74 20 69  .    hook.test i
29f0: 6e 64 65 78 2e 74 65 73 74 20 69 6e 73 65 72 74  ndex.test insert
2a00: 32 2e 74 65 73 74 20 69 6e 73 65 72 74 2e 74 65  2.test insert.te
2a10: 73 74 20 69 6e 74 65 72 72 75 70 74 2e 74 65 73  st interrupt.tes
2a20: 74 20 69 6e 2e 74 65 73 74 0a 20 20 20 20 69 6e  t in.test.    in
2a30: 74 70 6b 65 79 2e 74 65 73 74 20 69 6f 65 72 72  tpkey.test ioerr
2a40: 2e 74 65 73 74 20 6a 6f 69 6e 32 2e 74 65 73 74  .test join2.test
2a50: 20 6a 6f 69 6e 2e 74 65 73 74 20 6c 61 73 74 69   join.test lasti
2a60: 6e 73 65 72 74 2e 74 65 73 74 0a 20 20 20 20 6c  nsert.test.    l
2a70: 61 73 74 73 74 6d 74 63 68 61 6e 67 65 73 2e 74  aststmtchanges.t
2a80: 65 73 74 20 6c 69 6d 69 74 2e 74 65 73 74 20 6c  est limit.test l
2a90: 6f 63 6b 32 2e 74 65 73 74 20 6c 6f 63 6b 2e 74  ock2.test lock.t
2aa0: 65 73 74 20 6d 61 69 6e 2e 74 65 73 74 20 0a 20  est main.test . 
2ab0: 20 20 20 6d 65 6d 64 62 2e 74 65 73 74 20 6d 69     memdb.test mi
2ac0: 6e 6d 61 78 2e 74 65 73 74 20 6d 69 73 63 31 2e  nmax.test misc1.
2ad0: 74 65 73 74 20 6d 69 73 63 32 2e 74 65 73 74 20  test misc2.test 
2ae0: 6d 69 73 63 33 2e 74 65 73 74 20 6e 6f 74 6e 75  misc3.test notnu
2af0: 6c 6c 2e 74 65 73 74 0a 20 20 20 20 6e 75 6c 6c  ll.test.    null
2b00: 2e 74 65 73 74 20 70 72 6f 67 72 65 73 73 2e 74  .test progress.t
2b10: 65 73 74 20 71 75 6f 74 65 2e 74 65 73 74 20 72  est quote.test r
2b20: 6f 77 69 64 2e 74 65 73 74 20 73 65 6c 65 63 74  owid.test select
2b30: 31 2e 74 65 73 74 20 73 65 6c 65 63 74 32 2e 74  1.test select2.t
2b40: 65 73 74 0a 20 20 20 20 73 65 6c 65 63 74 33 2e  est.    select3.
2b50: 74 65 73 74 20 73 65 6c 65 63 74 34 2e 74 65 73  test select4.tes
2b60: 74 20 73 65 6c 65 63 74 35 2e 74 65 73 74 20 73  t select5.test s
2b70: 65 6c 65 63 74 36 2e 74 65 73 74 20 73 6f 72 74  elect6.test sort
2b80: 2e 74 65 73 74 20 0a 20 20 20 20 73 75 62 73 65  .test .    subse
2b90: 6c 65 63 74 2e 74 65 73 74 20 74 61 62 6c 65 61  lect.test tablea
2ba0: 70 69 2e 74 65 73 74 20 74 61 62 6c 65 2e 74 65  pi.test table.te
2bb0: 73 74 20 74 65 6d 70 74 61 62 6c 65 2e 74 65 73  st temptable.tes
2bc0: 74 0a 20 20 20 20 74 72 61 63 65 2e 74 65 73 74  t.    trace.test
2bd0: 20 74 72 69 67 67 65 72 31 2e 74 65 73 74 20 74   trigger1.test t
2be0: 72 69 67 67 65 72 32 2e 74 65 73 74 20 74 72 69  rigger2.test tri
2bf0: 67 67 65 72 33 2e 74 65 73 74 0a 20 20 20 20 74  gger3.test.    t
2c00: 72 69 67 67 65 72 34 2e 74 65 73 74 20 74 79 70  rigger4.test typ
2c10: 65 73 32 2e 74 65 73 74 20 74 79 70 65 73 2e 74  es2.test types.t
2c20: 65 73 74 20 75 6e 69 71 75 65 2e 74 65 73 74 20  est unique.test 
2c30: 75 70 64 61 74 65 2e 74 65 73 74 0a 20 20 20 20  update.test.    
2c40: 76 61 63 75 75 6d 2e 74 65 73 74 20 76 69 65 77  vacuum.test view
2c50: 2e 74 65 73 74 20 77 68 65 72 65 2e 74 65 73 74  .test where.test
2c60: 0a 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74  .}..# Run some t
2c70: 65 73 74 73 20 69 6e 20 65 78 63 6c 75 73 69 76  ests in exclusiv
2c80: 65 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a  e locking mode..
2c90: 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22 65 78  #.test_suite "ex
2ca0: 63 6c 75 73 69 76 65 22 20 2d 64 65 73 63 72 69  clusive" -descri
2cb0: 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65  ption {.  Run te
2cc0: 73 74 73 20 69 6e 20 65 78 63 6c 75 73 69 76 65  sts in exclusive
2cd0: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 7d   locking mode..}
2ce0: 20 2d 70 72 65 73 71 6c 20 7b 0a 20 20 70 72 61   -presql {.  pra
2cf0: 67 6d 61 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  gma locking_mode
2d00: 20 3d 20 27 65 78 63 6c 75 73 69 76 65 27 0a 7d   = 'exclusive'.}
2d10: 20 2d 66 69 6c 65 73 20 7b 0a 20 20 72 6f 6c 6c   -files {.  roll
2d20: 62 61 63 6b 2e 74 65 73 74 20 73 65 6c 65 63 74  back.test select
2d30: 31 2e 74 65 73 74 20 73 65 6c 65 63 74 32 2e 74  1.test select2.t
2d40: 65 73 74 20 0a 20 20 6d 61 6c 6c 6f 63 2e 74 65  est .  malloc.te
2d50: 73 74 20 69 6f 65 72 72 2e 74 65 73 74 0a 7d 20  st ioerr.test.} 
2d60: 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74 65 73  ..# Run some tes
2d70: 74 73 20 69 6e 20 65 78 63 6c 75 73 69 76 65 20  ts in exclusive 
2d80: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 77 69 74  locking mode wit
2d90: 68 20 74 72 75 6e 63 61 74 65 64 20 6a 6f 75 72  h truncated jour
2da0: 6e 61 6c 73 2e 0a 23 0a 74 65 73 74 5f 73 75 69  nals..#.test_sui
2db0: 74 65 20 22 65 78 63 6c 75 73 69 76 65 2d 74 72  te "exclusive-tr
2dc0: 75 6e 63 61 74 65 22 20 2d 64 65 73 63 72 69 70  uncate" -descrip
2dd0: 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65 73  tion {.  Run tes
2de0: 74 73 20 69 6e 20 65 78 63 6c 75 73 69 76 65 20  ts in exclusive 
2df0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 61 6e 64  locking mode and
2e00: 20 74 72 75 6e 63 61 74 65 20 6a 6f 75 72 6e 61   truncate journa
2e10: 6c 20 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71  l mode..} -presq
2e20: 6c 20 7b 0a 20 20 70 72 61 67 6d 61 20 6c 6f 63  l {.  pragma loc
2e30: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 27 65 78 63  king_mode = 'exc
2e40: 6c 75 73 69 76 65 27 3b 0a 20 20 70 72 61 67 6d  lusive';.  pragm
2e50: 61 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  a journal_mode =
2e60: 20 54 52 55 4e 43 41 54 45 3b 0a 7d 20 2d 66 69   TRUNCATE;.} -fi
2e70: 6c 65 73 20 7b 0a 20 20 64 65 6c 65 74 65 2e 74  les {.  delete.t
2e80: 65 73 74 20 64 65 6c 65 74 65 32 2e 74 65 73 74  est delete2.test
2e90: 20 69 6e 73 65 72 74 2e 74 65 73 74 20 72 6f 6c   insert.test rol
2ea0: 6c 62 61 63 6b 2e 74 65 73 74 20 73 65 6c 65 63  lback.test selec
2eb0: 74 31 2e 74 65 73 74 0a 20 20 73 65 6c 65 63 74  t1.test.  select
2ec0: 32 2e 74 65 73 74 20 75 70 64 61 74 65 2e 74 65  2.test update.te
2ed0: 73 74 20 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 69  st malloc.test i
2ee0: 6f 65 72 72 2e 74 65 73 74 0a 7d 20 0a 0a 23 20  oerr.test.} ..# 
2ef0: 52 75 6e 20 73 6f 6d 65 20 74 65 73 74 73 20 69  Run some tests i
2f00: 6e 20 70 65 72 73 69 73 74 65 6e 74 20 6a 6f 75  n persistent jou
2f10: 72 6e 61 6c 20 6d 6f 64 65 2e 0a 23 0a 74 65 73  rnal mode..#.tes
2f20: 74 5f 73 75 69 74 65 20 22 70 65 72 73 69 73 74  t_suite "persist
2f30: 65 6e 74 5f 6a 6f 75 72 6e 61 6c 22 20 2d 64 65  ent_journal" -de
2f40: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52 75  scription {.  Ru
2f50: 6e 20 74 65 73 74 73 20 69 6e 20 70 65 72 73 69  n tests in persi
2f60: 73 74 65 6e 74 2d 6a 6f 75 72 6e 61 6c 20 6d 6f  stent-journal mo
2f70: 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20 7b 0a  de..} -presql {.
2f80: 20 20 70 72 61 67 6d 61 20 6a 6f 75 72 6e 61 6c    pragma journal
2f90: 5f 6d 6f 64 65 20 3d 20 70 65 72 73 69 73 74 0a  _mode = persist.
2fa0: 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 64 65 6c  } -files {.  del
2fb0: 65 74 65 2e 74 65 73 74 20 64 65 6c 65 74 65 32  ete.test delete2
2fc0: 2e 74 65 73 74 20 69 6e 73 65 72 74 2e 74 65 73  .test insert.tes
2fd0: 74 20 72 6f 6c 6c 62 61 63 6b 2e 74 65 73 74 20  t rollback.test 
2fe0: 73 65 6c 65 63 74 31 2e 74 65 73 74 0a 20 20 73  select1.test.  s
2ff0: 65 6c 65 63 74 32 2e 74 65 73 74 20 74 72 61 6e  elect2.test tran
3000: 73 2e 74 65 73 74 20 75 70 64 61 74 65 2e 74 65  s.test update.te
3010: 73 74 20 76 61 63 75 75 6d 2e 74 65 73 74 20 0a  st vacuum.test .
3020: 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74 65  }..# Run some te
3030: 73 74 73 20 69 6e 20 74 72 75 6e 63 61 74 69 6e  sts in truncatin
3040: 67 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2e 0a  g journal mode..
3050: 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22 74 72  #.test_suite "tr
3060: 75 6e 63 61 74 65 5f 6a 6f 75 72 6e 61 6c 22 20  uncate_journal" 
3070: 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20  -description {. 
3080: 20 52 75 6e 20 74 65 73 74 73 20 69 6e 20 70 65   Run tests in pe
3090: 72 73 69 73 74 65 6e 74 2d 6a 6f 75 72 6e 61 6c  rsistent-journal
30a0: 20 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c   mode..} -presql
30b0: 20 7b 0a 20 20 70 72 61 67 6d 61 20 6a 6f 75 72   {.  pragma jour
30c0: 6e 61 6c 5f 6d 6f 64 65 20 3d 20 74 72 75 6e 63  nal_mode = trunc
30d0: 61 74 65 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20  ate.} -files {. 
30e0: 20 64 65 6c 65 74 65 2e 74 65 73 74 20 64 65 6c   delete.test del
30f0: 65 74 65 32 2e 74 65 73 74 20 69 6e 73 65 72 74  ete2.test insert
3100: 2e 74 65 73 74 20 72 6f 6c 6c 62 61 63 6b 2e 74  .test rollback.t
3110: 65 73 74 20 73 65 6c 65 63 74 31 2e 74 65 73 74  est select1.test
3120: 0a 20 20 73 65 6c 65 63 74 32 2e 74 65 73 74 20  .  select2.test 
3130: 74 72 61 6e 73 2e 74 65 73 74 20 75 70 64 61 74  trans.test updat
3140: 65 2e 74 65 73 74 20 76 61 63 75 75 6d 2e 74 65  e.test vacuum.te
3150: 73 74 20 0a 20 20 6d 61 6c 6c 6f 63 2e 74 65 73  st .  malloc.tes
3160: 74 20 69 6f 65 72 72 2e 74 65 73 74 0a 7d 0a 0a  t ioerr.test.}..
3170: 23 20 52 75 6e 20 73 6f 6d 65 20 65 72 72 6f 72  # Run some error
3180: 20 74 65 73 74 73 20 69 6e 20 70 65 72 73 69 73   tests in persis
3190: 74 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  tent journal mod
31a0: 65 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65 20  e..#.test_suite 
31b0: 22 70 65 72 73 69 73 74 65 6e 74 5f 6a 6f 75 72  "persistent_jour
31c0: 6e 61 6c 5f 65 72 72 6f 72 22 20 2d 64 65 73 63  nal_error" -desc
31d0: 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20  ription {.  Run 
31e0: 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 61 6e 64 20  malloc.test and 
31f0: 69 6f 65 72 72 2e 74 65 73 74 20 69 6e 20 70 65  ioerr.test in pe
3200: 72 73 69 73 74 65 6e 74 2d 6a 6f 75 72 6e 61 6c  rsistent-journal
3210: 20 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c   mode..} -presql
3220: 20 7b 0a 20 20 70 72 61 67 6d 61 20 6a 6f 75 72   {.  pragma jour
3230: 6e 61 6c 5f 6d 6f 64 65 20 3d 20 70 65 72 73 69  nal_mode = persi
3240: 73 74 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20  st.} -files {.  
3250: 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 69 6f 65 72  malloc.test ioer
3260: 72 2e 74 65 73 74 0a 7d 0a 0a 23 20 52 75 6e 20  r.test.}..# Run 
3270: 73 6f 6d 65 20 74 65 73 74 73 20 69 6e 20 6e 6f  some tests in no
3280: 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2e 0a 23   journal mode..#
3290: 0a 74 65 73 74 5f 73 75 69 74 65 20 22 6e 6f 5f  .test_suite "no_
32a0: 6a 6f 75 72 6e 61 6c 22 20 2d 64 65 73 63 72 69  journal" -descri
32b0: 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65  ption {.  Run te
32c0: 73 74 73 20 69 6e 20 6e 6f 2d 6a 6f 75 72 6e 61  sts in no-journa
32d0: 6c 20 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71  l mode..} -presq
32e0: 6c 20 7b 0a 20 20 70 72 61 67 6d 61 20 6a 6f 75  l {.  pragma jou
32f0: 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 70 65 72 73  rnal_mode = pers
3300: 69 73 74 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20  ist.} -files {. 
3310: 20 64 65 6c 65 74 65 2e 74 65 73 74 20 64 65 6c   delete.test del
3320: 65 74 65 32 2e 74 65 73 74 20 69 6e 73 65 72 74  ete2.test insert
3330: 2e 74 65 73 74 20 72 6f 6c 6c 62 61 63 6b 2e 74  .test rollback.t
3340: 65 73 74 20 73 65 6c 65 63 74 31 2e 74 65 73 74  est select1.test
3350: 0a 20 20 73 65 6c 65 63 74 32 2e 74 65 73 74 20  .  select2.test 
3360: 74 72 61 6e 73 2e 74 65 73 74 20 75 70 64 61 74  trans.test updat
3370: 65 2e 74 65 73 74 20 76 61 63 75 75 6d 2e 74 65  e.test vacuum.te
3380: 73 74 20 0a 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d  st .}..# Run som
3390: 65 20 65 72 72 6f 72 20 74 65 73 74 73 20 69 6e  e error tests in
33a0: 20 6e 6f 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65   no journal mode
33b0: 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22  ..#.test_suite "
33c0: 6e 6f 5f 6a 6f 75 72 6e 61 6c 5f 65 72 72 6f 72  no_journal_error
33d0: 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b  " -description {
33e0: 0a 20 20 52 75 6e 20 6d 61 6c 6c 6f 63 2e 74 65  .  Run malloc.te
33f0: 73 74 20 61 6e 64 20 69 6f 65 72 72 2e 74 65 73  st and ioerr.tes
3400: 74 20 69 6e 20 6e 6f 2d 6a 6f 75 72 6e 61 6c 20  t in no-journal 
3410: 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20  mode..} -presql 
3420: 7b 0a 20 20 70 72 61 67 6d 61 20 6a 6f 75 72 6e  {.  pragma journ
3430: 61 6c 5f 6d 6f 64 65 20 3d 20 70 65 72 73 69 73  al_mode = persis
3440: 74 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 6d  t.} -files {.  m
3450: 61 6c 6c 6f 63 2e 74 65 73 74 20 69 6f 65 72 72  alloc.test ioerr
3460: 2e 74 65 73 74 0a 7d 0a 0a 23 20 52 75 6e 20 73  .test.}..# Run s
3470: 6f 6d 65 20 63 72 61 73 68 2d 74 65 73 74 73 20  ome crash-tests 
3480: 69 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f  in autovacuum mo
3490: 64 65 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65  de..#.test_suite
34a0: 20 22 61 75 74 6f 76 61 63 75 75 6d 5f 63 72 61   "autovacuum_cra
34b0: 73 68 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e  sh" -description
34c0: 20 7b 0a 20 20 52 75 6e 20 63 72 61 73 68 2e 74   {.  Run crash.t
34d0: 65 73 74 20 69 6e 20 61 75 74 6f 76 61 63 75 75  est in autovacuu
34e0: 6d 20 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71  m mode..} -presq
34f0: 6c 20 7b 0a 20 20 70 72 61 67 6d 61 20 61 75 74  l {.  pragma aut
3500: 6f 5f 76 61 63 75 75 6d 20 3d 20 31 0a 7d 20 2d  o_vacuum = 1.} -
3510: 66 69 6c 65 73 20 63 72 61 73 68 2e 74 65 73 74  files crash.test
3520: 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 69 6f 65  ..# Run some ioe
3530: 72 72 2d 74 65 73 74 73 20 69 6e 20 61 75 74 6f  rr-tests in auto
3540: 76 61 63 75 75 6d 20 6d 6f 64 65 2e 0a 23 0a 74  vacuum mode..#.t
3550: 65 73 74 5f 73 75 69 74 65 20 22 61 75 74 6f 76  est_suite "autov
3560: 61 63 75 75 6d 5f 69 6f 65 72 72 22 20 2d 64 65  acuum_ioerr" -de
3570: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52 75  scription {.  Ru
3580: 6e 20 69 6f 65 72 72 2e 74 65 73 74 20 69 6e 20  n ioerr.test in 
3590: 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65 2e  autovacuum mode.
35a0: 0a 7d 20 2d 70 72 65 73 71 6c 20 7b 0a 20 20 70  .} -presql {.  p
35b0: 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75  ragma auto_vacuu
35c0: 6d 20 3d 20 31 0a 7d 20 2d 66 69 6c 65 73 20 69  m = 1.} -files i
35d0: 6f 65 72 72 2e 74 65 73 74 0a 0a 23 20 52 75 6e  oerr.test..# Run
35e0: 20 74 65 73 74 73 20 77 69 74 68 20 61 6e 20 69   tests with an i
35f0: 6e 2d 6d 65 6d 6f 72 79 20 6a 6f 75 72 6e 61 6c  n-memory journal
3600: 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22  ..#.test_suite "
3610: 69 6e 6d 65 6d 6f 72 79 5f 6a 6f 75 72 6e 61 6c  inmemory_journal
3620: 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b  " -description {
3630: 0a 20 20 52 75 6e 20 74 65 73 74 73 20 77 69 74  .  Run tests wit
3640: 68 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 6a  h an in-memory j
3650: 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 0a 7d 20 2d  ournal file..} -
3660: 70 72 65 73 71 6c 20 7b 0a 20 20 70 72 61 67 6d  presql {.  pragm
3670: 61 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  a journal_mode =
3680: 20 27 6d 65 6d 6f 72 79 27 0a 7d 20 2d 66 69 6c   'memory'.} -fil
3690: 65 73 20 5b 74 65 73 74 5f 73 65 74 20 24 3a 3a  es [test_set $::
36a0: 61 6c 6c 71 75 69 63 6b 74 65 73 74 73 20 2d 65  allquicktests -e
36b0: 78 63 6c 75 64 65 20 7b 0a 20 20 23 20 45 78 63  xclude {.  # Exc
36c0: 6c 75 64 65 20 61 6c 6c 20 74 65 73 74 73 20 74  lude all tests t
36d0: 68 61 74 20 73 69 6d 75 6c 61 74 65 20 49 4f 20  hat simulate IO 
36e0: 65 72 72 6f 72 73 2e 0a 20 20 61 75 74 6f 76 61  errors..  autova
36f0: 63 75 75 6d 5f 69 6f 65 72 72 32 2e 74 65 73 74  cuum_ioerr2.test
3700: 20 69 6e 63 72 76 61 63 75 75 6d 5f 69 6f 65 72   incrvacuum_ioer
3710: 72 2e 74 65 73 74 20 69 6f 65 72 72 2e 74 65 73  r.test ioerr.tes
3720: 74 0a 20 20 69 6f 65 72 72 2e 74 65 73 74 20 69  t.  ioerr.test i
3730: 6f 65 72 72 32 2e 74 65 73 74 20 69 6f 65 72 72  oerr2.test ioerr
3740: 33 2e 74 65 73 74 20 69 6f 65 72 72 34 2e 74 65  3.test ioerr4.te
3750: 73 74 20 69 6f 65 72 72 35 2e 74 65 73 74 0a 20  st ioerr5.test. 
3760: 20 76 61 63 75 75 6d 33 2e 74 65 73 74 20 69 6e   vacuum3.test in
3770: 63 72 62 6c 6f 62 5f 65 72 72 2e 74 65 73 74 20  crblob_err.test 
3780: 64 69 73 6b 66 75 6c 6c 2e 74 65 73 74 20 62 61  diskfull.test ba
3790: 63 6b 75 70 5f 69 6f 65 72 72 2e 74 65 73 74 0a  ckup_ioerr.test.
37a0: 20 20 65 5f 66 74 73 33 2e 74 65 73 74 20 66 74    e_fts3.test ft
37b0: 73 33 63 6f 76 2e 74 65 73 74 20 66 74 73 33 6d  s3cov.test fts3m
37c0: 61 6c 6c 6f 63 2e 74 65 73 74 20 66 74 73 33 72  alloc.test fts3r
37d0: 6e 64 2e 74 65 73 74 0a 20 20 66 74 73 33 73 6e  nd.test.  fts3sn
37e0: 69 70 70 65 74 2e 74 65 73 74 0a 0a 20 20 23 20  ippet.test..  # 
37f0: 45 78 63 6c 75 64 65 20 74 65 73 74 20 73 63 72  Exclude test scr
3800: 69 70 74 73 20 74 68 61 74 20 75 73 65 20 74 63  ipts that use tc
3810: 6c 20 49 4f 20 74 6f 20 61 63 63 65 73 73 20 6a  l IO to access j
3820: 6f 75 72 6e 61 6c 20 66 69 6c 65 73 20 6f 72 20  ournal files or 
3830: 63 6f 75 6e 74 0a 20 20 23 20 74 68 65 20 6e 75  count.  # the nu
3840: 6d 62 65 72 20 6f 66 20 66 73 79 6e 63 28 29 20  mber of fsync() 
3850: 63 61 6c 6c 73 2e 0a 20 20 70 61 67 65 72 2e 74  calls..  pager.t
3860: 65 73 74 20 65 78 63 6c 75 73 69 76 65 2e 74 65  est exclusive.te
3870: 73 74 20 6a 72 6e 6c 6d 6f 64 65 2e 74 65 73 74  st jrnlmode.test
3880: 20 73 79 6e 63 2e 74 65 73 74 20 6d 69 73 63 31   sync.test misc1
3890: 2e 74 65 73 74 20 0a 20 20 6a 6f 75 72 6e 61 6c  .test .  journal
38a0: 31 2e 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2e  1.test conflict.
38b0: 74 65 73 74 20 63 72 61 73 68 38 2e 74 65 73 74  test crash8.test
38c0: 20 74 6b 74 33 34 35 37 2e 74 65 73 74 20 69 6f   tkt3457.test io
38d0: 2e 74 65 73 74 0a 0a 20 20 70 61 67 65 72 31 2e  .test..  pager1.
38e0: 74 65 73 74 20 61 73 79 6e 63 34 2e 74 65 73 74  test async4.test
38f0: 20 63 6f 72 72 75 70 74 2e 74 65 73 74 20 66 69   corrupt.test fi
3900: 6c 65 66 6d 74 2e 74 65 73 74 20 70 61 67 65 72  lefmt.test pager
3910: 32 2e 74 65 73 74 0a 20 20 63 6f 72 72 75 70 74  2.test.  corrupt
3920: 35 2e 74 65 73 74 20 63 6f 72 72 75 70 74 41 2e  5.test corruptA.
3930: 74 65 73 74 20 70 61 67 65 72 6f 70 74 2e 74 65  test pageropt.te
3940: 73 74 0a 0a 20 20 23 20 45 78 63 6c 75 64 65 20  st..  # Exclude 
3950: 73 74 6d 74 2e 74 65 73 74 2c 20 77 68 69 63 68  stmt.test, which
3960: 20 65 78 70 65 63 74 73 20 73 75 62 2d 6a 6f 75   expects sub-jou
3970: 72 6e 61 6c 73 20 74 6f 20 75 73 65 20 74 65 6d  rnals to use tem
3980: 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20  porary files..  
3990: 73 74 6d 74 2e 74 65 73 74 0a 0a 20 20 23 20 57  stmt.test..  # W
39a0: 41 4c 20 6d 6f 64 65 20 69 73 20 64 69 66 66 65  AL mode is diffe
39b0: 72 65 6e 74 2e 0a 20 20 77 61 6c 2a 0a 7d 5d 0a  rent..  wal*.}].
39c0: 0a 69 66 63 61 70 61 62 6c 65 20 6d 65 6d 33 20  .ifcapable mem3 
39d0: 7b 0a 20 20 74 65 73 74 5f 73 75 69 74 65 20 22  {.  test_suite "
39e0: 6d 65 6d 73 79 73 33 22 20 2d 64 65 73 63 72 69  memsys3" -descri
39f0: 70 74 69 6f 6e 20 7b 0a 20 20 20 20 52 75 6e 20  ption {.    Run 
3a00: 74 65 73 74 73 20 75 73 69 6e 67 20 74 68 65 20  tests using the 
3a10: 61 6c 6c 6f 63 61 74 6f 72 20 69 6e 20 6d 65 6d  allocator in mem
3a20: 33 2e 63 2e 0a 20 20 7d 20 2d 66 69 6c 65 73 20  3.c..  } -files 
3a30: 5b 74 65 73 74 5f 73 65 74 20 24 3a 3a 61 6c 6c  [test_set $::all
3a40: 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78 63 6c  quicktests -excl
3a50: 75 64 65 20 7b 0a 20 20 20 20 61 75 74 6f 76 61  ude {.    autova
3a60: 63 75 75 6d 2e 74 65 73 74 20 20 20 20 20 20 20  cuum.test       
3a70: 20 20 20 20 64 65 6c 65 74 65 33 2e 74 65 73 74      delete3.test
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61                ma
3a90: 6e 79 64 62 2e 74 65 73 74 0a 20 20 20 20 62 69  nydb.test.    bi
3aa0: 67 72 6f 77 2e 74 65 73 74 20 20 20 20 20 20 20  grow.test       
3ab0: 20 20 20 20 20 20 20 20 69 6e 63 72 62 6c 6f 62          incrblob
3ac0: 32 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20  2.test          
3ad0: 20 20 6d 65 6d 64 62 2e 74 65 73 74 0a 20 20 20    memdb.test.   
3ae0: 20 62 69 74 76 65 63 2e 74 65 73 74 20 20 20 20   bitvec.test    
3af0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
3b00: 32 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20  2.test          
3b10: 20 20 20 20 20 6d 65 6d 73 75 62 73 79 73 31 2e       memsubsys1.
3b20: 74 65 73 74 0a 20 20 20 20 63 61 70 69 33 63 2e  test.    capi3c.
3b30: 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20 20  test            
3b40: 20 20 20 69 6f 65 72 72 2e 74 65 73 74 20 20 20     ioerr.test   
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d               mem
3b60: 73 75 62 73 79 73 32 2e 74 65 73 74 0a 20 20 20  subsys2.test.   
3b70: 20 63 61 70 69 33 2e 74 65 73 74 20 20 20 20 20   capi3.test     
3b80: 20 20 20 20 20 20 20 20 20 20 20 6a 6f 69 6e 33             join3
3b90: 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20  .test           
3ba0: 20 20 20 20 20 70 61 67 65 73 69 7a 65 2e 74 65       pagesize.te
3bb0: 73 74 0a 20 20 20 20 63 6f 6c 6c 61 74 65 35 2e  st.    collate5.
3bc0: 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20 20  test            
3bd0: 20 6c 69 6d 69 74 2e 74 65 73 74 20 20 20 20 20   limit.test     
3be0: 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b 75             backu
3bf0: 70 5f 69 6f 65 72 72 2e 74 65 73 74 0a 20 20 20  p_ioerr.test.   
3c00: 20 62 61 63 6b 75 70 5f 6d 61 6c 6c 6f 63 2e 74   backup_malloc.t
3c10: 65 73 74 0a 20 20 7d 5d 20 2d 69 6e 69 74 69 61  est.  }] -initia
3c20: 6c 69 7a 65 20 7b 0a 20 20 20 20 63 61 74 63 68  lize {.    catch
3c30: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20   {db close}.    
3c40: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 61 75  sqlite3_reset_au
3c50: 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 0a 20 20 20  to_extension.   
3c60: 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77   sqlite3_shutdow
3c70: 6e 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  n.    sqlite3_co
3c80: 6e 66 69 67 5f 68 65 61 70 20 32 35 30 30 30 30  nfig_heap 250000
3c90: 30 30 20 30 0a 20 20 20 20 73 71 6c 69 74 65 33  00 0.    sqlite3
3ca0: 5f 63 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64  _config_lookasid
3cb0: 65 20 30 20 30 0a 20 20 20 20 69 66 63 61 70 61  e 0 0.    ifcapa
3cc0: 62 6c 65 20 6d 65 6d 35 20 7b 0a 20 20 20 20 20  ble mem5 {.     
3cd0: 20 23 20 49 66 20 62 6f 74 68 20 6d 65 6d 73 79   # If both memsy
3ce0: 73 33 20 61 6e 64 20 6d 65 6d 73 79 73 35 20 61  s3 and memsys5 a
3cf0: 72 65 20 65 6e 61 62 6c 65 64 20 69 6e 20 74 68  re enabled in th
3d00: 65 20 62 75 69 6c 64 2c 20 74 68 65 20 63 61 6c  e build, the cal
3d10: 6c 20 74 6f 0a 20 20 20 20 20 20 23 20 5b 73 71  l to.      # [sq
3d20: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 68 65 61  lite3_config_hea
3d30: 70 5d 20 77 69 6c 6c 20 69 6e 69 74 69 61 6c 69  p] will initiali
3d40: 7a 65 20 74 68 65 20 73 79 73 74 65 6d 20 74 6f  ze the system to
3d50: 20 75 73 65 20 6d 65 6d 73 79 73 35 2e 0a 20 20   use memsys5..  
3d60: 20 20 20 20 23 20 54 68 65 20 66 6f 6c 6c 6f 77      # The follow
3d70: 69 6e 67 20 6f 76 65 72 72 69 64 65 73 20 74 68  ing overrides th
3d80: 69 73 20 70 72 65 66 65 72 65 6e 63 65 20 61 6e  is preference an
3d90: 64 20 69 6e 73 74 61 6c 6c 73 20 74 68 65 20 6d  d installs the m
3da0: 65 6d 73 79 73 33 0a 20 20 20 20 20 20 23 20 61  emsys3.      # a
3db0: 6c 6c 6f 63 61 74 6f 72 2e 0a 20 20 20 20 20 20  llocator..      
3dc0: 73 71 6c 69 74 65 33 5f 69 6e 73 74 61 6c 6c 5f  sqlite3_install_
3dd0: 6d 65 6d 73 79 73 33 0a 20 20 20 20 7d 0a 20 20  memsys3.    }.  
3de0: 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c 6f 63    install_malloc
3df0: 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20 20 20  _faultsim 1 .   
3e00: 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
3e10: 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e 73 74  ize.    autoinst
3e20: 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  all_test_functio
3e30: 6e 73 0a 20 20 7d 20 2d 73 68 75 74 64 6f 77 6e  ns.  } -shutdown
3e40: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62   {.    catch {db
3e50: 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69   close}.    sqli
3e60: 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 20  te3_shutdown.   
3e70: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f   sqlite3_config_
3e80: 68 65 61 70 20 30 20 30 0a 20 20 20 20 73 71 6c  heap 0 0.    sql
3e90: 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 6f 6b  ite3_config_look
3ea0: 61 73 69 64 65 20 31 30 30 20 35 30 30 0a 20 20  aside 100 500.  
3eb0: 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c 6f 63    install_malloc
3ec0: 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20 20 20  _faultsim 1 .   
3ed0: 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
3ee0: 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e 73 74  ize.    autoinst
3ef0: 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  all_test_functio
3f00: 6e 73 0a 20 20 7d 0a 7d 0a 0a 69 66 63 61 70 61  ns.  }.}..ifcapa
3f10: 62 6c 65 20 6d 65 6d 35 20 7b 0a 20 20 74 65 73  ble mem5 {.  tes
3f20: 74 5f 73 75 69 74 65 20 22 6d 65 6d 73 79 73 35  t_suite "memsys5
3f30: 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b  " -description {
3f40: 0a 20 20 20 20 52 75 6e 20 74 65 73 74 73 20 75  .    Run tests u
3f50: 73 69 6e 67 20 74 68 65 20 61 6c 6c 6f 63 61 74  sing the allocat
3f60: 6f 72 20 69 6e 20 6d 65 6d 35 2e 63 2e 0a 20 20  or in mem5.c..  
3f70: 7d 20 2d 66 69 6c 65 73 20 5b 74 65 73 74 5f 73  } -files [test_s
3f80: 65 74 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74 65  et $::allquickte
3f90: 73 74 73 20 2d 65 78 63 6c 75 64 65 20 7b 0a 20  sts -exclude {. 
3fa0: 20 20 20 61 75 74 6f 76 61 63 75 75 6d 2e 74 65     autovacuum.te
3fb0: 73 74 20 20 20 20 20 20 20 20 20 20 20 64 65 6c  st           del
3fc0: 65 74 65 33 2e 74 65 73 74 20 20 20 20 20 20 20  ete3.test       
3fd0: 20 20 20 20 20 20 20 6d 61 6e 79 64 62 2e 74 65         manydb.te
3fe0: 73 74 0a 20 20 20 20 62 69 67 72 6f 77 2e 74 65  st.    bigrow.te
3ff0: 73 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  st              
4000: 20 69 6e 63 72 62 6c 6f 62 32 2e 74 65 73 74 20   incrblob2.test 
4010: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 64 62             memdb
4020: 2e 74 65 73 74 0a 20 20 20 20 62 69 74 76 65 63  .test.    bitvec
4030: 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20  .test           
4040: 20 20 20 20 69 6e 64 65 78 32 2e 74 65 73 74 20      index2.test 
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
4060: 6d 73 75 62 73 79 73 31 2e 74 65 73 74 0a 20 20  msubsys1.test.  
4070: 20 20 63 61 70 69 33 63 2e 74 65 73 74 20 20 20    capi3c.test   
4080: 20 20 20 20 20 20 20 20 20 20 20 20 69 6f 65 72              ioer
4090: 72 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20  r.test          
40a0: 20 20 20 20 20 20 6d 65 6d 73 75 62 73 79 73 32        memsubsys2
40b0: 2e 74 65 73 74 0a 20 20 20 20 63 61 70 69 33 2e  .test.    capi3.
40c0: 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20 20  test            
40d0: 20 20 20 20 6a 6f 69 6e 33 2e 74 65 73 74 20 20      join3.test  
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
40f0: 67 65 73 69 7a 65 2e 74 65 73 74 0a 20 20 20 20  gesize.test.    
4100: 63 6f 6c 6c 61 74 65 35 2e 74 65 73 74 20 20 20  collate5.test   
4110: 20 20 20 20 20 20 20 20 20 20 6c 69 6d 69 74 2e            limit.
4120: 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20 20  test            
4130: 20 20 20 20 7a 65 72 6f 62 6c 6f 62 2e 74 65 73      zeroblob.tes
4140: 74 0a 20 20 7d 5d 20 2d 69 6e 69 74 69 61 6c 69  t.  }] -initiali
4150: 7a 65 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  ze {.    catch {
4160: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
4170: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
4180: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
4190: 67 5f 68 65 61 70 20 32 35 30 30 30 30 30 30 20  g_heap 25000000 
41a0: 36 34 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  64.    sqlite3_c
41b0: 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20  onfig_lookaside 
41c0: 30 20 30 0a 20 20 20 20 69 6e 73 74 61 6c 6c 5f  0 0.    install_
41d0: 6d 61 6c 6c 6f 63 5f 66 61 75 6c 74 73 69 6d 20  malloc_faultsim 
41e0: 31 20 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69  1 .    sqlite3_i
41f0: 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 61 75  nitialize.    au
4200: 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f 66  toinstall_test_f
4210: 75 6e 63 74 69 6f 6e 73 0a 20 20 7d 20 2d 73 68  unctions.  } -sh
4220: 75 74 64 6f 77 6e 20 7b 0a 20 20 20 20 63 61 74  utdown {.    cat
4230: 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20  ch {db close}.  
4240: 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f    sqlite3_shutdo
4250: 77 6e 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  wn.    sqlite3_c
4260: 6f 6e 66 69 67 5f 68 65 61 70 20 30 20 30 0a 20  onfig_heap 0 0. 
4270: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
4280: 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 31 30 30 20  g_lookaside 100 
4290: 35 30 30 0a 20 20 20 20 69 6e 73 74 61 6c 6c 5f  500.    install_
42a0: 6d 61 6c 6c 6f 63 5f 66 61 75 6c 74 73 69 6d 20  malloc_faultsim 
42b0: 31 20 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69  1 .    sqlite3_i
42c0: 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 61 75  nitialize.    au
42d0: 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f 66  toinstall_test_f
42e0: 75 6e 63 74 69 6f 6e 73 0a 20 20 7d 0a 0a 20 20  unctions.  }..  
42f0: 74 65 73 74 5f 73 75 69 74 65 20 22 6d 65 6d 73  test_suite "mems
4300: 79 73 35 2d 32 22 20 2d 64 65 73 63 72 69 70 74  ys5-2" -descript
4310: 69 6f 6e 20 7b 0a 20 20 20 20 52 75 6e 20 74 65  ion {.    Run te
4320: 73 74 73 20 75 73 69 6e 67 20 74 68 65 20 61 6c  sts using the al
4330: 6c 6f 63 61 74 6f 72 20 69 6e 20 6d 65 6d 35 2e  locator in mem5.
4340: 63 20 69 6e 20 61 20 64 69 66 66 65 72 65 6e 74  c in a different
4350: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 0a   configuration..
4360: 20 20 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 20    } -files {.   
4370: 20 73 65 6c 65 63 74 31 2e 74 65 73 74 20 0a 20   select1.test . 
4380: 20 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 7b   } -initialize {
4390: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63  .    catch {db c
43a0: 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65  lose}.    sqlite
43b0: 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 20 20 73  3_shutdown.    s
43c0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 68 65  qlite3_config_he
43d0: 61 70 20 34 30 30 30 30 30 30 30 20 31 36 0a 20  ap 40000000 16. 
43e0: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
43f0: 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 30 20 30 0a  g_lookaside 0 0.
4400: 20 20 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c      install_mall
4410: 6f 63 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20  oc_faultsim 1 . 
4420: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
4430: 61 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e  alize.    autoin
4440: 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74  stall_test_funct
4450: 69 6f 6e 73 0a 20 20 7d 20 2d 73 68 75 74 64 6f  ions.  } -shutdo
4460: 77 6e 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  wn {.    catch {
4470: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
4480: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
4490: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
44a0: 67 5f 68 65 61 70 20 30 20 30 0a 20 20 20 20 73  g_heap 0 0.    s
44b0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
44c0: 6f 6b 61 73 69 64 65 20 31 30 30 20 35 30 30 0a  okaside 100 500.
44d0: 20 20 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c      install_mall
44e0: 6f 63 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20  oc_faultsim 1 . 
44f0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
4500: 61 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e  alize.    autoin
4510: 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74  stall_test_funct
4520: 69 6f 6e 73 0a 20 20 7d 0a 7d 0a 0a 69 66 63 61  ions.  }.}..ifca
4530: 70 61 62 6c 65 20 74 68 72 65 61 64 73 61 66 65  pable threadsafe
4540: 20 7b 0a 20 20 74 65 73 74 5f 73 75 69 74 65 20   {.  test_suite 
4550: 22 6e 6f 5f 6d 75 74 65 78 5f 74 72 79 22 20 2d  "no_mutex_try" -
4560: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20  description {.  
4570: 20 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 6d     The sqlite3_m
4580: 75 74 65 78 5f 74 72 79 28 29 20 69 6e 74 65 72  utex_try() inter
4590: 66 61 63 65 20 61 6c 77 61 79 73 20 66 61 69 6c  face always fail
45a0: 73 0a 20 20 7d 20 2d 66 69 6c 65 73 20 5b 0a 20  s.  } -files [. 
45b0: 20 20 20 74 65 73 74 5f 73 65 74 20 24 3a 3a 61     test_set $::a
45c0: 6c 6c 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78  llquicktests -ex
45d0: 63 6c 75 64 65 20 6d 75 74 65 78 31 2e 74 65 73  clude mutex1.tes
45e0: 74 20 6d 75 74 65 78 32 2e 74 65 73 74 0a 20 20  t mutex2.test.  
45f0: 5d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 7b 0a  ] -initialize {.
4600: 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c      catch {db cl
4610: 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65 33  ose}.    sqlite3
4620: 5f 73 68 75 74 64 6f 77 6e 0a 20 20 20 20 69 6e  _shutdown.    in
4630: 73 74 61 6c 6c 5f 6d 75 74 65 78 5f 63 6f 75 6e  stall_mutex_coun
4640: 74 65 72 73 20 31 0a 20 20 20 20 73 65 74 20 3a  ters 1.    set :
4650: 3a 64 69 73 61 62 6c 65 5f 6d 75 74 65 78 5f 74  :disable_mutex_t
4660: 72 79 20 31 0a 20 20 20 20 73 71 6c 69 74 65 33  ry 1.    sqlite3
4670: 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20  _initialize.    
4680: 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74  autoinstall_test
4690: 5f 66 75 6e 63 74 69 6f 6e 73 0a 20 20 7d 20 2d  _functions.  } -
46a0: 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20 20 20 63  shutdown {.    c
46b0: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
46c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74      sqlite3_shut
46d0: 64 6f 77 6e 0a 20 20 20 20 69 6e 73 74 61 6c 6c  down.    install
46e0: 5f 6d 75 74 65 78 5f 63 6f 75 6e 74 65 72 73 20  _mutex_counters 
46f0: 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  0.    sqlite3_in
4700: 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 61 75 74  itialize.    aut
4710: 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75  oinstall_test_fu
4720: 6e 63 74 69 6f 6e 73 0a 20 20 7d 0a 7d 0a 0a 23  nctions.  }.}..#
4730: 20 72 75 6e 5f 74 65 73 74 73 20 22 63 72 61 73   run_tests "cras
4740: 68 5f 73 61 66 65 5f 61 70 70 65 6e 64 22 20 2d  h_safe_append" -
4750: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 23 20  description {.# 
4760: 20 20 52 75 6e 20 63 72 61 73 68 2e 74 65 73 74    Run crash.test
4770: 20 77 69 74 68 20 70 65 72 73 69 73 74 65 6e 74   with persistent
4780: 20 6a 6f 75 72 6e 61 6c 73 20 6f 6e 20 61 20 53   journals on a S
4790: 41 46 45 5f 41 50 50 45 4e 44 20 66 69 6c 65 2d  AFE_APPEND file-
47a0: 73 79 73 74 65 6d 2e 0a 23 20 7d 20 2d 69 6e 69  system..# } -ini
47b0: 74 69 61 6c 69 7a 65 20 7b 0a 23 20 20 20 72 65  tialize {.#   re
47c0: 6e 61 6d 65 20 63 72 61 73 68 73 71 6c 20 73 61  name crashsql sa
47d0: 5f 63 72 61 73 68 73 71 6c 0a 23 20 20 20 70 72  _crashsql.#   pr
47e0: 6f 63 20 63 72 61 73 68 73 71 6c 20 7b 61 72 67  oc crashsql {arg
47f0: 73 7d 20 7b 0a 23 20 20 20 20 20 73 65 74 20 6f  s} {.#     set o
4800: 70 74 69 6f 6e 73 20 5b 6c 72 61 6e 67 65 20 24  ptions [lrange $
4810: 61 72 67 73 20 30 20 5b 65 78 70 72 20 7b 5b 6c  args 0 [expr {[l
4820: 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 2d 32 7d  length $args]-2}
4830: 5d 5d 0a 23 20 20 20 20 20 6c 61 70 70 65 6e 64  ]].#     lappend
4840: 20 6f 70 74 69 6f 6e 73 20 2d 63 68 61 72 20 73   options -char s
4850: 61 66 65 5f 61 70 70 65 6e 64 0a 23 20 20 20 20  afe_append.#    
4860: 20 73 65 74 20 73 71 6c 20 5b 6c 69 6e 64 65 78   set sql [lindex
4870: 20 24 61 72 67 73 20 65 6e 64 5d 0a 23 20 20 20   $args end].#   
4880: 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 69 6f 6e    lappend option
4890: 73 20 22 0a 23 20 20 20 20 20 20 20 50 52 41 47  s ".#       PRAG
48a0: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  MA journal_mode=
48b0: 70 65 72 73 69 73 74 65 6e 74 3b 0a 23 20 20 20  persistent;.#   
48c0: 20 20 20 20 24 73 71 6c 0a 23 20 20 20 20 20 22      $sql.#     "
48d0: 0a 23 20 20 20 20 20 73 65 74 20 66 64 20 5b 6f  .#     set fd [o
48e0: 70 65 6e 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  pen test.db-jour
48f0: 6e 61 6c 20 77 5d 0a 23 20 20 20 20 20 70 75 74  nal w].#     put
4900: 73 20 24 66 64 20 5b 73 74 72 69 6e 67 20 72 65  s $fd [string re
4910: 70 65 61 74 20 31 32 33 34 35 36 37 38 39 30 20  peat 1234567890 
4920: 31 30 30 30 30 30 5d 0a 23 20 20 20 20 20 63 6c  100000].#     cl
4930: 6f 73 65 20 24 66 64 0a 23 20 20 20 20 20 65 76  ose $fd.#     ev
4940: 61 6c 20 73 61 5f 63 72 61 73 68 73 71 6c 20 24  al sa_crashsql $
4950: 6f 70 74 69 6f 6e 73 0a 23 20 20 20 7d 0a 23 20  options.#   }.# 
4960: 7d 20 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 23 20  } -shutdown {.# 
4970: 20 20 72 65 6e 61 6d 65 20 63 72 61 73 68 73 71    rename crashsq
4980: 6c 20 7b 7d 0a 23 20 20 20 72 65 6e 61 6d 65 20  l {}.#   rename 
4990: 73 61 5f 63 72 61 73 68 73 71 6c 20 63 72 61 73  sa_crashsql cras
49a0: 68 73 71 6c 0a 23 20 7d 20 2d 66 69 6c 65 73 20  hsql.# } -files 
49b0: 63 72 61 73 68 2e 74 65 73 74 0a 0a 74 65 73 74  crash.test..test
49c0: 5f 73 75 69 74 65 20 22 73 61 66 65 5f 61 70 70  _suite "safe_app
49d0: 65 6e 64 22 20 2d 64 65 73 63 72 69 70 74 69 6f  end" -descriptio
49e0: 6e 20 7b 0a 20 20 52 75 6e 20 73 6f 6d 65 20 74  n {.  Run some t
49f0: 65 73 74 73 20 6f 6e 20 61 20 53 41 46 45 5f 41  ests on a SAFE_A
4a00: 50 50 45 4e 44 20 66 69 6c 65 2d 73 79 73 74 65  PPEND file-syste
4a10: 6d 2e 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65  m..} -initialize
4a20: 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c 69   {.  rename sqli
4a30: 74 65 33 20 73 71 6c 69 74 65 33 5f 73 61 66 65  te3 sqlite3_safe
4a40: 61 70 70 65 6e 64 0a 20 20 70 72 6f 63 20 73 71  append.  proc sq
4a50: 6c 69 74 65 33 20 7b 61 72 67 73 7d 20 7b 0a 20  lite3 {args} {. 
4a60: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 72     if {[string r
4a70: 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 61 72  ange [lindex $ar
4a80: 67 73 20 30 5d 20 30 20 30 5d 20 6e 65 20 22 2d  gs 0] 0 0] ne "-
4a90: 22 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  "} {.      lappe
4aa0: 6e 64 20 61 72 67 73 20 2d 76 66 73 20 64 65 76  nd args -vfs dev
4ab0: 73 79 6d 0a 20 20 20 20 7d 0a 20 20 20 20 75 70  sym.    }.    up
4ac0: 6c 65 76 65 6c 20 5b 63 6f 6e 63 61 74 20 73 71  level [concat sq
4ad0: 6c 69 74 65 33 5f 73 61 66 65 61 70 70 65 6e 64  lite3_safeappend
4ae0: 20 24 61 72 67 73 5d 0a 20 20 7d 0a 20 20 73 71   $args].  }.  sq
4af0: 6c 69 74 65 33 5f 73 69 6d 75 6c 61 74 65 5f 64  lite3_simulate_d
4b00: 65 76 69 63 65 20 2d 63 68 61 72 20 73 61 66 65  evice -char safe
4b10: 5f 61 70 70 65 6e 64 0a 7d 20 2d 73 68 75 74 64  _append.} -shutd
4b20: 6f 77 6e 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73  own {.  rename s
4b30: 71 6c 69 74 65 33 20 7b 7d 0a 20 20 72 65 6e 61  qlite3 {}.  rena
4b40: 6d 65 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64  me sqlite3_shutd
4b50: 6f 77 6e 20 73 71 6c 69 74 65 33 0a 7d 20 2d 66  own sqlite3.} -f
4b60: 69 6c 65 73 20 5b 0a 20 20 74 65 73 74 5f 73 65  iles [.  test_se
4b70: 74 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74 65 73  t $::allquicktes
4b80: 74 73 20 73 68 61 72 65 64 5f 65 72 72 2e 74 65  ts shared_err.te
4b90: 73 74 20 2d 65 78 63 6c 75 64 65 20 61 73 79 6e  st -exclude asyn
4ba0: 63 33 2e 74 65 73 74 0a 5d 0a 0a 23 20 54 68 65  c3.test.]..# The
4bb0: 20 73 65 74 20 6f 66 20 74 65 73 74 73 20 74 6f   set of tests to
4bc0: 20 72 75 6e 20 6f 6e 20 74 68 65 20 61 6c 74 65   run on the alte
4bd0: 72 6e 61 74 69 76 65 2d 70 63 61 63 68 65 0a 73  rnative-pcache.s
4be0: 65 74 20 70 65 72 6d 2d 61 6c 74 2d 70 63 61 63  et perm-alt-pcac
4bf0: 68 65 2d 74 65 73 74 73 65 74 20 7b 0a 20 20 61  he-testset {.  a
4c00: 73 79 6e 63 2e 74 65 73 74 0a 20 20 61 74 74 61  sync.test.  atta
4c10: 63 68 2e 74 65 73 74 0a 20 20 64 65 6c 65 74 65  ch.test.  delete
4c20: 2e 74 65 73 74 20 64 65 6c 65 74 65 32 2e 74 65  .test delete2.te
4c30: 73 74 0a 20 20 69 6e 64 65 78 2e 74 65 73 74 0a  st.  index.test.
4c40: 20 20 69 6e 73 65 72 74 2e 74 65 73 74 20 69 6e    insert.test in
4c50: 73 65 72 74 32 2e 74 65 73 74 0a 20 20 6a 6f 69  sert2.test.  joi
4c60: 6e 2e 74 65 73 74 20 6a 6f 69 6e 32 2e 74 65 73  n.test join2.tes
4c70: 74 0a 20 20 72 6f 6c 6c 62 61 63 6b 2e 74 65 73  t.  rollback.tes
4c80: 74 0a 20 20 73 65 6c 65 63 74 31 2e 74 65 73 74  t.  select1.test
4c90: 20 73 65 6c 65 63 74 32 2e 74 65 73 74 0a 20 20   select2.test.  
4ca0: 74 72 61 6e 73 2e 74 65 73 74 0a 20 20 75 70 64  trans.test.  upd
4cb0: 61 74 65 2e 74 65 73 74 0a 7d 0a 0a 66 6f 72 65  ate.test.}..fore
4cc0: 61 63 68 20 64 69 73 63 61 72 64 5f 72 61 74 65  ach discard_rate
4cd0: 20 7b 30 20 31 30 20 35 30 20 39 30 20 31 30 30   {0 10 50 90 100
4ce0: 7d 20 7b 0a 20 20 74 65 73 74 5f 73 75 69 74 65  } {.  test_suite
4cf0: 20 22 70 63 61 63 68 65 24 7b 64 69 73 63 61 72   "pcache${discar
4d00: 64 5f 72 61 74 65 7d 22 20 2d 64 65 73 63 72 69  d_rate}" -descri
4d10: 70 74 69 6f 6e 20 22 0a 20 20 20 20 41 6c 74 65  ption ".    Alte
4d20: 72 6e 61 74 69 76 65 20 70 63 61 63 68 65 20 69  rnative pcache i
4d30: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 69  mplementation wi
4d40: 74 68 20 24 7b 64 69 73 63 61 72 64 5f 72 61 74  th ${discard_rat
4d50: 65 7d 25 20 72 61 6e 64 6f 6d 20 64 69 73 63 61  e}% random disca
4d60: 72 64 0a 20 20 22 20 2d 69 6e 69 74 69 61 6c 69  rd.  " -initiali
4d70: 7a 65 20 22 0a 20 20 20 20 63 61 74 63 68 20 7b  ze ".    catch {
4d80: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
4d90: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
4da0: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
4db0: 67 5f 61 6c 74 5f 70 63 61 63 68 65 20 31 20 24  g_alt_pcache 1 $
4dc0: 64 69 73 63 61 72 64 5f 72 61 74 65 20 31 0a 20  discard_rate 1. 
4dd0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
4de0: 61 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e  alize.    autoin
4df0: 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74  stall_test_funct
4e00: 69 6f 6e 73 0a 20 20 22 20 2d 73 68 75 74 64 6f  ions.  " -shutdo
4e10: 77 6e 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  wn {.    catch {
4e20: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
4e30: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
4e40: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
4e50: 67 5f 61 6c 74 5f 70 63 61 63 68 65 20 30 20 30  g_alt_pcache 0 0
4e60: 20 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63   0.    sqlite3_c
4e70: 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20  onfig_lookaside 
4e80: 31 30 30 20 35 30 30 0a 20 20 20 20 69 6e 73 74  100 500.    inst
4e90: 61 6c 6c 5f 6d 61 6c 6c 6f 63 5f 66 61 75 6c 74  all_malloc_fault
4ea0: 73 69 6d 20 31 20 0a 20 20 20 20 73 71 6c 69 74  sim 1 .    sqlit
4eb0: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20  e3_initialize.  
4ec0: 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65    autoinstall_te
4ed0: 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 20 20 7d  st_functions.  }
4ee0: 20 2d 66 69 6c 65 73 20 24 7b 70 65 72 6d 2d 61   -files ${perm-a
4ef0: 6c 74 2d 70 63 61 63 68 65 2d 74 65 73 74 73 65  lt-pcache-testse
4f00: 74 7d 0a 7d 0a 0a 74 65 73 74 5f 73 75 69 74 65  t}.}..test_suite
4f10: 20 22 6a 6f 75 72 6e 61 6c 74 65 73 74 22 20 2d   "journaltest" -
4f20: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20  description {.  
4f30: 43 68 65 63 6b 20 74 68 61 74 20 70 61 67 65 73  Check that pages
4f40: 20 61 72 65 20 73 79 6e 63 65 64 20 62 65 66 6f   are synced befo
4f50: 72 65 20 62 65 69 6e 67 20 77 72 69 74 74 65 6e  re being written
4f60: 20 28 74 65 73 74 5f 6a 6f 75 72 6e 61 6c 2e 63   (test_journal.c
4f70: 29 2e 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65  )..} -initialize
4f80: 20 7b 0a 20 20 63 61 74 63 68 20 7b 64 62 20 63   {.  catch {db c
4f90: 6c 6f 73 65 7d 0a 20 20 72 65 67 69 73 74 65 72  lose}.  register
4fa0: 5f 6a 74 5f 76 66 73 20 2d 64 65 66 61 75 6c 74  _jt_vfs -default
4fb0: 20 22 22 0a 7d 20 2d 73 68 75 74 64 6f 77 6e 20   "".} -shutdown 
4fc0: 7b 0a 20 20 75 6e 72 65 67 69 73 74 65 72 5f 6a  {.  unregister_j
4fd0: 74 5f 76 66 73 0a 7d 20 2d 66 69 6c 65 73 20 5b  t_vfs.} -files [
4fe0: 74 65 73 74 5f 73 65 74 20 24 3a 3a 61 6c 6c 71  test_set $::allq
4ff0: 75 69 63 6b 74 65 73 74 73 20 2d 65 78 63 6c 75  uicktests -exclu
5000: 64 65 20 7b 0a 20 20 77 61 6c 2a 20 69 6e 63 72  de {.  wal* incr
5010: 76 61 63 75 75 6d 2e 74 65 73 74 20 69 6f 65 72  vacuum.test ioer
5020: 72 2e 74 65 73 74 20 63 6f 72 72 75 70 74 34 2e  r.test corrupt4.
5030: 74 65 73 74 20 69 6f 2e 74 65 73 74 20 63 72 61  test io.test cra
5040: 73 68 38 2e 74 65 73 74 20 0a 20 20 61 73 79 6e  sh8.test .  asyn
5050: 63 34 2e 74 65 73 74 20 62 69 67 66 69 6c 65 2e  c4.test bigfile.
5060: 74 65 73 74 0a 7d 5d 0a 0a 69 66 20 7b 5b 69 6e  test.}]..if {[in
5070: 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 72 65 67 69  fo commands regi
5080: 73 74 65 72 5f 64 65 6d 6f 76 66 73 5d 20 21 3d  ster_demovfs] !=
5090: 20 22 22 7d 20 7b 0a 20 20 74 65 73 74 5f 73 75   ""} {.  test_su
50a0: 69 74 65 20 22 64 65 6d 6f 76 66 73 22 20 2d 64  ite "demovfs" -d
50b0: 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 20  escription {.   
50c0: 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20   Check that the 
50d0: 64 65 6d 6f 76 66 73 20 28 63 6f 64 65 20 69 6e  demovfs (code in
50e0: 20 74 65 73 74 5f 64 65 6d 6f 76 66 73 2e 63 29   test_demovfs.c)
50f0: 20 6d 6f 72 65 20 6f 72 20 6c 65 73 73 20 77 6f   more or less wo
5100: 72 6b 73 2e 0a 20 20 7d 20 2d 69 6e 69 74 69 61  rks..  } -initia
5110: 6c 69 7a 65 20 7b 0a 20 20 20 20 72 65 67 69 73  lize {.    regis
5120: 74 65 72 5f 64 65 6d 6f 76 66 73 0a 20 20 7d 20  ter_demovfs.  } 
5130: 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20 20 20  -shutdown {.    
5140: 75 6e 72 65 67 69 73 74 65 72 5f 64 65 6d 6f 76  unregister_demov
5150: 66 73 0a 20 20 7d 20 2d 66 69 6c 65 73 20 7b 0a  fs.  } -files {.
5160: 20 20 20 20 69 6e 73 65 72 74 2e 74 65 73 74 20      insert.test 
5170: 20 20 69 6e 73 65 72 74 32 2e 74 65 73 74 20 20    insert2.test  
5180: 69 6e 73 65 72 74 33 2e 74 65 73 74 20 72 6f 6c  insert3.test rol
5190: 6c 62 61 63 6b 2e 74 65 73 74 20 0a 20 20 20 20  lback.test .    
51a0: 73 65 6c 65 63 74 31 2e 74 65 73 74 20 20 73 65  select1.test  se
51b0: 6c 65 63 74 32 2e 74 65 73 74 20 20 73 65 6c 65  lect2.test  sele
51c0: 63 74 33 2e 74 65 73 74 0a 20 20 7d 0a 7d 0a 0a  ct3.test.  }.}..
51d0: 74 65 73 74 5f 73 75 69 74 65 20 22 77 61 6c 22  test_suite "wal"
51e0: 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a   -description {.
51f0: 20 20 52 75 6e 20 74 65 73 74 73 20 77 69 74 68    Run tests with
5200: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
5210: 4c 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20  L.} -initialize 
5220: 7b 0a 20 20 73 65 74 20 3a 3a 47 28 73 61 76 65  {.  set ::G(save
5230: 70 6f 69 6e 74 36 5f 69 74 65 72 61 74 69 6f 6e  point6_iteration
5240: 73 29 20 31 30 30 0a 7d 20 2d 73 68 75 74 64 6f  s) 100.} -shutdo
5250: 77 6e 20 7b 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  wn {.  unset -no
5260: 63 6f 6d 70 6c 61 69 6e 20 3a 3a 47 28 73 61 76  complain ::G(sav
5270: 65 70 6f 69 6e 74 36 5f 69 74 65 72 61 74 69 6f  epoint6_iteratio
5280: 6e 73 29 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20  ns).} -files {. 
5290: 20 73 61 76 65 70 6f 69 6e 74 2e 74 65 73 74 20   savepoint.test 
52a0: 20 20 20 20 73 61 76 65 70 6f 69 6e 74 32 2e 74      savepoint2.t
52b0: 65 73 74 20 20 20 20 20 73 61 76 65 70 6f 69 6e  est     savepoin
52c0: 74 36 2e 74 65 73 74 0a 20 20 74 72 61 6e 73 2e  t6.test.  trans.
52d0: 74 65 73 74 20 20 20 20 20 20 20 20 20 61 76 74  test         avt
52e0: 72 61 6e 73 2e 74 65 73 74 0a 0a 20 20 66 74 73  rans.test..  fts
52f0: 33 61 61 2e 74 65 73 74 20 20 66 74 73 33 61 62  3aa.test  fts3ab
5300: 2e 74 65 73 74 20 20 66 74 73 33 61 63 2e 74 65  .test  fts3ac.te
5310: 73 74 20 20 66 74 73 33 61 64 2e 74 65 73 74 0a  st  fts3ad.test.
5320: 20 20 66 74 73 33 61 65 2e 74 65 73 74 20 20 66    fts3ae.test  f
5330: 74 73 33 61 66 2e 74 65 73 74 20 20 66 74 73 33  ts3af.test  fts3
5340: 61 67 2e 74 65 73 74 20 20 66 74 73 33 61 68 2e  ag.test  fts3ah.
5350: 74 65 73 74 0a 20 20 66 74 73 33 61 69 2e 74 65  test.  fts3ai.te
5360: 73 74 20 20 66 74 73 33 61 6a 2e 74 65 73 74 20  st  fts3aj.test 
5370: 20 66 74 73 33 61 6b 2e 74 65 73 74 20 20 66 74   fts3ak.test  ft
5380: 73 33 61 6c 2e 74 65 73 74 0a 20 20 66 74 73 33  s3al.test.  fts3
5390: 61 6d 2e 74 65 73 74 20 20 66 74 73 33 61 6e 2e  am.test  fts3an.
53a0: 74 65 73 74 20 20 66 74 73 33 61 6f 2e 74 65 73  test  fts3ao.tes
53b0: 74 20 20 66 74 73 33 62 2e 74 65 73 74 0a 20 20  t  fts3b.test.  
53c0: 66 74 73 33 63 2e 74 65 73 74 20 20 20 66 74 73  fts3c.test   fts
53d0: 33 64 2e 74 65 73 74 20 20 20 66 74 73 33 65 2e  3d.test   fts3e.
53e0: 74 65 73 74 20 20 20 66 74 73 33 71 75 65 72 79  test   fts3query
53f0: 2e 74 65 73 74 20 0a 7d 0a 23 20 45 6e 64 20 6f  .test .}.# End o
5400: 66 20 74 65 73 74 73 0a 23 23 23 23 23 23 23 23  f tests.########
5410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5450: 23 23 23 23 23 0a 0a 23 20 72 75 6e 5f 74 65 73  #####..# run_tes
5460: 74 73 20 4e 41 4d 45 20 4f 50 54 49 4f 4e 53 0a  ts NAME OPTIONS.
5470: 23 0a 23 20 77 68 65 72 65 20 61 76 61 69 6c 61  #.# where availa
5480: 62 6c 65 20 6f 70 74 69 6f 6e 73 20 61 72 65 3a  ble options are:
5490: 20 20 0a 23 0a 23 20 20 20 20 20 20 20 2d 64 65    .#.#       -de
54a0: 73 63 72 69 70 74 69 6f 6e 20 54 49 54 4c 45 0a  scription TITLE.
54b0: 23 20 20 20 20 20 20 20 2d 69 6e 69 74 69 61 6c  #       -initial
54c0: 69 7a 65 20 20 53 43 52 49 50 54 0a 23 20 20 20  ize  SCRIPT.#   
54d0: 20 20 20 20 2d 73 68 75 74 64 6f 77 6e 20 20 20      -shutdown   
54e0: 20 53 43 52 49 50 54 0a 23 20 20 20 20 20 20 20   SCRIPT.#       
54f0: 2d 70 72 65 73 71 6c 20 20 20 20 20 20 53 51 4c  -presql      SQL
5500: 0a 23 20 20 20 20 20 20 20 2d 66 69 6c 65 73 20  .#       -files 
5510: 20 20 20 20 20 20 4c 49 53 54 2d 4f 46 2d 46 49        LIST-OF-FI
5520: 4c 45 53 0a 23 20 20 20 20 20 20 20 2d 70 72 65  LES.#       -pre
5530: 66 69 78 20 20 20 20 20 20 4e 41 4d 45 0a 23 0a  fix      NAME.#.
5540: 70 72 6f 63 20 72 75 6e 5f 74 65 73 74 73 20 7b  proc run_tests {
5550: 6e 61 6d 65 20 61 72 67 73 7d 20 7b 0a 20 20 61  name args} {.  a
5560: 72 72 61 79 20 73 65 74 20 6f 70 74 69 6f 6e 73  rray set options
5570: 20 24 61 72 67 73 0a 0a 20 20 73 65 74 20 3a 3a   $args..  set ::
5580: 47 28 70 65 72 6d 3a 6e 61 6d 65 29 20 20 20 20  G(perm:name)    
5590: 20 20 20 20 20 24 6e 61 6d 65 0a 20 20 73 65 74       $name.  set
55a0: 20 3a 3a 47 28 70 65 72 6d 3a 70 72 65 66 69 78   ::G(perm:prefix
55b0: 29 20 20 20 20 20 20 20 24 6f 70 74 69 6f 6e 73  )       $options
55c0: 28 2d 70 72 65 66 69 78 29 0a 20 20 73 65 74 20  (-prefix).  set 
55d0: 3a 3a 47 28 70 65 72 6d 3a 70 72 65 73 71 6c 29  ::G(perm:presql)
55e0: 20 20 20 20 20 20 20 24 6f 70 74 69 6f 6e 73 28         $options(
55f0: 2d 70 72 65 73 71 6c 29 0a 20 20 73 65 74 20 3a  -presql).  set :
5600: 3a 47 28 69 73 71 75 69 63 6b 29 20 20 20 20 20  :G(isquick)     
5610: 20 20 20 20 20 20 31 0a 0a 20 20 75 70 6c 65 76        1..  uplev
5620: 65 6c 20 24 6f 70 74 69 6f 6e 73 28 2d 69 6e 69  el $options(-ini
5630: 74 69 61 6c 69 7a 65 29 0a 0a 20 20 66 6f 72 65  tialize)..  fore
5640: 61 63 68 20 66 69 6c 65 20 5b 6c 73 6f 72 74 20  ach file [lsort 
5650: 24 6f 70 74 69 6f 6e 73 28 2d 66 69 6c 65 73 29  $options(-files)
5660: 5d 20 7b 0a 20 20 20 20 20 20 73 6c 61 76 65 5f  ] {.      slave_
5670: 74 65 73 74 5f 66 69 6c 65 20 24 3a 3a 74 65 73  test_file $::tes
5680: 74 64 69 72 2f 24 66 69 6c 65 0a 20 20 7d 0a 0a  tdir/$file.  }..
5690: 20 20 75 70 6c 65 76 65 6c 20 24 6f 70 74 69 6f    uplevel $optio
56a0: 6e 73 28 2d 73 68 75 74 64 6f 77 6e 29 0a 0a 20  ns(-shutdown).. 
56b0: 20 75 6e 73 65 74 20 3a 3a 47 28 70 65 72 6d 3a   unset ::G(perm:
56c0: 6e 61 6d 65 29 0a 20 20 75 6e 73 65 74 20 3a 3a  name).  unset ::
56d0: 47 28 70 65 72 6d 3a 70 72 65 66 69 78 29 0a 20  G(perm:prefix). 
56e0: 20 75 6e 73 65 74 20 3a 3a 47 28 70 65 72 6d 3a   unset ::G(perm:
56f0: 70 72 65 73 71 6c 29 0a 7d 0a 0a 70 72 6f 63 20  presql).}..proc 
5700: 72 75 6e 5f 74 65 73 74 5f 73 75 69 74 65 20 7b  run_test_suite {
5710: 6e 61 6d 65 7d 20 7b 0a 20 20 69 66 20 7b 5b 69  name} {.  if {[i
5720: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
5730: 74 73 70 65 63 28 24 6e 61 6d 65 29 5d 3d 3d 30  tspec($name)]==0
5740: 7d 20 7b 0a 20 20 20 20 65 72 72 6f 72 20 22 4e  } {.    error "N
5750: 6f 20 73 75 63 68 20 74 65 73 74 20 73 75 69 74  o such test suit
5760: 65 3a 20 24 6e 61 6d 65 22 0a 20 20 7d 0a 20 20  e: $name".  }.  
5770: 75 70 6c 65 76 65 6c 20 72 75 6e 5f 74 65 73 74  uplevel run_test
5780: 73 20 24 6e 61 6d 65 20 24 3a 3a 74 65 73 74 73  s $name $::tests
5790: 70 65 63 28 24 6e 61 6d 65 29 0a 7d 0a 0a 70 72  pec($name).}..pr
57a0: 6f 63 20 68 65 6c 70 20 7b 7d 20 7b 0a 20 20 70  oc help {} {.  p
57b0: 75 74 73 20 22 55 73 61 67 65 3a 20 24 3a 3a 61  uts "Usage: $::a
57c0: 72 67 76 30 20 54 45 53 54 53 55 49 54 45 20 3f  rgv0 TESTSUITE ?
57d0: 54 45 53 54 46 49 4c 45 3f 22 0a 20 20 70 75 74  TESTFILE?".  put
57e0: 73 20 22 22 0a 20 20 70 75 74 73 20 22 41 76 61  s "".  puts "Ava
57f0: 69 6c 61 62 6c 65 20 74 65 73 74 2d 73 75 69 74  ilable test-suit
5800: 65 73 20 61 72 65 3a 22 0a 20 20 66 6f 72 65 61  es are:".  forea
5810: 63 68 20 6b 20 24 3a 3a 74 65 73 74 73 75 69 74  ch k $::testsuit
5820: 65 6c 69 73 74 20 7b 0a 20 20 20 20 69 66 20 7b  elist {.    if {
5830: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
5840: 65 73 74 73 70 65 63 28 24 6b 29 5d 3d 3d 30 7d  estspec($k)]==0}
5850: 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20 22 20   {.      puts " 
5860: 20 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d          --------
5870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5890: 22 0a 20 20 20 20 20 20 70 75 74 73 20 22 22 0a  ".      puts "".
58a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
58b0: 20 20 20 61 72 72 61 79 20 73 65 74 20 6f 20 24     array set o $
58c0: 3a 3a 74 65 73 74 73 70 65 63 28 24 6b 29 0a 20  ::testspec($k). 
58d0: 20 20 20 20 20 70 75 74 73 20 22 54 65 73 74 20       puts "Test 
58e0: 73 75 69 74 65 3a 20 5c 22 24 6b 5c 22 22 0a 20  suite: \"$k\"". 
58f0: 20 20 20 20 20 73 65 74 20 64 20 5b 73 74 72 69       set d [stri
5900: 6e 67 20 74 72 69 6d 20 24 6f 28 2d 64 65 73 63  ng trim $o(-desc
5910: 72 69 70 74 69 6f 6e 29 5d 0a 20 20 20 20 20 20  ription)].      
5920: 73 65 74 20 64 20 5b 72 65 67 73 75 62 20 7b 5c  set d [regsub {\
5930: 6e 20 2a 7d 20 24 64 20 22 5c 6e 20 20 22 5d 0a  n *} $d "\n  "].
5940: 20 20 20 20 20 20 70 75 74 73 20 22 20 20 24 64        puts "  $d
5950: 22 0a 20 20 20 20 20 20 70 75 74 73 20 22 22 0a  ".      puts "".
5960: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 65 78 69 74      }.  }.  exit
5970: 20 2d 31 0a 7d 0a 0a 69 66 20 7b 5b 69 6e 66 6f   -1.}..if {[info
5980: 20 73 63 72 69 70 74 5d 20 3d 3d 20 24 61 72 67   script] == $arg
5990: 76 30 7d 20 7b 0a 20 20 70 72 6f 63 20 6d 61 69  v0} {.  proc mai
59a0: 6e 20 7b 61 72 67 76 7d 20 7b 0a 20 20 20 20 69  n {argv} {.    i
59b0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67  f {[llength $arg
59c0: 76 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 20 20 68  v]==0} {.      h
59d0: 65 6c 70 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  elp.    } else {
59e0: 0a 20 20 20 20 20 20 73 65 74 20 73 75 69 74 65  .      set suite
59f0: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 30   [lindex $argv 0
5a00: 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ].      if {[inf
5a10: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 73  o exists ::tests
5a20: 70 65 63 28 24 73 75 69 74 65 29 5d 3d 3d 30 7d  pec($suite)]==0}
5a30: 20 68 65 6c 70 0a 20 20 20 20 20 20 73 65 74 20   help.      set 
5a40: 65 78 74 72 61 20 22 22 0a 20 20 20 20 20 20 69  extra "".      i
5a50: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67  f {[llength $arg
5a60: 76 5d 3e 31 7d 20 7b 20 73 65 74 20 65 78 74 72  v]>1} { set extr
5a70: 61 20 5b 6c 69 73 74 20 2d 66 69 6c 65 73 20 5b  a [list -files [
5a80: 6c 72 61 6e 67 65 20 24 61 72 67 76 20 31 20 65  lrange $argv 1 e
5a90: 6e 64 5d 5d 20 7d 0a 20 20 20 20 20 20 65 76 61  nd]] }.      eva
5aa0: 6c 20 72 75 6e 5f 74 65 73 74 73 20 24 73 75 69  l run_tests $sui
5ab0: 74 65 20 24 3a 3a 74 65 73 74 73 70 65 63 28 24  te $::testspec($
5ac0: 73 75 69 74 65 29 20 24 65 78 74 72 61 0a 20 20  suite) $extra.  
5ad0: 20 20 7d 0a 20 20 7d 0a 20 20 6d 61 69 6e 20 24    }.  }.  main $
5ae0: 61 72 67 76 0a 20 20 66 69 6e 69 73 68 5f 74 65  argv.  finish_te
5af0: 73 74 0a 7d 0a 0a                                st.}..