persistentstorage/sqlite3api/TEST/TclScript/memleak.test
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sqlite3api/TEST/TclScript/memleak.test	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,98 @@
+# 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.10 2007/03/30 17:17:52 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+rename finish_test memleak_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
+  async.test
+  async2.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"
+  }
+}
+memleak_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}
+
+memleak_finish_test