# 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file runs all tests. # # $Id: memleak.test,v 1.9 2005/03/16 12:15:22 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl rename finish_test really_finish_test proc finish_test {} { catch {db close} memleak_check } if {[file exists ./sqlite_test_count]} { set COUNT [exec cat ./sqlite_test_count] } else { set COUNT 3 } # LeakList will hold a list of the number of unfreed mallocs after # each round of the test. This number should be constant. If it # grows, it may mean there is a memory leak in the library. # set LeakList {} set EXCLUDE { all.test quick.test misuse.test memleak.test btree2.test trans.test crash.test autovacuum_crash.test } # Test files btree2.test and btree4.test don't work if the # SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend # on tables being allocated starting at page 2). # ifcapable default_autovacuum { lappend EXCLUDE btree2.test lappend EXCLUDE btree4.test } if {[sqlite3 -has-codec]} { # lappend EXCLUDE } if {[llength $argv]>0} { set FILELIST $argv set argv {} } else { set FILELIST [lsort -dictionary [glob $testdir/*.test]] } foreach testfile $FILELIST { set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue set LeakList {} for {set COUNTER 0} {$COUNTER<$COUNT} {incr COUNTER} { source $testfile if {[info exists Leak]} { lappend LeakList $Leak } } if {$LeakList!=""} { puts -nonewline memory-leak-test-$tail... incr ::nTest foreach x $LeakList { if {$x!=[lindex $LeakList 0]} { puts " failed! ($LeakList)" incr ::nErr lappend ::failList memory-leak-test-$tail break } } puts " Ok" } } really_finish_test # Run the malloc tests and the misuse test after memory leak detection. # Both tests leak memory. # #catch {source $testdir/misuse.test} #catch {source $testdir/malloc.test} really_finish_test