/opensource.apple.com/source/BerkeleyDB/BerkeleyDB-15/db/test/test045.tcl
# · TCL · 151 lines · 140 code · 11 blank · 0 comment · 8 complexity · 8e2783a140cb59f68fd5d6ce0566f7c3 MD5 · raw file
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>test045.tcl</title>
- <style type="text/css">
- .enscript-comment { font-style: italic; color: rgb(178,34,34); }
- .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
- .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
- .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
- .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
- .enscript-string { font-weight: bold; color: rgb(188,143,143); }
- .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
- .enscript-type { font-weight: bold; color: rgb(34,139,34); }
- .enscript-highlight { text-decoration: underline; color: 0; }
- </style>
- </head>
- <body id="top">
- <h1 style="margin:8px;" id="f1">test045.tcl <span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
- <hr/>
- <div></div>
- <pre>
- <span class="enscript-comment"># See the file LICENSE for redistribution information.
- </span><span class="enscript-comment">#
- </span><span class="enscript-comment"># Copyright (c) 1996-2003
- </span><span class="enscript-comment"># Sleepycat Software. All rights reserved.
- </span><span class="enscript-comment">#
- </span><span class="enscript-comment"># $Id: test045.tcl,v 1.2 2004/03/30 01:24:08 jtownsen Exp $
- </span><span class="enscript-comment">#
- </span><span class="enscript-comment"># TEST test045
- </span><span class="enscript-comment"># TEST Small random tester
- </span><span class="enscript-comment"># TEST Runs a number of random add/delete/retrieve operations.
- </span><span class="enscript-comment"># TEST Tests both successful conditions and error conditions.
- </span><span class="enscript-comment"># TEST
- </span><span class="enscript-comment"># TEST Run the random db tester on the specified access method.
- </span><span class="enscript-comment">#
- </span><span class="enscript-comment"># Options are:
- </span><span class="enscript-comment"># -adds <maximum number of keys before you disable adds>
- </span><span class="enscript-comment"># -cursors <number of cursors>
- </span><span class="enscript-comment"># -dataavg <average data size>
- </span><span class="enscript-comment"># -delete <minimum number of keys before you disable deletes>
- </span><span class="enscript-comment"># -dups <allow duplicates in file>
- </span><span class="enscript-comment"># -errpct <Induce errors errpct of the time>
- </span><span class="enscript-comment"># -init <initial number of entries in database>
- </span><span class="enscript-comment"># -keyavg <average key size>
- </span><span class="enscript-keyword">proc</span> <span class="enscript-function-name">test045</span> {<span class="enscript-variable-name"> method {nops 10000} args </span>} {
- <span class="enscript-keyword">source</span> ./include.tcl
- <span class="enscript-keyword">global</span> encrypt
- <span class="enscript-comment">#
- </span> <span class="enscript-comment"># If we are using an env, then skip this test. It needs its own.
- </span> <span class="enscript-keyword">set</span> eindex [<span class="enscript-keyword">lsearch</span> -exact $<span class="enscript-variable-name">args</span> <span class="enscript-string">"-env"</span>]
- <span class="enscript-keyword">if</span> { $<span class="enscript-variable-name">eindex</span> != -1 } {
- <span class="enscript-keyword">incr</span> eindex
- <span class="enscript-keyword">set</span> env [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">eindex</span>]
- <span class="enscript-keyword">puts</span> <span class="enscript-string">"Test045 skipping for env $env"</span>
- <span class="enscript-keyword">return</span>
- }
- <span class="enscript-keyword">set</span> args [convert_args $<span class="enscript-variable-name">method</span> $<span class="enscript-variable-name">args</span>]
- <span class="enscript-keyword">if</span> { $<span class="enscript-variable-name">encrypt</span> != 0 } {
- <span class="enscript-keyword">puts</span> <span class="enscript-string">"Test045 skipping for security"</span>
- <span class="enscript-keyword">return</span>
- }
- <span class="enscript-keyword">set</span> omethod [convert_method $<span class="enscript-variable-name">method</span>]
- <span class="enscript-keyword">puts</span> <span class="enscript-string">"Test045: Random tester on $method for $nops operations"</span>
- <span class="enscript-comment"># Set initial parameters
- </span> <span class="enscript-keyword">set</span> adds [<span class="enscript-keyword">expr</span> $<span class="enscript-variable-name">nops</span> * 10]
- <span class="enscript-keyword">set</span> cursors 5
- <span class="enscript-keyword">set</span> dataavg 40
- <span class="enscript-keyword">set</span> delete $<span class="enscript-variable-name">nops</span>
- <span class="enscript-keyword">set</span> dups 0
- <span class="enscript-keyword">set</span> errpct 0
- <span class="enscript-keyword">set</span> init 0
- <span class="enscript-keyword">if</span> { [is_record_based $<span class="enscript-variable-name">method</span>] == 1 } {
- <span class="enscript-keyword">set</span> keyavg 10
- } else {
- <span class="enscript-keyword">set</span> keyavg 25
- }
- <span class="enscript-comment"># Process arguments
- </span> <span class="enscript-keyword">set</span> oargs <span class="enscript-string">""</span>
- <span class="enscript-keyword">for</span> { <span class="enscript-keyword">set</span> i 0 } { $<span class="enscript-variable-name">i</span> < [<span class="enscript-keyword">llength</span> $<span class="enscript-variable-name">args</span>] } {<span class="enscript-keyword">incr</span> i} {
- <span class="enscript-keyword">switch</span> -<span class="enscript-keyword">regexp</span> -- [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] {
- -adds { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> adds [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -cursors { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> cursors [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -dataavg { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> dataavg [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -delete { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> delete [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -dups { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> dups [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -errpct { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> errpct [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -init { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> init [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -keyavg { <span class="enscript-keyword">incr</span> i; <span class="enscript-keyword">set</span> keyavg [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- -extent { <span class="enscript-keyword">incr</span> i;
- <span class="enscript-keyword">lappend</span> oargs <span class="enscript-string">"-extent"</span> <span class="enscript-string">"100"</span> }
- default { <span class="enscript-keyword">lappend</span> oargs [<span class="enscript-keyword">lindex</span> $<span class="enscript-variable-name">args</span> $<span class="enscript-variable-name">i</span>] }
- }
- }
- <span class="enscript-comment"># Create the database and and initialize it.
- </span> <span class="enscript-keyword">set</span> root $<span class="enscript-variable-name">testdir</span>/test045
- <span class="enscript-keyword">set</span> f $<span class="enscript-variable-name">root</span>.db
- env_cleanup $<span class="enscript-variable-name">testdir</span>
- <span class="enscript-comment"># Run the script with 3 times the number of initial elements to
- </span> <span class="enscript-comment"># set it up.
- </span> <span class="enscript-keyword">set</span> db [<span class="enscript-keyword">eval</span> {berkdb_open \
- -create -mode 0644 $<span class="enscript-variable-name">omethod</span>} $<span class="enscript-variable-name">oargs</span> {$<span class="enscript-variable-name">f</span>}]
- error_check_good dbopen:$<span class="enscript-variable-name">f</span> [is_valid_db $<span class="enscript-variable-name">db</span>] TRUE
- <span class="enscript-keyword">set</span> r [$<span class="enscript-variable-name">db</span> close]
- error_check_good dbclose:$<span class="enscript-variable-name">f</span> $<span class="enscript-variable-name">r</span> 0
- <span class="enscript-comment"># We redirect standard out, but leave standard error here so we
- </span> <span class="enscript-comment"># can see errors.
- </span>
- <span class="enscript-keyword">puts</span> <span class="enscript-string">"\tTest045.a: Initializing database"</span>
- <span class="enscript-keyword">if</span> { $<span class="enscript-variable-name">init</span> != 0 } {
- <span class="enscript-keyword">set</span> n [<span class="enscript-keyword">expr</span> 3 * $<span class="enscript-variable-name">init</span>]
- <span class="enscript-keyword">exec</span> $<span class="enscript-variable-name">tclsh_path</span> \
- $<span class="enscript-variable-name">test_path</span>/dbscript.tcl $<span class="enscript-variable-name">method</span> $<span class="enscript-variable-name">f</span> $<span class="enscript-variable-name">n</span> \
- 1 $<span class="enscript-variable-name">init</span> $<span class="enscript-variable-name">n</span> $<span class="enscript-variable-name">keyavg</span> $<span class="enscript-variable-name">dataavg</span> $<span class="enscript-variable-name">dups</span> 0 -1 \
- > $<span class="enscript-variable-name">testdir</span>/test045.init
- }
- <span class="enscript-comment"># Check for test failure
- </span> <span class="enscript-keyword">set</span> initerrs [findfail $<span class="enscript-variable-name">testdir</span>/test045.init]
- <span class="enscript-keyword">foreach</span> str $<span class="enscript-variable-name">initerrs</span> {
- <span class="enscript-keyword">puts</span> <span class="enscript-string">"FAIL: error message in .init file: $str"</span>
- }
- <span class="enscript-keyword">puts</span> <span class="enscript-string">"\tTest045.b: Now firing off berkdb rand dbscript, running: "</span>
- <span class="enscript-comment"># Now the database is initialized, run a test
- </span> <span class="enscript-keyword">puts</span> <span class="enscript-string">"$tclsh_path\
- $test_path/dbscript.tcl $method $f $nops $cursors $delete $adds \
- $keyavg $dataavg $dups $errpct > $testdir/test045.log"</span>
- <span class="enscript-keyword">exec</span> $<span class="enscript-variable-name">tclsh_path</span> \
- $<span class="enscript-variable-name">test_path</span>/dbscript.tcl $<span class="enscript-variable-name">method</span> $<span class="enscript-variable-name">f</span> \
- $<span class="enscript-variable-name">nops</span> $<span class="enscript-variable-name">cursors</span> $<span class="enscript-variable-name">delete</span> $<span class="enscript-variable-name">adds</span> $<span class="enscript-variable-name">keyavg</span> \
- $<span class="enscript-variable-name">dataavg</span> $<span class="enscript-variable-name">dups</span> $<span class="enscript-variable-name">errpct</span> \
- > $<span class="enscript-variable-name">testdir</span>/test045.log
- <span class="enscript-comment"># Check for test failure
- </span> <span class="enscript-keyword">set</span> logerrs [findfail $<span class="enscript-variable-name">testdir</span>/test045.log]
- <span class="enscript-keyword">foreach</span> str $<span class="enscript-variable-name">logerrs</span> {
- <span class="enscript-keyword">puts</span> <span class="enscript-string">"FAIL: error message in log file: $str"</span>
- }
- }
- </pre>
- <hr />
- </body></html>