Annotation of embedaddon/sqlite3/test/memsubsys2.test, revision 1.1
1.1 ! misho 1: # 2008 June 18
! 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: #
! 12: # This file contains tests of the memory allocation subsystem.
! 13: #
! 14: # $Id: memsubsys2.test,v 1.2 2008/08/12 15:21:12 drh Exp $
! 15:
! 16: set testdir [file dirname $argv0]
! 17: source $testdir/tester.tcl
! 18: sqlite3_reset_auto_extension
! 19:
! 20: # This procedure constructs a new database in test.db. It fills
! 21: # this database with many small records (enough to force multiple
! 22: # rebalance operations in the btree-layer and to require a large
! 23: # page cache), verifies correct results, then returns.
! 24: #
! 25: proc build_test_db {testname pragmas} {
! 26: catch {db close}
! 27: forcedelete test.db test.db-journal
! 28: sqlite3 db test.db
! 29: db eval $pragmas
! 30: db eval {
! 31: CREATE TABLE t1(x, y);
! 32: CREATE TABLE t2(a, b);
! 33: CREATE INDEX i1 ON t1(x,y);
! 34: INSERT INTO t1 VALUES(1, 100);
! 35: INSERT INTO t1 VALUES(2, 200);
! 36: }
! 37: for {set i 2} {$i<5000} {incr i $i} {
! 38: db eval {INSERT INTO t2 SELECT * FROM t1}
! 39: db eval {INSERT INTO t1 SELECT a+$i, a+b*100 FROM t2}
! 40: db eval {DELETE FROM t2}
! 41: }
! 42: do_test $testname.1 {
! 43: db eval {SELECT count(*) FROM t1}
! 44: } 8192
! 45: integrity_check $testname.2
! 46: }
! 47:
! 48: # Reset all of the highwater marks.
! 49: #
! 50: proc reset_highwater_marks {} {
! 51: sqlite3_status SQLITE_STATUS_MEMORY_USED 1
! 52: sqlite3_status SQLITE_STATUS_MALLOC_SIZE 1
! 53: sqlite3_status SQLITE_STATUS_PAGECACHE_USED 1
! 54: sqlite3_status SQLITE_STATUS_PAGECACHE_OVERFLOW 1
! 55: sqlite3_status SQLITE_STATUS_PAGECACHE_SIZE 1
! 56: sqlite3_status SQLITE_STATUS_SCRATCH_USED 1
! 57: sqlite3_status SQLITE_STATUS_SCRATCH_OVERFLOW 1
! 58: sqlite3_status SQLITE_STATUS_SCRATCH_SIZE 1
! 59: sqlite3_status SQLITE_STATUS_PARSER_STACK 1
! 60: }
! 61:
! 62: # Test 1: Verify that calling sqlite3_malloc(0) returns a NULL
! 63: # pointer.
! 64: #
! 65: set highwater [sqlite3_memory_highwater 0]
! 66: do_test memsubsys2-1.1 {
! 67: sqlite3_malloc 0
! 68: } {0}
! 69: do_test memsubsys2-1.2 {
! 70: sqlite3_memory_highwater 0
! 71: } $highwater
! 72:
! 73:
! 74: # Test 2: Verify that the highwater mark increases after a large
! 75: # allocation.
! 76: #
! 77: sqlite3_memory_highwater 1
! 78: set highwater [sqlite3_memory_highwater 0]
! 79: do_test memsubsys2-2.1 {
! 80: sqlite3_free [set x [sqlite3_malloc 100000]]
! 81: expr {$x!="0"}
! 82: } {1}
! 83: do_test memsubsys2-2.2 {
! 84: expr {[sqlite3_memory_highwater 0]>=[sqlite3_memory_used]+$highwater}
! 85: } {1}
! 86:
! 87: # Test 3: Verify that turning of memstatus disables the statistics
! 88: # tracking.
! 89: #
! 90: db close
! 91: sqlite3_shutdown
! 92: sqlite3_config_memstatus 0
! 93: sqlite3_initialize
! 94: reset_highwater_marks
! 95: set highwater [sqlite3_memory_highwater 0]
! 96: do_test memsubsys2-3.1 {
! 97: set highwater
! 98: } {0}
! 99: do_test memsubsys2-3.2 {
! 100: sqlite3_malloc 0
! 101: } {0}
! 102: do_test memsubsys2-3.3 {
! 103: sqlite3_memory_highwater 0
! 104: } {0}
! 105: do_test memsubsys2-3.4 {
! 106: sqlite3_memory_used
! 107: } {0}
! 108: do_test memsubsys2-3.5 {
! 109: set ::allocation [sqlite3_malloc 100000]
! 110: expr {$::allocation!="0"}
! 111: } {1}
! 112: do_test memsubsys2-3.6 {
! 113: sqlite3_memory_highwater 0
! 114: } {0}
! 115: do_test memsubsys2-3.7 {
! 116: sqlite3_memory_used
! 117: } {0}
! 118: do_test memsubsys2-3.8 {
! 119: sqlite3_free $::allocation
! 120: } {}
! 121: do_test memsubsys2-3.9 {
! 122: sqlite3_free 0
! 123: } {}
! 124:
! 125:
! 126: # Test 4: Verify that turning on memstatus reenables the statistics
! 127: # tracking.
! 128: #
! 129: sqlite3_shutdown
! 130: sqlite3_config_memstatus 1
! 131: sqlite3_initialize
! 132: reset_highwater_marks
! 133: set highwater [sqlite3_memory_highwater 0]
! 134: do_test memsubsys2-4.1 {
! 135: set highwater
! 136: } {0}
! 137: do_test memsubsys2-4.2 {
! 138: sqlite3_malloc 0
! 139: } {0}
! 140: do_test memsubsys2-4.3 {
! 141: sqlite3_memory_highwater 0
! 142: } {0}
! 143: do_test memsubsys2-4.4 {
! 144: sqlite3_memory_used
! 145: } {0}
! 146: do_test memsubsys2-4.5 {
! 147: set ::allocation [sqlite3_malloc 100000]
! 148: expr {$::allocation!="0"}
! 149: } {1}
! 150: do_test memsubsys2-4.6 {
! 151: expr {[sqlite3_memory_highwater 0]>=100000}
! 152: } {1}
! 153: do_test memsubsys2-4.7 {
! 154: expr {[sqlite3_memory_used]>=100000}
! 155: } {1}
! 156: do_test memsubsys2-4.8 {
! 157: sqlite3_free $::allocation
! 158: } {}
! 159: do_test memsubsys2-4.9 {
! 160: sqlite3_free 0
! 161: } {}
! 162: do_test memsubsys2-4.10 {
! 163: expr {[sqlite3_memory_highwater 0]>=100000}
! 164: } {1}
! 165: do_test memsubsys2-4.11 {
! 166: sqlite3_memory_used
! 167: } {0}
! 168:
! 169:
! 170:
! 171:
! 172: autoinstall_test_functions
! 173: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>