test001.tcl
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # See the file LICENSE for redistribution information.
  2. #
  3. # Copyright (c) 1996, 1997, 1998, 1999, 2000
  4. # Sleepycat Software.  All rights reserved.
  5. #
  6. # $Id: test001.tcl,v 11.17 2000/12/06 16:08:05 bostic Exp $
  7. #
  8. # DB Test 1 {access method}
  9. # Use the first 10,000 entries from the dictionary.
  10. # Insert each with self as key and data; retrieve each.
  11. # After all are entered, retrieve all; compare output to original.
  12. # Close file, reopen, do retrieve and re-verify.
  13. proc test001 { method {nentries 10000} {start 0} {tnum "01"} args } {
  14. source ./include.tcl
  15. set args [convert_args $method $args]
  16. set omethod [convert_method $method]
  17. puts "Test0$tnum: $method ($args) $nentries equal key/data pairs"
  18. if { $start != 0 } {
  19. puts "tStarting at $start"
  20. }
  21. # Create the database and open the dictionary
  22. set eindex [lsearch -exact $args "-env"]
  23. #
  24. # If we are using an env, then testfile should just be the db name.
  25. # Otherwise it is the test directory and the name.
  26. if { $eindex == -1 } {
  27. set testfile $testdir/test0$tnum.db
  28. set env NULL
  29. } else {
  30. set testfile test0$tnum.db
  31. incr eindex
  32. set env [lindex $args $eindex]
  33. }
  34. set t1 $testdir/t1
  35. set t2 $testdir/t2
  36. set t3 $testdir/t3
  37. cleanup $testdir $env
  38. set db [eval {berkdb_open 
  39.      -create -truncate -mode 0644} $args $omethod $testfile]
  40. error_check_good dbopen [is_valid_db $db] TRUE
  41. set did [open $dict]
  42. set pflags ""
  43. set gflags ""
  44. set txn ""
  45. set nentries [expr $nentries + $start]
  46. if { [is_record_based $method] == 1 } {
  47. set checkfunc test001_recno.check
  48. append gflags " -recno"
  49. } else {
  50. set checkfunc test001.check
  51. }
  52. puts "tTest0$tnum.a: put/get loop"
  53. # Here is the loop where we put and get each key/data pair
  54. set count $start
  55. while { [gets $did str] != -1 && $count < $nentries } {
  56. if { [is_record_based $method] == 1 } {
  57. global kvals
  58. set key [expr $count + 1]
  59. set kvals($key) [pad_data $method $str]
  60. } else {
  61. set key $str
  62. set str [reverse $str]
  63. }
  64. set ret [eval 
  65.     {$db put} $txn $pflags {$key [chop_data $method $str]}]
  66. error_check_good put $ret 0
  67. set ret [eval {$db get} $gflags {$key}]
  68. error_check_good 
  69.     get $ret [list [list $key [pad_data $method $str]]]
  70. # Test DB_GET_BOTH for success
  71. set ret [$db get -get_both $key [pad_data $method $str]]
  72. error_check_good 
  73.     getboth $ret [list [list $key [pad_data $method $str]]]
  74. # Test DB_GET_BOTH for failure
  75. set ret [$db get -get_both $key [pad_data $method BAD$str]]
  76. error_check_good getbothBAD [llength $ret] 0
  77. incr count
  78. if { [expr $count + 1] == 0 } {
  79. incr count
  80. }
  81. }
  82. close $did
  83. # Now we will get each key from the DB and compare the results
  84. # to the original.
  85. puts "tTest0$tnum.b: dump file"
  86. dump_file $db $txn $t1 $checkfunc
  87. error_check_good db_close [$db close] 0
  88. # Now compare the keys to see if they match the dictionary (or ints)
  89. if { [is_record_based $method] == 1 } {
  90. set oid [open $t2 w]
  91. for {set i [expr $start + 1]} {$i <= $nentries} {set i [incr i]} {
  92. if { $i == 0 } {
  93. incr i
  94. }
  95. puts $oid $i
  96. }
  97. close $oid
  98. } else {
  99. set q q
  100. filehead $nentries $dict $t2
  101. }
  102. filesort $t2 $t3
  103. file rename -force $t3 $t2
  104. filesort $t1 $t3
  105. error_check_good Test0$tnum:diff($t3,$t2) 
  106.     [filecmp $t3 $t2] 0
  107. puts "tTest0$tnum.c: close, open, and dump file"
  108. # Now, reopen the file and run the last test again.
  109. open_and_dump_file $testfile $env $txn $t1 $checkfunc 
  110.     dump_file_direction "-first" "-next"
  111. if { [string compare $omethod "-recno"] != 0 } {
  112. filesort $t1 $t3
  113. }
  114. error_check_good Test0$tnum:diff($t2,$t3) 
  115.     [filecmp $t2 $t3] 0
  116. # Now, reopen the file and run the last test again in the
  117. # reverse direction.
  118. puts "tTest0$tnum.d: close, open, and dump file in reverse direction"
  119. open_and_dump_file $testfile $env $txn $t1 $checkfunc 
  120.     dump_file_direction "-last" "-prev"
  121. if { [string compare $omethod "-recno"] != 0 } {
  122. filesort $t1 $t3
  123. }
  124. error_check_good Test0$tnum:diff($t3,$t2) 
  125.     [filecmp $t3 $t2] 0
  126. }
  127. # Check function for test001; keys and data are identical
  128. proc test001.check { key data } {
  129. error_check_good "key/data mismatch" $data [reverse $key]
  130. }
  131. proc test001_recno.check { key data } {
  132. global dict
  133. global kvals
  134. error_check_good key"$key"_exists [info exists kvals($key)] 1
  135. error_check_good "key/data mismatch, key $key" $data $kvals($key)
  136. }