gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/memleak.test (about)

     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           fail_test memory-leak-test-$tail
    83           break
    84         }
    85      }
    86      puts " Ok"
    87    }
    88  }
    89  memleak_finish_test
    90  
    91  # Run the malloc tests and the misuse test after memory leak detection.
    92  # Both tests leak memory.
    93  #
    94  #catch {source $testdir/misuse.test}
    95  #catch {source $testdir/malloc.test}
    96  
    97  memleak_finish_test