persistentstorage/sqlite3api/TEST/TclScript/memleak.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 # 2001 September 15
       
     2 #
       
     3 # The author disclaims copyright to this source code.  In place of
       
     4 # a legal notice, here is a blessing:
       
     5 #
       
     6 #    May you do good and not evil.
       
     7 #    May you find forgiveness for yourself and forgive others.
       
     8 #    May you share freely, never taking more than you give.
       
     9 #
       
    10 #***********************************************************************
       
    11 # This file runs all tests.
       
    12 #
       
    13 # $Id: memleak.test,v 1.10 2007/03/30 17:17:52 drh Exp $
       
    14 
       
    15 set testdir [file dirname $argv0]
       
    16 source $testdir/tester.tcl
       
    17 rename finish_test memleak_finish_test
       
    18 proc finish_test {} {
       
    19   catch {db close}
       
    20   memleak_check
       
    21 }
       
    22 
       
    23 if {[file exists ./sqlite_test_count]} {
       
    24   set COUNT [exec cat ./sqlite_test_count]
       
    25 } else {
       
    26   set COUNT 3
       
    27 }
       
    28 
       
    29 # LeakList will hold a list of the number of unfreed mallocs after
       
    30 # each round of the test.  This number should be constant.  If it
       
    31 # grows, it may mean there is a memory leak in the library.
       
    32 #
       
    33 set LeakList {}
       
    34 
       
    35 set EXCLUDE {
       
    36   all.test
       
    37   quick.test
       
    38   misuse.test
       
    39   memleak.test
       
    40   btree2.test
       
    41   async.test
       
    42   async2.test
       
    43   trans.test
       
    44   crash.test
       
    45   autovacuum_crash.test
       
    46 }
       
    47 # Test files btree2.test and btree4.test don't work if the 
       
    48 # SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend
       
    49 # on tables being allocated starting at page 2).
       
    50 #
       
    51 ifcapable default_autovacuum {
       
    52   lappend EXCLUDE btree2.test
       
    53   lappend EXCLUDE btree4.test
       
    54 }
       
    55 
       
    56 if {[sqlite3 -has-codec]} {
       
    57   # lappend EXCLUDE 
       
    58 }
       
    59 if {[llength $argv]>0} {
       
    60   set FILELIST $argv
       
    61   set argv {}
       
    62 } else {
       
    63   set FILELIST [lsort -dictionary [glob $testdir/*.test]]
       
    64 }
       
    65 
       
    66 foreach testfile $FILELIST {
       
    67   set tail [file tail $testfile]
       
    68   if {[lsearch -exact $EXCLUDE $tail]>=0} continue
       
    69   set LeakList {}
       
    70   for {set COUNTER 0} {$COUNTER<$COUNT} {incr COUNTER} {
       
    71     source $testfile
       
    72     if {[info exists Leak]} {
       
    73       lappend LeakList $Leak
       
    74     }
       
    75   }
       
    76   if {$LeakList!=""} {
       
    77     puts -nonewline memory-leak-test-$tail...
       
    78     incr ::nTest
       
    79     foreach x $LeakList {
       
    80       if {$x!=[lindex $LeakList 0]} {
       
    81          puts " failed! ($LeakList)"
       
    82          incr ::nErr
       
    83          lappend ::failList memory-leak-test-$tail
       
    84          break
       
    85        }
       
    86     }
       
    87     puts " Ok"
       
    88   }
       
    89 }
       
    90 memleak_finish_test
       
    91 
       
    92 # Run the malloc tests and the misuse test after memory leak detection.
       
    93 # Both tests leak memory.
       
    94 #
       
    95 #catch {source $testdir/misuse.test}
       
    96 #catch {source $testdir/malloc.test}
       
    97 
       
    98 memleak_finish_test