PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/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
Possible License(s): GPL-2.0, AGPL-1.0, AGPL-3.0, CC-BY-SA-3.0, MPL-2.0-no-copyleft-exception, MPL-2.0, JSON, 0BSD, LGPL-2.1, Apache-2.0, BSD-3-Clause, ISC, LGPL-2.0, WTFPL, MIT
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <title>test045.tcl</title>
  6. <style type="text/css">
  7. .enscript-comment { font-style: italic; color: rgb(178,34,34); }
  8. .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
  9. .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
  10. .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
  11. .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
  12. .enscript-string { font-weight: bold; color: rgb(188,143,143); }
  13. .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
  14. .enscript-type { font-weight: bold; color: rgb(34,139,34); }
  15. .enscript-highlight { text-decoration: underline; color: 0; }
  16. </style>
  17. </head>
  18. <body id="top">
  19. <h1 style="margin:8px;" id="f1">test045.tcl&nbsp;&nbsp;&nbsp;<span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
  20. <hr/>
  21. <div></div>
  22. <pre>
  23. <span class="enscript-comment"># See the file LICENSE for redistribution information.
  24. </span><span class="enscript-comment">#
  25. </span><span class="enscript-comment"># Copyright (c) 1996-2003
  26. </span><span class="enscript-comment"># Sleepycat Software. All rights reserved.
  27. </span><span class="enscript-comment">#
  28. </span><span class="enscript-comment"># $Id: test045.tcl,v 1.2 2004/03/30 01:24:08 jtownsen Exp $
  29. </span><span class="enscript-comment">#
  30. </span><span class="enscript-comment"># TEST test045
  31. </span><span class="enscript-comment"># TEST Small random tester
  32. </span><span class="enscript-comment"># TEST Runs a number of random add/delete/retrieve operations.
  33. </span><span class="enscript-comment"># TEST Tests both successful conditions and error conditions.
  34. </span><span class="enscript-comment"># TEST
  35. </span><span class="enscript-comment"># TEST Run the random db tester on the specified access method.
  36. </span><span class="enscript-comment">#
  37. </span><span class="enscript-comment"># Options are:
  38. </span><span class="enscript-comment"># -adds &lt;maximum number of keys before you disable adds&gt;
  39. </span><span class="enscript-comment"># -cursors &lt;number of cursors&gt;
  40. </span><span class="enscript-comment"># -dataavg &lt;average data size&gt;
  41. </span><span class="enscript-comment"># -delete &lt;minimum number of keys before you disable deletes&gt;
  42. </span><span class="enscript-comment"># -dups &lt;allow duplicates in file&gt;
  43. </span><span class="enscript-comment"># -errpct &lt;Induce errors errpct of the time&gt;
  44. </span><span class="enscript-comment"># -init &lt;initial number of entries in database&gt;
  45. </span><span class="enscript-comment"># -keyavg &lt;average key size&gt;
  46. </span><span class="enscript-keyword">proc</span> <span class="enscript-function-name">test045</span> {<span class="enscript-variable-name"> method {nops 10000} args </span>} {
  47. <span class="enscript-keyword">source</span> ./include.tcl
  48. <span class="enscript-keyword">global</span> encrypt
  49. <span class="enscript-comment">#
  50. </span> <span class="enscript-comment"># If we are using an env, then skip this test. It needs its own.
  51. </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">&quot;-env&quot;</span>]
  52. <span class="enscript-keyword">if</span> { $<span class="enscript-variable-name">eindex</span> != -1 } {
  53. <span class="enscript-keyword">incr</span> eindex
  54. <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>]
  55. <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;Test045 skipping for env $env&quot;</span>
  56. <span class="enscript-keyword">return</span>
  57. }
  58. <span class="enscript-keyword">set</span> args [convert_args $<span class="enscript-variable-name">method</span> $<span class="enscript-variable-name">args</span>]
  59. <span class="enscript-keyword">if</span> { $<span class="enscript-variable-name">encrypt</span> != 0 } {
  60. <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;Test045 skipping for security&quot;</span>
  61. <span class="enscript-keyword">return</span>
  62. }
  63. <span class="enscript-keyword">set</span> omethod [convert_method $<span class="enscript-variable-name">method</span>]
  64. <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;Test045: Random tester on $method for $nops operations&quot;</span>
  65. <span class="enscript-comment"># Set initial parameters
  66. </span> <span class="enscript-keyword">set</span> adds [<span class="enscript-keyword">expr</span> $<span class="enscript-variable-name">nops</span> * 10]
  67. <span class="enscript-keyword">set</span> cursors 5
  68. <span class="enscript-keyword">set</span> dataavg 40
  69. <span class="enscript-keyword">set</span> delete $<span class="enscript-variable-name">nops</span>
  70. <span class="enscript-keyword">set</span> dups 0
  71. <span class="enscript-keyword">set</span> errpct 0
  72. <span class="enscript-keyword">set</span> init 0
  73. <span class="enscript-keyword">if</span> { [is_record_based $<span class="enscript-variable-name">method</span>] == 1 } {
  74. <span class="enscript-keyword">set</span> keyavg 10
  75. } else {
  76. <span class="enscript-keyword">set</span> keyavg 25
  77. }
  78. <span class="enscript-comment"># Process arguments
  79. </span> <span class="enscript-keyword">set</span> oargs <span class="enscript-string">&quot;&quot;</span>
  80. <span class="enscript-keyword">for</span> { <span class="enscript-keyword">set</span> i 0 } { $<span class="enscript-variable-name">i</span> &lt; [<span class="enscript-keyword">llength</span> $<span class="enscript-variable-name">args</span>] } {<span class="enscript-keyword">incr</span> i} {
  81. <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>] {
  82. -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>] }
  83. -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>] }
  84. -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>] }
  85. -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>] }
  86. -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>] }
  87. -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>] }
  88. -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>] }
  89. -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>] }
  90. -extent { <span class="enscript-keyword">incr</span> i;
  91. <span class="enscript-keyword">lappend</span> oargs <span class="enscript-string">&quot;-extent&quot;</span> <span class="enscript-string">&quot;100&quot;</span> }
  92. 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>] }
  93. }
  94. }
  95. <span class="enscript-comment"># Create the database and and initialize it.
  96. </span> <span class="enscript-keyword">set</span> root $<span class="enscript-variable-name">testdir</span>/test045
  97. <span class="enscript-keyword">set</span> f $<span class="enscript-variable-name">root</span>.db
  98. env_cleanup $<span class="enscript-variable-name">testdir</span>
  99. <span class="enscript-comment"># Run the script with 3 times the number of initial elements to
  100. </span> <span class="enscript-comment"># set it up.
  101. </span> <span class="enscript-keyword">set</span> db [<span class="enscript-keyword">eval</span> {berkdb_open \
  102. -create -mode 0644 $<span class="enscript-variable-name">omethod</span>} $<span class="enscript-variable-name">oargs</span> {$<span class="enscript-variable-name">f</span>}]
  103. error_check_good dbopen:$<span class="enscript-variable-name">f</span> [is_valid_db $<span class="enscript-variable-name">db</span>] TRUE
  104. <span class="enscript-keyword">set</span> r [$<span class="enscript-variable-name">db</span> close]
  105. error_check_good dbclose:$<span class="enscript-variable-name">f</span> $<span class="enscript-variable-name">r</span> 0
  106. <span class="enscript-comment"># We redirect standard out, but leave standard error here so we
  107. </span> <span class="enscript-comment"># can see errors.
  108. </span>
  109. <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;\tTest045.a: Initializing database&quot;</span>
  110. <span class="enscript-keyword">if</span> { $<span class="enscript-variable-name">init</span> != 0 } {
  111. <span class="enscript-keyword">set</span> n [<span class="enscript-keyword">expr</span> 3 * $<span class="enscript-variable-name">init</span>]
  112. <span class="enscript-keyword">exec</span> $<span class="enscript-variable-name">tclsh_path</span> \
  113. $<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> \
  114. 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 \
  115. &gt; $<span class="enscript-variable-name">testdir</span>/test045.init
  116. }
  117. <span class="enscript-comment"># Check for test failure
  118. </span> <span class="enscript-keyword">set</span> initerrs [findfail $<span class="enscript-variable-name">testdir</span>/test045.init]
  119. <span class="enscript-keyword">foreach</span> str $<span class="enscript-variable-name">initerrs</span> {
  120. <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;FAIL: error message in .init file: $str&quot;</span>
  121. }
  122. <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;\tTest045.b: Now firing off berkdb rand dbscript, running: &quot;</span>
  123. <span class="enscript-comment"># Now the database is initialized, run a test
  124. </span> <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;$tclsh_path\
  125. $test_path/dbscript.tcl $method $f $nops $cursors $delete $adds \
  126. $keyavg $dataavg $dups $errpct &gt; $testdir/test045.log&quot;</span>
  127. <span class="enscript-keyword">exec</span> $<span class="enscript-variable-name">tclsh_path</span> \
  128. $<span class="enscript-variable-name">test_path</span>/dbscript.tcl $<span class="enscript-variable-name">method</span> $<span class="enscript-variable-name">f</span> \
  129. $<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> \
  130. $<span class="enscript-variable-name">dataavg</span> $<span class="enscript-variable-name">dups</span> $<span class="enscript-variable-name">errpct</span> \
  131. &gt; $<span class="enscript-variable-name">testdir</span>/test045.log
  132. <span class="enscript-comment"># Check for test failure
  133. </span> <span class="enscript-keyword">set</span> logerrs [findfail $<span class="enscript-variable-name">testdir</span>/test045.log]
  134. <span class="enscript-keyword">foreach</span> str $<span class="enscript-variable-name">logerrs</span> {
  135. <span class="enscript-keyword">puts</span> <span class="enscript-string">&quot;FAIL: error message in log file: $str&quot;</span>
  136. }
  137. }
  138. </pre>
  139. <hr />
  140. </body></html>