os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/permutations.test
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/permutations.test	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,646 @@
     1.4 +# 2008 June 21
     1.5 +#
     1.6 +# The author disclaims copyright to this source code.  In place of
     1.7 +# a legal notice, here is a blessing:
     1.8 +#
     1.9 +#    May you do good and not evil.
    1.10 +#    May you find forgiveness for yourself and forgive others.
    1.11 +#    May you share freely, never taking more than you give.
    1.12 +#
    1.13 +#***********************************************************************
    1.14 +#
    1.15 +# $Id: permutations.test,v 1.32 2008/09/29 14:27:41 danielk1977 Exp $
    1.16 +
    1.17 +set testdir [file dirname $argv0]
    1.18 +source $testdir/tester.tcl
    1.19 +
    1.20 +# Argument processing.
    1.21 +#
    1.22 +#puts "PERM-DEBUG: argv=$argv"
    1.23 +namespace eval ::perm {
    1.24 +  variable testmode [lindex $::argv 0]
    1.25 +  variable testfile [lindex $::argv 1]
    1.26 +}
    1.27 +set argv [lrange $argv 2 end]
    1.28 +#puts "PERM-DEBUG: testmode=$::perm::testmode tstfile=$::perm::testfile"
    1.29 +
    1.30 +set ::permutations_presql ""
    1.31 +set ::permutations_test_prefix ""
    1.32 +
    1.33 +if {$::perm::testmode eq "veryquick"} {
    1.34 +  set ::perm::testmode [list persistent_journal no_journal]
    1.35 +  set ISQUICK 1
    1.36 +}
    1.37 +if {$::perm::testmode eq "quick"} {
    1.38 +  set ::perm::testmode [list persistent_journal no_journal autovacuum_ioerr]
    1.39 +  set ISQUICK 1
    1.40 +}
    1.41 +if {$::perm::testmode eq "all" || $::perm::testmode eq ""} {
    1.42 +  set ::perm::testmode {
    1.43 +    memsubsys1 memsubsys2 singlethread multithread onefile utf16 exclusive
    1.44 +    persistent_journal persistent_journal_error no_journal no_journal_error
    1.45 +    autovacuum_ioerr no_mutex_try
    1.46 +  }
    1.47 +}
    1.48 +if {$::perm::testmode eq "targets"} { 
    1.49 +  puts ""
    1.50 +  puts -nonewline "veryquick            "
    1.51 +  puts "Same as persistent_journal and no_journal"
    1.52 +  puts -nonewline "quick                "
    1.53 +  puts "Same as persistent_journal, no_journal and autovacuum_ioerr"
    1.54 +  puts -nonewline "all                  "
    1.55 +  puts "Everything except autovacuum_crash"
    1.56 +}
    1.57 +#puts "PERM-DEBUG: testmode=$::perm::testmode"
    1.58 +
    1.59 +set EXCLUDE {
    1.60 +  all.test                  in2.test                  onefile.test
    1.61 +  async2.test               incrvacuum_ioerr.test     permutations.test
    1.62 +  async.test                jrnlmode2.test            quick.test
    1.63 +  autovacuum_crash.test     jrnlmode3.test            shared_err.test
    1.64 +  autovacuum_ioerr.test     jrnlmode4.test            soak.test
    1.65 +  btree8.test               loadext.test              speed1p.test
    1.66 +  corrupt.test              malloc2.test              speed1.test
    1.67 +  crash2.test               malloc3.test              speed2.test
    1.68 +  crash3.test               malloc4.test              speed3.test
    1.69 +  crash4.test               mallocAll.test            speed4p.test
    1.70 +  crash6.test               malloc.test               speed4.test
    1.71 +  crash7.test               memleak.test              sqllimits1.test
    1.72 +  crash.test                memsubsys1.test           thread001.test
    1.73 +  exclusive3.test           memsubsys2.test           thread002.test
    1.74 +  fts3.test                 misc7.test                utf16.test
    1.75 +  fuzz_malloc.test          misuse.test               veryquick.test
    1.76 +  fuzz.test                 mutex2.test               vtab_err.test
    1.77 +  lookaside.test            fuzz3.test
    1.78 +}
    1.79 +set ALLTESTS [list]
    1.80 +foreach filename [glob $testdir/*.test] {
    1.81 +  set filename [file tail $filename]
    1.82 +  if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename }
    1.83 +}
    1.84 +set ALLTESTS [lsort $ALLTESTS]
    1.85 +
    1.86 +rename finish_test really_finish_test2
    1.87 +proc finish_test {} {}
    1.88 +
    1.89 +rename do_test really_do_test
    1.90 +
    1.91 +proc do_test {name args} {
    1.92 +  eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args
    1.93 +}
    1.94 +
    1.95 +# Overload the [sqlite3] command
    1.96 +rename sqlite3 really_sqlite3
    1.97 +proc sqlite3 {args} {
    1.98 +  set r [eval really_sqlite3 $args]
    1.99 +  if { [llength $args] == 2 && $::permutations_presql ne "" } {
   1.100 +    [lindex $args 0] eval $::permutations_presql
   1.101 +  }
   1.102 +  set r
   1.103 +}
   1.104 +
   1.105 +# run_tests OPTIONS
   1.106 +#
   1.107 +# where available options are:  
   1.108 +#
   1.109 +#       -initialize  SCRIPT                 (default "")
   1.110 +#       -shutdown    SCRIPT                 (default "")
   1.111 +#       -include     LIST-OF-FILES          (default $::ALLTESTS)
   1.112 +#       -exclude     LIST-OF-FILES          (default "")
   1.113 +#       -presql      SQL                    (default "")
   1.114 +#       -description TITLE                  (default "")
   1.115 +#
   1.116 +proc run_tests {name args} {
   1.117 +  set ::permutations_test_prefix $name
   1.118 +  set options(-shutdown) ""
   1.119 +  set options(-initialize) ""
   1.120 +  set options(-exclude) ""
   1.121 +  set options(-include) $::ALLTESTS
   1.122 +  set options(-presql) ""
   1.123 +  set options(-description) "no description supplied (fixme)"
   1.124 +  array set options $args
   1.125 +  #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile"
   1.126 +  #puts "PERM-DEBUG: [array get options]"
   1.127 +
   1.128 +  if {$::perm::testmode eq "targets"} {
   1.129 +    puts [format "% -20s %s" $name [string trim $options(-description)]]
   1.130 +    return
   1.131 +  }
   1.132 +  if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} {
   1.133 +    puts "skipping permutation test $name..."
   1.134 +    return
   1.135 +  }
   1.136 +
   1.137 +  uplevel $options(-initialize)
   1.138 +  set ::permutations_presql $options(-presql)
   1.139 +
   1.140 +  foreach file [lsort $options(-include)] {
   1.141 +    if {[lsearch $options(-exclude) $file] < 0 &&
   1.142 +       ( $::perm::testfile eq "" ||
   1.143 +         $::perm::testfile eq $file ||
   1.144 +        "$::perm::testfile.test" eq $file )
   1.145 +    } {
   1.146 +      set ::perm::shared_cache_setting [shared_cache_setting]
   1.147 +      uplevel source $::testdir/$file
   1.148 +      if {$::perm::shared_cache_setting ne [shared_cache_setting]} {
   1.149 +        error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]"
   1.150 +      }
   1.151 +    } else {
   1.152 +      # puts "skipping file $file"
   1.153 +    }
   1.154 +  }
   1.155 +
   1.156 +  uplevel $options(-shutdown)
   1.157 +}
   1.158 +
   1.159 +proc shared_cache_setting {} {
   1.160 +  set ret 0
   1.161 +  catch {
   1.162 +    set ret [sqlite3_enable_shared_cache]
   1.163 +  }
   1.164 +  return $ret
   1.165 +}
   1.166 +
   1.167 +#############################################################################
   1.168 +# Start of tests
   1.169 +
   1.170 +# Run some tests using pre-allocated page and scratch blocks.
   1.171 +#
   1.172 +run_tests "memsubsys1" -description {
   1.173 +  Tests using pre-allocated page and scratch blocks
   1.174 +} -exclude {
   1.175 +  ioerr5.test
   1.176 +  malloc5.test
   1.177 +} -initialize {
   1.178 +  catch {db close}
   1.179 +  sqlite3_shutdown
   1.180 +  sqlite3_config_pagecache 4096 24
   1.181 +  sqlite3_config_scratch 25000 1
   1.182 +  sqlite3_initialize
   1.183 +} -shutdown {
   1.184 +  catch {db close}
   1.185 +  sqlite3_shutdown
   1.186 +  sqlite3_config_pagecache 0 0
   1.187 +  sqlite3_config_scratch 0 0
   1.188 +  sqlite3_initialize
   1.189 +}
   1.190 +
   1.191 +# Run some tests using pre-allocated page and scratch blocks. This time
   1.192 +# the allocations are too small to use in most cases.
   1.193 +#
   1.194 +# Both ioerr5.test and malloc5.test are excluded because they test the
   1.195 +# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
   1.196 +# This functionality is disabled if a pre-allocated page block is provided.
   1.197 +#
   1.198 +run_tests "memsubsys2" -description {
   1.199 +  Tests using small pre-allocated page and scratch blocks
   1.200 +} -exclude {
   1.201 +  ioerr5.test
   1.202 +  malloc5.test
   1.203 +} -initialize {
   1.204 +  catch {db close}
   1.205 +  sqlite3_shutdown
   1.206 +  sqlite3_config_pagecache 512 5
   1.207 +  sqlite3_config_scratch 1000 1
   1.208 +  sqlite3_initialize
   1.209 +} -shutdown {
   1.210 +  catch {db close}
   1.211 +  sqlite3_shutdown
   1.212 +  sqlite3_config_pagecache 0 0
   1.213 +  sqlite3_config_scratch 0 0
   1.214 +  sqlite3_initialize
   1.215 +}
   1.216 +
   1.217 +# Run all tests with the lookaside allocator disabled.
   1.218 +#
   1.219 +run_tests "memsubsys3" -description {
   1.220 +  OOM tests with lookaside disabled
   1.221 +} -include {
   1.222 +  malloc.test
   1.223 +  malloc3.test
   1.224 +  malloc4.test
   1.225 +  malloc5.test
   1.226 +  malloc6.test
   1.227 +  malloc7.test
   1.228 +  malloc8.test
   1.229 +  malloc9.test
   1.230 +  mallocA.test
   1.231 +  mallocB.test
   1.232 +  mallocC.test
   1.233 +  mallocD.test
   1.234 +  mallocE.test
   1.235 +  mallocF.test
   1.236 +  mallocG.test
   1.237 +} -initialize {
   1.238 +  catch {db close}
   1.239 +  sqlite3_shutdown
   1.240 +  sqlite3_config_lookaside 0 0
   1.241 +  sqlite3_initialize
   1.242 +} -shutdown {
   1.243 +  catch {db close}
   1.244 +  sqlite3_shutdown
   1.245 +  sqlite3_config_lookaside 100 500
   1.246 +  sqlite3_initialize
   1.247 +}
   1.248 +
   1.249 +# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
   1.250 +#
   1.251 +run_tests "singlethread" -description {
   1.252 +  Tests run in SQLITE_CONFIG_SINGLETHREAD mode
   1.253 +} -initialize {
   1.254 +  do_test mutex2-singlethread.0 {
   1.255 +    catch {db close}
   1.256 +    sqlite3_shutdown
   1.257 +    sqlite3_config singlethread
   1.258 +  } SQLITE_OK
   1.259 +} -include {
   1.260 +  delete.test   delete2.test  insert.test  rollback.test  select1.test
   1.261 +  select2.test  trans.test    update.test  vacuum.test    types.test
   1.262 +  types2.test   types3.test
   1.263 +} -shutdown {
   1.264 +  do_test mutex2-X {
   1.265 +    catch {db close}
   1.266 +    sqlite3_shutdown
   1.267 +    sqlite3_config serialized
   1.268 +  } SQLITE_OK
   1.269 +}
   1.270 +
   1.271 +run_tests "nomutex" -description {
   1.272 +  Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
   1.273 +} -initialize {
   1.274 +  rename sqlite3 sqlite3_nomutex
   1.275 +  proc sqlite3 {args} {
   1.276 +    if {[string range [lindex $args 0] 0 0] ne "-"} {
   1.277 +      lappend args -fullmutex 0 -nomutex 1
   1.278 +    }
   1.279 +    uplevel [concat sqlite3_nomutex $args]
   1.280 +  }
   1.281 +} -include {
   1.282 +  delete.test   delete2.test  insert.test  rollback.test  select1.test
   1.283 +  select2.test  trans.test    update.test  vacuum.test    types.test
   1.284 +  types2.test   types3.test
   1.285 +} -shutdown {
   1.286 +  rename sqlite3 {}
   1.287 +  rename sqlite3_nomutex sqlite3
   1.288 +}
   1.289 +
   1.290 +# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
   1.291 +#
   1.292 +run_tests "multithread" -description {
   1.293 +  Tests run in SQLITE_CONFIG_MULTITHREAD mode
   1.294 +} -initialize {
   1.295 +  do_test mutex2-multithread.0 {
   1.296 +    catch {db close}
   1.297 +    sqlite3_shutdown
   1.298 +    sqlite3_config multithread
   1.299 +  } SQLITE_OK
   1.300 +} -include {
   1.301 +  delete.test   delete2.test  insert.test  rollback.test  select1.test
   1.302 +  select2.test  trans.test    update.test  vacuum.test    types.test
   1.303 +  types2.test   types3.test
   1.304 +} -shutdown {
   1.305 +  do_test mutex2-X {
   1.306 +    catch {db close}
   1.307 +    sqlite3_shutdown
   1.308 +    sqlite3_config serialized
   1.309 +  } SQLITE_OK
   1.310 +}
   1.311 +
   1.312 +# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
   1.313 +#
   1.314 +run_tests "fullmutex" -description {
   1.315 +  Tests run in SQLITE_OPEN_FULLMUTEX mode
   1.316 +} -initialize {
   1.317 +  rename sqlite3 sqlite3_fullmutex
   1.318 +  proc sqlite3 {args} {
   1.319 +    if {[string range [lindex $args 0] 0 0] ne "-"} {
   1.320 +      lappend args -nomutex 0 -fullmutex 1
   1.321 +    }
   1.322 +    uplevel [concat sqlite3_fullmutex $args]
   1.323 +  }
   1.324 +} -include {
   1.325 +  delete.test   delete2.test  insert.test  rollback.test  select1.test
   1.326 +  select2.test  trans.test    update.test  vacuum.test    types.test
   1.327 +  types2.test   types3.test
   1.328 +} -shutdown {
   1.329 +  rename sqlite3 {}
   1.330 +  rename sqlite3_fullmutex sqlite3
   1.331 +}
   1.332 +
   1.333 +# Run some tests using the "onefile" demo.
   1.334 +#
   1.335 +run_tests "onefile" -description {
   1.336 +  Run some tests using the "test_onefile.c" demo
   1.337 +} -initialize {
   1.338 +  rename sqlite3 sqlite3_onefile
   1.339 +  proc sqlite3 {args} {
   1.340 +    if {[string range [lindex $args 0] 0 0] ne "-"} {
   1.341 +      lappend args -vfs fs
   1.342 +    }
   1.343 +    uplevel [concat sqlite3_onefile $args]
   1.344 +  }
   1.345 +} -include {
   1.346 +  conflict.test  insert.test   insert2.test  insert3.test
   1.347 +  rollback.test  select1.test  select2.test  select3.test
   1.348 +} -shutdown {
   1.349 +  rename sqlite3 {}
   1.350 +  rename sqlite3_onefile sqlite3
   1.351 +}
   1.352 +
   1.353 +# Run some tests using UTF-16 databases.
   1.354 +#
   1.355 +run_tests "utf16" -description {
   1.356 +  Run tests using UTF-16 databases
   1.357 +} -presql {
   1.358 +  pragma encoding = 'UTF-16'
   1.359 +} -include {
   1.360 +    alter.test alter3.test
   1.361 +    auth.test bind.test blob.test capi2.test capi3.test collate1.test
   1.362 +    collate2.test collate3.test collate4.test collate5.test collate6.test
   1.363 +    conflict.test date.test delete.test expr.test fkey1.test func.test
   1.364 +    hook.test index.test insert2.test insert.test interrupt.test in.test
   1.365 +    intpkey.test ioerr.test join2.test join.test lastinsert.test
   1.366 +    laststmtchanges.test limit.test lock2.test lock.test main.test 
   1.367 +    memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
   1.368 +    null.test progress.test quote.test rowid.test select1.test select2.test
   1.369 +    select3.test select4.test select5.test select6.test sort.test 
   1.370 +    subselect.test tableapi.test table.test temptable.test
   1.371 +    trace.test trigger1.test trigger2.test trigger3.test
   1.372 +    trigger4.test types2.test types.test unique.test update.test
   1.373 +    vacuum.test view.test where.test
   1.374 +}
   1.375 +
   1.376 +# Run some tests in exclusive locking mode.
   1.377 +#
   1.378 +run_tests "exclusive" -description {
   1.379 +  Run tests in exclusive locking mode.
   1.380 +} -presql {
   1.381 +  pragma locking_mode = 'exclusive'
   1.382 +} -include {
   1.383 +  rollback.test select1.test select2.test 
   1.384 +  malloc.test ioerr.test
   1.385 +} 
   1.386 +
   1.387 +# Run some tests in exclusive locking mode with truncated journals.
   1.388 +#
   1.389 +run_tests "exclusive-truncate" -description {
   1.390 +  Run tests in exclusive locking mode and truncate journal mode.
   1.391 +} -presql {
   1.392 +  pragma locking_mode = 'exclusive';
   1.393 +  pragma journal_mode = TRUNCATE;
   1.394 +} -include {
   1.395 +  delete.test delete2.test insert.test rollback.test select1.test
   1.396 +  select2.test update.test malloc.test ioerr.test
   1.397 +} 
   1.398 +
   1.399 +# Run some tests in persistent journal mode.
   1.400 +#
   1.401 +run_tests "persistent_journal" -description {
   1.402 +  Run tests in persistent-journal mode.
   1.403 +} -presql {
   1.404 +  pragma journal_mode = persist
   1.405 +} -include {
   1.406 +  delete.test delete2.test insert.test rollback.test select1.test
   1.407 +  select2.test trans.test update.test vacuum.test 
   1.408 +}
   1.409 +
   1.410 +# Run some tests in truncating journal mode.
   1.411 +#
   1.412 +run_tests "truncate_journal" -description {
   1.413 +  Run tests in persistent-journal mode.
   1.414 +} -presql {
   1.415 +  pragma journal_mode = truncate
   1.416 +} -include {
   1.417 +  delete.test delete2.test insert.test rollback.test select1.test
   1.418 +  select2.test trans.test update.test vacuum.test 
   1.419 +  malloc.test ioerr.test
   1.420 +}
   1.421 +
   1.422 +# Run some error tests in persistent journal mode.
   1.423 +#
   1.424 +run_tests "persistent_journal_error" -description {
   1.425 +  Run malloc.test and ioerr.test in persistent-journal mode.
   1.426 +} -presql {
   1.427 +  pragma journal_mode = persist
   1.428 +} -include {
   1.429 +  malloc.test ioerr.test
   1.430 +}
   1.431 +
   1.432 +# Run some tests in no journal mode.
   1.433 +#
   1.434 +run_tests "no_journal" -description {
   1.435 +  Run tests in no-journal mode.
   1.436 +} -presql {
   1.437 +  pragma journal_mode = persist
   1.438 +} -include {
   1.439 +  delete.test delete2.test insert.test rollback.test select1.test
   1.440 +  select2.test trans.test update.test vacuum.test 
   1.441 +}
   1.442 +
   1.443 +# Run some error tests in no journal mode.
   1.444 +#
   1.445 +run_tests "no_journal_error" -description {
   1.446 +  Run malloc.test and ioerr.test in no-journal mode.
   1.447 +} -presql {
   1.448 +  pragma journal_mode = persist
   1.449 +} -include {
   1.450 +  malloc.test ioerr.test
   1.451 +}
   1.452 +
   1.453 +# Run some crash-tests in autovacuum mode.
   1.454 +#
   1.455 +run_tests "autovacuum_crash" -description {
   1.456 +  Run crash.test in autovacuum mode.
   1.457 +} -presql {
   1.458 +  pragma auto_vacuum = 1
   1.459 +} -include crash.test
   1.460 +
   1.461 +# Run some ioerr-tests in autovacuum mode.
   1.462 +#
   1.463 +run_tests "autovacuum_ioerr" -description {
   1.464 +  Run ioerr.test in autovacuum mode.
   1.465 +} -presql {
   1.466 +  pragma auto_vacuum = 1
   1.467 +} -include ioerr.test
   1.468 +
   1.469 +ifcapable mem3 {
   1.470 +  run_tests "memsys3" -description {
   1.471 +    Run tests using the allocator in mem3.c.
   1.472 +  } -exclude {
   1.473 +    autovacuum.test           delete3.test              manydb.test
   1.474 +    bigrow.test               incrblob2.test            memdb.test
   1.475 +    bitvec.test               index2.test               memsubsys1.test
   1.476 +    capi3c.test               ioerr.test                memsubsys2.test
   1.477 +    capi3.test                join3.test                pagesize.test
   1.478 +    collate5.test             limit.test
   1.479 +  } -initialize {
   1.480 +    catch {db close}
   1.481 +    sqlite3_reset_auto_extension
   1.482 +    sqlite3_shutdown
   1.483 +    sqlite3_config_heap 25000000 0
   1.484 +    sqlite3_config_lookaside 0 0
   1.485 +    install_malloc_faultsim 1 
   1.486 +    sqlite3_initialize
   1.487 +    autoinstall_test_functions
   1.488 +  } -shutdown {
   1.489 +    catch {db close}
   1.490 +    sqlite3_reset_auto_extension
   1.491 +    sqlite3_shutdown
   1.492 +    sqlite3_config_heap 0 0
   1.493 +    sqlite3_config_lookaside 100 500
   1.494 +    install_malloc_faultsim 1 
   1.495 +    sqlite3_initialize
   1.496 +  }
   1.497 +}
   1.498 +
   1.499 +ifcapable mem5 {
   1.500 +  run_tests "memsys5" -description {
   1.501 +    Run tests using the allocator in mem5.c.
   1.502 +  } -exclude {
   1.503 +    autovacuum.test           delete3.test              manydb.test
   1.504 +    bigrow.test               incrblob2.test            memdb.test
   1.505 +    bitvec.test               index2.test               memsubsys1.test
   1.506 +    capi3c.test               ioerr.test                memsubsys2.test
   1.507 +    capi3.test                join3.test                pagesize.test
   1.508 +    collate5.test             limit.test
   1.509 +  } -initialize {
   1.510 +    catch {db close}
   1.511 +    sqlite3_reset_auto_extension
   1.512 +    sqlite3_shutdown
   1.513 +    sqlite3_config_heap 25000000 64
   1.514 +    sqlite3_config_lookaside 0 0
   1.515 +    install_malloc_faultsim 1 
   1.516 +    sqlite3_initialize
   1.517 +    autoinstall_test_functions
   1.518 +  } -shutdown {
   1.519 +    catch {db close}
   1.520 +    sqlite3_reset_auto_extension
   1.521 +    sqlite3_shutdown
   1.522 +    sqlite3_config_heap 0 0
   1.523 +    sqlite3_config_lookaside 100 500
   1.524 +    install_malloc_faultsim 1 
   1.525 +    sqlite3_initialize
   1.526 +  }
   1.527 +
   1.528 +  run_tests "memsys5-2" -description {
   1.529 +    Run tests using the allocator in mem5.c in a different configuration.
   1.530 +  } -include {
   1.531 +    select1.test 
   1.532 +  } -initialize {
   1.533 +    catch {db close}
   1.534 +    sqlite3_reset_auto_extension
   1.535 +    sqlite3_shutdown
   1.536 +    sqlite3_config_heap 40000000 16
   1.537 +    sqlite3_config_lookaside 0 0
   1.538 +    install_malloc_faultsim 1 
   1.539 +    sqlite3_initialize
   1.540 +    autoinstall_test_functions
   1.541 +  } -shutdown {
   1.542 +    catch {db close}
   1.543 +    sqlite3_reset_auto_extension
   1.544 +    sqlite3_shutdown
   1.545 +    sqlite3_config_heap 0 0
   1.546 +    sqlite3_config_lookaside 100 500
   1.547 +    install_malloc_faultsim 1 
   1.548 +    sqlite3_initialize
   1.549 +  }
   1.550 +}
   1.551 +
   1.552 +ifcapable threadsafe {
   1.553 +  run_tests "no_mutex_try" -description {
   1.554 +     The sqlite3_mutex_try() interface always fails
   1.555 +  } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
   1.556 +  -initialize {
   1.557 +    catch {db close}
   1.558 +    sqlite3_shutdown
   1.559 +    install_mutex_counters 1
   1.560 +    set ::disable_mutex_try 1
   1.561 +  } -shutdown {
   1.562 +    catch {db close}
   1.563 +    sqlite3_shutdown
   1.564 +    install_mutex_counters 0
   1.565 +  }
   1.566 +}
   1.567 +
   1.568 +run_tests "memsys6" -description {
   1.569 +  Run tests using the allocator in mem6.c.
   1.570 +} -exclude {
   1.571 +  capi3.test capi3c.test 
   1.572 +} -initialize {
   1.573 +  catch {db close}
   1.574 +  sqlite3_reset_auto_extension
   1.575 +  sqlite3_shutdown
   1.576 +  sqlite3_config_chunkalloc 0
   1.577 +  install_malloc_faultsim 1 
   1.578 +  sqlite3_initialize
   1.579 +  autoinstall_test_functions
   1.580 +} -shutdown {
   1.581 +  catch {db close}
   1.582 +  sqlite3_reset_auto_extension
   1.583 +  sqlite3_shutdown
   1.584 +  sqlite3_config_heap 0 0
   1.585 +  install_malloc_faultsim 1 
   1.586 +  sqlite3_initialize
   1.587 +}
   1.588 +
   1.589 +# run_tests "crash_safe_append" -description {
   1.590 +#   Run crash.test with persistent journals on a SAFE_APPEND file-system.
   1.591 +# } -initialize {
   1.592 +#   rename crashsql sa_crashsql
   1.593 +#   proc crashsql {args} {
   1.594 +#     set options [lrange $args 0 [expr {[llength $args]-2}]]
   1.595 +#     lappend options -char safe_append
   1.596 +#     set sql [lindex $args end]
   1.597 +#     lappend options "
   1.598 +#       PRAGMA journal_mode=persistent;
   1.599 +#       $sql
   1.600 +#     "
   1.601 +#     set fd [open test.db-journal w]
   1.602 +#     puts $fd [string repeat 1234567890 100000]
   1.603 +#     close $fd
   1.604 +#     eval sa_crashsql $options
   1.605 +#   }
   1.606 +# } -shutdown {
   1.607 +#   rename crashsql {}
   1.608 +#   rename sa_crashsql crashsql
   1.609 +# } -include crash.test
   1.610 +
   1.611 +run_tests "safe_append" -description {
   1.612 +  Run some tests on a SAFE_APPEND file-system.
   1.613 +} -initialize {
   1.614 +  rename sqlite3 sqlite3_safeappend
   1.615 +  proc sqlite3 {args} {
   1.616 +    if {[string range [lindex $args 0] 0 0] ne "-"} {
   1.617 +      lappend args -vfs devsym
   1.618 +    }
   1.619 +    uplevel [concat sqlite3_safeappend $args]
   1.620 +  }
   1.621 +  sqlite3_simulate_device -char safe_append
   1.622 +} -shutdown {
   1.623 +  rename sqlite3 {}
   1.624 +  rename sqlite3_shutdown sqlite3
   1.625 +} -include [lsort [concat shared_err.test $ALLTESTS]] \
   1.626 +  -exclude async3.test
   1.627 +
   1.628 +
   1.629 +# End of tests
   1.630 +#############################################################################
   1.631 +
   1.632 +if {$::perm::testmode eq "targets"} { puts "" ; exit }
   1.633 +
   1.634 +# Restore the [sqlite3] command.
   1.635 +#
   1.636 +rename sqlite3 {}
   1.637 +rename really_sqlite3 sqlite3
   1.638 +
   1.639 +# Restore the [finish_test] command.
   1.640 +#
   1.641 +rename finish_test ""
   1.642 +rename really_finish_test2 finish_test
   1.643 +
   1.644 +# Restore the [do_test] command.
   1.645 +#
   1.646 +rename do_test ""
   1.647 +rename really_do_test do_test
   1.648 +
   1.649 +finish_test