/ Hex Artifact Content
Login

Artifact 89e09ed0074083ac6f208dc3243429e8f89efb69:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 72 75 6e 73 20 61 6c 6c 20 74   file runs all t
0180: 65 73 74 73 2e 0a 23 0a 23 20 24 49 64 3a 20 61  ests..#.# $Id: a
0190: 6c 6c 2e 74 65 73 74 2c 76 20 31 2e 35 37 20 32  ll.test,v 1.57 2
01a0: 30 30 38 2f 30 37 2f 31 34 20 31 35 3a 31 31 3a  008/07/14 15:11:
01b0: 32 30 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65  20 drh Exp $..se
01c0: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
01d0: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
01e0: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
01f0: 74 65 73 74 65 72 2e 74 63 6c 0a 72 65 6e 61 6d  tester.tcl.renam
0200: 65 20 66 69 6e 69 73 68 5f 74 65 73 74 20 72 65  e finish_test re
0210: 61 6c 6c 79 5f 66 69 6e 69 73 68 5f 74 65 73 74  ally_finish_test
0220: 0a 70 72 6f 63 20 66 69 6e 69 73 68 5f 74 65 73  .proc finish_tes
0230: 74 20 7b 7d 20 7b 0a 20 20 23 20 6e 6f 2d 6f 70  t {} {.  # no-op
0240: 0a 7d 0a 0a 69 66 20 7b 5b 66 69 6c 65 20 65 78  .}..if {[file ex
0250: 69 73 74 73 20 2e 2f 73 71 6c 69 74 65 5f 74 65  ists ./sqlite_te
0260: 73 74 5f 63 6f 75 6e 74 5d 7d 20 7b 0a 20 20 73  st_count]} {.  s
0270: 65 74 20 43 4f 55 4e 54 20 5b 65 78 65 63 20 63  et COUNT [exec c
0280: 61 74 20 2e 2f 73 71 6c 69 74 65 5f 74 65 73 74  at ./sqlite_test
0290: 5f 63 6f 75 6e 74 5d 0a 7d 20 65 6c 73 65 20 7b  _count].} else {
02a0: 0a 20 20 73 65 74 20 43 4f 55 4e 54 20 33 0a 7d  .  set COUNT 3.}
02b0: 0a 0a 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24  ..if {[llength $
02c0: 61 72 67 76 5d 3e 30 7d 20 7b 0a 20 20 66 6f 72  argv]>0} {.  for
02d0: 65 61 63 68 20 7b 6e 61 6d 65 20 76 61 6c 75 65  each {name value
02e0: 7d 20 24 61 72 67 76 20 7b 0a 20 20 20 20 73 77  } $argv {.    sw
02f0: 69 74 63 68 20 2d 2d 20 24 6e 61 6d 65 20 7b 0a  itch -- $name {.
0300: 20 20 20 20 20 20 2d 63 6f 75 6e 74 20 7b 0a 20        -count {. 
0310: 20 20 20 20 20 20 20 20 73 65 74 20 43 4f 55 4e          set COUN
0320: 54 20 24 76 61 6c 75 65 0a 20 20 20 20 20 20 7d  T $value.      }
0330: 0a 20 20 20 20 20 20 2d 71 75 69 63 6b 20 7b 0a  .      -quick {.
0340: 20 20 20 20 20 20 20 20 20 73 65 74 20 49 53 51           set ISQ
0350: 55 49 43 4b 20 24 76 61 6c 75 65 0a 20 20 20 20  UICK $value.    
0360: 20 20 7d 0a 20 20 20 20 20 20 2d 73 6f 61 6b 20    }.      -soak 
0370: 7b 0a 20 20 20 20 20 20 20 20 20 73 65 74 20 53  {.         set S
0380: 4f 41 4b 54 45 53 54 20 24 76 61 6c 75 65 0a 20  OAKTEST $value. 
0390: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
03a0: 61 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 20  ault {.         
03b0: 70 75 74 73 20 73 74 64 65 72 72 20 22 55 6e 6b  puts stderr "Unk
03c0: 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 24 6e 61  nown option: $na
03d0: 6d 65 22 0a 20 20 20 20 20 20 20 20 20 65 78 69  me".         exi
03e0: 74 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  t.      }.    }.
03f0: 20 20 7d 0a 7d 0a 73 65 74 20 61 72 67 76 20 7b    }.}.set argv {
0400: 7d 0a 0a 23 20 4c 65 61 6b 4c 69 73 74 20 77 69  }..# LeakList wi
0410: 6c 6c 20 68 6f 6c 64 20 61 20 6c 69 73 74 20 6f  ll hold a list o
0420: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
0430: 75 6e 66 72 65 65 64 20 6d 61 6c 6c 6f 63 73 20  unfreed mallocs 
0440: 61 66 74 65 72 0a 23 20 65 61 63 68 20 72 6f 75  after.# each rou
0450: 6e 64 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20  nd of the test. 
0460: 20 54 68 69 73 20 6e 75 6d 62 65 72 20 73 68 6f   This number sho
0470: 75 6c 64 20 62 65 20 63 6f 6e 73 74 61 6e 74 2e  uld be constant.
0480: 20 20 49 66 20 69 74 0a 23 20 67 72 6f 77 73 2c    If it.# grows,
0490: 20 69 74 20 6d 61 79 20 6d 65 61 6e 20 74 68 65   it may mean the
04a0: 72 65 20 69 73 20 61 20 6d 65 6d 6f 72 79 20 6c  re is a memory l
04b0: 65 61 6b 20 69 6e 20 74 68 65 20 6c 69 62 72 61  eak in the libra
04c0: 72 79 2e 0a 23 0a 73 65 74 20 4c 65 61 6b 4c 69  ry..#.set LeakLi
04d0: 73 74 20 7b 7d 0a 0a 73 65 74 20 45 58 43 4c 55  st {}..set EXCLU
04e0: 44 45 20 7b 7d 0a 6c 61 70 70 65 6e 64 20 45 58  DE {}.lappend EX
04f0: 43 4c 55 44 45 20 61 6c 6c 2e 74 65 73 74 20 20  CLUDE all.test  
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 23 20               ;# 
0510: 54 68 69 73 20 66 69 6c 65 0a 6c 61 70 70 65 6e  This file.lappen
0520: 64 20 45 58 43 4c 55 44 45 20 61 73 79 6e 63 2e  d EXCLUDE async.
0530: 74 65 73 74 0a 6c 61 70 70 65 6e 64 20 45 58 43  test.lappend EXC
0540: 4c 55 44 45 20 63 72 61 73 68 2e 74 65 73 74 20  LUDE crash.test 
0550: 20 20 20 20 20 20 20 20 20 20 20 20 3b 23 20 52              ;# R
0560: 75 6e 20 73 65 70 65 72 61 74 65 6c 79 20 6c 61  un seperately la
0570: 74 65 72 2e 0a 6c 61 70 70 65 6e 64 20 45 58 43  ter..lappend EXC
0580: 4c 55 44 45 20 63 72 61 73 68 32 2e 74 65 73 74  LUDE crash2.test
0590: 20 20 20 20 20 20 20 20 20 20 20 20 3b 23 20 52              ;# R
05a0: 75 6e 20 73 65 70 65 72 61 74 65 6c 79 20 6c 61  un seperately la
05b0: 74 65 72 2e 0a 6c 61 70 70 65 6e 64 20 45 58 43  ter..lappend EXC
05c0: 4c 55 44 45 20 71 75 69 63 6b 2e 74 65 73 74 20  LUDE quick.test 
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 23 20 41              ;# A
05e0: 6c 74 65 72 6e 61 74 65 20 74 65 73 74 20 64 72  lternate test dr
05f0: 69 76 65 72 20 73 63 72 69 70 74 0a 6c 61 70 70  iver script.lapp
0600: 65 6e 64 20 45 58 43 4c 55 44 45 20 76 65 72 79  end EXCLUDE very
0610: 71 75 69 63 6b 2e 74 65 73 74 20 20 20 20 20 20  quick.test      
0620: 20 20 20 3b 23 20 41 6c 74 65 72 6e 61 74 65 20     ;# Alternate 
0630: 74 65 73 74 20 64 72 69 76 65 72 20 73 63 72 69  test driver scri
0640: 70 74 0a 6c 61 70 70 65 6e 64 20 45 58 43 4c 55  pt.lappend EXCLU
0650: 44 45 20 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 20  DE malloc.test  
0660: 20 20 20 20 20 20 20 20 20 20 3b 23 20 52 75 6e            ;# Run
0670: 20 73 65 70 65 72 61 74 65 6c 79 20 6c 61 74 65   seperately late
0680: 72 2e 0a 6c 61 70 70 65 6e 64 20 45 58 43 4c 55  r..lappend EXCLU
0690: 44 45 20 6d 69 73 75 73 65 2e 74 65 73 74 20 20  DE misuse.test  
06a0: 20 20 20 20 20 20 20 20 20 20 3b 23 20 52 75 6e            ;# Run
06b0: 20 73 65 70 65 72 61 74 65 6c 79 20 6c 61 74 65   seperately late
06c0: 72 2e 0a 6c 61 70 70 65 6e 64 20 45 58 43 4c 55  r..lappend EXCLU
06d0: 44 45 20 6d 65 6d 6c 65 61 6b 2e 74 65 73 74 20  DE memleak.test 
06e0: 20 20 20 20 20 20 20 20 20 20 3b 23 20 41 6c 74            ;# Alt
06f0: 65 72 6e 61 74 65 20 74 65 73 74 20 64 72 69 76  ernate test driv
0700: 65 72 20 73 63 72 69 70 74 0a 6c 61 70 70 65 6e  er script.lappen
0710: 64 20 45 58 43 4c 55 44 45 20 70 65 72 6d 75 74  d EXCLUDE permut
0720: 61 74 69 6f 6e 73 2e 74 65 73 74 20 20 20 20 20  ations.test     
0730: 20 3b 23 20 52 75 6e 20 73 65 70 65 72 61 74 65   ;# Run seperate
0740: 6c 79 20 6c 61 74 65 72 2e 0a 6c 61 70 70 65 6e  ly later..lappen
0750: 64 20 45 58 43 4c 55 44 45 20 66 75 7a 7a 2e 74  d EXCLUDE fuzz.t
0760: 65 73 74 0a 6c 61 70 70 65 6e 64 20 45 58 43 4c  est.lappend EXCL
0770: 55 44 45 20 73 6f 61 6b 2e 74 65 73 74 20 20 20  UDE soak.test   
0780: 20 20 20 20 20 20 20 20 20 20 20 3b 23 20 54 61             ;# Ta
0790: 6b 65 73 20 61 20 76 65 72 79 20 6c 6f 6e 67 20  kes a very long 
07a0: 74 69 6d 65 20 28 64 65 66 61 75 6c 74 20 31 20  time (default 1 
07b0: 68 72 29 0a 6c 61 70 70 65 6e 64 20 45 58 43 4c  hr).lappend EXCL
07c0: 55 44 45 20 66 74 73 33 2e 74 65 73 74 20 20 20  UDE fts3.test   
07d0: 20 20 20 20 20 20 20 20 20 20 20 3b 23 20 57 72             ;# Wr
07e0: 61 70 70 65 72 20 66 6f 72 20 6d 75 6c 69 70 6c  apper for mulipl
07f0: 65 20 66 74 73 33 2a 2e 74 65 73 74 73 0a 6c 61  e fts3*.tests.la
0800: 70 70 65 6e 64 20 45 58 43 4c 55 44 45 20 6d 61  ppend EXCLUDE ma
0810: 6c 6c 6f 63 41 6c 6c 2e 74 65 73 74 20 20 20 20  llocAll.test    
0820: 20 20 20 20 20 3b 23 20 57 72 61 70 70 65 72 20       ;# Wrapper 
0830: 66 6f 72 20 72 75 6e 6e 69 6e 67 20 61 6c 6c 20  for running all 
0840: 6d 61 6c 6c 6f 63 20 74 65 73 74 73 0a 0a 23 20  malloc tests..# 
0850: 46 69 6c 65 73 20 74 6f 20 69 6e 63 6c 75 64 65  Files to include
0860: 20 69 6e 20 74 68 65 20 74 65 73 74 2e 20 20 49   in the test.  I
0870: 66 20 74 68 69 73 20 6c 69 73 74 20 69 73 20 65  f this list is e
0880: 6d 70 74 79 20 74 68 65 6e 20 65 76 65 72 79 74  mpty then everyt
0890: 68 69 6e 67 0a 23 20 74 68 61 74 20 69 73 20 6e  hing.# that is n
08a0: 6f 74 20 69 6e 20 74 68 65 20 45 58 43 4c 55 44  ot in the EXCLUD
08b0: 45 20 6c 69 73 74 20 69 73 20 72 75 6e 2e 0a 23  E list is run..#
08c0: 0a 73 65 74 20 49 4e 43 4c 55 44 45 20 7b 0a 7d  .set INCLUDE {.}
08d0: 0a 0a 66 6f 72 20 7b 73 65 74 20 43 6f 75 6e 74  ..for {set Count
08e0: 65 72 20 30 7d 20 7b 24 43 6f 75 6e 74 65 72 3c  er 0} {$Counter<
08f0: 24 43 4f 55 4e 54 20 26 26 20 24 6e 45 72 72 3d  $COUNT && $nErr=
0900: 3d 30 7d 20 7b 69 6e 63 72 20 43 6f 75 6e 74 65  =0} {incr Counte
0910: 72 7d 20 7b 0a 20 20 69 66 20 7b 24 43 6f 75 6e  r} {.  if {$Coun
0920: 74 65 72 25 32 7d 20 7b 0a 20 20 20 20 73 65 74  ter%2} {.    set
0930: 20 3a 3a 53 45 54 55 50 5f 53 51 4c 20 7b 50 52   ::SETUP_SQL {PR
0940: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 73 79 6e  AGMA default_syn
0950: 63 68 72 6f 6e 6f 75 73 3d 6f 66 66 3b 7d 0a 20  chronous=off;}. 
0960: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 63 61   } else {.    ca
0970: 74 63 68 20 7b 75 6e 73 65 74 20 3a 3a 53 45 54  tch {unset ::SET
0980: 55 50 5f 53 51 4c 7d 0a 20 20 7d 0a 20 20 66 6f  UP_SQL}.  }.  fo
0990: 72 65 61 63 68 20 74 65 73 74 66 69 6c 65 20 5b  reach testfile [
09a0: 6c 73 6f 72 74 20 2d 64 69 63 74 69 6f 6e 61 72  lsort -dictionar
09b0: 79 20 5b 67 6c 6f 62 20 24 74 65 73 74 64 69 72  y [glob $testdir
09c0: 2f 2a 2e 74 65 73 74 5d 5d 20 7b 0a 20 20 20 20  /*.test]] {.    
09d0: 73 65 74 20 74 61 69 6c 20 5b 66 69 6c 65 20 74  set tail [file t
09e0: 61 69 6c 20 24 74 65 73 74 66 69 6c 65 5d 0a 20  ail $testfile]. 
09f0: 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20     if {[lsearch 
0a00: 2d 65 78 61 63 74 20 24 45 58 43 4c 55 44 45 20  -exact $EXCLUDE 
0a10: 24 74 61 69 6c 5d 3e 3d 30 7d 20 63 6f 6e 74 69  $tail]>=0} conti
0a20: 6e 75 65 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65  nue.    if {[lle
0a30: 6e 67 74 68 20 24 49 4e 43 4c 55 44 45 5d 3e 30  ngth $INCLUDE]>0
0a40: 20 26 26 20 5b 6c 73 65 61 72 63 68 20 2d 65 78   && [lsearch -ex
0a50: 61 63 74 20 24 49 4e 43 4c 55 44 45 20 24 74 61  act $INCLUDE $ta
0a60: 69 6c 5d 3c 30 7d 20 63 6f 6e 74 69 6e 75 65 0a  il]<0} continue.
0a70: 20 20 20 20 72 65 73 65 74 5f 70 72 6e 67 5f 73      reset_prng_s
0a80: 74 61 74 65 0a 20 20 20 20 73 6f 75 72 63 65 20  tate.    source 
0a90: 24 74 65 73 74 66 69 6c 65 0a 20 20 20 20 63 61  $testfile.    ca
0aa0: 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20  tch {db close}. 
0ab0: 20 20 20 69 66 20 7b 24 73 71 6c 69 74 65 5f 6f     if {$sqlite_o
0ac0: 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 3e 30  pen_file_count>0
0ad0: 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20 22  } {.      puts "
0ae0: 24 74 61 69 6c 20 64 69 64 20 6e 6f 74 20 63 6c  $tail did not cl
0af0: 6f 73 65 20 61 6c 6c 20 66 69 6c 65 73 3a 20 24  ose all files: $
0b00: 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65  sqlite_open_file
0b10: 5f 63 6f 75 6e 74 22 0a 20 20 20 20 20 20 69 6e  _count".      in
0b20: 63 72 20 6e 45 72 72 0a 20 20 20 20 20 20 6c 61  cr nErr.      la
0b30: 70 70 65 6e 64 20 3a 3a 66 61 69 6c 4c 69 73 74  ppend ::failList
0b40: 20 24 74 61 69 6c 0a 20 20 20 20 20 20 73 65 74   $tail.      set
0b50: 20 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c   sqlite_open_fil
0b60: 65 5f 63 6f 75 6e 74 20 30 0a 20 20 20 20 7d 0a  e_count 0.    }.
0b70: 20 20 7d 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20    }.  if {[info 
0b80: 65 78 69 73 74 73 20 4c 65 61 6b 5d 7d 20 7b 0a  exists Leak]} {.
0b90: 20 20 20 20 6c 61 70 70 65 6e 64 20 4c 65 61 6b      lappend Leak
0ba0: 4c 69 73 74 20 24 4c 65 61 6b 0a 20 20 7d 0a 7d  List $Leak.  }.}
0bb0: 0a 73 65 74 20 61 72 67 76 20 61 6c 6c 0a 73 6f  .set argv all.so
0bc0: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 70 65  urce $testdir/pe
0bd0: 72 6d 75 74 61 74 69 6f 6e 73 2e 74 65 73 74 0a  rmutations.test.
0be0: 73 65 74 20 61 72 67 76 20 22 22 0a 0a 23 20 44  set argv ""..# D
0bf0: 6f 20 6f 6e 65 20 6c 61 73 74 20 74 65 73 74 20  o one last test 
0c00: 74 6f 20 6c 6f 6f 6b 20 66 6f 72 20 61 20 6d 65  to look for a me
0c10: 6d 6f 72 79 20 6c 65 61 6b 20 69 6e 20 74 68 65  mory leak in the
0c20: 20 6c 69 62 72 61 72 79 2e 20 20 54 68 69 73 20   library.  This 
0c30: 77 69 6c 6c 0a 23 20 6f 6e 6c 79 20 77 6f 72 6b  will.# only work
0c40: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   if SQLite is co
0c50: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20  mpiled with the 
0c60: 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d 31  -DSQLITE_DEBUG=1
0c70: 20 66 6c 61 67 2e 0a 23 0a 69 66 20 7b 24 4c 65   flag..#.if {$Le
0c80: 61 6b 4c 69 73 74 21 3d 22 22 7d 20 7b 0a 20 20  akList!=""} {.  
0c90: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
0ca0: 6d 65 6d 6f 72 79 2d 6c 65 61 6b 2d 74 65 73 74  memory-leak-test
0cb0: 2e 2e 2e 0a 20 20 69 6e 63 72 20 3a 3a 6e 54 65  ....  incr ::nTe
0cc0: 73 74 0a 20 20 66 6f 72 65 61 63 68 20 78 20 24  st.  foreach x $
0cd0: 4c 65 61 6b 4c 69 73 74 20 7b 0a 20 20 20 20 69  LeakList {.    i
0ce0: 66 20 7b 24 78 21 3d 5b 6c 69 6e 64 65 78 20 24  f {$x!=[lindex $
0cf0: 4c 65 61 6b 4c 69 73 74 20 30 5d 7d 20 7b 0a 20  LeakList 0]} {. 
0d00: 20 20 20 20 20 20 70 75 74 73 20 22 20 66 61 69        puts " fai
0d10: 6c 65 64 21 22 0a 20 20 20 20 20 20 20 70 75 74  led!".       put
0d20: 73 20 22 45 78 70 65 63 74 65 64 3a 20 61 6c 6c  s "Expected: all
0d30: 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 74 68   values to be th
0d40: 65 20 73 61 6d 65 22 0a 20 20 20 20 20 20 20 70  e same".       p
0d50: 75 74 73 20 22 20 20 20 20 20 47 6f 74 3a 20 24  uts "     Got: $
0d60: 4c 65 61 6b 4c 69 73 74 22 0a 20 20 20 20 20 20  LeakList".      
0d70: 20 69 6e 63 72 20 3a 3a 6e 45 72 72 0a 20 20 20   incr ::nErr.   
0d80: 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 66 61      lappend ::fa
0d90: 69 6c 4c 69 73 74 20 6d 65 6d 6f 72 79 2d 6c 65  ilList memory-le
0da0: 61 6b 2d 74 65 73 74 0a 20 20 20 20 20 20 20 62  ak-test.       b
0db0: 72 65 61 6b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  reak.    }.  }. 
0dc0: 20 70 75 74 73 20 22 20 4f 6b 22 0a 7d 0a 0a 23   puts " Ok".}..#
0dd0: 20 52 75 6e 20 74 68 65 20 63 72 61 73 68 74 65   Run the crashte
0de0: 73 74 20 6f 6e 6c 79 20 6f 6e 20 75 6e 69 78 20  st only on unix 
0df0: 61 6e 64 20 6f 6e 6c 79 20 6f 6e 63 65 2e 20 49  and only once. I
0e00: 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 64 6f  f the library do
0e10: 65 73 20 6e 6f 74 0a 23 20 61 6c 77 61 79 73 20  es not.# always 
0e20: 63 72 65 61 74 65 20 61 75 74 6f 2d 76 61 63 75  create auto-vacu
0e30: 75 6d 20 64 61 74 61 62 61 73 65 73 2c 20 61 6c  um databases, al
0e40: 73 6f 20 72 75 6e 20 61 75 74 6f 76 61 63 75 75  so run autovacuu
0e50: 6d 5f 63 72 61 73 68 2e 74 65 73 74 2e 0a 23 0a  m_crash.test..#.
0e60: 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  if {$::tcl_platf
0e70: 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22  orm(platform)=="
0e80: 75 6e 69 78 22 7d 20 7b 0a 20 20 73 6f 75 72 63  unix"} {.  sourc
0e90: 65 20 24 74 65 73 74 64 69 72 2f 63 72 61 73 68  e $testdir/crash
0ea0: 2e 74 65 73 74 0a 20 20 73 6f 75 72 63 65 20 24  .test.  source $
0eb0: 74 65 73 74 64 69 72 2f 63 72 61 73 68 32 2e 74  testdir/crash2.t
0ec0: 65 73 74 0a 20 20 69 66 63 61 70 61 62 6c 65 20  est.  ifcapable 
0ed0: 21 64 65 66 61 75 6c 74 5f 61 75 74 6f 76 61 63  !default_autovac
0ee0: 75 75 6d 20 7b 0a 20 20 20 20 73 65 74 20 61 72  uum {.    set ar
0ef0: 67 76 20 61 75 74 6f 76 61 63 75 75 6d 5f 63 72  gv autovacuum_cr
0f00: 61 73 68 0a 20 20 20 20 73 6f 75 72 63 65 20 24  ash.    source $
0f10: 74 65 73 74 64 69 72 2f 70 65 72 6d 75 74 61 74  testdir/permutat
0f20: 69 6f 6e 73 2e 74 65 73 74 0a 20 20 20 20 73 65  ions.test.    se
0f30: 74 20 61 72 67 76 20 22 22 0a 20 20 7d 0a 7d 0a  t argv "".  }.}.
0f40: 0a 23 20 52 75 6e 20 74 68 65 20 6d 61 6c 6c 6f  .# Run the mallo
0f50: 63 20 74 65 73 74 73 20 61 6e 64 20 74 68 65 20  c tests and the 
0f60: 6d 69 73 75 73 65 20 74 65 73 74 20 61 66 74 65  misuse test afte
0f70: 72 20 6d 65 6d 6f 72 79 20 6c 65 61 6b 20 64 65  r memory leak de
0f80: 74 65 63 74 69 6f 6e 2e 0a 23 20 42 6f 74 68 20  tection..# Both 
0f90: 74 65 73 74 73 20 6c 65 61 6b 20 6d 65 6d 6f 72  tests leak memor
0fa0: 79 2e 20 43 75 72 72 65 6e 74 6c 79 2c 20 6d 69  y. Currently, mi
0fb0: 73 75 73 65 2e 74 65 73 74 20 61 6c 73 6f 20 6c  suse.test also l
0fc0: 65 61 6b 73 20 61 20 68 61 6e 64 66 75 6c 20 6f  eaks a handful o
0fd0: 66 0a 23 20 66 69 6c 65 20 64 65 73 63 72 69 70  f.# file descrip
0fe0: 74 6f 72 73 2e 20 54 68 69 73 20 69 73 20 6e 6f  tors. This is no
0ff0: 74 20 63 6f 6e 73 69 64 65 72 65 64 20 61 20 70  t considered a p
1000: 72 6f 62 6c 65 6d 2c 20 62 75 74 20 63 61 6e 20  roblem, but can 
1010: 63 61 75 73 65 20 74 65 73 74 73 0a 23 20 69 6e  cause tests.# in
1020: 20 6d 61 6c 6c 6f 63 2e 74 65 73 74 20 74 6f 20   malloc.test to 
1030: 66 61 69 6c 2e 20 53 6f 20 73 65 74 20 74 68 65  fail. So set the
1040: 20 6f 70 65 6e 2d 66 69 6c 65 20 63 6f 75 6e 74   open-file count
1050: 20 74 6f 20 7a 65 72 6f 20 62 65 66 6f 72 65 20   to zero before 
1060: 72 75 6e 6e 69 6e 67 0a 23 20 6d 61 6c 6c 6f 63  running.# malloc
1070: 2e 74 65 73 74 20 74 6f 20 67 65 74 20 61 72 6f  .test to get aro
1080: 75 6e 64 20 74 68 69 73 2e 0a 23 0a 63 61 74 63  und this..#.catc
1090: 68 20 7b 73 6f 75 72 63 65 20 24 74 65 73 74 64  h {source $testd
10a0: 69 72 2f 6d 69 73 75 73 65 2e 74 65 73 74 7d 0a  ir/misuse.test}.
10b0: 73 65 74 20 73 71 6c 69 74 65 5f 6f 70 65 6e 5f  set sqlite_open_
10c0: 66 69 6c 65 5f 63 6f 75 6e 74 20 30 0a 63 61 74  file_count 0.cat
10d0: 63 68 20 7b 73 6f 75 72 63 65 20 24 74 65 73 74  ch {source $test
10e0: 64 69 72 2f 6d 61 6c 6c 6f 63 2e 74 65 73 74 7d  dir/malloc.test}
10f0: 0a 0a 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73  ..catch {db clos
1100: 65 7d 0a 73 65 74 20 73 71 6c 69 74 65 5f 6f 70  e}.set sqlite_op
1110: 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 20 30 0a  en_file_count 0.
1120: 72 65 61 6c 6c 79 5f 66 69 6e 69 73 68 5f 74 65  really_finish_te
1130: 73 74 0a                                         st.