# 2013 November 22
#
# 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 implements regression tests for SQLite library.  The
# focus of this script is the Win32 heap implementation.
#

if {$tcl_platform(platform)!="windows"} return

set testdir [file dirname $argv0]
source $testdir/tester.tcl

ifcapable !win32malloc {
  finish_test
  return
}

set testprefix win32heap

do_test 1.1 {
  catch {db close}
  sqlite3_shutdown
  sqlite3_config_heap_size 1048576
  sqlite3_initialize
} {SQLITE_OK}

do_test 1.2 {
  sqlite3 db test.db
  catchsql {
    CREATE TABLE t1(x);
  }
} {0 {}}

do_test 1.3 {
  catchsql {
    INSERT INTO t1 (x) VALUES(RANDOMBLOB(1048576));
  }
} {1 {out of memory}}

do_test 1.4 {
  catchsql {
    SELECT COUNT(*) FROM t1;
  }
} {0 0}

do_test 1.5 {
  catch {db close}
  sqlite3_shutdown
  sqlite3_config_heap_size 0
  sqlite3_initialize
} {SQLITE_OK}

do_test 1.6 {
  sqlite3 db test.db
  catchsql {
    INSERT INTO t1 (x) VALUES(RANDOMBLOB(1048576));
  }
} {0 {}}

do_test 1.7 {
  catchsql {
    SELECT COUNT(*) FROM t1;
  }
} {0 1}

finish_test
