/ Hex Artifact Content
Login

Artifact aae89941ca0968b53633c97b5dd0d6f9f9899d27:


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 20 20 20 20 20 20 20 2d 64 62 63 6f 6e 66 69  #       -dbconfi
03b0: 67 20 20 20 20 53 43 52 49 50 54 20 20 20 20 20  g    SCRIPT     
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 66              (def
03d0: 61 75 6c 74 20 22 22 29 0a 23 0a 70 72 6f 63 20  ault "").#.proc 
03e0: 74 65 73 74 5f 73 75 69 74 65 20 7b 6e 61 6d 65  test_suite {name
03f0: 20 61 72 67 73 7d 20 7b 0a 0a 20 20 73 65 74 20   args} {..  set 
0400: 64 65 66 61 75 6c 74 28 2d 73 68 75 74 64 6f 77  default(-shutdow
0410: 6e 29 20 20 20 20 22 22 0a 20 20 73 65 74 20 64  n)    "".  set d
0420: 65 66 61 75 6c 74 28 2d 69 6e 69 74 69 61 6c 69  efault(-initiali
0430: 7a 65 29 20 20 22 22 0a 20 20 73 65 74 20 64 65  ze)  "".  set de
0440: 66 61 75 6c 74 28 2d 70 72 65 73 71 6c 29 20 20  fault(-presql)  
0450: 20 20 20 20 22 22 0a 20 20 73 65 74 20 64 65 66      "".  set def
0460: 61 75 6c 74 28 2d 64 65 73 63 72 69 70 74 69 6f  ault(-descriptio
0470: 6e 29 20 22 6e 6f 20 64 65 73 63 72 69 70 74 69  n) "no descripti
0480: 6f 6e 20 73 75 70 70 6c 69 65 64 20 28 66 69 78  on supplied (fix
0490: 6d 65 29 22 0a 20 20 73 65 74 20 64 65 66 61 75  me)".  set defau
04a0: 6c 74 28 2d 66 69 6c 65 73 29 20 20 20 20 20 20  lt(-files)      
04b0: 20 22 22 0a 20 20 73 65 74 20 64 65 66 61 75 6c   "".  set defaul
04c0: 74 28 2d 70 72 65 66 69 78 29 20 20 20 20 20 20  t(-prefix)      
04d0: 22 24 7b 6e 61 6d 65 7d 2e 22 0a 20 20 73 65 74  "${name}.".  set
04e0: 20 64 65 66 61 75 6c 74 28 2d 64 62 63 6f 6e 66   default(-dbconf
04f0: 69 67 29 20 20 20 20 22 22 0a 0a 20 20 61 72 72  ig)    ""..  arr
0500: 61 79 20 73 65 74 20 6f 70 74 69 6f 6e 73 20 5b  ay set options [
0510: 61 72 72 61 79 20 67 65 74 20 64 65 66 61 75 6c  array get defaul
0520: 74 5d 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  t].  if {[llengt
0530: 68 20 24 61 72 67 73 5d 25 32 7d 20 7b 0a 20 20  h $args]%2} {.  
0540: 20 20 65 72 72 6f 72 20 22 75 6e 65 76 65 6e 20    error "uneven 
0550: 6e 75 6d 62 65 72 20 6f 66 20 6f 70 74 69 6f 6e  number of option
0560: 73 2f 73 77 69 74 63 68 65 73 20 70 61 73 73 65  s/switches passe
0570: 64 20 74 6f 20 74 65 73 74 5f 73 75 69 74 65 22  d to test_suite"
0580: 0a 20 20 7d 0a 20 20 66 6f 72 65 61 63 68 20 7b  .  }.  foreach {
0590: 6b 20 76 7d 20 24 61 72 67 73 20 7b 0a 20 20 20  k v} $args {.   
05a0: 20 73 65 74 20 6f 20 5b 61 72 72 61 79 20 6e 61   set o [array na
05b0: 6d 65 73 20 6f 70 74 69 6f 6e 73 20 24 7b 6b 7d  mes options ${k}
05c0: 2a 5d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e  *].    if {[llen
05d0: 67 74 68 20 24 6f 5d 3e 31 7d 20 20 7b 20 65 72  gth $o]>1}  { er
05e0: 72 6f 72 20 22 61 6d 62 69 67 75 6f 75 73 20 6f  ror "ambiguous o
05f0: 70 74 69 6f 6e 3a 20 24 6b 22 20 7d 0a 20 20 20  ption: $k" }.   
0600: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6f   if {[llength $o
0610: 5d 3d 3d 30 7d 20 7b 20 65 72 72 6f 72 20 22 75  ]==0} { error "u
0620: 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 24  nknown option: $
0630: 6b 22 20 7d 0a 20 20 20 20 73 65 74 20 6f 70 74  k" }.    set opt
0640: 69 6f 6e 73 28 5b 6c 69 6e 64 65 78 20 24 6f 20  ions([lindex $o 
0650: 30 5d 29 20 24 76 0a 20 20 7d 0a 0a 20 20 73 65  0]) $v.  }..  se
0660: 74 20 20 20 20 20 3a 3a 74 65 73 74 73 70 65 63  t     ::testspec
0670: 28 24 6e 61 6d 65 29 20 5b 61 72 72 61 79 20 67  ($name) [array g
0680: 65 74 20 6f 70 74 69 6f 6e 73 5d 0a 20 20 6c 61  et options].  la
0690: 70 70 65 6e 64 20 3a 3a 74 65 73 74 73 75 69 74  ppend ::testsuit
06a0: 65 6c 69 73 74 20 24 6e 61 6d 65 0a 7d 0a 0a 23  elist $name.}..#
06b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 74 65 73 74  ---------.# test
0700: 5f 73 65 74 20 41 52 47 53 2e 2e 2e 0a 23 0a 70  _set ARGS....#.p
0710: 72 6f 63 20 74 65 73 74 5f 73 65 74 20 7b 61 72  roc test_set {ar
0720: 67 73 7d 20 7b 0a 20 20 73 65 74 20 69 73 45 78  gs} {.  set isEx
0730: 63 6c 75 64 65 20 30 0a 20 20 66 6f 72 65 61 63  clude 0.  foreac
0740: 68 20 61 20 24 61 72 67 73 20 7b 0a 20 20 20 20  h a $args {.    
0750: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63  if {[string matc
0760: 68 20 2d 2a 20 24 61 5d 7d 20 7b 0a 20 20 20 20  h -* $a]} {.    
0770: 20 20 73 77 69 74 63 68 20 2d 2d 20 24 61 20 7b    switch -- $a {
0780: 0a 20 20 20 20 20 20 20 20 2d 69 6e 63 6c 75 64  .        -includ
0790: 65 20 7b 20 73 65 74 20 69 73 45 78 63 6c 75 64  e { set isExclud
07a0: 65 20 30 20 7d 0a 20 20 20 20 20 20 20 20 2d 65  e 0 }.        -e
07b0: 78 63 6c 75 64 65 20 7b 20 73 65 74 20 69 73 45  xclude { set isE
07c0: 78 63 6c 75 64 65 20 31 20 7d 0a 20 20 20 20 20  xclude 1 }.     
07d0: 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20     default {.   
07e0: 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 55 6e         error "Un
07f0: 6b 6e 6f 77 6e 20 73 77 69 74 63 68 3a 20 24 61  known switch: $a
0800: 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ".        }.    
0810: 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73 65 69 66    }.    } elseif
0820: 20 7b 24 69 73 45 78 63 6c 75 64 65 20 3d 3d 20   {$isExclude == 
0830: 30 7d 20 7b 0a 20 20 20 20 20 20 66 6f 72 65 61  0} {.      forea
0840: 63 68 20 66 20 24 61 20 7b 20 73 65 74 20 74 28  ch f $a { set t(
0850: 24 66 29 20 31 20 7d 0a 20 20 20 20 7d 20 65 6c  $f) 1 }.    } el
0860: 73 65 20 7b 0a 20 20 20 20 20 20 66 6f 72 65 61  se {.      forea
0870: 63 68 20 66 20 24 61 20 7b 20 61 72 72 61 79 20  ch f $a { array 
0880: 75 6e 73 65 74 20 74 20 24 66 20 7d 0a 20 20 20  unset t $f }.   
0890: 20 20 20 66 6f 72 65 61 63 68 20 66 20 24 61 20     foreach f $a 
08a0: 7b 20 61 72 72 61 79 20 75 6e 73 65 74 20 74 20  { array unset t 
08b0: 2a 2f 24 66 20 7d 0a 20 20 20 20 7d 0a 20 20 7d  */$f }.    }.  }
08c0: 0a 0a 20 20 72 65 74 75 72 6e 20 5b 61 72 72 61  ..  return [arra
08d0: 79 20 6e 61 6d 65 73 20 74 5d 0a 7d 0a 0a 23 2d  y names t].}..#-
08e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0920: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 53 65 74 20 75  --------.# Set u
0930: 70 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p the following 
0940: 67 6c 6f 62 61 6c 20 6c 69 73 74 20 76 61 72 69  global list vari
0950: 61 62 6c 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67  ables containing
0960: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 0a 23   the names of .#
0970: 20 76 61 72 69 6f 75 73 20 74 65 73 74 20 73 63   various test sc
0980: 72 69 70 74 73 3a 0a 23 0a 23 20 20 20 24 61 6c  ripts:.#.#   $al
0990: 6c 74 65 73 74 73 0a 23 20 20 20 24 61 6c 6c 71  ltests.#   $allq
09a0: 75 69 63 6b 74 65 73 74 73 0a 23 0a 73 65 74 20  uicktests.#.set 
09b0: 61 6c 6c 74 65 73 74 73 20 5b 6c 69 73 74 5d 0a  alltests [list].
09c0: 66 6f 72 65 61 63 68 20 66 20 5b 67 6c 6f 62 20  foreach f [glob 
09d0: 24 74 65 73 74 64 69 72 2f 2a 2e 74 65 73 74 5d  $testdir/*.test]
09e0: 20 7b 20 6c 61 70 70 65 6e 64 20 61 6c 6c 74 65   { lappend allte
09f0: 73 74 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  sts [file tail $
0a00: 66 5d 20 7d 0a 66 6f 72 65 61 63 68 20 66 20 5b  f] }.foreach f [
0a10: 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  glob -nocomplain
0a20: 20 24 74 65 73 74 64 69 72 2f 2e 2e 2f 65 78 74   $testdir/../ext
0a30: 2f 72 74 72 65 65 2f 2a 2e 74 65 73 74 5d 20 7b  /rtree/*.test] {
0a40: 20 0a 20 20 6c 61 70 70 65 6e 64 20 61 6c 6c 74   .  lappend allt
0a50: 65 73 74 73 20 24 66 20 0a 7d 0a 0a 69 66 20 7b  ests $f .}..if {
0a60: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
0a70: 70 6c 61 74 66 6f 72 6d 29 21 3d 22 75 6e 69 78  platform)!="unix
0a80: 22 7d 20 7b 0a 20 20 73 65 74 20 61 6c 6c 74 65  "} {.  set allte
0a90: 73 74 73 20 5b 74 65 73 74 5f 73 65 74 20 24 61  sts [test_set $a
0aa0: 6c 6c 74 65 73 74 73 20 2d 65 78 63 6c 75 64 65  lltests -exclude
0ab0: 20 63 72 61 73 68 2e 74 65 73 74 20 63 72 61 73   crash.test cras
0ac0: 68 32 2e 74 65 73 74 5d 0a 7d 0a 73 65 74 20 61  h2.test].}.set a
0ad0: 6c 6c 74 65 73 74 73 20 5b 74 65 73 74 5f 73 65  lltests [test_se
0ae0: 74 20 24 61 6c 6c 74 65 73 74 73 20 2d 65 78 63  t $alltests -exc
0af0: 6c 75 64 65 20 7b 0a 20 20 61 6c 6c 2e 74 65 73  lude {.  all.tes
0b00: 74 20 20 20 20 20 20 20 20 61 73 79 6e 63 2e 74  t        async.t
0b10: 65 73 74 20 20 20 20 20 20 20 20 20 71 75 69 63  est         quic
0b20: 6b 2e 74 65 73 74 20 20 76 65 72 79 71 75 69 63  k.test  veryquic
0b30: 6b 2e 74 65 73 74 0a 20 20 6d 65 6d 6c 65 61 6b  k.test.  memleak
0b40: 2e 74 65 73 74 20 20 20 20 70 65 72 6d 75 74 61  .test    permuta
0b50: 74 69 6f 6e 73 2e 74 65 73 74 20 20 73 6f 61 6b  tions.test  soak
0b60: 2e 74 65 73 74 20 20 20 66 74 73 33 2e 74 65 73  .test   fts3.tes
0b70: 74 0a 20 20 6d 61 6c 6c 6f 63 41 6c 6c 2e 74 65  t.  mallocAll.te
0b80: 73 74 20 20 72 74 72 65 65 2e 74 65 73 74 0a 7d  st  rtree.test.}
0b90: 5d 0a 0a 73 65 74 20 61 6c 6c 71 75 69 63 6b 74  ]..set allquickt
0ba0: 65 73 74 73 20 5b 74 65 73 74 5f 73 65 74 20 24  ests [test_set $
0bb0: 61 6c 6c 74 65 73 74 73 20 2d 65 78 63 6c 75 64  alltests -exclud
0bc0: 65 20 7b 0a 20 20 61 73 79 6e 63 32 2e 74 65 73  e {.  async2.tes
0bd0: 74 20 61 73 79 6e 63 33 2e 74 65 73 74 20 62 61  t async3.test ba
0be0: 63 6b 75 70 5f 69 6f 65 72 72 2e 74 65 73 74 20  ckup_ioerr.test 
0bf0: 63 6f 72 72 75 70 74 2e 74 65 73 74 0a 20 20 63  corrupt.test.  c
0c00: 6f 72 72 75 70 74 43 2e 74 65 73 74 20 63 72 61  orruptC.test cra
0c10: 73 68 2e 74 65 73 74 20 63 72 61 73 68 32 2e 74  sh.test crash2.t
0c20: 65 73 74 20 63 72 61 73 68 33 2e 74 65 73 74 20  est crash3.test 
0c30: 63 72 61 73 68 34 2e 74 65 73 74 20 63 72 61 73  crash4.test cras
0c40: 68 35 2e 74 65 73 74 0a 20 20 63 72 61 73 68 36  h5.test.  crash6
0c50: 2e 74 65 73 74 20 63 72 61 73 68 37 2e 74 65 73  .test crash7.tes
0c60: 74 20 64 65 6c 65 74 65 33 2e 74 65 73 74 20 65  t delete3.test e
0c70: 5f 66 74 73 33 2e 74 65 73 74 20 66 74 73 33 72  _fts3.test fts3r
0c80: 6e 64 2e 74 65 73 74 0a 20 20 66 6b 65 79 5f 6d  nd.test.  fkey_m
0c90: 61 6c 6c 6f 63 2e 74 65 73 74 20 66 75 7a 7a 2e  alloc.test fuzz.
0ca0: 74 65 73 74 20 66 75 7a 7a 33 2e 74 65 73 74 20  test fuzz3.test 
0cb0: 66 75 7a 7a 5f 6d 61 6c 6c 6f 63 2e 74 65 73 74  fuzz_malloc.test
0cc0: 20 69 6e 32 2e 74 65 73 74 20 6c 6f 61 64 65 78   in2.test loadex
0cd0: 74 2e 74 65 73 74 0a 20 20 6d 69 73 63 37 2e 74  t.test.  misc7.t
0ce0: 65 73 74 20 6d 75 74 65 78 32 2e 74 65 73 74 20  est mutex2.test 
0cf0: 6e 6f 74 69 66 79 32 2e 74 65 73 74 20 6f 6e 65  notify2.test one
0d00: 66 69 6c 65 2e 74 65 73 74 20 70 61 67 65 72 66  file.test pagerf
0d10: 61 75 6c 74 32 2e 74 65 73 74 20 0a 20 20 73 61  ault2.test .  sa
0d20: 76 65 70 6f 69 6e 74 34 2e 74 65 73 74 20 73 61  vepoint4.test sa
0d30: 76 65 70 6f 69 6e 74 36 2e 74 65 73 74 20 73 65  vepoint6.test se
0d40: 6c 65 63 74 39 2e 74 65 73 74 20 0a 20 20 73 70  lect9.test .  sp
0d50: 65 65 64 31 2e 74 65 73 74 20 73 70 65 65 64 31  eed1.test speed1
0d60: 70 2e 74 65 73 74 20 73 70 65 65 64 32 2e 74 65  p.test speed2.te
0d70: 73 74 20 73 70 65 65 64 33 2e 74 65 73 74 20 73  st speed3.test s
0d80: 70 65 65 64 34 2e 74 65 73 74 20 0a 20 20 73 70  peed4.test .  sp
0d90: 65 65 64 34 70 2e 74 65 73 74 20 73 71 6c 6c 69  eed4p.test sqlli
0da0: 6d 69 74 73 31 2e 74 65 73 74 20 74 6b 74 32 36  mits1.test tkt26
0db0: 38 36 2e 74 65 73 74 20 74 68 72 65 61 64 30 30  86.test thread00
0dc0: 31 2e 74 65 73 74 20 74 68 72 65 61 64 30 30 32  1.test thread002
0dd0: 2e 74 65 73 74 0a 20 20 74 68 72 65 61 64 30 30  .test.  thread00
0de0: 33 2e 74 65 73 74 20 74 68 72 65 61 64 30 30 34  3.test thread004
0df0: 2e 74 65 73 74 20 74 68 72 65 61 64 30 30 35 2e  .test thread005.
0e00: 74 65 73 74 20 74 72 61 6e 73 32 2e 74 65 73 74  test trans2.test
0e10: 20 76 61 63 75 75 6d 33 2e 74 65 73 74 20 0a 20   vacuum3.test . 
0e20: 20 69 6e 63 72 76 61 63 75 75 6d 5f 69 6f 65 72   incrvacuum_ioer
0e30: 72 2e 74 65 73 74 20 61 75 74 6f 76 61 63 75 75  r.test autovacuu
0e40: 6d 5f 63 72 61 73 68 2e 74 65 73 74 20 62 74 72  m_crash.test btr
0e50: 65 65 38 2e 74 65 73 74 20 73 68 61 72 65 64 5f  ee8.test shared_
0e60: 65 72 72 2e 74 65 73 74 0a 20 20 76 74 61 62 5f  err.test.  vtab_
0e70: 65 72 72 2e 74 65 73 74 20 77 61 6c 73 6c 6f 77  err.test walslow
0e80: 2e 74 65 73 74 20 77 61 6c 63 72 61 73 68 2e 74  .test walcrash.t
0e90: 65 73 74 20 0a 20 20 77 61 6c 74 68 72 65 61 64  est .  walthread
0ea0: 2e 74 65 73 74 20 72 74 72 65 65 33 2e 74 65 73  .test rtree3.tes
0eb0: 74 0a 7d 5d 0a 69 66 20 7b 5b 69 6e 66 6f 20 65  t.}].if {[info e
0ec0: 78 69 73 74 73 20 3a 3a 65 6e 76 28 51 55 49 43  xists ::env(QUIC
0ed0: 4b 54 45 53 54 5f 49 4e 43 4c 55 44 45 29 5d 7d  KTEST_INCLUDE)]}
0ee0: 20 7b 0a 20 20 73 65 74 20 61 6c 6c 71 75 69 63   {.  set allquic
0ef0: 6b 74 65 73 74 73 20 5b 63 6f 6e 63 61 74 20 24  ktests [concat $
0f00: 61 6c 6c 71 75 69 63 6b 74 65 73 74 73 20 24 3a  allquicktests $:
0f10: 3a 65 6e 76 28 51 55 49 43 4b 54 45 53 54 5f 49  :env(QUICKTEST_I
0f20: 4e 43 4c 55 44 45 29 5d 0a 7d 0a 0a 23 23 23 23  NCLUDE)].}..####
0f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f70: 23 23 23 23 23 23 23 23 23 0a 23 20 53 74 61 72  #########.# Star
0f80: 74 20 6f 66 20 74 65 73 74 73 0a 23 0a 0a 23 2d  t of tests.#..#-
0f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fd0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 44 65 66 69 6e  --------.# Defin
0fe0: 65 20 74 68 65 20 67 65 6e 65 72 69 63 20 74 65  e the generic te
0ff0: 73 74 20 73 75 69 74 65 73 3a 0a 23 0a 23 20 20  st suites:.#.#  
1000: 20 76 65 72 79 71 75 69 63 6b 0a 23 20 20 20 71   veryquick.#   q
1010: 75 69 63 6b 0a 23 20 20 20 66 75 6c 6c 0a 23 0a  uick.#   full.#.
1020: 6c 61 70 70 65 6e 64 20 3a 3a 74 65 73 74 73 75  lappend ::testsu
1030: 69 74 65 6c 69 73 74 20 78 78 78 0a 0a 74 65 73  itelist xxx..tes
1040: 74 5f 73 75 69 74 65 20 22 76 65 72 79 71 75 69  t_suite "veryqui
1050: 63 6b 22 20 2d 70 72 65 66 69 78 20 22 22 20 2d  ck" -prefix "" -
1060: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20  description {.  
1070: 22 56 65 72 79 22 20 71 75 69 63 6b 20 74 65 73  "Very" quick tes
1080: 74 20 73 75 69 74 65 2e 20 52 75 6e 73 20 69 6e  t suite. Runs in
1090: 20 6c 65 73 73 20 74 68 61 6e 20 35 20 6d 69 6e   less than 5 min
10a0: 75 74 65 73 20 6f 6e 20 61 20 77 6f 72 6b 73 74  utes on a workst
10b0: 61 74 69 6f 6e 2e 20 0a 20 20 54 68 69 73 20 74  ation. .  This t
10c0: 65 73 74 20 73 75 69 74 65 20 69 73 20 74 68 65  est suite is the
10d0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 22 71 75   same as the "qu
10e0: 69 63 6b 22 20 74 65 73 74 73 2c 20 65 78 63 65  ick" tests, exce
10f0: 70 74 20 74 68 61 74 20 73 6f 6d 65 20 66 69 6c  pt that some fil
1100: 65 73 0a 20 20 74 68 61 74 20 74 65 73 74 20 6d  es.  that test m
1110: 61 6c 6c 6f 63 20 61 6e 64 20 49 4f 20 65 72 72  alloc and IO err
1120: 6f 72 73 20 61 72 65 20 6f 6d 69 74 74 65 64 2e  ors are omitted.
1130: 0a 7d 20 2d 66 69 6c 65 73 20 5b 0a 20 20 74 65  .} -files [.  te
1140: 73 74 5f 73 65 74 20 24 61 6c 6c 71 75 69 63 6b  st_set $allquick
1150: 74 65 73 74 73 20 2d 65 78 63 6c 75 64 65 20 2a  tests -exclude *
1160: 6d 61 6c 6c 6f 63 2a 20 2a 69 6f 65 72 72 2a 20  malloc* *ioerr* 
1170: 2a 66 61 75 6c 74 2a 0a 5d 0a 0a 74 65 73 74 5f  *fault*.]..test_
1180: 73 75 69 74 65 20 22 76 61 6c 67 72 69 6e 64 22  suite "valgrind"
1190: 20 2d 70 72 65 66 69 78 20 22 22 20 2d 64 65 73   -prefix "" -des
11a0: 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e  cription {.  Run
11b0: 20 74 68 65 20 22 76 65 72 79 71 75 69 63 6b 22   the "veryquick"
11c0: 20 74 65 73 74 20 73 75 69 74 65 20 77 69 74 68   test suite with
11d0: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 6d 75 6c   a couple of mul
11e0: 74 69 2d 70 72 6f 63 65 73 73 20 74 65 73 74 73  ti-process tests
11f0: 20 28 74 68 61 74 0a 20 20 66 61 69 6c 20 75 6e   (that.  fail un
1200: 64 65 72 20 76 61 6c 67 72 69 6e 64 29 20 6f 6d  der valgrind) om
1210: 69 74 74 65 64 2e 0a 7d 20 2d 66 69 6c 65 73 20  itted..} -files 
1220: 5b 0a 20 20 74 65 73 74 5f 73 65 74 20 24 61 6c  [.  test_set $al
1230: 6c 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78 63  lquicktests -exc
1240: 6c 75 64 65 20 2a 6d 61 6c 6c 6f 63 2a 20 2a 69  lude *malloc* *i
1250: 6f 65 72 72 2a 20 2a 66 61 75 6c 74 2a 0a 5d 20  oerr* *fault*.] 
1260: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 7b 0a 20 20  -initialize {.  
1270: 73 65 74 20 3a 3a 47 28 76 61 6c 67 72 69 6e 64  set ::G(valgrind
1280: 29 20 31 0a 7d 20 2d 73 68 75 74 64 6f 77 6e 20  ) 1.} -shutdown 
1290: 7b 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  {.  unset -nocom
12a0: 70 6c 61 69 6e 20 3a 3a 47 28 76 61 6c 67 72 69  plain ::G(valgri
12b0: 6e 64 29 0a 7d 0a 0a 74 65 73 74 5f 73 75 69 74  nd).}..test_suit
12c0: 65 20 22 71 75 69 63 6b 22 20 2d 70 72 65 66 69  e "quick" -prefi
12d0: 78 20 22 22 20 2d 64 65 73 63 72 69 70 74 69 6f  x "" -descriptio
12e0: 6e 20 7b 0a 20 20 51 75 69 63 6b 20 74 65 73 74  n {.  Quick test
12f0: 20 73 75 69 74 65 2e 20 52 75 6e 73 20 69 6e 20   suite. Runs in 
1300: 61 72 6f 75 6e 64 20 31 30 20 6d 69 6e 75 74 65  around 10 minute
1310: 73 20 6f 6e 20 61 20 77 6f 72 6b 73 74 61 74 69  s on a workstati
1320: 6f 6e 2e 0a 7d 20 2d 66 69 6c 65 73 20 5b 0a 20  on..} -files [. 
1330: 20 74 65 73 74 5f 73 65 74 20 24 61 6c 6c 71 75   test_set $allqu
1340: 69 63 6b 74 65 73 74 73 0a 5d 0a 0a 74 65 73 74  icktests.]..test
1350: 5f 73 75 69 74 65 20 22 66 75 6c 6c 22 20 2d 70  _suite "full" -p
1360: 72 65 66 69 78 20 22 22 20 2d 64 65 73 63 72 69  refix "" -descri
1370: 70 74 69 6f 6e 20 7b 0a 20 20 46 75 6c 6c 20 74  ption {.  Full t
1380: 65 73 74 20 73 75 69 74 65 2e 20 54 61 6b 65 73  est suite. Takes
1390: 20 61 20 6c 6f 6e 67 20 74 69 6d 65 2e 0a 7d 20   a long time..} 
13a0: 2d 66 69 6c 65 73 20 5b 20 0a 20 20 74 65 73 74  -files [ .  test
13b0: 5f 73 65 74 20 24 61 6c 6c 74 65 73 74 73 20 0a  _set $alltests .
13c0: 5d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 7b 0a  ] -initialize {.
13d0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
13e0: 61 69 6e 20 3a 3a 47 28 69 73 71 75 69 63 6b 29  ain ::G(isquick)
13f0: 0a 7d 0a 0a 74 65 73 74 5f 73 75 69 74 65 20 22  .}..test_suite "
1400: 74 68 72 65 61 64 73 22 20 2d 70 72 65 66 69 78  threads" -prefix
1410: 20 22 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e   "" -description
1420: 20 7b 0a 20 20 41 6c 6c 20 6d 75 6c 74 69 2d 74   {.  All multi-t
1430: 68 72 65 61 64 65 64 20 74 65 73 74 73 2e 0a 7d  hreaded tests..}
1440: 20 2d 66 69 6c 65 73 20 7b 0a 20 20 6e 6f 74 69   -files {.  noti
1450: 66 79 32 2e 74 65 73 74 20 20 20 74 68 72 65 61  fy2.test   threa
1460: 64 30 30 31 2e 74 65 73 74 20 74 68 72 65 61 64  d001.test thread
1470: 30 30 32 2e 74 65 73 74 20 74 68 72 65 61 64 30  002.test thread0
1480: 30 33 2e 74 65 73 74 20 0a 20 20 74 68 72 65 61  03.test .  threa
1490: 64 30 30 34 2e 74 65 73 74 20 74 68 72 65 61 64  d004.test thread
14a0: 30 30 35 2e 74 65 73 74 20 77 61 6c 74 68 72 65  005.test walthre
14b0: 61 64 2e 74 65 73 74 0a 7d 0a 0a 74 65 73 74 5f  ad.test.}..test_
14c0: 73 75 69 74 65 20 22 66 74 73 33 22 20 2d 70 72  suite "fts3" -pr
14d0: 65 66 69 78 20 22 22 20 2d 64 65 73 63 72 69 70  efix "" -descrip
14e0: 74 69 6f 6e 20 7b 0a 20 20 41 6c 6c 20 46 54 53  tion {.  All FTS
14f0: 33 20 74 65 73 74 73 20 65 78 63 65 70 74 20 66  3 tests except f
1500: 74 73 33 72 6e 64 2e 74 65 73 74 2e 0a 7d 20 2d  ts3rnd.test..} -
1510: 66 69 6c 65 73 20 7b 0a 20 20 66 74 73 33 61 61  files {.  fts3aa
1520: 2e 74 65 73 74 20 66 74 73 33 61 62 2e 74 65 73  .test fts3ab.tes
1530: 74 20 66 74 73 33 61 63 2e 74 65 73 74 20 66 74  t fts3ac.test ft
1540: 73 33 61 64 2e 74 65 73 74 20 66 74 73 33 61 65  s3ad.test fts3ae
1550: 2e 74 65 73 74 0a 20 20 66 74 73 33 61 66 2e 74  .test.  fts3af.t
1560: 65 73 74 20 66 74 73 33 61 67 2e 74 65 73 74 20  est fts3ag.test 
1570: 66 74 73 33 61 68 2e 74 65 73 74 20 66 74 73 33  fts3ah.test fts3
1580: 61 69 2e 74 65 73 74 20 66 74 73 33 61 6a 2e 74  ai.test fts3aj.t
1590: 65 73 74 0a 20 20 66 74 73 33 61 6b 2e 74 65 73  est.  fts3ak.tes
15a0: 74 20 66 74 73 33 61 6c 2e 74 65 73 74 20 66 74  t fts3al.test ft
15b0: 73 33 61 6d 2e 74 65 73 74 20 66 74 73 33 61 6e  s3am.test fts3an
15c0: 2e 74 65 73 74 20 66 74 73 33 61 6f 2e 74 65 73  .test fts3ao.tes
15d0: 74 0a 20 20 66 74 73 33 61 74 6f 6b 65 6e 2e 74  t.  fts3atoken.t
15e0: 65 73 74 20 66 74 73 33 62 2e 74 65 73 74 20 66  est fts3b.test f
15f0: 74 73 33 63 2e 74 65 73 74 20 66 74 73 33 63 6f  ts3c.test fts3co
1600: 76 2e 74 65 73 74 20 66 74 73 33 64 2e 74 65 73  v.test fts3d.tes
1610: 74 0a 20 20 66 74 73 33 64 65 66 65 72 2e 74 65  t.  fts3defer.te
1620: 73 74 20 66 74 73 33 64 65 66 65 72 32 2e 74 65  st fts3defer2.te
1630: 73 74 20 66 74 73 33 65 2e 74 65 73 74 20 66 74  st fts3e.test ft
1640: 73 33 65 78 70 72 2e 74 65 73 74 20 66 74 73 33  s3expr.test fts3
1650: 65 78 70 72 32 2e 74 65 73 74 20 0a 20 20 66 74  expr2.test .  ft
1660: 73 33 6e 65 61 72 2e 74 65 73 74 20 66 74 73 33  s3near.test fts3
1670: 71 75 65 72 79 2e 74 65 73 74 20 66 74 73 33 73  query.test fts3s
1680: 68 61 72 65 64 2e 74 65 73 74 20 66 74 73 33 73  hared.test fts3s
1690: 6e 69 70 70 65 74 2e 74 65 73 74 20 0a 20 20 66  nippet.test .  f
16a0: 74 73 33 73 6f 72 74 2e 74 65 73 74 0a 0a 20 20  ts3sort.test..  
16b0: 66 74 73 33 66 61 75 6c 74 2e 74 65 73 74 20 66  fts3fault.test f
16c0: 74 73 33 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 66  ts3malloc.test f
16d0: 74 73 33 6d 61 74 63 68 69 6e 66 6f 2e 74 65 73  ts3matchinfo.tes
16e0: 74 0a 0a 20 20 66 74 73 33 61 75 78 31 2e 74 65  t..  fts3aux1.te
16f0: 73 74 20 66 74 73 33 63 6f 6d 70 31 2e 74 65 73  st fts3comp1.tes
1700: 74 20 66 74 73 33 61 75 74 6f 2e 74 65 73 74 0a  t fts3auto.test.
1710: 7d 0a 0a 0a 6c 61 70 70 65 6e 64 20 3a 3a 74 65  }...lappend ::te
1720: 73 74 73 75 69 74 65 6c 69 73 74 20 78 78 78 0a  stsuitelist xxx.
1730: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 44 65 66  ----------.# Def
1780: 69 6e 65 20 74 68 65 20 63 6f 76 65 72 61 67 65  ine the coverage
1790: 20 72 65 6c 61 74 65 64 20 74 65 73 74 20 73 75   related test su
17a0: 69 74 65 73 3a 0a 23 0a 23 20 20 20 63 6f 76 65  ites:.#.#   cove
17b0: 72 61 67 65 2d 77 61 6c 0a 23 0a 74 65 73 74 5f  rage-wal.#.test_
17c0: 73 75 69 74 65 20 22 63 6f 76 65 72 61 67 65 2d  suite "coverage-
17d0: 77 61 6c 22 20 2d 64 65 73 63 72 69 70 74 69 6f  wal" -descriptio
17e0: 6e 20 7b 0a 20 20 43 6f 76 65 72 61 67 65 20 74  n {.  Coverage t
17f0: 65 73 74 73 20 66 6f 72 20 66 69 6c 65 20 77 61  ests for file wa
1800: 6c 2e 63 2e 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a  l.c..} -files {.
1810: 20 20 77 61 6c 2e 74 65 73 74 20 20 20 20 20 20    wal.test      
1820: 20 77 61 6c 32 2e 74 65 73 74 20 20 20 20 20 77   wal2.test     w
1830: 61 6c 33 2e 74 65 73 74 20 20 20 20 20 20 20 77  al3.test       w
1840: 61 6c 6d 6f 64 65 2e 74 65 73 74 20 20 20 20 0a  almode.test    .
1850: 20 20 77 61 6c 62 61 6b 2e 74 65 73 74 20 20 20    walbak.test   
1860: 20 77 61 6c 68 6f 6f 6b 2e 74 65 73 74 20 20 77   walhook.test  w
1870: 61 6c 63 72 61 73 68 32 2e 74 65 73 74 20 20 77  alcrash2.test  w
1880: 61 6c 63 6b 73 75 6d 2e 74 65 73 74 0a 20 20 77  alcksum.test.  w
1890: 61 6c 66 61 75 6c 74 2e 74 65 73 74 20 20 77 61  alfault.test  wa
18a0: 6c 62 69 67 2e 74 65 73 74 20 20 20 77 61 6c 6e  lbig.test   waln
18b0: 6f 73 68 6d 2e 74 65 73 74 0a 20 20 77 61 6c 35  oshm.test.  wal5
18c0: 2e 74 65 73 74 0a 7d 20 0a 0a 74 65 73 74 5f 73  .test.} ..test_s
18d0: 75 69 74 65 20 22 63 6f 76 65 72 61 67 65 2d 70  uite "coverage-p
18e0: 61 67 65 72 22 20 2d 64 65 73 63 72 69 70 74 69  ager" -descripti
18f0: 6f 6e 20 7b 0a 20 20 43 6f 76 65 72 61 67 65 20  on {.  Coverage 
1900: 74 65 73 74 73 20 66 6f 72 20 66 69 6c 65 20 70  tests for file p
1910: 61 67 65 72 2e 63 2e 0a 7d 20 2d 66 69 6c 65 73  ager.c..} -files
1920: 20 7b 0a 20 20 70 61 67 65 72 31 2e 74 65 73 74   {.  pager1.test
1930: 20 20 20 20 70 61 67 65 72 32 2e 74 65 73 74 20      pager2.test 
1940: 20 70 61 67 65 72 66 61 75 6c 74 2e 74 65 73 74   pagerfault.test
1950: 20 20 70 61 67 65 72 66 61 75 6c 74 32 2e 74 65    pagerfault2.te
1960: 73 74 0a 20 20 77 61 6c 66 61 75 6c 74 2e 74 65  st.  walfault.te
1970: 73 74 20 20 77 61 6c 62 61 6b 2e 74 65 73 74 20  st  walbak.test 
1980: 20 6a 6f 75 72 6e 61 6c 32 2e 74 65 73 74 20 20   journal2.test  
1990: 20 20 74 6b 74 2d 39 64 36 38 63 38 38 33 2e 74    tkt-9d68c883.t
19a0: 65 73 74 0a 7d 20 0a 0a 0a 6c 61 70 70 65 6e 64  est.} ...lappend
19b0: 20 3a 3a 74 65 73 74 73 75 69 74 65 6c 69 73 74   ::testsuitelist
19c0: 20 78 78 78 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   xxx.#----------
19d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1a10: 23 20 44 65 66 69 6e 65 20 74 68 65 20 70 65 72  # Define the per
1a20: 6d 75 74 61 74 69 6f 6e 20 74 65 73 74 20 73 75  mutation test su
1a30: 69 74 65 73 3a 0a 23 0a 0a 23 20 52 75 6e 20 73  ites:.#..# Run s
1a40: 6f 6d 65 20 74 65 73 74 73 20 75 73 69 6e 67 20  ome tests using 
1a50: 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64 20 70 61  pre-allocated pa
1a60: 67 65 20 61 6e 64 20 73 63 72 61 74 63 68 20 62  ge and scratch b
1a70: 6c 6f 63 6b 73 2e 0a 23 0a 74 65 73 74 5f 73 75  locks..#.test_su
1a80: 69 74 65 20 22 6d 65 6d 73 75 62 73 79 73 31 22  ite "memsubsys1"
1a90: 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a   -description {.
1aa0: 20 20 54 65 73 74 73 20 75 73 69 6e 67 20 70 72    Tests using pr
1ab0: 65 2d 61 6c 6c 6f 63 61 74 65 64 20 70 61 67 65  e-allocated page
1ac0: 20 61 6e 64 20 73 63 72 61 74 63 68 20 62 6c 6f   and scratch blo
1ad0: 63 6b 73 0a 7d 20 2d 66 69 6c 65 73 20 5b 0a 20  cks.} -files [. 
1ae0: 20 74 65 73 74 5f 73 65 74 20 24 3a 3a 61 6c 6c   test_set $::all
1af0: 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78 63 6c  quicktests -excl
1b00: 75 64 65 20 69 6f 65 72 72 35 2e 74 65 73 74 20  ude ioerr5.test 
1b10: 6d 61 6c 6c 6f 63 35 2e 74 65 73 74 0a 5d 20 2d  malloc5.test.] -
1b20: 69 6e 69 74 69 61 6c 69 7a 65 20 7b 0a 20 20 63  initialize {.  c
1b30: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
1b40: 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f    sqlite3_shutdo
1b50: 77 6e 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  wn.  sqlite3_con
1b60: 66 69 67 5f 70 61 67 65 63 61 63 68 65 20 34 30  fig_pagecache 40
1b70: 39 36 20 32 34 0a 20 20 73 71 6c 69 74 65 33 5f  96 24.  sqlite3_
1b80: 63 6f 6e 66 69 67 5f 73 63 72 61 74 63 68 20 32  config_scratch 2
1b90: 35 30 30 30 20 31 0a 20 20 73 71 6c 69 74 65 33  5000 1.  sqlite3
1ba0: 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 61 75  _initialize.  au
1bb0: 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f 66  toinstall_test_f
1bc0: 75 6e 63 74 69 6f 6e 73 0a 7d 20 2d 73 68 75 74  unctions.} -shut
1bd0: 64 6f 77 6e 20 7b 0a 20 20 63 61 74 63 68 20 7b  down {.  catch {
1be0: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 73 71 6c 69  db close}.  sqli
1bf0: 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 73  te3_shutdown.  s
1c00: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 70 61  qlite3_config_pa
1c10: 67 65 63 61 63 68 65 20 30 20 30 0a 20 20 73 71  gecache 0 0.  sq
1c20: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 73 63 72  lite3_config_scr
1c30: 61 74 63 68 20 30 20 30 0a 20 20 73 71 6c 69 74  atch 0 0.  sqlit
1c40: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20  e3_initialize.  
1c50: 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74  autoinstall_test
1c60: 5f 66 75 6e 63 74 69 6f 6e 73 0a 7d 0a 0a 23 20  _functions.}..# 
1c70: 52 75 6e 20 73 6f 6d 65 20 74 65 73 74 73 20 75  Run some tests u
1c80: 73 69 6e 67 20 70 72 65 2d 61 6c 6c 6f 63 61 74  sing pre-allocat
1c90: 65 64 20 70 61 67 65 20 61 6e 64 20 73 63 72 61  ed page and scra
1ca0: 74 63 68 20 62 6c 6f 63 6b 73 2e 20 54 68 69 73  tch blocks. This
1cb0: 20 74 69 6d 65 0a 23 20 74 68 65 20 61 6c 6c 6f   time.# the allo
1cc0: 63 61 74 69 6f 6e 73 20 61 72 65 20 74 6f 6f 20  cations are too 
1cd0: 73 6d 61 6c 6c 20 74 6f 20 75 73 65 20 69 6e 20  small to use in 
1ce0: 6d 6f 73 74 20 63 61 73 65 73 2e 0a 23 0a 23 20  most cases..#.# 
1cf0: 42 6f 74 68 20 69 6f 65 72 72 35 2e 74 65 73 74  Both ioerr5.test
1d00: 20 61 6e 64 20 6d 61 6c 6c 6f 63 35 2e 74 65 73   and malloc5.tes
1d10: 74 20 61 72 65 20 65 78 63 6c 75 64 65 64 20 62  t are excluded b
1d20: 65 63 61 75 73 65 20 74 68 65 79 20 74 65 73 74  ecause they test
1d30: 20 74 68 65 0a 23 20 73 71 6c 69 74 65 33 5f 73   the.# sqlite3_s
1d40: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28 29  oft_heap_limit()
1d50: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 72 65 6c   and sqlite3_rel
1d60: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 66 75  ease_memory() fu
1d70: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a 23 20 54  nctionality..# T
1d80: 68 69 73 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  his functionalit
1d90: 79 20 69 73 20 64 69 73 61 62 6c 65 64 20 69 66  y is disabled if
1da0: 20 61 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 64   a pre-allocated
1db0: 20 70 61 67 65 20 62 6c 6f 63 6b 20 69 73 20 70   page block is p
1dc0: 72 6f 76 69 64 65 64 2e 0a 23 0a 74 65 73 74 5f  rovided..#.test_
1dd0: 73 75 69 74 65 20 22 6d 65 6d 73 75 62 73 79 73  suite "memsubsys
1de0: 32 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20  2" -description 
1df0: 7b 0a 20 20 54 65 73 74 73 20 75 73 69 6e 67 20  {.  Tests using 
1e00: 73 6d 61 6c 6c 20 70 72 65 2d 61 6c 6c 6f 63 61  small pre-alloca
1e10: 74 65 64 20 70 61 67 65 20 61 6e 64 20 73 63 72  ted page and scr
1e20: 61 74 63 68 20 62 6c 6f 63 6b 73 0a 7d 20 2d 66  atch blocks.} -f
1e30: 69 6c 65 73 20 5b 0a 20 20 74 65 73 74 5f 73 65  iles [.  test_se
1e40: 74 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74 65 73  t $::allquicktes
1e50: 74 73 20 2d 65 78 63 6c 75 64 65 20 69 6f 65 72  ts -exclude ioer
1e60: 72 35 2e 74 65 73 74 20 6d 61 6c 6c 6f 63 35 2e  r5.test malloc5.
1e70: 74 65 73 74 0a 5d 20 2d 69 6e 69 74 69 61 6c 69  test.] -initiali
1e80: 7a 65 20 7b 0a 20 20 63 61 74 63 68 20 7b 64 62  ze {.  catch {db
1e90: 20 63 6c 6f 73 65 7d 0a 20 20 73 71 6c 69 74 65   close}.  sqlite
1ea0: 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 73 71 6c  3_shutdown.  sql
1eb0: 69 74 65 33 5f 63 6f 6e 66 69 67 5f 70 61 67 65  ite3_config_page
1ec0: 63 61 63 68 65 20 35 31 32 20 35 0a 20 20 73 71  cache 512 5.  sq
1ed0: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 73 63 72  lite3_config_scr
1ee0: 61 74 63 68 20 31 30 30 30 20 31 0a 20 20 73 71  atch 1000 1.  sq
1ef0: 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1f00: 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74  .  autoinstall_t
1f10: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 7d 20  est_functions.} 
1f20: 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20 63 61  -shutdown {.  ca
1f30: 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20  tch {db close}. 
1f40: 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77   sqlite3_shutdow
1f50: 6e 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66  n.  sqlite3_conf
1f60: 69 67 5f 70 61 67 65 63 61 63 68 65 20 30 20 30  ig_pagecache 0 0
1f70: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  .  sqlite3_confi
1f80: 67 5f 73 63 72 61 74 63 68 20 30 20 30 0a 20 20  g_scratch 0 0.  
1f90: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1fa0: 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c  ze.  autoinstall
1fb0: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a  _test_functions.
1fc0: 7d 0a 0a 23 20 52 75 6e 20 61 6c 6c 20 74 65 73  }..# Run all tes
1fd0: 74 73 20 77 69 74 68 20 74 68 65 20 6c 6f 6f 6b  ts with the look
1fe0: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 6f 72 20  aside allocator 
1ff0: 64 69 73 61 62 6c 65 64 2e 0a 23 0a 74 65 73 74  disabled..#.test
2000: 5f 73 75 69 74 65 20 22 6e 6f 6c 6f 6f 6b 61 73  _suite "nolookas
2010: 69 64 65 22 20 2d 64 65 73 63 72 69 70 74 69 6f  ide" -descriptio
2020: 6e 20 7b 0a 20 20 4f 4f 4d 20 74 65 73 74 73 20  n {.  OOM tests 
2030: 77 69 74 68 20 6c 6f 6f 6b 61 73 69 64 65 20 64  with lookaside d
2040: 69 73 61 62 6c 65 64 0a 7d 20 2d 69 6e 69 74 69  isabled.} -initi
2050: 61 6c 69 7a 65 20 7b 0a 20 20 63 61 74 63 68 20  alize {.  catch 
2060: 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 73 71 6c  {db close}.  sql
2070: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20  ite3_shutdown.  
2080: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c  sqlite3_config_l
2090: 6f 6f 6b 61 73 69 64 65 20 30 20 30 0a 20 20 73  ookaside 0 0.  s
20a0: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
20b0: 65 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c 5f  e.  autoinstall_
20c0: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 7d  test_functions.}
20d0: 20 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20 63   -shutdown {.  c
20e0: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
20f0: 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f    sqlite3_shutdo
2100: 77 6e 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  wn.  sqlite3_con
2110: 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 31 30  fig_lookaside 10
2120: 30 20 35 30 30 0a 20 20 73 71 6c 69 74 65 33 5f  0 500.  sqlite3_
2130: 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 61 75 74  initialize.  aut
2140: 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75  oinstall_test_fu
2150: 6e 63 74 69 6f 6e 73 0a 7d 20 2d 66 69 6c 65 73  nctions.} -files
2160: 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74 65 73 74   $::allquicktest
2170: 73 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74 65  s..# Run some te
2180: 73 74 73 20 69 6e 20 53 51 4c 49 54 45 5f 43 4f  sts in SQLITE_CO
2190: 4e 46 49 47 5f 53 49 4e 47 4c 45 54 48 52 45 41  NFIG_SINGLETHREA
21a0: 44 20 6d 6f 64 65 2e 0a 23 0a 74 65 73 74 5f 73  D mode..#.test_s
21b0: 75 69 74 65 20 22 73 69 6e 67 6c 65 74 68 72 65  uite "singlethre
21c0: 61 64 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e  ad" -description
21d0: 20 7b 0a 20 20 54 65 73 74 73 20 72 75 6e 20 69   {.  Tests run i
21e0: 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  n SQLITE_CONFIG_
21f0: 53 49 4e 47 4c 45 54 48 52 45 41 44 20 6d 6f 64  SINGLETHREAD mod
2200: 65 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20  e.} -initialize 
2210: 7b 0a 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c  {.  catch {db cl
2220: 6f 73 65 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73  ose}.  sqlite3_s
2230: 68 75 74 64 6f 77 6e 0a 20 20 63 61 74 63 68 20  hutdown.  catch 
2240: 7b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 20  {sqlite3_config 
2250: 73 69 6e 67 6c 65 74 68 72 65 61 64 7d 0a 20 20  singlethread}.  
2260: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
2270: 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c  ze.  autoinstall
2280: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a  _test_functions.
2290: 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 64 65 6c  } -files {.  del
22a0: 65 74 65 2e 74 65 73 74 20 20 20 64 65 6c 65 74  ete.test   delet
22b0: 65 32 2e 74 65 73 74 20 20 69 6e 73 65 72 74 2e  e2.test  insert.
22c0: 74 65 73 74 20 20 72 6f 6c 6c 62 61 63 6b 2e 74  test  rollback.t
22d0: 65 73 74 20 20 73 65 6c 65 63 74 31 2e 74 65 73  est  select1.tes
22e0: 74 0a 20 20 73 65 6c 65 63 74 32 2e 74 65 73 74  t.  select2.test
22f0: 20 20 74 72 61 6e 73 2e 74 65 73 74 20 20 20 20    trans.test    
2300: 75 70 64 61 74 65 2e 74 65 73 74 20 20 76 61 63  update.test  vac
2310: 75 75 6d 2e 74 65 73 74 20 20 20 20 74 79 70 65  uum.test    type
2320: 73 2e 74 65 73 74 0a 20 20 74 79 70 65 73 32 2e  s.test.  types2.
2330: 74 65 73 74 20 20 20 74 79 70 65 73 33 2e 74 65  test   types3.te
2340: 73 74 0a 7d 20 2d 73 68 75 74 64 6f 77 6e 20 7b  st.} -shutdown {
2350: 0a 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f  .  catch {db clo
2360: 73 65 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 68  se}.  sqlite3_sh
2370: 75 74 64 6f 77 6e 0a 20 20 63 61 74 63 68 20 7b  utdown.  catch {
2380: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 20 73  sqlite3_config s
2390: 65 72 69 61 6c 69 7a 65 64 7d 0a 20 20 73 71 6c  erialized}.  sql
23a0: 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a  ite3_initialize.
23b0: 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65    autoinstall_te
23c0: 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 7d 0a 0a  st_functions.}..
23d0: 74 65 73 74 5f 73 75 69 74 65 20 22 6e 6f 6d 75  test_suite "nomu
23e0: 74 65 78 22 20 2d 64 65 73 63 72 69 70 74 69 6f  tex" -descriptio
23f0: 6e 20 7b 0a 20 20 54 65 73 74 73 20 72 75 6e 20  n {.  Tests run 
2400: 77 69 74 68 20 74 68 65 20 53 51 4c 49 54 45 5f  with the SQLITE_
2410: 4f 50 45 4e 5f 4d 55 4c 54 49 54 48 52 45 41 44  OPEN_MULTITHREAD
2420: 45 44 20 66 6c 61 67 20 70 61 73 73 65 64 20 74  ED flag passed t
2430: 6f 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29  o sqlite3_open()
2440: 2e 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20  ..} -initialize 
2450: 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c 69 74  {.  rename sqlit
2460: 65 33 20 73 71 6c 69 74 65 33 5f 6e 6f 6d 75 74  e3 sqlite3_nomut
2470: 65 78 0a 20 20 70 72 6f 63 20 73 71 6c 69 74 65  ex.  proc sqlite
2480: 33 20 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20 69  3 {args} {.    i
2490: 66 20 7b 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  f {[string range
24a0: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 30   [lindex $args 0
24b0: 5d 20 30 20 30 5d 20 6e 65 20 22 2d 22 7d 20 7b  ] 0 0] ne "-"} {
24c0: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 61  .      lappend a
24d0: 72 67 73 20 2d 66 75 6c 6c 6d 75 74 65 78 20 30  rgs -fullmutex 0
24e0: 20 2d 6e 6f 6d 75 74 65 78 20 31 0a 20 20 20 20   -nomutex 1.    
24f0: 7d 0a 20 20 20 20 75 70 6c 65 76 65 6c 20 5b 63  }.    uplevel [c
2500: 6f 6e 63 61 74 20 73 71 6c 69 74 65 33 5f 6e 6f  oncat sqlite3_no
2510: 6d 75 74 65 78 20 24 61 72 67 73 5d 0a 20 20 7d  mutex $args].  }
2520: 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 64 65  .} -files {.  de
2530: 6c 65 74 65 2e 74 65 73 74 20 20 20 64 65 6c 65  lete.test   dele
2540: 74 65 32 2e 74 65 73 74 20 20 69 6e 73 65 72 74  te2.test  insert
2550: 2e 74 65 73 74 20 20 72 6f 6c 6c 62 61 63 6b 2e  .test  rollback.
2560: 74 65 73 74 20 20 73 65 6c 65 63 74 31 2e 74 65  test  select1.te
2570: 73 74 0a 20 20 73 65 6c 65 63 74 32 2e 74 65 73  st.  select2.tes
2580: 74 20 20 74 72 61 6e 73 2e 74 65 73 74 20 20 20  t  trans.test   
2590: 20 75 70 64 61 74 65 2e 74 65 73 74 20 20 76 61   update.test  va
25a0: 63 75 75 6d 2e 74 65 73 74 20 20 20 20 74 79 70  cuum.test    typ
25b0: 65 73 2e 74 65 73 74 0a 20 20 74 79 70 65 73 32  es.test.  types2
25c0: 2e 74 65 73 74 20 20 20 74 79 70 65 73 33 2e 74  .test   types3.t
25d0: 65 73 74 0a 7d 20 2d 73 68 75 74 64 6f 77 6e 20  est.} -shutdown 
25e0: 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c 69 74  {.  rename sqlit
25f0: 65 33 20 7b 7d 0a 20 20 72 65 6e 61 6d 65 20 73  e3 {}.  rename s
2600: 71 6c 69 74 65 33 5f 6e 6f 6d 75 74 65 78 20 73  qlite3_nomutex s
2610: 71 6c 69 74 65 33 0a 7d 0a 0a 23 20 52 75 6e 20  qlite3.}..# Run 
2620: 73 6f 6d 65 20 74 65 73 74 73 20 69 6e 20 53 51  some tests in SQ
2630: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54  LITE_CONFIG_MULT
2640: 49 54 48 52 45 41 44 20 6d 6f 64 65 2e 0a 23 0a  ITHREAD mode..#.
2650: 74 65 73 74 5f 73 75 69 74 65 20 22 6d 75 6c 74  test_suite "mult
2660: 69 74 68 72 65 61 64 22 20 2d 64 65 73 63 72 69  ithread" -descri
2670: 70 74 69 6f 6e 20 7b 0a 20 20 54 65 73 74 73 20  ption {.  Tests 
2680: 72 75 6e 20 69 6e 20 53 51 4c 49 54 45 5f 43 4f  run in SQLITE_CO
2690: 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44  NFIG_MULTITHREAD
26a0: 20 6d 6f 64 65 0a 7d 20 2d 69 6e 69 74 69 61 6c   mode.} -initial
26b0: 69 7a 65 20 7b 0a 20 20 63 61 74 63 68 20 7b 64  ize {.  catch {d
26c0: 62 20 63 6c 6f 73 65 7d 0a 20 20 73 71 6c 69 74  b close}.  sqlit
26d0: 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 63 61  e3_shutdown.  ca
26e0: 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 63 6f 6e  tch {sqlite3_con
26f0: 66 69 67 20 6d 75 6c 74 69 74 68 72 65 61 64 7d  fig multithread}
2700: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  .  sqlite3_initi
2710: 61 6c 69 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74  alize.  autoinst
2720: 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  all_test_functio
2730: 6e 73 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20  ns.} -files {.  
2740: 64 65 6c 65 74 65 2e 74 65 73 74 20 20 20 64 65  delete.test   de
2750: 6c 65 74 65 32 2e 74 65 73 74 20 20 69 6e 73 65  lete2.test  inse
2760: 72 74 2e 74 65 73 74 20 20 72 6f 6c 6c 62 61 63  rt.test  rollbac
2770: 6b 2e 74 65 73 74 20 20 73 65 6c 65 63 74 31 2e  k.test  select1.
2780: 74 65 73 74 0a 20 20 73 65 6c 65 63 74 32 2e 74  test.  select2.t
2790: 65 73 74 20 20 74 72 61 6e 73 2e 74 65 73 74 20  est  trans.test 
27a0: 20 20 20 75 70 64 61 74 65 2e 74 65 73 74 20 20     update.test  
27b0: 76 61 63 75 75 6d 2e 74 65 73 74 20 20 20 20 74  vacuum.test    t
27c0: 79 70 65 73 2e 74 65 73 74 0a 20 20 74 79 70 65  ypes.test.  type
27d0: 73 32 2e 74 65 73 74 20 20 20 74 79 70 65 73 33  s2.test   types3
27e0: 2e 74 65 73 74 0a 7d 20 2d 73 68 75 74 64 6f 77  .test.} -shutdow
27f0: 6e 20 7b 0a 20 20 63 61 74 63 68 20 7b 64 62 20  n {.  catch {db 
2800: 63 6c 6f 73 65 7d 0a 20 20 73 71 6c 69 74 65 33  close}.  sqlite3
2810: 5f 73 68 75 74 64 6f 77 6e 0a 20 20 63 61 74 63  _shutdown.  catc
2820: 68 20 7b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  h {sqlite3_confi
2830: 67 20 73 65 72 69 61 6c 69 7a 65 64 7d 0a 20 20  g serialized}.  
2840: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
2850: 7a 65 0a 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c  ze.  autoinstall
2860: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a  _test_functions.
2870: 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74 65  }..# Run some te
2880: 73 74 73 20 69 6e 20 53 51 4c 49 54 45 5f 4f 50  sts in SQLITE_OP
2890: 45 4e 5f 46 55 4c 4c 4d 55 54 45 58 20 6d 6f 64  EN_FULLMUTEX mod
28a0: 65 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65 20  e..#.test_suite 
28b0: 22 66 75 6c 6c 6d 75 74 65 78 22 20 2d 64 65 73  "fullmutex" -des
28c0: 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 54 65 73  cription {.  Tes
28d0: 74 73 20 72 75 6e 20 69 6e 20 53 51 4c 49 54 45  ts run in SQLITE
28e0: 5f 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45 58 20  _OPEN_FULLMUTEX 
28f0: 6d 6f 64 65 0a 7d 20 2d 69 6e 69 74 69 61 6c 69  mode.} -initiali
2900: 7a 65 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71  ze {.  rename sq
2910: 6c 69 74 65 33 20 73 71 6c 69 74 65 33 5f 66 75  lite3 sqlite3_fu
2920: 6c 6c 6d 75 74 65 78 0a 20 20 70 72 6f 63 20 73  llmutex.  proc s
2930: 71 6c 69 74 65 33 20 7b 61 72 67 73 7d 20 7b 0a  qlite3 {args} {.
2940: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string 
2950: 72 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 61  range [lindex $a
2960: 72 67 73 20 30 5d 20 30 20 30 5d 20 6e 65 20 22  rgs 0] 0 0] ne "
2970: 2d 22 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70  -"} {.      lapp
2980: 65 6e 64 20 61 72 67 73 20 2d 6e 6f 6d 75 74 65  end args -nomute
2990: 78 20 30 20 2d 66 75 6c 6c 6d 75 74 65 78 20 31  x 0 -fullmutex 1
29a0: 0a 20 20 20 20 7d 0a 20 20 20 20 75 70 6c 65 76  .    }.    uplev
29b0: 65 6c 20 5b 63 6f 6e 63 61 74 20 73 71 6c 69 74  el [concat sqlit
29c0: 65 33 5f 66 75 6c 6c 6d 75 74 65 78 20 24 61 72  e3_fullmutex $ar
29d0: 67 73 5d 0a 20 20 7d 0a 7d 20 2d 66 69 6c 65 73  gs].  }.} -files
29e0: 20 7b 0a 20 20 64 65 6c 65 74 65 2e 74 65 73 74   {.  delete.test
29f0: 20 20 20 64 65 6c 65 74 65 32 2e 74 65 73 74 20     delete2.test 
2a00: 20 69 6e 73 65 72 74 2e 74 65 73 74 20 20 72 6f   insert.test  ro
2a10: 6c 6c 62 61 63 6b 2e 74 65 73 74 20 20 73 65 6c  llback.test  sel
2a20: 65 63 74 31 2e 74 65 73 74 0a 20 20 73 65 6c 65  ect1.test.  sele
2a30: 63 74 32 2e 74 65 73 74 20 20 74 72 61 6e 73 2e  ct2.test  trans.
2a40: 74 65 73 74 20 20 20 20 75 70 64 61 74 65 2e 74  test    update.t
2a50: 65 73 74 20 20 76 61 63 75 75 6d 2e 74 65 73 74  est  vacuum.test
2a60: 20 20 20 20 74 79 70 65 73 2e 74 65 73 74 0a 20      types.test. 
2a70: 20 74 79 70 65 73 32 2e 74 65 73 74 20 20 20 74   types2.test   t
2a80: 79 70 65 73 33 2e 74 65 73 74 0a 7d 20 2d 73 68  ypes3.test.} -sh
2a90: 75 74 64 6f 77 6e 20 7b 0a 20 20 72 65 6e 61 6d  utdown {.  renam
2aa0: 65 20 73 71 6c 69 74 65 33 20 7b 7d 0a 20 20 72  e sqlite3 {}.  r
2ab0: 65 6e 61 6d 65 20 73 71 6c 69 74 65 33 5f 66 75  ename sqlite3_fu
2ac0: 6c 6c 6d 75 74 65 78 20 73 71 6c 69 74 65 33 0a  llmutex sqlite3.
2ad0: 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74 65  }..# Run some te
2ae0: 73 74 73 20 75 73 69 6e 67 20 74 68 65 20 22 6f  sts using the "o
2af0: 6e 65 66 69 6c 65 22 20 64 65 6d 6f 2e 0a 23 0a  nefile" demo..#.
2b00: 74 65 73 74 5f 73 75 69 74 65 20 22 6f 6e 65 66  test_suite "onef
2b10: 69 6c 65 22 20 2d 64 65 73 63 72 69 70 74 69 6f  ile" -descriptio
2b20: 6e 20 7b 0a 20 20 52 75 6e 20 73 6f 6d 65 20 74  n {.  Run some t
2b30: 65 73 74 73 20 75 73 69 6e 67 20 74 68 65 20 22  ests using the "
2b40: 74 65 73 74 5f 6f 6e 65 66 69 6c 65 2e 63 22 20  test_onefile.c" 
2b50: 64 65 6d 6f 0a 7d 20 2d 69 6e 69 74 69 61 6c 69  demo.} -initiali
2b60: 7a 65 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71  ze {.  rename sq
2b70: 6c 69 74 65 33 20 73 71 6c 69 74 65 33 5f 6f 6e  lite3 sqlite3_on
2b80: 65 66 69 6c 65 0a 20 20 70 72 6f 63 20 73 71 6c  efile.  proc sql
2b90: 69 74 65 33 20 7b 61 72 67 73 7d 20 7b 0a 20 20  ite3 {args} {.  
2ba0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 72 61    if {[string ra
2bb0: 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 61 72 67  nge [lindex $arg
2bc0: 73 20 30 5d 20 30 20 30 5d 20 6e 65 20 22 2d 22  s 0] 0 0] ne "-"
2bd0: 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e  } {.      lappen
2be0: 64 20 61 72 67 73 20 2d 76 66 73 20 66 73 0a 20  d args -vfs fs. 
2bf0: 20 20 20 7d 0a 20 20 20 20 75 70 6c 65 76 65 6c     }.    uplevel
2c00: 20 5b 63 6f 6e 63 61 74 20 73 71 6c 69 74 65 33   [concat sqlite3
2c10: 5f 6f 6e 65 66 69 6c 65 20 24 61 72 67 73 5d 0a  _onefile $args].
2c20: 20 20 7d 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20    }.} -files {. 
2c30: 20 63 6f 6e 66 6c 69 63 74 2e 74 65 73 74 20 20   conflict.test  
2c40: 69 6e 73 65 72 74 2e 74 65 73 74 20 20 20 69 6e  insert.test   in
2c50: 73 65 72 74 32 2e 74 65 73 74 20 20 69 6e 73 65  sert2.test  inse
2c60: 72 74 33 2e 74 65 73 74 0a 20 20 72 6f 6c 6c 62  rt3.test.  rollb
2c70: 61 63 6b 2e 74 65 73 74 20 20 73 65 6c 65 63 74  ack.test  select
2c80: 31 2e 74 65 73 74 20 20 73 65 6c 65 63 74 32 2e  1.test  select2.
2c90: 74 65 73 74 20 20 73 65 6c 65 63 74 33 2e 74 65  test  select3.te
2ca0: 73 74 0a 7d 20 2d 73 68 75 74 64 6f 77 6e 20 7b  st.} -shutdown {
2cb0: 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c 69 74 65  .  rename sqlite
2cc0: 33 20 7b 7d 0a 20 20 72 65 6e 61 6d 65 20 73 71  3 {}.  rename sq
2cd0: 6c 69 74 65 33 5f 6f 6e 65 66 69 6c 65 20 73 71  lite3_onefile sq
2ce0: 6c 69 74 65 33 0a 7d 0a 0a 23 20 52 75 6e 20 73  lite3.}..# Run s
2cf0: 6f 6d 65 20 74 65 73 74 73 20 75 73 69 6e 67 20  ome tests using 
2d00: 55 54 46 2d 31 36 20 64 61 74 61 62 61 73 65 73  UTF-16 databases
2d10: 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22  ..#.test_suite "
2d20: 75 74 66 31 36 22 20 2d 64 65 73 63 72 69 70 74  utf16" -descript
2d30: 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65 73 74  ion {.  Run test
2d40: 73 20 75 73 69 6e 67 20 55 54 46 2d 31 36 20 64  s using UTF-16 d
2d50: 61 74 61 62 61 73 65 73 0a 7d 20 2d 70 72 65 73  atabases.} -pres
2d60: 71 6c 20 7b 0a 20 20 70 72 61 67 6d 61 20 65 6e  ql {.  pragma en
2d70: 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36  coding = 'UTF-16
2d80: 27 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 20  '.} -files {.   
2d90: 20 61 6c 74 65 72 2e 74 65 73 74 20 61 6c 74 65   alter.test alte
2da0: 72 33 2e 74 65 73 74 0a 20 20 20 20 61 75 74 68  r3.test.    auth
2db0: 2e 74 65 73 74 20 62 69 6e 64 2e 74 65 73 74 20  .test bind.test 
2dc0: 62 6c 6f 62 2e 74 65 73 74 20 63 61 70 69 32 2e  blob.test capi2.
2dd0: 74 65 73 74 20 63 61 70 69 33 2e 74 65 73 74 20  test capi3.test 
2de0: 63 6f 6c 6c 61 74 65 31 2e 74 65 73 74 0a 20 20  collate1.test.  
2df0: 20 20 63 6f 6c 6c 61 74 65 32 2e 74 65 73 74 20    collate2.test 
2e00: 63 6f 6c 6c 61 74 65 33 2e 74 65 73 74 20 63 6f  collate3.test co
2e10: 6c 6c 61 74 65 34 2e 74 65 73 74 20 63 6f 6c 6c  llate4.test coll
2e20: 61 74 65 35 2e 74 65 73 74 20 63 6f 6c 6c 61 74  ate5.test collat
2e30: 65 36 2e 74 65 73 74 0a 20 20 20 20 63 6f 6e 66  e6.test.    conf
2e40: 6c 69 63 74 2e 74 65 73 74 20 64 61 74 65 2e 74  lict.test date.t
2e50: 65 73 74 20 64 65 6c 65 74 65 2e 74 65 73 74 20  est delete.test 
2e60: 65 78 70 72 2e 74 65 73 74 20 66 6b 65 79 31 2e  expr.test fkey1.
2e70: 74 65 73 74 20 66 75 6e 63 2e 74 65 73 74 0a 20  test func.test. 
2e80: 20 20 20 68 6f 6f 6b 2e 74 65 73 74 20 69 6e 64     hook.test ind
2e90: 65 78 2e 74 65 73 74 20 69 6e 73 65 72 74 32 2e  ex.test insert2.
2ea0: 74 65 73 74 20 69 6e 73 65 72 74 2e 74 65 73 74  test insert.test
2eb0: 20 69 6e 74 65 72 72 75 70 74 2e 74 65 73 74 20   interrupt.test 
2ec0: 69 6e 2e 74 65 73 74 0a 20 20 20 20 69 6e 74 70  in.test.    intp
2ed0: 6b 65 79 2e 74 65 73 74 20 69 6f 65 72 72 2e 74  key.test ioerr.t
2ee0: 65 73 74 20 6a 6f 69 6e 32 2e 74 65 73 74 20 6a  est join2.test j
2ef0: 6f 69 6e 2e 74 65 73 74 20 6c 61 73 74 69 6e 73  oin.test lastins
2f00: 65 72 74 2e 74 65 73 74 0a 20 20 20 20 6c 61 73  ert.test.    las
2f10: 74 73 74 6d 74 63 68 61 6e 67 65 73 2e 74 65 73  tstmtchanges.tes
2f20: 74 20 6c 69 6d 69 74 2e 74 65 73 74 20 6c 6f 63  t limit.test loc
2f30: 6b 32 2e 74 65 73 74 20 6c 6f 63 6b 2e 74 65 73  k2.test lock.tes
2f40: 74 20 6d 61 69 6e 2e 74 65 73 74 20 0a 20 20 20  t main.test .   
2f50: 20 6d 65 6d 64 62 2e 74 65 73 74 20 6d 69 6e 6d   memdb.test minm
2f60: 61 78 2e 74 65 73 74 20 6d 69 73 63 31 2e 74 65  ax.test misc1.te
2f70: 73 74 20 6d 69 73 63 32 2e 74 65 73 74 20 6d 69  st misc2.test mi
2f80: 73 63 33 2e 74 65 73 74 20 6e 6f 74 6e 75 6c 6c  sc3.test notnull
2f90: 2e 74 65 73 74 0a 20 20 20 20 6e 75 6c 6c 2e 74  .test.    null.t
2fa0: 65 73 74 20 70 72 6f 67 72 65 73 73 2e 74 65 73  est progress.tes
2fb0: 74 20 71 75 6f 74 65 2e 74 65 73 74 20 72 6f 77  t quote.test row
2fc0: 69 64 2e 74 65 73 74 20 73 65 6c 65 63 74 31 2e  id.test select1.
2fd0: 74 65 73 74 20 73 65 6c 65 63 74 32 2e 74 65 73  test select2.tes
2fe0: 74 0a 20 20 20 20 73 65 6c 65 63 74 33 2e 74 65  t.    select3.te
2ff0: 73 74 20 73 65 6c 65 63 74 34 2e 74 65 73 74 20  st select4.test 
3000: 73 65 6c 65 63 74 35 2e 74 65 73 74 20 73 65 6c  select5.test sel
3010: 65 63 74 36 2e 74 65 73 74 20 73 6f 72 74 2e 74  ect6.test sort.t
3020: 65 73 74 20 0a 20 20 20 20 73 75 62 73 65 6c 65  est .    subsele
3030: 63 74 2e 74 65 73 74 20 74 61 62 6c 65 61 70 69  ct.test tableapi
3040: 2e 74 65 73 74 20 74 61 62 6c 65 2e 74 65 73 74  .test table.test
3050: 20 74 65 6d 70 74 61 62 6c 65 2e 74 65 73 74 0a   temptable.test.
3060: 20 20 20 20 74 72 61 63 65 2e 74 65 73 74 20 74      trace.test t
3070: 72 69 67 67 65 72 31 2e 74 65 73 74 20 74 72 69  rigger1.test tri
3080: 67 67 65 72 32 2e 74 65 73 74 20 74 72 69 67 67  gger2.test trigg
3090: 65 72 33 2e 74 65 73 74 0a 20 20 20 20 74 72 69  er3.test.    tri
30a0: 67 67 65 72 34 2e 74 65 73 74 20 74 79 70 65 73  gger4.test types
30b0: 32 2e 74 65 73 74 20 74 79 70 65 73 2e 74 65 73  2.test types.tes
30c0: 74 20 75 6e 69 71 75 65 2e 74 65 73 74 20 75 70  t unique.test up
30d0: 64 61 74 65 2e 74 65 73 74 0a 20 20 20 20 76 61  date.test.    va
30e0: 63 75 75 6d 2e 74 65 73 74 20 76 69 65 77 2e 74  cuum.test view.t
30f0: 65 73 74 20 77 68 65 72 65 2e 74 65 73 74 0a 7d  est where.test.}
3100: 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74 65 73  ..# Run some tes
3110: 74 73 20 69 6e 20 65 78 63 6c 75 73 69 76 65 20  ts in exclusive 
3120: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 23 0a  locking mode..#.
3130: 74 65 73 74 5f 73 75 69 74 65 20 22 65 78 63 6c  test_suite "excl
3140: 75 73 69 76 65 22 20 2d 64 65 73 63 72 69 70 74  usive" -descript
3150: 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65 73 74  ion {.  Run test
3160: 73 20 69 6e 20 65 78 63 6c 75 73 69 76 65 20 6c  s in exclusive l
3170: 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 7d 20 2d  ocking mode..} -
3180: 70 72 65 73 71 6c 20 7b 0a 20 20 70 72 61 67 6d  presql {.  pragm
3190: 61 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d  a locking_mode =
31a0: 20 27 65 78 63 6c 75 73 69 76 65 27 0a 7d 20 2d   'exclusive'.} -
31b0: 66 69 6c 65 73 20 7b 0a 20 20 72 6f 6c 6c 62 61  files {.  rollba
31c0: 63 6b 2e 74 65 73 74 20 73 65 6c 65 63 74 31 2e  ck.test select1.
31d0: 74 65 73 74 20 73 65 6c 65 63 74 32 2e 74 65 73  test select2.tes
31e0: 74 20 0a 20 20 6d 61 6c 6c 6f 63 2e 74 65 73 74  t .  malloc.test
31f0: 20 69 6f 65 72 72 2e 74 65 73 74 0a 7d 20 0a 0a   ioerr.test.} ..
3200: 23 20 52 75 6e 20 73 6f 6d 65 20 74 65 73 74 73  # Run some tests
3210: 20 69 6e 20 65 78 63 6c 75 73 69 76 65 20 6c 6f   in exclusive lo
3220: 63 6b 69 6e 67 20 6d 6f 64 65 20 77 69 74 68 20  cking mode with 
3230: 74 72 75 6e 63 61 74 65 64 20 6a 6f 75 72 6e 61  truncated journa
3240: 6c 73 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65  ls..#.test_suite
3250: 20 22 65 78 63 6c 75 73 69 76 65 2d 74 72 75 6e   "exclusive-trun
3260: 63 61 74 65 22 20 2d 64 65 73 63 72 69 70 74 69  cate" -descripti
3270: 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65 73 74 73  on {.  Run tests
3280: 20 69 6e 20 65 78 63 6c 75 73 69 76 65 20 6c 6f   in exclusive lo
3290: 63 6b 69 6e 67 20 6d 6f 64 65 20 61 6e 64 20 74  cking mode and t
32a0: 72 75 6e 63 61 74 65 20 6a 6f 75 72 6e 61 6c 20  runcate journal 
32b0: 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20  mode..} -presql 
32c0: 7b 0a 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 69  {.  pragma locki
32d0: 6e 67 5f 6d 6f 64 65 20 3d 20 27 65 78 63 6c 75  ng_mode = 'exclu
32e0: 73 69 76 65 27 3b 0a 20 20 70 72 61 67 6d 61 20  sive';.  pragma 
32f0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 54  journal_mode = T
3300: 52 55 4e 43 41 54 45 3b 0a 7d 20 2d 66 69 6c 65  RUNCATE;.} -file
3310: 73 20 7b 0a 20 20 64 65 6c 65 74 65 2e 74 65 73  s {.  delete.tes
3320: 74 20 64 65 6c 65 74 65 32 2e 74 65 73 74 20 69  t delete2.test i
3330: 6e 73 65 72 74 2e 74 65 73 74 20 72 6f 6c 6c 62  nsert.test rollb
3340: 61 63 6b 2e 74 65 73 74 20 73 65 6c 65 63 74 31  ack.test select1
3350: 2e 74 65 73 74 0a 20 20 73 65 6c 65 63 74 32 2e  .test.  select2.
3360: 74 65 73 74 20 75 70 64 61 74 65 2e 74 65 73 74  test update.test
3370: 20 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 69 6f 65   malloc.test ioe
3380: 72 72 2e 74 65 73 74 0a 7d 20 0a 0a 23 20 52 75  rr.test.} ..# Ru
3390: 6e 20 73 6f 6d 65 20 74 65 73 74 73 20 69 6e 20  n some tests in 
33a0: 70 65 72 73 69 73 74 65 6e 74 20 6a 6f 75 72 6e  persistent journ
33b0: 61 6c 20 6d 6f 64 65 2e 0a 23 0a 74 65 73 74 5f  al mode..#.test_
33c0: 73 75 69 74 65 20 22 70 65 72 73 69 73 74 65 6e  suite "persisten
33d0: 74 5f 6a 6f 75 72 6e 61 6c 22 20 2d 64 65 73 63  t_journal" -desc
33e0: 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20  ription {.  Run 
33f0: 74 65 73 74 73 20 69 6e 20 70 65 72 73 69 73 74  tests in persist
3400: 65 6e 74 2d 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  ent-journal mode
3410: 2e 0a 7d 20 2d 70 72 65 73 71 6c 20 7b 0a 20 20  ..} -presql {.  
3420: 70 72 61 67 6d 61 20 6a 6f 75 72 6e 61 6c 5f 6d  pragma journal_m
3430: 6f 64 65 20 3d 20 70 65 72 73 69 73 74 0a 7d 20  ode = persist.} 
3440: 2d 66 69 6c 65 73 20 7b 0a 20 20 64 65 6c 65 74  -files {.  delet
3450: 65 2e 74 65 73 74 20 64 65 6c 65 74 65 32 2e 74  e.test delete2.t
3460: 65 73 74 20 69 6e 73 65 72 74 2e 74 65 73 74 20  est insert.test 
3470: 72 6f 6c 6c 62 61 63 6b 2e 74 65 73 74 20 73 65  rollback.test se
3480: 6c 65 63 74 31 2e 74 65 73 74 0a 20 20 73 65 6c  lect1.test.  sel
3490: 65 63 74 32 2e 74 65 73 74 20 74 72 61 6e 73 2e  ect2.test trans.
34a0: 74 65 73 74 20 75 70 64 61 74 65 2e 74 65 73 74  test update.test
34b0: 20 76 61 63 75 75 6d 2e 74 65 73 74 20 0a 7d 0a   vacuum.test .}.
34c0: 0a 23 20 52 75 6e 20 73 6f 6d 65 20 74 65 73 74  .# Run some test
34d0: 73 20 69 6e 20 74 72 75 6e 63 61 74 69 6e 67 20  s in truncating 
34e0: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2e 0a 23 0a  journal mode..#.
34f0: 74 65 73 74 5f 73 75 69 74 65 20 22 74 72 75 6e  test_suite "trun
3500: 63 61 74 65 5f 6a 6f 75 72 6e 61 6c 22 20 2d 64  cate_journal" -d
3510: 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52  escription {.  R
3520: 75 6e 20 74 65 73 74 73 20 69 6e 20 70 65 72 73  un tests in pers
3530: 69 73 74 65 6e 74 2d 6a 6f 75 72 6e 61 6c 20 6d  istent-journal m
3540: 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20 7b  ode..} -presql {
3550: 0a 20 20 70 72 61 67 6d 61 20 6a 6f 75 72 6e 61  .  pragma journa
3560: 6c 5f 6d 6f 64 65 20 3d 20 74 72 75 6e 63 61 74  l_mode = truncat
3570: 65 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 64  e.} -files {.  d
3580: 65 6c 65 74 65 2e 74 65 73 74 20 64 65 6c 65 74  elete.test delet
3590: 65 32 2e 74 65 73 74 20 69 6e 73 65 72 74 2e 74  e2.test insert.t
35a0: 65 73 74 20 72 6f 6c 6c 62 61 63 6b 2e 74 65 73  est rollback.tes
35b0: 74 20 73 65 6c 65 63 74 31 2e 74 65 73 74 0a 20  t select1.test. 
35c0: 20 73 65 6c 65 63 74 32 2e 74 65 73 74 20 74 72   select2.test tr
35d0: 61 6e 73 2e 74 65 73 74 20 75 70 64 61 74 65 2e  ans.test update.
35e0: 74 65 73 74 20 76 61 63 75 75 6d 2e 74 65 73 74  test vacuum.test
35f0: 20 0a 20 20 6d 61 6c 6c 6f 63 2e 74 65 73 74 20   .  malloc.test 
3600: 69 6f 65 72 72 2e 74 65 73 74 0a 7d 0a 0a 23 20  ioerr.test.}..# 
3610: 52 75 6e 20 73 6f 6d 65 20 65 72 72 6f 72 20 74  Run some error t
3620: 65 73 74 73 20 69 6e 20 70 65 72 73 69 73 74 65  ests in persiste
3630: 6e 74 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2e  nt journal mode.
3640: 0a 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22 70  .#.test_suite "p
3650: 65 72 73 69 73 74 65 6e 74 5f 6a 6f 75 72 6e 61  ersistent_journa
3660: 6c 5f 65 72 72 6f 72 22 20 2d 64 65 73 63 72 69  l_error" -descri
3670: 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 6d 61  ption {.  Run ma
3680: 6c 6c 6f 63 2e 74 65 73 74 20 61 6e 64 20 69 6f  lloc.test and io
3690: 65 72 72 2e 74 65 73 74 20 69 6e 20 70 65 72 73  err.test in pers
36a0: 69 73 74 65 6e 74 2d 6a 6f 75 72 6e 61 6c 20 6d  istent-journal m
36b0: 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20 7b  ode..} -presql {
36c0: 0a 20 20 70 72 61 67 6d 61 20 6a 6f 75 72 6e 61  .  pragma journa
36d0: 6c 5f 6d 6f 64 65 20 3d 20 70 65 72 73 69 73 74  l_mode = persist
36e0: 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 6d 61  .} -files {.  ma
36f0: 6c 6c 6f 63 2e 74 65 73 74 20 69 6f 65 72 72 2e  lloc.test ioerr.
3700: 74 65 73 74 0a 7d 0a 0a 23 20 52 75 6e 20 73 6f  test.}..# Run so
3710: 6d 65 20 74 65 73 74 73 20 69 6e 20 6e 6f 20 6a  me tests in no j
3720: 6f 75 72 6e 61 6c 20 6d 6f 64 65 2e 0a 23 0a 74  ournal mode..#.t
3730: 65 73 74 5f 73 75 69 74 65 20 22 6e 6f 5f 6a 6f  est_suite "no_jo
3740: 75 72 6e 61 6c 22 20 2d 64 65 73 63 72 69 70 74  urnal" -descript
3750: 69 6f 6e 20 7b 0a 20 20 52 75 6e 20 74 65 73 74  ion {.  Run test
3760: 73 20 69 6e 20 6e 6f 2d 6a 6f 75 72 6e 61 6c 20  s in no-journal 
3770: 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20  mode..} -presql 
3780: 7b 0a 20 20 70 72 61 67 6d 61 20 6a 6f 75 72 6e  {.  pragma journ
3790: 61 6c 5f 6d 6f 64 65 20 3d 20 70 65 72 73 69 73  al_mode = persis
37a0: 74 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 64  t.} -files {.  d
37b0: 65 6c 65 74 65 2e 74 65 73 74 20 64 65 6c 65 74  elete.test delet
37c0: 65 32 2e 74 65 73 74 20 69 6e 73 65 72 74 2e 74  e2.test insert.t
37d0: 65 73 74 20 72 6f 6c 6c 62 61 63 6b 2e 74 65 73  est rollback.tes
37e0: 74 20 73 65 6c 65 63 74 31 2e 74 65 73 74 0a 20  t select1.test. 
37f0: 20 73 65 6c 65 63 74 32 2e 74 65 73 74 20 74 72   select2.test tr
3800: 61 6e 73 2e 74 65 73 74 20 75 70 64 61 74 65 2e  ans.test update.
3810: 74 65 73 74 20 76 61 63 75 75 6d 2e 74 65 73 74  test vacuum.test
3820: 20 0a 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d 65 20   .}..# Run some 
3830: 65 72 72 6f 72 20 74 65 73 74 73 20 69 6e 20 6e  error tests in n
3840: 6f 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2e 0a  o journal mode..
3850: 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22 6e 6f  #.test_suite "no
3860: 5f 6a 6f 75 72 6e 61 6c 5f 65 72 72 6f 72 22 20  _journal_error" 
3870: 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20  -description {. 
3880: 20 52 75 6e 20 6d 61 6c 6c 6f 63 2e 74 65 73 74   Run malloc.test
3890: 20 61 6e 64 20 69 6f 65 72 72 2e 74 65 73 74 20   and ioerr.test 
38a0: 69 6e 20 6e 6f 2d 6a 6f 75 72 6e 61 6c 20 6d 6f  in no-journal mo
38b0: 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20 7b 0a  de..} -presql {.
38c0: 20 20 70 72 61 67 6d 61 20 6a 6f 75 72 6e 61 6c    pragma journal
38d0: 5f 6d 6f 64 65 20 3d 20 70 65 72 73 69 73 74 0a  _mode = persist.
38e0: 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20 6d 61 6c  } -files {.  mal
38f0: 6c 6f 63 2e 74 65 73 74 20 69 6f 65 72 72 2e 74  loc.test ioerr.t
3900: 65 73 74 0a 7d 0a 0a 23 20 52 75 6e 20 73 6f 6d  est.}..# Run som
3910: 65 20 63 72 61 73 68 2d 74 65 73 74 73 20 69 6e  e crash-tests in
3920: 20 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65   autovacuum mode
3930: 2e 0a 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22  ..#.test_suite "
3940: 61 75 74 6f 76 61 63 75 75 6d 5f 63 72 61 73 68  autovacuum_crash
3950: 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b  " -description {
3960: 0a 20 20 52 75 6e 20 63 72 61 73 68 2e 74 65 73  .  Run crash.tes
3970: 74 20 69 6e 20 61 75 74 6f 76 61 63 75 75 6d 20  t in autovacuum 
3980: 6d 6f 64 65 2e 0a 7d 20 2d 70 72 65 73 71 6c 20  mode..} -presql 
3990: 7b 0a 20 20 70 72 61 67 6d 61 20 61 75 74 6f 5f  {.  pragma auto_
39a0: 76 61 63 75 75 6d 20 3d 20 31 0a 7d 20 2d 66 69  vacuum = 1.} -fi
39b0: 6c 65 73 20 63 72 61 73 68 2e 74 65 73 74 0a 0a  les crash.test..
39c0: 23 20 52 75 6e 20 73 6f 6d 65 20 69 6f 65 72 72  # Run some ioerr
39d0: 2d 74 65 73 74 73 20 69 6e 20 61 75 74 6f 76 61  -tests in autova
39e0: 63 75 75 6d 20 6d 6f 64 65 2e 0a 23 0a 74 65 73  cuum mode..#.tes
39f0: 74 5f 73 75 69 74 65 20 22 61 75 74 6f 76 61 63  t_suite "autovac
3a00: 75 75 6d 5f 69 6f 65 72 72 22 20 2d 64 65 73 63  uum_ioerr" -desc
3a10: 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20  ription {.  Run 
3a20: 69 6f 65 72 72 2e 74 65 73 74 20 69 6e 20 61 75  ioerr.test in au
3a30: 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65 2e 0a 7d  tovacuum mode..}
3a40: 20 2d 70 72 65 73 71 6c 20 7b 0a 20 20 70 72 61   -presql {.  pra
3a50: 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  gma auto_vacuum 
3a60: 3d 20 31 0a 7d 20 2d 66 69 6c 65 73 20 69 6f 65  = 1.} -files ioe
3a70: 72 72 2e 74 65 73 74 0a 0a 23 20 52 75 6e 20 74  rr.test..# Run t
3a80: 65 73 74 73 20 77 69 74 68 20 61 6e 20 69 6e 2d  ests with an in-
3a90: 6d 65 6d 6f 72 79 20 6a 6f 75 72 6e 61 6c 2e 0a  memory journal..
3aa0: 23 0a 74 65 73 74 5f 73 75 69 74 65 20 22 69 6e  #.test_suite "in
3ab0: 6d 65 6d 6f 72 79 5f 6a 6f 75 72 6e 61 6c 22 20  memory_journal" 
3ac0: 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20  -description {. 
3ad0: 20 52 75 6e 20 74 65 73 74 73 20 77 69 74 68 20   Run tests with 
3ae0: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 6a 6f 75  an in-memory jou
3af0: 72 6e 61 6c 20 66 69 6c 65 2e 0a 7d 20 2d 70 72  rnal file..} -pr
3b00: 65 73 71 6c 20 7b 0a 20 20 70 72 61 67 6d 61 20  esql {.  pragma 
3b10: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 27  journal_mode = '
3b20: 6d 65 6d 6f 72 79 27 0a 7d 20 2d 66 69 6c 65 73  memory'.} -files
3b30: 20 5b 74 65 73 74 5f 73 65 74 20 24 3a 3a 61 6c   [test_set $::al
3b40: 6c 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78 63  lquicktests -exc
3b50: 6c 75 64 65 20 7b 0a 20 20 23 20 45 78 63 6c 75  lude {.  # Exclu
3b60: 64 65 20 61 6c 6c 20 74 65 73 74 73 20 74 68 61  de all tests tha
3b70: 74 20 73 69 6d 75 6c 61 74 65 20 49 4f 20 65 72  t simulate IO er
3b80: 72 6f 72 73 2e 0a 20 20 61 75 74 6f 76 61 63 75  rors..  autovacu
3b90: 75 6d 5f 69 6f 65 72 72 32 2e 74 65 73 74 20 69  um_ioerr2.test i
3ba0: 6e 63 72 76 61 63 75 75 6d 5f 69 6f 65 72 72 2e  ncrvacuum_ioerr.
3bb0: 74 65 73 74 20 69 6f 65 72 72 2e 74 65 73 74 0a  test ioerr.test.
3bc0: 20 20 69 6f 65 72 72 2e 74 65 73 74 20 69 6f 65    ioerr.test ioe
3bd0: 72 72 32 2e 74 65 73 74 20 69 6f 65 72 72 33 2e  rr2.test ioerr3.
3be0: 74 65 73 74 20 69 6f 65 72 72 34 2e 74 65 73 74  test ioerr4.test
3bf0: 20 69 6f 65 72 72 35 2e 74 65 73 74 0a 20 20 76   ioerr5.test.  v
3c00: 61 63 75 75 6d 33 2e 74 65 73 74 20 69 6e 63 72  acuum3.test incr
3c10: 62 6c 6f 62 5f 65 72 72 2e 74 65 73 74 20 64 69  blob_err.test di
3c20: 73 6b 66 75 6c 6c 2e 74 65 73 74 20 62 61 63 6b  skfull.test back
3c30: 75 70 5f 69 6f 65 72 72 2e 74 65 73 74 0a 20 20  up_ioerr.test.  
3c40: 65 5f 66 74 73 33 2e 74 65 73 74 20 66 74 73 33  e_fts3.test fts3
3c50: 63 6f 76 2e 74 65 73 74 20 66 74 73 33 6d 61 6c  cov.test fts3mal
3c60: 6c 6f 63 2e 74 65 73 74 20 66 74 73 33 72 6e 64  loc.test fts3rnd
3c70: 2e 74 65 73 74 0a 20 20 66 74 73 33 73 6e 69 70  .test.  fts3snip
3c80: 70 65 74 2e 74 65 73 74 0a 0a 20 20 23 20 45 78  pet.test..  # Ex
3c90: 63 6c 75 64 65 20 74 65 73 74 20 73 63 72 69 70  clude test scrip
3ca0: 74 73 20 74 68 61 74 20 75 73 65 20 74 63 6c 20  ts that use tcl 
3cb0: 49 4f 20 74 6f 20 61 63 63 65 73 73 20 6a 6f 75  IO to access jou
3cc0: 72 6e 61 6c 20 66 69 6c 65 73 20 6f 72 20 63 6f  rnal files or co
3cd0: 75 6e 74 0a 20 20 23 20 74 68 65 20 6e 75 6d 62  unt.  # the numb
3ce0: 65 72 20 6f 66 20 66 73 79 6e 63 28 29 20 63 61  er of fsync() ca
3cf0: 6c 6c 73 2e 0a 20 20 70 61 67 65 72 2e 74 65 73  lls..  pager.tes
3d00: 74 20 65 78 63 6c 75 73 69 76 65 2e 74 65 73 74  t exclusive.test
3d10: 20 6a 72 6e 6c 6d 6f 64 65 2e 74 65 73 74 20 73   jrnlmode.test s
3d20: 79 6e 63 2e 74 65 73 74 20 6d 69 73 63 31 2e 74  ync.test misc1.t
3d30: 65 73 74 20 0a 20 20 6a 6f 75 72 6e 61 6c 31 2e  est .  journal1.
3d40: 74 65 73 74 20 63 6f 6e 66 6c 69 63 74 2e 74 65  test conflict.te
3d50: 73 74 20 63 72 61 73 68 38 2e 74 65 73 74 20 74  st crash8.test t
3d60: 6b 74 33 34 35 37 2e 74 65 73 74 20 69 6f 2e 74  kt3457.test io.t
3d70: 65 73 74 0a 20 20 6a 6f 75 72 6e 61 6c 33 2e 74  est.  journal3.t
3d80: 65 73 74 0a 0a 20 20 70 61 67 65 72 31 2e 74 65  est..  pager1.te
3d90: 73 74 20 61 73 79 6e 63 34 2e 74 65 73 74 20 63  st async4.test c
3da0: 6f 72 72 75 70 74 2e 74 65 73 74 20 66 69 6c 65  orrupt.test file
3db0: 66 6d 74 2e 74 65 73 74 20 70 61 67 65 72 32 2e  fmt.test pager2.
3dc0: 74 65 73 74 0a 20 20 63 6f 72 72 75 70 74 35 2e  test.  corrupt5.
3dd0: 74 65 73 74 20 63 6f 72 72 75 70 74 41 2e 74 65  test corruptA.te
3de0: 73 74 20 70 61 67 65 72 6f 70 74 2e 74 65 73 74  st pageropt.test
3df0: 0a 0a 20 20 23 20 45 78 63 6c 75 64 65 20 73 74  ..  # Exclude st
3e00: 6d 74 2e 74 65 73 74 2c 20 77 68 69 63 68 20 65  mt.test, which e
3e10: 78 70 65 63 74 73 20 73 75 62 2d 6a 6f 75 72 6e  xpects sub-journ
3e20: 61 6c 73 20 74 6f 20 75 73 65 20 74 65 6d 70 6f  als to use tempo
3e30: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 73 74  rary files..  st
3e40: 6d 74 2e 74 65 73 74 0a 0a 20 20 23 20 57 41 4c  mt.test..  # WAL
3e50: 20 6d 6f 64 65 20 69 73 20 64 69 66 66 65 72 65   mode is differe
3e60: 6e 74 2e 0a 20 20 77 61 6c 2a 20 74 6b 74 2d 32  nt..  wal* tkt-2
3e70: 64 31 61 35 63 36 37 64 2e 74 65 73 74 0a 7d 5d  d1a5c67d.test.}]
3e80: 0a 0a 69 66 63 61 70 61 62 6c 65 20 6d 65 6d 33  ..ifcapable mem3
3e90: 20 7b 0a 20 20 74 65 73 74 5f 73 75 69 74 65 20   {.  test_suite 
3ea0: 22 6d 65 6d 73 79 73 33 22 20 2d 64 65 73 63 72  "memsys3" -descr
3eb0: 69 70 74 69 6f 6e 20 7b 0a 20 20 20 20 52 75 6e  iption {.    Run
3ec0: 20 74 65 73 74 73 20 75 73 69 6e 67 20 74 68 65   tests using the
3ed0: 20 61 6c 6c 6f 63 61 74 6f 72 20 69 6e 20 6d 65   allocator in me
3ee0: 6d 33 2e 63 2e 0a 20 20 7d 20 2d 66 69 6c 65 73  m3.c..  } -files
3ef0: 20 5b 74 65 73 74 5f 73 65 74 20 24 3a 3a 61 6c   [test_set $::al
3f00: 6c 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78 63  lquicktests -exc
3f10: 6c 75 64 65 20 7b 0a 20 20 20 20 61 75 74 6f 76  lude {.    autov
3f20: 61 63 75 75 6d 2e 74 65 73 74 20 20 20 20 20 20  acuum.test      
3f30: 20 20 20 20 20 64 65 6c 65 74 65 33 2e 74 65 73       delete3.tes
3f40: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d  t              m
3f50: 61 6e 79 64 62 2e 74 65 73 74 0a 20 20 20 20 62  anydb.test.    b
3f60: 69 67 72 6f 77 2e 74 65 73 74 20 20 20 20 20 20  igrow.test      
3f70: 20 20 20 20 20 20 20 20 20 69 6e 63 72 62 6c 6f           incrblo
3f80: 62 32 2e 74 65 73 74 20 20 20 20 20 20 20 20 20  b2.test         
3f90: 20 20 20 6d 65 6d 64 62 2e 74 65 73 74 0a 20 20     memdb.test.  
3fa0: 20 20 62 69 74 76 65 63 2e 74 65 73 74 20 20 20    bitvec.test   
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
3fc0: 78 32 2e 74 65 73 74 20 20 20 20 20 20 20 20 20  x2.test         
3fd0: 20 20 20 20 20 20 6d 65 6d 73 75 62 73 79 73 31        memsubsys1
3fe0: 2e 74 65 73 74 0a 20 20 20 20 63 61 70 69 33 63  .test.    capi3c
3ff0: 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20  .test           
4000: 20 20 20 20 69 6f 65 72 72 2e 74 65 73 74 20 20      ioerr.test  
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
4020: 6d 73 75 62 73 79 73 32 2e 74 65 73 74 0a 20 20  msubsys2.test.  
4030: 20 20 63 61 70 69 33 2e 74 65 73 74 20 20 20 20    capi3.test    
4040: 20 20 20 20 20 20 20 20 20 20 20 20 6a 6f 69 6e              join
4050: 33 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20  3.test          
4060: 20 20 20 20 20 20 70 61 67 65 73 69 7a 65 2e 74        pagesize.t
4070: 65 73 74 0a 20 20 20 20 63 6f 6c 6c 61 74 65 35  est.    collate5
4080: 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20  .test           
4090: 20 20 6c 69 6d 69 74 2e 74 65 73 74 20 20 20 20    limit.test    
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 61 63 6b              back
40b0: 75 70 5f 69 6f 65 72 72 2e 74 65 73 74 0a 20 20  up_ioerr.test.  
40c0: 20 20 62 61 63 6b 75 70 5f 6d 61 6c 6c 6f 63 2e    backup_malloc.
40d0: 74 65 73 74 0a 20 20 7d 5d 20 2d 69 6e 69 74 69  test.  }] -initi
40e0: 61 6c 69 7a 65 20 7b 0a 20 20 20 20 63 61 74 63  alize {.    catc
40f0: 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20  h {db close}.   
4100: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 61   sqlite3_reset_a
4110: 75 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 0a 20 20  uto_extension.  
4120: 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f    sqlite3_shutdo
4130: 77 6e 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  wn.    sqlite3_c
4140: 6f 6e 66 69 67 5f 68 65 61 70 20 32 35 30 30 30  onfig_heap 25000
4150: 30 30 30 20 30 0a 20 20 20 20 73 71 6c 69 74 65  000 0.    sqlite
4160: 33 5f 63 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69  3_config_lookasi
4170: 64 65 20 30 20 30 0a 20 20 20 20 69 66 63 61 70  de 0 0.    ifcap
4180: 61 62 6c 65 20 6d 65 6d 35 20 7b 0a 20 20 20 20  able mem5 {.    
4190: 20 20 23 20 49 66 20 62 6f 74 68 20 6d 65 6d 73    # If both mems
41a0: 79 73 33 20 61 6e 64 20 6d 65 6d 73 79 73 35 20  ys3 and memsys5 
41b0: 61 72 65 20 65 6e 61 62 6c 65 64 20 69 6e 20 74  are enabled in t
41c0: 68 65 20 62 75 69 6c 64 2c 20 74 68 65 20 63 61  he build, the ca
41d0: 6c 6c 20 74 6f 0a 20 20 20 20 20 20 23 20 5b 73  ll to.      # [s
41e0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 68 65  qlite3_config_he
41f0: 61 70 5d 20 77 69 6c 6c 20 69 6e 69 74 69 61 6c  ap] will initial
4200: 69 7a 65 20 74 68 65 20 73 79 73 74 65 6d 20 74  ize the system t
4210: 6f 20 75 73 65 20 6d 65 6d 73 79 73 35 2e 0a 20  o use memsys5.. 
4220: 20 20 20 20 20 23 20 54 68 65 20 66 6f 6c 6c 6f       # The follo
4230: 77 69 6e 67 20 6f 76 65 72 72 69 64 65 73 20 74  wing overrides t
4240: 68 69 73 20 70 72 65 66 65 72 65 6e 63 65 20 61  his preference a
4250: 6e 64 20 69 6e 73 74 61 6c 6c 73 20 74 68 65 20  nd installs the 
4260: 6d 65 6d 73 79 73 33 0a 20 20 20 20 20 20 23 20  memsys3.      # 
4270: 61 6c 6c 6f 63 61 74 6f 72 2e 0a 20 20 20 20 20  allocator..     
4280: 20 73 71 6c 69 74 65 33 5f 69 6e 73 74 61 6c 6c   sqlite3_install
4290: 5f 6d 65 6d 73 79 73 33 0a 20 20 20 20 7d 0a 20  _memsys3.    }. 
42a0: 20 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c 6f     install_mallo
42b0: 63 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20 20  c_faultsim 1 .  
42c0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61    sqlite3_initia
42d0: 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e 73  lize.    autoins
42e0: 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69  tall_test_functi
42f0: 6f 6e 73 0a 20 20 7d 20 2d 73 68 75 74 64 6f 77  ons.  } -shutdow
4300: 6e 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64  n {.    catch {d
4310: 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c  b close}.    sql
4320: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20  ite3_shutdown.  
4330: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67    sqlite3_config
4340: 5f 68 65 61 70 20 30 20 30 0a 20 20 20 20 73 71  _heap 0 0.    sq
4350: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 6f  lite3_config_loo
4360: 6b 61 73 69 64 65 20 31 30 30 20 35 30 30 0a 20  kaside 100 500. 
4370: 20 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c 6f     install_mallo
4380: 63 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20 20  c_faultsim 1 .  
4390: 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61    sqlite3_initia
43a0: 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e 73  lize.    autoins
43b0: 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74 69  tall_test_functi
43c0: 6f 6e 73 0a 20 20 7d 0a 7d 0a 0a 69 66 63 61 70  ons.  }.}..ifcap
43d0: 61 62 6c 65 20 6d 65 6d 35 20 7b 0a 20 20 74 65  able mem5 {.  te
43e0: 73 74 5f 73 75 69 74 65 20 22 6d 65 6d 73 79 73  st_suite "memsys
43f0: 35 22 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20  5" -description 
4400: 7b 0a 20 20 20 20 52 75 6e 20 74 65 73 74 73 20  {.    Run tests 
4410: 75 73 69 6e 67 20 74 68 65 20 61 6c 6c 6f 63 61  using the alloca
4420: 74 6f 72 20 69 6e 20 6d 65 6d 35 2e 63 2e 0a 20  tor in mem5.c.. 
4430: 20 7d 20 2d 66 69 6c 65 73 20 5b 74 65 73 74 5f   } -files [test_
4440: 73 65 74 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74  set $::allquickt
4450: 65 73 74 73 20 2d 65 78 63 6c 75 64 65 20 7b 0a  ests -exclude {.
4460: 20 20 20 20 61 75 74 6f 76 61 63 75 75 6d 2e 74      autovacuum.t
4470: 65 73 74 20 20 20 20 20 20 20 20 20 20 20 64 65  est           de
4480: 6c 65 74 65 33 2e 74 65 73 74 20 20 20 20 20 20  lete3.test      
4490: 20 20 20 20 20 20 20 20 6d 61 6e 79 64 62 2e 74          manydb.t
44a0: 65 73 74 0a 20 20 20 20 62 69 67 72 6f 77 2e 74  est.    bigrow.t
44b0: 65 73 74 20 20 20 20 20 20 20 20 20 20 20 20 20  est             
44c0: 20 20 69 6e 63 72 62 6c 6f 62 32 2e 74 65 73 74    incrblob2.test
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 64              memd
44e0: 62 2e 74 65 73 74 0a 20 20 20 20 62 69 74 76 65  b.test.    bitve
44f0: 63 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20  c.test          
4500: 20 20 20 20 20 69 6e 64 65 78 32 2e 74 65 73 74       index2.test
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
4520: 65 6d 73 75 62 73 79 73 31 2e 74 65 73 74 0a 20  emsubsys1.test. 
4530: 20 20 20 63 61 70 69 33 63 2e 74 65 73 74 20 20     capi3c.test  
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6f 65               ioe
4550: 72 72 2e 74 65 73 74 20 20 20 20 20 20 20 20 20  rr.test         
4560: 20 20 20 20 20 20 20 6d 65 6d 73 75 62 73 79 73         memsubsys
4570: 32 2e 74 65 73 74 0a 20 20 20 20 63 61 70 69 33  2.test.    capi3
4580: 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20  .test           
4590: 20 20 20 20 20 6a 6f 69 6e 33 2e 74 65 73 74 20       join3.test 
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
45b0: 61 67 65 73 69 7a 65 2e 74 65 73 74 0a 20 20 20  agesize.test.   
45c0: 20 63 6f 6c 6c 61 74 65 35 2e 74 65 73 74 20 20   collate5.test  
45d0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 6d 69 74             limit
45e0: 2e 74 65 73 74 20 20 20 20 20 20 20 20 20 20 20  .test           
45f0: 20 20 20 20 20 7a 65 72 6f 62 6c 6f 62 2e 74 65       zeroblob.te
4600: 73 74 0a 20 20 7d 5d 20 2d 69 6e 69 74 69 61 6c  st.  }] -initial
4610: 69 7a 65 20 7b 0a 20 20 20 20 63 61 74 63 68 20  ize {.    catch 
4620: 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73  {db close}.    s
4630: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a  qlite3_shutdown.
4640: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66      sqlite3_conf
4650: 69 67 5f 68 65 61 70 20 32 35 30 30 30 30 30 30  ig_heap 25000000
4660: 20 36 34 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   64.    sqlite3_
4670: 63 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65  config_lookaside
4680: 20 30 20 30 0a 20 20 20 20 69 6e 73 74 61 6c 6c   0 0.    install
4690: 5f 6d 61 6c 6c 6f 63 5f 66 61 75 6c 74 73 69 6d  _malloc_faultsim
46a0: 20 31 20 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   1 .    sqlite3_
46b0: 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 61  initialize.    a
46c0: 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f  utoinstall_test_
46d0: 66 75 6e 63 74 69 6f 6e 73 0a 20 20 7d 20 2d 73  functions.  } -s
46e0: 68 75 74 64 6f 77 6e 20 7b 0a 20 20 20 20 63 61  hutdown {.    ca
46f0: 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20  tch {db close}. 
4700: 20 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64     sqlite3_shutd
4710: 6f 77 6e 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  own.    sqlite3_
4720: 63 6f 6e 66 69 67 5f 68 65 61 70 20 30 20 30 0a  config_heap 0 0.
4730: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66      sqlite3_conf
4740: 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 31 30 30  ig_lookaside 100
4750: 20 35 30 30 0a 20 20 20 20 69 6e 73 74 61 6c 6c   500.    install
4760: 5f 6d 61 6c 6c 6f 63 5f 66 61 75 6c 74 73 69 6d  _malloc_faultsim
4770: 20 31 20 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   1 .    sqlite3_
4780: 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 61  initialize.    a
4790: 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f  utoinstall_test_
47a0: 66 75 6e 63 74 69 6f 6e 73 0a 20 20 7d 0a 0a 20  functions.  }.. 
47b0: 20 74 65 73 74 5f 73 75 69 74 65 20 22 6d 65 6d   test_suite "mem
47c0: 73 79 73 35 2d 32 22 20 2d 64 65 73 63 72 69 70  sys5-2" -descrip
47d0: 74 69 6f 6e 20 7b 0a 20 20 20 20 52 75 6e 20 74  tion {.    Run t
47e0: 65 73 74 73 20 75 73 69 6e 67 20 74 68 65 20 61  ests using the a
47f0: 6c 6c 6f 63 61 74 6f 72 20 69 6e 20 6d 65 6d 35  llocator in mem5
4800: 2e 63 20 69 6e 20 61 20 64 69 66 66 65 72 65 6e  .c in a differen
4810: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  t configuration.
4820: 0a 20 20 7d 20 2d 66 69 6c 65 73 20 7b 0a 20 20  .  } -files {.  
4830: 20 20 73 65 6c 65 63 74 31 2e 74 65 73 74 20 0a    select1.test .
4840: 20 20 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20    } -initialize 
4850: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20  {.    catch {db 
4860: 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74  close}.    sqlit
4870: 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20 20 20 20  e3_shutdown.    
4880: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6d  sqlite3_config_m
4890: 65 6d 73 74 61 74 75 73 20 30 0a 20 20 20 20 73  emstatus 0.    s
48a0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 68 65  qlite3_config_he
48b0: 61 70 20 34 30 30 30 30 30 30 30 20 31 36 0a 20  ap 40000000 16. 
48c0: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
48d0: 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 30 20 30 0a  g_lookaside 0 0.
48e0: 20 20 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c      install_mall
48f0: 6f 63 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20  oc_faultsim 1 . 
4900: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
4910: 61 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e  alize.    autoin
4920: 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74  stall_test_funct
4930: 69 6f 6e 73 0a 20 20 7d 20 2d 73 68 75 74 64 6f  ions.  } -shutdo
4940: 77 6e 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  wn {.    catch {
4950: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
4960: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
4970: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
4980: 67 5f 68 65 61 70 20 30 20 30 0a 20 20 20 20 73  g_heap 0 0.    s
4990: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
49a0: 6f 6b 61 73 69 64 65 20 31 30 30 20 35 30 30 0a  okaside 100 500.
49b0: 20 20 20 20 69 6e 73 74 61 6c 6c 5f 6d 61 6c 6c      install_mall
49c0: 6f 63 5f 66 61 75 6c 74 73 69 6d 20 31 20 0a 20  oc_faultsim 1 . 
49d0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
49e0: 61 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e  alize.    autoin
49f0: 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74  stall_test_funct
4a00: 69 6f 6e 73 0a 20 20 7d 0a 7d 0a 0a 69 66 63 61  ions.  }.}..ifca
4a10: 70 61 62 6c 65 20 74 68 72 65 61 64 73 61 66 65  pable threadsafe
4a20: 20 7b 0a 20 20 74 65 73 74 5f 73 75 69 74 65 20   {.  test_suite 
4a30: 22 6e 6f 5f 6d 75 74 65 78 5f 74 72 79 22 20 2d  "no_mutex_try" -
4a40: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20  description {.  
4a50: 20 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 6d     The sqlite3_m
4a60: 75 74 65 78 5f 74 72 79 28 29 20 69 6e 74 65 72  utex_try() inter
4a70: 66 61 63 65 20 61 6c 77 61 79 73 20 66 61 69 6c  face always fail
4a80: 73 0a 20 20 7d 20 2d 66 69 6c 65 73 20 5b 0a 20  s.  } -files [. 
4a90: 20 20 20 74 65 73 74 5f 73 65 74 20 24 3a 3a 61     test_set $::a
4aa0: 6c 6c 71 75 69 63 6b 74 65 73 74 73 20 2d 65 78  llquicktests -ex
4ab0: 63 6c 75 64 65 20 6d 75 74 65 78 31 2e 74 65 73  clude mutex1.tes
4ac0: 74 20 6d 75 74 65 78 32 2e 74 65 73 74 0a 20 20  t mutex2.test.  
4ad0: 5d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 7b 0a  ] -initialize {.
4ae0: 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c      catch {db cl
4af0: 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65 33  ose}.    sqlite3
4b00: 5f 73 68 75 74 64 6f 77 6e 0a 20 20 20 20 69 6e  _shutdown.    in
4b10: 73 74 61 6c 6c 5f 6d 75 74 65 78 5f 63 6f 75 6e  stall_mutex_coun
4b20: 74 65 72 73 20 31 0a 20 20 20 20 73 65 74 20 3a  ters 1.    set :
4b30: 3a 64 69 73 61 62 6c 65 5f 6d 75 74 65 78 5f 74  :disable_mutex_t
4b40: 72 79 20 31 0a 20 20 20 20 73 71 6c 69 74 65 33  ry 1.    sqlite3
4b50: 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20 20 20  _initialize.    
4b60: 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74  autoinstall_test
4b70: 5f 66 75 6e 63 74 69 6f 6e 73 0a 20 20 7d 20 2d  _functions.  } -
4b80: 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20 20 20 63  shutdown {.    c
4b90: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
4ba0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74      sqlite3_shut
4bb0: 64 6f 77 6e 0a 20 20 20 20 69 6e 73 74 61 6c 6c  down.    install
4bc0: 5f 6d 75 74 65 78 5f 63 6f 75 6e 74 65 72 73 20  _mutex_counters 
4bd0: 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  0.    sqlite3_in
4be0: 69 74 69 61 6c 69 7a 65 0a 20 20 20 20 61 75 74  itialize.    aut
4bf0: 6f 69 6e 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75  oinstall_test_fu
4c00: 6e 63 74 69 6f 6e 73 0a 20 20 7d 0a 7d 0a 0a 23  nctions.  }.}..#
4c10: 20 72 75 6e 5f 74 65 73 74 73 20 22 63 72 61 73   run_tests "cras
4c20: 68 5f 73 61 66 65 5f 61 70 70 65 6e 64 22 20 2d  h_safe_append" -
4c30: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 23 20  description {.# 
4c40: 20 20 52 75 6e 20 63 72 61 73 68 2e 74 65 73 74    Run crash.test
4c50: 20 77 69 74 68 20 70 65 72 73 69 73 74 65 6e 74   with persistent
4c60: 20 6a 6f 75 72 6e 61 6c 73 20 6f 6e 20 61 20 53   journals on a S
4c70: 41 46 45 5f 41 50 50 45 4e 44 20 66 69 6c 65 2d  AFE_APPEND file-
4c80: 73 79 73 74 65 6d 2e 0a 23 20 7d 20 2d 69 6e 69  system..# } -ini
4c90: 74 69 61 6c 69 7a 65 20 7b 0a 23 20 20 20 72 65  tialize {.#   re
4ca0: 6e 61 6d 65 20 63 72 61 73 68 73 71 6c 20 73 61  name crashsql sa
4cb0: 5f 63 72 61 73 68 73 71 6c 0a 23 20 20 20 70 72  _crashsql.#   pr
4cc0: 6f 63 20 63 72 61 73 68 73 71 6c 20 7b 61 72 67  oc crashsql {arg
4cd0: 73 7d 20 7b 0a 23 20 20 20 20 20 73 65 74 20 6f  s} {.#     set o
4ce0: 70 74 69 6f 6e 73 20 5b 6c 72 61 6e 67 65 20 24  ptions [lrange $
4cf0: 61 72 67 73 20 30 20 5b 65 78 70 72 20 7b 5b 6c  args 0 [expr {[l
4d00: 6c 65 6e 67 74 68 20 24 61 72 67 73 5d 2d 32 7d  length $args]-2}
4d10: 5d 5d 0a 23 20 20 20 20 20 6c 61 70 70 65 6e 64  ]].#     lappend
4d20: 20 6f 70 74 69 6f 6e 73 20 2d 63 68 61 72 20 73   options -char s
4d30: 61 66 65 5f 61 70 70 65 6e 64 0a 23 20 20 20 20  afe_append.#    
4d40: 20 73 65 74 20 73 71 6c 20 5b 6c 69 6e 64 65 78   set sql [lindex
4d50: 20 24 61 72 67 73 20 65 6e 64 5d 0a 23 20 20 20   $args end].#   
4d60: 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 69 6f 6e    lappend option
4d70: 73 20 22 0a 23 20 20 20 20 20 20 20 50 52 41 47  s ".#       PRAG
4d80: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  MA journal_mode=
4d90: 70 65 72 73 69 73 74 65 6e 74 3b 0a 23 20 20 20  persistent;.#   
4da0: 20 20 20 20 24 73 71 6c 0a 23 20 20 20 20 20 22      $sql.#     "
4db0: 0a 23 20 20 20 20 20 73 65 74 20 66 64 20 5b 6f  .#     set fd [o
4dc0: 70 65 6e 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  pen test.db-jour
4dd0: 6e 61 6c 20 77 5d 0a 23 20 20 20 20 20 70 75 74  nal w].#     put
4de0: 73 20 24 66 64 20 5b 73 74 72 69 6e 67 20 72 65  s $fd [string re
4df0: 70 65 61 74 20 31 32 33 34 35 36 37 38 39 30 20  peat 1234567890 
4e00: 31 30 30 30 30 30 5d 0a 23 20 20 20 20 20 63 6c  100000].#     cl
4e10: 6f 73 65 20 24 66 64 0a 23 20 20 20 20 20 65 76  ose $fd.#     ev
4e20: 61 6c 20 73 61 5f 63 72 61 73 68 73 71 6c 20 24  al sa_crashsql $
4e30: 6f 70 74 69 6f 6e 73 0a 23 20 20 20 7d 0a 23 20  options.#   }.# 
4e40: 7d 20 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 23 20  } -shutdown {.# 
4e50: 20 20 72 65 6e 61 6d 65 20 63 72 61 73 68 73 71    rename crashsq
4e60: 6c 20 7b 7d 0a 23 20 20 20 72 65 6e 61 6d 65 20  l {}.#   rename 
4e70: 73 61 5f 63 72 61 73 68 73 71 6c 20 63 72 61 73  sa_crashsql cras
4e80: 68 73 71 6c 0a 23 20 7d 20 2d 66 69 6c 65 73 20  hsql.# } -files 
4e90: 63 72 61 73 68 2e 74 65 73 74 0a 0a 74 65 73 74  crash.test..test
4ea0: 5f 73 75 69 74 65 20 22 73 61 66 65 5f 61 70 70  _suite "safe_app
4eb0: 65 6e 64 22 20 2d 64 65 73 63 72 69 70 74 69 6f  end" -descriptio
4ec0: 6e 20 7b 0a 20 20 52 75 6e 20 73 6f 6d 65 20 74  n {.  Run some t
4ed0: 65 73 74 73 20 6f 6e 20 61 20 53 41 46 45 5f 41  ests on a SAFE_A
4ee0: 50 50 45 4e 44 20 66 69 6c 65 2d 73 79 73 74 65  PPEND file-syste
4ef0: 6d 2e 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65  m..} -initialize
4f00: 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73 71 6c 69   {.  rename sqli
4f10: 74 65 33 20 73 71 6c 69 74 65 33 5f 73 61 66 65  te3 sqlite3_safe
4f20: 61 70 70 65 6e 64 0a 20 20 70 72 6f 63 20 73 71  append.  proc sq
4f30: 6c 69 74 65 33 20 7b 61 72 67 73 7d 20 7b 0a 20  lite3 {args} {. 
4f40: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 72     if {[string r
4f50: 61 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 61 72  ange [lindex $ar
4f60: 67 73 20 30 5d 20 30 20 30 5d 20 6e 65 20 22 2d  gs 0] 0 0] ne "-
4f70: 22 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  "} {.      lappe
4f80: 6e 64 20 61 72 67 73 20 2d 76 66 73 20 64 65 76  nd args -vfs dev
4f90: 73 79 6d 0a 20 20 20 20 7d 0a 20 20 20 20 75 70  sym.    }.    up
4fa0: 6c 65 76 65 6c 20 5b 63 6f 6e 63 61 74 20 73 71  level [concat sq
4fb0: 6c 69 74 65 33 5f 73 61 66 65 61 70 70 65 6e 64  lite3_safeappend
4fc0: 20 24 61 72 67 73 5d 0a 20 20 7d 0a 20 20 73 71   $args].  }.  sq
4fd0: 6c 69 74 65 33 5f 73 69 6d 75 6c 61 74 65 5f 64  lite3_simulate_d
4fe0: 65 76 69 63 65 20 2d 63 68 61 72 20 73 61 66 65  evice -char safe
4ff0: 5f 61 70 70 65 6e 64 0a 7d 20 2d 73 68 75 74 64  _append.} -shutd
5000: 6f 77 6e 20 7b 0a 20 20 72 65 6e 61 6d 65 20 73  own {.  rename s
5010: 71 6c 69 74 65 33 20 7b 7d 0a 20 20 72 65 6e 61  qlite3 {}.  rena
5020: 6d 65 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64  me sqlite3_shutd
5030: 6f 77 6e 20 73 71 6c 69 74 65 33 0a 7d 20 2d 66  own sqlite3.} -f
5040: 69 6c 65 73 20 5b 0a 20 20 74 65 73 74 5f 73 65  iles [.  test_se
5050: 74 20 24 3a 3a 61 6c 6c 71 75 69 63 6b 74 65 73  t $::allquicktes
5060: 74 73 20 73 68 61 72 65 64 5f 65 72 72 2e 74 65  ts shared_err.te
5070: 73 74 20 2d 65 78 63 6c 75 64 65 20 61 73 79 6e  st -exclude asyn
5080: 63 33 2e 74 65 73 74 0a 5d 0a 0a 23 20 54 68 65  c3.test.]..# The
5090: 20 73 65 74 20 6f 66 20 74 65 73 74 73 20 74 6f   set of tests to
50a0: 20 72 75 6e 20 6f 6e 20 74 68 65 20 61 6c 74 65   run on the alte
50b0: 72 6e 61 74 69 76 65 2d 70 63 61 63 68 65 0a 73  rnative-pcache.s
50c0: 65 74 20 70 65 72 6d 2d 61 6c 74 2d 70 63 61 63  et perm-alt-pcac
50d0: 68 65 2d 74 65 73 74 73 65 74 20 7b 0a 20 20 61  he-testset {.  a
50e0: 73 79 6e 63 2e 74 65 73 74 0a 20 20 61 74 74 61  sync.test.  atta
50f0: 63 68 2e 74 65 73 74 0a 20 20 64 65 6c 65 74 65  ch.test.  delete
5100: 2e 74 65 73 74 20 64 65 6c 65 74 65 32 2e 74 65  .test delete2.te
5110: 73 74 0a 20 20 69 6e 64 65 78 2e 74 65 73 74 0a  st.  index.test.
5120: 20 20 69 6e 73 65 72 74 2e 74 65 73 74 20 69 6e    insert.test in
5130: 73 65 72 74 32 2e 74 65 73 74 0a 20 20 6a 6f 69  sert2.test.  joi
5140: 6e 2e 74 65 73 74 20 6a 6f 69 6e 32 2e 74 65 73  n.test join2.tes
5150: 74 0a 20 20 72 6f 6c 6c 62 61 63 6b 2e 74 65 73  t.  rollback.tes
5160: 74 0a 20 20 73 65 6c 65 63 74 31 2e 74 65 73 74  t.  select1.test
5170: 20 73 65 6c 65 63 74 32 2e 74 65 73 74 0a 20 20   select2.test.  
5180: 74 72 61 6e 73 2e 74 65 73 74 0a 20 20 75 70 64  trans.test.  upd
5190: 61 74 65 2e 74 65 73 74 0a 7d 0a 0a 66 6f 72 65  ate.test.}..fore
51a0: 61 63 68 20 64 69 73 63 61 72 64 5f 72 61 74 65  ach discard_rate
51b0: 20 7b 30 20 31 30 20 35 30 20 39 30 20 31 30 30   {0 10 50 90 100
51c0: 7d 20 7b 0a 20 20 74 65 73 74 5f 73 75 69 74 65  } {.  test_suite
51d0: 20 22 70 63 61 63 68 65 24 7b 64 69 73 63 61 72   "pcache${discar
51e0: 64 5f 72 61 74 65 7d 22 20 2d 64 65 73 63 72 69  d_rate}" -descri
51f0: 70 74 69 6f 6e 20 22 0a 20 20 20 20 41 6c 74 65  ption ".    Alte
5200: 72 6e 61 74 69 76 65 20 70 63 61 63 68 65 20 69  rnative pcache i
5210: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 69  mplementation wi
5220: 74 68 20 24 7b 64 69 73 63 61 72 64 5f 72 61 74  th ${discard_rat
5230: 65 7d 25 20 72 61 6e 64 6f 6d 20 64 69 73 63 61  e}% random disca
5240: 72 64 0a 20 20 22 20 2d 69 6e 69 74 69 61 6c 69  rd.  " -initiali
5250: 7a 65 20 22 0a 20 20 20 20 63 61 74 63 68 20 7b  ze ".    catch {
5260: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
5270: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
5280: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
5290: 67 5f 61 6c 74 5f 70 63 61 63 68 65 20 31 20 24  g_alt_pcache 1 $
52a0: 64 69 73 63 61 72 64 5f 72 61 74 65 20 31 0a 20  discard_rate 1. 
52b0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69     sqlite3_initi
52c0: 61 6c 69 7a 65 0a 20 20 20 20 61 75 74 6f 69 6e  alize.    autoin
52d0: 73 74 61 6c 6c 5f 74 65 73 74 5f 66 75 6e 63 74  stall_test_funct
52e0: 69 6f 6e 73 0a 20 20 22 20 2d 73 68 75 74 64 6f  ions.  " -shutdo
52f0: 77 6e 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  wn {.    catch {
5300: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
5310: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 20  lite3_shutdown. 
5320: 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69     sqlite3_confi
5330: 67 5f 61 6c 74 5f 70 63 61 63 68 65 20 30 20 30  g_alt_pcache 0 0
5340: 20 30 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63   0.    sqlite3_c
5350: 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20  onfig_lookaside 
5360: 31 30 30 20 35 30 30 0a 20 20 20 20 69 6e 73 74  100 500.    inst
5370: 61 6c 6c 5f 6d 61 6c 6c 6f 63 5f 66 61 75 6c 74  all_malloc_fault
5380: 73 69 6d 20 31 20 0a 20 20 20 20 73 71 6c 69 74  sim 1 .    sqlit
5390: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 20 20  e3_initialize.  
53a0: 20 20 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74 65    autoinstall_te
53b0: 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 20 20 7d  st_functions.  }
53c0: 20 2d 66 69 6c 65 73 20 24 7b 70 65 72 6d 2d 61   -files ${perm-a
53d0: 6c 74 2d 70 63 61 63 68 65 2d 74 65 73 74 73 65  lt-pcache-testse
53e0: 74 7d 0a 7d 0a 0a 74 65 73 74 5f 73 75 69 74 65  t}.}..test_suite
53f0: 20 22 6a 6f 75 72 6e 61 6c 74 65 73 74 22 20 2d   "journaltest" -
5400: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20  description {.  
5410: 43 68 65 63 6b 20 74 68 61 74 20 70 61 67 65 73  Check that pages
5420: 20 61 72 65 20 73 79 6e 63 65 64 20 62 65 66 6f   are synced befo
5430: 72 65 20 62 65 69 6e 67 20 77 72 69 74 74 65 6e  re being written
5440: 20 28 74 65 73 74 5f 6a 6f 75 72 6e 61 6c 2e 63   (test_journal.c
5450: 29 2e 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65  )..} -initialize
5460: 20 7b 0a 20 20 63 61 74 63 68 20 7b 64 62 20 63   {.  catch {db c
5470: 6c 6f 73 65 7d 0a 20 20 72 65 67 69 73 74 65 72  lose}.  register
5480: 5f 6a 74 5f 76 66 73 20 2d 64 65 66 61 75 6c 74  _jt_vfs -default
5490: 20 22 22 0a 7d 20 2d 73 68 75 74 64 6f 77 6e 20   "".} -shutdown 
54a0: 7b 0a 20 20 75 6e 72 65 67 69 73 74 65 72 5f 6a  {.  unregister_j
54b0: 74 5f 76 66 73 0a 7d 20 2d 66 69 6c 65 73 20 5b  t_vfs.} -files [
54c0: 74 65 73 74 5f 73 65 74 20 24 3a 3a 61 6c 6c 71  test_set $::allq
54d0: 75 69 63 6b 74 65 73 74 73 20 2d 65 78 63 6c 75  uicktests -exclu
54e0: 64 65 20 7b 0a 20 20 77 61 6c 2a 20 69 6e 63 72  de {.  wal* incr
54f0: 76 61 63 75 75 6d 2e 74 65 73 74 20 69 6f 65 72  vacuum.test ioer
5500: 72 2e 74 65 73 74 20 63 6f 72 72 75 70 74 34 2e  r.test corrupt4.
5510: 74 65 73 74 20 69 6f 2e 74 65 73 74 20 63 72 61  test io.test cra
5520: 73 68 38 2e 74 65 73 74 20 0a 20 20 61 73 79 6e  sh8.test .  asyn
5530: 63 34 2e 74 65 73 74 20 62 69 67 66 69 6c 65 2e  c4.test bigfile.
5540: 74 65 73 74 0a 7d 5d 0a 0a 69 66 20 7b 5b 69 6e  test.}]..if {[in
5550: 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 72 65 67 69  fo commands regi
5560: 73 74 65 72 5f 64 65 6d 6f 76 66 73 5d 20 21 3d  ster_demovfs] !=
5570: 20 22 22 7d 20 7b 0a 20 20 74 65 73 74 5f 73 75   ""} {.  test_su
5580: 69 74 65 20 22 64 65 6d 6f 76 66 73 22 20 2d 64  ite "demovfs" -d
5590: 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 20  escription {.   
55a0: 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20   Check that the 
55b0: 64 65 6d 6f 76 66 73 20 28 63 6f 64 65 20 69 6e  demovfs (code in
55c0: 20 74 65 73 74 5f 64 65 6d 6f 76 66 73 2e 63 29   test_demovfs.c)
55d0: 20 6d 6f 72 65 20 6f 72 20 6c 65 73 73 20 77 6f   more or less wo
55e0: 72 6b 73 2e 0a 20 20 7d 20 2d 69 6e 69 74 69 61  rks..  } -initia
55f0: 6c 69 7a 65 20 7b 0a 20 20 20 20 72 65 67 69 73  lize {.    regis
5600: 74 65 72 5f 64 65 6d 6f 76 66 73 0a 20 20 7d 20  ter_demovfs.  } 
5610: 2d 73 68 75 74 64 6f 77 6e 20 7b 0a 20 20 20 20  -shutdown {.    
5620: 75 6e 72 65 67 69 73 74 65 72 5f 64 65 6d 6f 76  unregister_demov
5630: 66 73 0a 20 20 7d 20 2d 66 69 6c 65 73 20 7b 0a  fs.  } -files {.
5640: 20 20 20 20 69 6e 73 65 72 74 2e 74 65 73 74 20      insert.test 
5650: 20 20 69 6e 73 65 72 74 32 2e 74 65 73 74 20 20    insert2.test  
5660: 69 6e 73 65 72 74 33 2e 74 65 73 74 20 72 6f 6c  insert3.test rol
5670: 6c 62 61 63 6b 2e 74 65 73 74 20 0a 20 20 20 20  lback.test .    
5680: 73 65 6c 65 63 74 31 2e 74 65 73 74 20 20 73 65  select1.test  se
5690: 6c 65 63 74 32 2e 74 65 73 74 20 20 73 65 6c 65  lect2.test  sele
56a0: 63 74 33 2e 74 65 73 74 0a 20 20 7d 0a 7d 0a 0a  ct3.test.  }.}..
56b0: 74 65 73 74 5f 73 75 69 74 65 20 22 77 61 6c 22  test_suite "wal"
56c0: 20 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a   -description {.
56d0: 20 20 52 75 6e 20 74 65 73 74 73 20 77 69 74 68    Run tests with
56e0: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
56f0: 4c 0a 7d 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20  L.} -initialize 
5700: 7b 0a 20 20 73 65 74 20 3a 3a 47 28 73 61 76 65  {.  set ::G(save
5710: 70 6f 69 6e 74 36 5f 69 74 65 72 61 74 69 6f 6e  point6_iteration
5720: 73 29 20 31 30 30 0a 7d 20 2d 73 68 75 74 64 6f  s) 100.} -shutdo
5730: 77 6e 20 7b 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  wn {.  unset -no
5740: 63 6f 6d 70 6c 61 69 6e 20 3a 3a 47 28 73 61 76  complain ::G(sav
5750: 65 70 6f 69 6e 74 36 5f 69 74 65 72 61 74 69 6f  epoint6_iteratio
5760: 6e 73 29 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20  ns).} -files {. 
5770: 20 73 61 76 65 70 6f 69 6e 74 2e 74 65 73 74 20   savepoint.test 
5780: 20 20 20 20 73 61 76 65 70 6f 69 6e 74 32 2e 74      savepoint2.t
5790: 65 73 74 20 20 20 20 20 73 61 76 65 70 6f 69 6e  est     savepoin
57a0: 74 36 2e 74 65 73 74 0a 20 20 74 72 61 6e 73 2e  t6.test.  trans.
57b0: 74 65 73 74 20 20 20 20 20 20 20 20 20 61 76 74  test         avt
57c0: 72 61 6e 73 2e 74 65 73 74 0a 0a 20 20 66 74 73  rans.test..  fts
57d0: 33 61 61 2e 74 65 73 74 20 20 66 74 73 33 61 62  3aa.test  fts3ab
57e0: 2e 74 65 73 74 20 20 66 74 73 33 61 63 2e 74 65  .test  fts3ac.te
57f0: 73 74 20 20 66 74 73 33 61 64 2e 74 65 73 74 0a  st  fts3ad.test.
5800: 20 20 66 74 73 33 61 65 2e 74 65 73 74 20 20 66    fts3ae.test  f
5810: 74 73 33 61 66 2e 74 65 73 74 20 20 66 74 73 33  ts3af.test  fts3
5820: 61 67 2e 74 65 73 74 20 20 66 74 73 33 61 68 2e  ag.test  fts3ah.
5830: 74 65 73 74 0a 20 20 66 74 73 33 61 69 2e 74 65  test.  fts3ai.te
5840: 73 74 20 20 66 74 73 33 61 6a 2e 74 65 73 74 20  st  fts3aj.test 
5850: 20 66 74 73 33 61 6b 2e 74 65 73 74 20 20 66 74   fts3ak.test  ft
5860: 73 33 61 6c 2e 74 65 73 74 0a 20 20 66 74 73 33  s3al.test.  fts3
5870: 61 6d 2e 74 65 73 74 20 20 66 74 73 33 61 6e 2e  am.test  fts3an.
5880: 74 65 73 74 20 20 66 74 73 33 61 6f 2e 74 65 73  test  fts3ao.tes
5890: 74 20 20 66 74 73 33 62 2e 74 65 73 74 0a 20 20  t  fts3b.test.  
58a0: 66 74 73 33 63 2e 74 65 73 74 20 20 20 66 74 73  fts3c.test   fts
58b0: 33 64 2e 74 65 73 74 20 20 20 66 74 73 33 65 2e  3d.test   fts3e.
58c0: 74 65 73 74 20 20 20 66 74 73 33 71 75 65 72 79  test   fts3query
58d0: 2e 74 65 73 74 20 0a 7d 0a 0a 74 65 73 74 5f 73  .test .}..test_s
58e0: 75 69 74 65 20 22 72 74 72 65 65 22 20 2d 64 65  uite "rtree" -de
58f0: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20 20 41 6c  scription {.  Al
5900: 6c 20 52 2d 74 72 65 65 20 72 65 6c 61 74 65 64  l R-tree related
5910: 20 74 65 73 74 73 2e 20 50 72 6f 76 69 64 65 73   tests. Provides
5920: 20 63 6f 76 65 72 61 67 65 20 6f 66 20 73 6f 75   coverage of sou
5930: 72 63 65 20 66 69 6c 65 20 72 74 72 65 65 2e 63  rce file rtree.c
5940: 2e 0a 7d 20 2d 66 69 6c 65 73 20 5b 67 6c 6f 62  ..} -files [glob
5950: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 24 3a 3a   -nocomplain $::
5960: 74 65 73 74 64 69 72 2f 2e 2e 2f 65 78 74 2f 72  testdir/../ext/r
5970: 74 72 65 65 2f 2a 2e 74 65 73 74 5d 0a 0a 74 65  tree/*.test]..te
5980: 73 74 5f 73 75 69 74 65 20 22 6e 6f 5f 6f 70 74  st_suite "no_opt
5990: 69 6d 69 7a 61 74 69 6f 6e 22 20 2d 64 65 73 63  imization" -desc
59a0: 72 69 70 74 69 6f 6e 20 7b 0a 20 20 52 75 6e 20  ription {.  Run 
59b0: 74 65 73 74 20 73 63 72 69 70 74 73 20 77 69 74  test scripts wit
59c0: 68 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  h optimizations 
59d0: 64 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74  disabled using t
59e0: 68 65 0a 20 20 73 71 6c 69 74 65 33 5f 74 65 73  he.  sqlite3_tes
59f0: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
5a00: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
5a10: 5a 41 54 49 4f 4e 53 29 20 69 6e 74 65 72 66 61  ZATIONS) interfa
5a20: 63 65 2e 0a 7d 20 2d 66 69 6c 65 73 20 7b 0a 20  ce..} -files {. 
5a30: 20 77 68 65 72 65 2e 74 65 73 74 20 77 68 65 72   where.test wher
5a40: 65 32 2e 74 65 73 74 20 77 68 65 72 65 33 2e 74  e2.test where3.t
5a50: 65 73 74 20 77 68 65 72 65 34 2e 74 65 73 74 20  est where4.test 
5a60: 77 68 65 72 65 35 2e 74 65 73 74 0a 20 20 77 68  where5.test.  wh
5a70: 65 72 65 36 2e 74 65 73 74 20 77 68 65 72 65 37  ere6.test where7
5a80: 2e 74 65 73 74 20 77 68 65 72 65 38 2e 74 65 73  .test where8.tes
5a90: 74 20 77 68 65 72 65 39 2e 74 65 73 74 0a 20 20  t where9.test.  
5aa0: 77 68 65 72 65 41 2e 74 65 73 74 20 77 68 65 72  whereA.test wher
5ab0: 65 42 2e 74 65 73 74 20 77 68 65 72 65 6c 69 6d  eB.test wherelim
5ac0: 69 74 2e 74 65 73 74 0a 20 20 73 65 6c 65 63 74  it.test.  select
5ad0: 31 2e 74 65 73 74 20 73 65 6c 65 63 74 32 2e 74  1.test select2.t
5ae0: 65 73 74 20 73 65 6c 65 63 74 33 2e 74 65 73 74  est select3.test
5af0: 20 73 65 6c 65 63 74 34 2e 74 65 73 74 20 73 65   select4.test se
5b00: 6c 65 63 74 35 2e 74 65 73 74 0a 20 20 73 65 6c  lect5.test.  sel
5b10: 65 63 74 37 2e 74 65 73 74 20 73 65 6c 65 63 74  ect7.test select
5b20: 38 2e 74 65 73 74 20 73 65 6c 65 63 74 41 2e 74  8.test selectA.t
5b30: 65 73 74 20 73 65 6c 65 63 74 43 2e 74 65 73 74  est selectC.test
5b40: 0a 7d 20 2d 64 62 63 6f 6e 66 69 67 20 7b 0a 20  .} -dbconfig {. 
5b50: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5f 63 6f   optimization_co
5b60: 6e 74 72 6f 6c 20 24 3a 3a 64 62 68 61 6e 64 6c  ntrol $::dbhandl
5b70: 65 20 61 6c 6c 20 30 0a 7d 0a 0a 74 65 73 74 5f  e all 0.}..test_
5b80: 73 75 69 74 65 20 22 70 72 65 70 61 72 65 22 20  suite "prepare" 
5b90: 2d 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 20  -description {. 
5ba0: 20 52 75 6e 20 74 65 73 74 73 20 77 69 74 68 20   Run tests with 
5bb0: 74 68 65 20 64 62 20 63 6f 6e 6e 65 63 74 69 6f  the db connectio
5bc0: 6e 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  n using sqlite3_
5bd0: 70 72 65 70 61 72 65 28 29 20 69 6e 73 74 65 61  prepare() instea
5be0: 64 20 6f 66 20 5f 76 32 28 29 2e 0a 7d 20 2d 64  d of _v2()..} -d
5bf0: 62 63 6f 6e 66 69 67 20 7b 0a 20 20 64 62 5f 75  bconfig {.  db_u
5c00: 73 65 5f 6c 65 67 61 63 79 5f 70 72 65 70 61 72  se_legacy_prepar
5c10: 65 20 24 3a 3a 64 62 68 61 6e 64 6c 65 20 31 0a  e $::dbhandle 1.
5c20: 20 20 23 24 3a 3a 64 62 68 61 6e 64 6c 65 20 63    #$::dbhandle c
5c30: 61 63 68 65 20 73 69 7a 65 20 30 0a 7d 20 2d 66  ache size 0.} -f
5c40: 69 6c 65 73 20 5b 0a 20 20 74 65 73 74 5f 73 65  iles [.  test_se
5c50: 74 20 24 61 6c 6c 71 75 69 63 6b 74 65 73 74 73  t $allquicktests
5c60: 20 2d 65 78 63 6c 75 64 65 20 2a 6d 61 6c 6c 6f   -exclude *mallo
5c70: 63 2a 20 2a 69 6f 65 72 72 2a 20 2a 66 61 75 6c  c* *ioerr* *faul
5c80: 74 2a 0a 5d 0a 0a 23 20 45 6e 64 20 6f 66 20 74  t*.]..# End of t
5c90: 65 73 74 73 0a 23 23 23 23 23 23 23 23 23 23 23  ests.###########
5ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ce0: 23 23 0a 0a 23 20 72 75 6e 5f 74 65 73 74 73 20  ##..# run_tests 
5cf0: 4e 41 4d 45 20 4f 50 54 49 4f 4e 53 0a 23 0a 23  NAME OPTIONS.#.#
5d00: 20 77 68 65 72 65 20 61 76 61 69 6c 61 62 6c 65   where available
5d10: 20 6f 70 74 69 6f 6e 73 20 61 72 65 3a 20 20 0a   options are:  .
5d20: 23 0a 23 20 20 20 20 20 20 20 2d 64 65 73 63 72  #.#       -descr
5d30: 69 70 74 69 6f 6e 20 54 49 54 4c 45 0a 23 20 20  iption TITLE.#  
5d40: 20 20 20 20 20 2d 69 6e 69 74 69 61 6c 69 7a 65       -initialize
5d50: 20 20 53 43 52 49 50 54 0a 23 20 20 20 20 20 20    SCRIPT.#      
5d60: 20 2d 73 68 75 74 64 6f 77 6e 20 20 20 20 53 43   -shutdown    SC
5d70: 52 49 50 54 0a 23 20 20 20 20 20 20 20 2d 70 72  RIPT.#       -pr
5d80: 65 73 71 6c 20 20 20 20 20 20 53 51 4c 0a 23 20  esql      SQL.# 
5d90: 20 20 20 20 20 20 2d 66 69 6c 65 73 20 20 20 20        -files    
5da0: 20 20 20 4c 49 53 54 2d 4f 46 2d 46 49 4c 45 53     LIST-OF-FILES
5db0: 0a 23 20 20 20 20 20 20 20 2d 70 72 65 66 69 78  .#       -prefix
5dc0: 20 20 20 20 20 20 4e 41 4d 45 0a 23 0a 70 72 6f        NAME.#.pro
5dd0: 63 20 72 75 6e 5f 74 65 73 74 73 20 7b 6e 61 6d  c run_tests {nam
5de0: 65 20 61 72 67 73 7d 20 7b 0a 20 20 61 72 72 61  e args} {.  arra
5df0: 79 20 73 65 74 20 6f 70 74 69 6f 6e 73 20 24 61  y set options $a
5e00: 72 67 73 0a 0a 20 20 73 65 74 20 3a 3a 47 28 70  rgs..  set ::G(p
5e10: 65 72 6d 3a 6e 61 6d 65 29 20 20 20 20 20 20 20  erm:name)       
5e20: 20 20 24 6e 61 6d 65 0a 20 20 73 65 74 20 3a 3a    $name.  set ::
5e30: 47 28 70 65 72 6d 3a 70 72 65 66 69 78 29 20 20  G(perm:prefix)  
5e40: 20 20 20 20 20 24 6f 70 74 69 6f 6e 73 28 2d 70       $options(-p
5e50: 72 65 66 69 78 29 0a 20 20 73 65 74 20 3a 3a 47  refix).  set ::G
5e60: 28 70 65 72 6d 3a 70 72 65 73 71 6c 29 20 20 20  (perm:presql)   
5e70: 20 20 20 20 24 6f 70 74 69 6f 6e 73 28 2d 70 72      $options(-pr
5e80: 65 73 71 6c 29 0a 20 20 73 65 74 20 3a 3a 47 28  esql).  set ::G(
5e90: 69 73 71 75 69 63 6b 29 20 20 20 20 20 20 20 20  isquick)        
5ea0: 20 20 20 31 0a 20 20 73 65 74 20 3a 3a 47 28 70     1.  set ::G(p
5eb0: 65 72 6d 3a 64 62 63 6f 6e 66 69 67 29 20 20 20  erm:dbconfig)   
5ec0: 20 20 24 6f 70 74 69 6f 6e 73 28 2d 64 62 63 6f    $options(-dbco
5ed0: 6e 66 69 67 29 0a 0a 20 20 75 70 6c 65 76 65 6c  nfig)..  uplevel
5ee0: 20 24 6f 70 74 69 6f 6e 73 28 2d 69 6e 69 74 69   $options(-initi
5ef0: 61 6c 69 7a 65 29 0a 0a 20 20 66 6f 72 65 61 63  alize)..  foreac
5f00: 68 20 66 69 6c 65 20 5b 6c 73 6f 72 74 20 24 6f  h file [lsort $o
5f10: 70 74 69 6f 6e 73 28 2d 66 69 6c 65 73 29 5d 20  ptions(-files)] 
5f20: 7b 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20  {.    if {[file 
5f30: 74 61 69 6c 20 24 66 69 6c 65 5d 20 3d 3d 20 24  tail $file] == $
5f40: 66 69 6c 65 7d 20 7b 20 73 65 74 20 66 69 6c 65  file} { set file
5f50: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a 74   [file join $::t
5f60: 65 73 74 64 69 72 20 24 66 69 6c 65 5d 20 7d 0a  estdir $file] }.
5f70: 20 20 20 20 73 6c 61 76 65 5f 74 65 73 74 5f 66      slave_test_f
5f80: 69 6c 65 20 24 66 69 6c 65 0a 20 20 7d 0a 0a 20  ile $file.  }.. 
5f90: 20 75 70 6c 65 76 65 6c 20 24 6f 70 74 69 6f 6e   uplevel $option
5fa0: 73 28 2d 73 68 75 74 64 6f 77 6e 29 0a 0a 20 20  s(-shutdown)..  
5fb0: 75 6e 73 65 74 20 3a 3a 47 28 70 65 72 6d 3a 6e  unset ::G(perm:n
5fc0: 61 6d 65 29 0a 20 20 75 6e 73 65 74 20 3a 3a 47  ame).  unset ::G
5fd0: 28 70 65 72 6d 3a 70 72 65 66 69 78 29 0a 20 20  (perm:prefix).  
5fe0: 75 6e 73 65 74 20 3a 3a 47 28 70 65 72 6d 3a 70  unset ::G(perm:p
5ff0: 72 65 73 71 6c 29 0a 20 20 75 6e 73 65 74 20 3a  resql).  unset :
6000: 3a 47 28 70 65 72 6d 3a 64 62 63 6f 6e 66 69 67  :G(perm:dbconfig
6010: 29 0a 7d 0a 0a 70 72 6f 63 20 72 75 6e 5f 74 65  ).}..proc run_te
6020: 73 74 5f 73 75 69 74 65 20 7b 6e 61 6d 65 7d 20  st_suite {name} 
6030: 7b 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78  {.  if {[info ex
6040: 69 73 74 73 20 3a 3a 74 65 73 74 73 70 65 63 28  ists ::testspec(
6050: 24 6e 61 6d 65 29 5d 3d 3d 30 7d 20 7b 0a 20 20  $name)]==0} {.  
6060: 20 20 65 72 72 6f 72 20 22 4e 6f 20 73 75 63 68    error "No such
6070: 20 74 65 73 74 20 73 75 69 74 65 3a 20 24 6e 61   test suite: $na
6080: 6d 65 22 0a 20 20 7d 0a 20 20 75 70 6c 65 76 65  me".  }.  upleve
6090: 6c 20 72 75 6e 5f 74 65 73 74 73 20 24 6e 61 6d  l run_tests $nam
60a0: 65 20 24 3a 3a 74 65 73 74 73 70 65 63 28 24 6e  e $::testspec($n
60b0: 61 6d 65 29 0a 7d 0a 0a 70 72 6f 63 20 68 65 6c  ame).}..proc hel
60c0: 70 20 7b 7d 20 7b 0a 20 20 70 75 74 73 20 22 55  p {} {.  puts "U
60d0: 73 61 67 65 3a 20 24 3a 3a 61 72 67 76 30 20 54  sage: $::argv0 T
60e0: 45 53 54 53 55 49 54 45 20 3f 54 45 53 54 46 49  ESTSUITE ?TESTFI
60f0: 4c 45 3f 22 0a 20 20 70 75 74 73 20 22 22 0a 20  LE?".  puts "". 
6100: 20 70 75 74 73 20 22 41 76 61 69 6c 61 62 6c 65   puts "Available
6110: 20 74 65 73 74 2d 73 75 69 74 65 73 20 61 72 65   test-suites are
6120: 3a 22 0a 20 20 66 6f 72 65 61 63 68 20 6b 20 24  :".  foreach k $
6130: 3a 3a 74 65 73 74 73 75 69 74 65 6c 69 73 74 20  ::testsuitelist 
6140: 7b 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20  {.    if {[info 
6150: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 73 70 65  exists ::testspe
6160: 63 28 24 6b 29 5d 3d 3d 30 7d 20 7b 0a 20 20 20  c($k)]==0} {.   
6170: 20 20 20 70 75 74 73 20 22 20 20 20 20 20 20 20     puts "       
6180: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
6190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
61a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 22 0a 20 20 20 20  ----------".    
61b0: 20 20 70 75 74 73 20 22 22 0a 20 20 20 20 7d 20    puts "".    } 
61c0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 61 72 72  else {.      arr
61d0: 61 79 20 73 65 74 20 6f 20 24 3a 3a 74 65 73 74  ay set o $::test
61e0: 73 70 65 63 28 24 6b 29 0a 20 20 20 20 20 20 70  spec($k).      p
61f0: 75 74 73 20 22 54 65 73 74 20 73 75 69 74 65 3a  uts "Test suite:
6200: 20 5c 22 24 6b 5c 22 22 0a 20 20 20 20 20 20 73   \"$k\"".      s
6210: 65 74 20 64 20 5b 73 74 72 69 6e 67 20 74 72 69  et d [string tri
6220: 6d 20 24 6f 28 2d 64 65 73 63 72 69 70 74 69 6f  m $o(-descriptio
6230: 6e 29 5d 0a 20 20 20 20 20 20 73 65 74 20 64 20  n)].      set d 
6240: 5b 72 65 67 73 75 62 20 7b 5c 6e 20 2a 7d 20 24  [regsub {\n *} $
6250: 64 20 22 5c 6e 20 20 22 5d 0a 20 20 20 20 20 20  d "\n  "].      
6260: 70 75 74 73 20 22 20 20 24 64 22 0a 20 20 20 20  puts "  $d".    
6270: 20 20 70 75 74 73 20 22 22 0a 20 20 20 20 7d 0a    puts "".    }.
6280: 20 20 7d 0a 20 20 65 78 69 74 20 2d 31 0a 7d 0a    }.  exit -1.}.
6290: 0a 69 66 20 7b 5b 69 6e 66 6f 20 73 63 72 69 70  .if {[info scrip
62a0: 74 5d 20 3d 3d 20 24 61 72 67 76 30 7d 20 7b 0a  t] == $argv0} {.
62b0: 20 20 70 72 6f 63 20 6d 61 69 6e 20 7b 61 72 67    proc main {arg
62c0: 76 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c  v} {.    if {[ll
62d0: 65 6e 67 74 68 20 24 61 72 67 76 5d 3d 3d 30 7d  ength $argv]==0}
62e0: 20 7b 0a 20 20 20 20 20 20 68 65 6c 70 0a 20 20   {.      help.  
62f0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
6300: 20 73 65 74 20 73 75 69 74 65 20 5b 6c 69 6e 64   set suite [lind
6310: 65 78 20 24 61 72 67 76 20 30 5d 0a 20 20 20 20  ex $argv 0].    
6320: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
6330: 74 73 20 3a 3a 74 65 73 74 73 70 65 63 28 24 73  ts ::testspec($s
6340: 75 69 74 65 29 5d 3d 3d 30 7d 20 68 65 6c 70 0a  uite)]==0} help.
6350: 20 20 20 20 20 20 73 65 74 20 65 78 74 72 61 20        set extra 
6360: 22 22 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c  "".      if {[ll
6370: 65 6e 67 74 68 20 24 61 72 67 76 5d 3e 31 7d 20  ength $argv]>1} 
6380: 7b 20 73 65 74 20 65 78 74 72 61 20 5b 6c 69 73  { set extra [lis
6390: 74 20 2d 66 69 6c 65 73 20 5b 6c 72 61 6e 67 65  t -files [lrange
63a0: 20 24 61 72 67 76 20 31 20 65 6e 64 5d 5d 20 7d   $argv 1 end]] }
63b0: 0a 20 20 20 20 20 20 65 76 61 6c 20 72 75 6e 5f  .      eval run_
63c0: 74 65 73 74 73 20 24 73 75 69 74 65 20 24 3a 3a  tests $suite $::
63d0: 74 65 73 74 73 70 65 63 28 24 73 75 69 74 65 29  testspec($suite)
63e0: 20 24 65 78 74 72 61 0a 20 20 20 20 7d 0a 20 20   $extra.    }.  
63f0: 7d 0a 20 20 6d 61 69 6e 20 24 61 72 67 76 0a 20  }.  main $argv. 
6400: 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 7d 0a 0a   finish_test.}..