dbmlite3 2.0.0.pre.alpha.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/Rakefile +2 -2
- data/dbmlite3.gemspec +11 -10
- data/doc/Lite3/DBM.html +2560 -0
- data/doc/Lite3/Error.html +139 -0
- data/doc/Lite3/InternalError.html +143 -0
- data/doc/Lite3/SQL.html +343 -0
- data/doc/Lite3.html +119 -0
- data/doc/_index.html +167 -0
- data/doc/class_list.html +51 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +58 -0
- data/doc/css/style.css +497 -0
- data/doc/file.README.html +217 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +217 -0
- data/doc/js/app.js +314 -0
- data/doc/js/full_list.js +216 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +307 -0
- data/doc/top-level-namespace.html +110 -0
- data/lib/internal_lite3/dbm.rb +8 -6
- data/lib/internal_lite3/error.rb +0 -4
- data/lib/internal_lite3/handle.rb +7 -3
- data/lib/internal_lite3/sql.rb +4 -1
- data/spec/dbmlite3_spec.rb +28 -10
- metadata +29 -11
- data/extras/benchmark.rb +0 -172
@@ -0,0 +1,110 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>
|
7
|
+
Top Level Namespace
|
8
|
+
|
9
|
+
— Documentation by YARD 0.9.34
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" />
|
16
|
+
|
17
|
+
<script type="text/javascript">
|
18
|
+
pathId = "";
|
19
|
+
relpath = '';
|
20
|
+
</script>
|
21
|
+
|
22
|
+
|
23
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
24
|
+
|
25
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
26
|
+
|
27
|
+
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<div class="nav_wrap">
|
31
|
+
<iframe id="nav" src="class_list.html?1"></iframe>
|
32
|
+
<div id="resizer"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="main" tabindex="-1">
|
36
|
+
<div id="header">
|
37
|
+
<div id="menu">
|
38
|
+
|
39
|
+
<a href="_index.html">Index</a> »
|
40
|
+
|
41
|
+
|
42
|
+
<span class="title">Top Level Namespace</span>
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div id="search">
|
47
|
+
|
48
|
+
<a class="full_list_link" id="class_list_link"
|
49
|
+
href="class_list.html">
|
50
|
+
|
51
|
+
<svg width="24" height="24">
|
52
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
53
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
54
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
55
|
+
</svg>
|
56
|
+
</a>
|
57
|
+
|
58
|
+
</div>
|
59
|
+
<div class="clear"></div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<div id="content"><h1>Top Level Namespace
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
</h1>
|
67
|
+
<div class="box_info">
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
</div>
|
80
|
+
|
81
|
+
<h2>Defined Under Namespace</h2>
|
82
|
+
<p class="children">
|
83
|
+
|
84
|
+
|
85
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="Lite3.html" title="Lite3 (module)">Lite3</a></span>
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
</p>
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
</div>
|
101
|
+
|
102
|
+
<div id="footer">
|
103
|
+
Generated on Sat Aug 19 13:22:01 2023 by
|
104
|
+
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
105
|
+
0.9.34 (ruby-3.2.1).
|
106
|
+
</div>
|
107
|
+
|
108
|
+
</div>
|
109
|
+
</body>
|
110
|
+
</html>
|
data/lib/internal_lite3/dbm.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
module Lite3
|
3
|
-
|
3
|
+
|
4
4
|
# Lite3::DBM encapsulates a single table in a single SQLite3
|
5
5
|
# database file and lets you access it as easily as a Hash.
|
6
6
|
# Multiple instances may be opened on different tables in the same
|
@@ -202,7 +202,7 @@ module Lite3
|
|
202
202
|
# Begins a transaction, evaluates the given block and then ends
|
203
203
|
# the transaction. If no error occurred (i.e. an exception was
|
204
204
|
# thrown), the transaction is committed; otherwise, it is rolled
|
205
|
-
# back.
|
205
|
+
# back. Returns the block's result.
|
206
206
|
#
|
207
207
|
# It is safe to call `DBM.transaction` within another
|
208
208
|
# `DBM.transaction` block's call chain because `DBM` will not
|
@@ -220,8 +220,10 @@ module Lite3
|
|
220
220
|
# transactions were always executed in `:deferred` mode via the
|
221
221
|
# `sqlite3` gem.
|
222
222
|
#
|
223
|
-
# @
|
224
|
-
#
|
223
|
+
# @return [obj] Returns the block's result.
|
224
|
+
#
|
225
|
+
# @yield [db] The block takes a reference to the receiver as an
|
226
|
+
# argument.
|
225
227
|
#
|
226
228
|
def transaction(&block)
|
227
229
|
return @handle.transaction { block.call(self) }
|
@@ -265,7 +267,7 @@ module Lite3
|
|
265
267
|
#
|
266
268
|
# `key` **must** be a String or a Symbol; Symbols are
|
267
269
|
# transparently converted to Strings.
|
268
|
-
#
|
270
|
+
#
|
269
271
|
# If it is not present and a block is given, evaluate the block
|
270
272
|
# with the key as its argument and return that.
|
271
273
|
#
|
@@ -368,7 +370,7 @@ module Lite3
|
|
368
370
|
}
|
369
371
|
end
|
370
372
|
|
371
|
-
|
373
|
+
|
372
374
|
# Calls the given block with each key-value pair in the usual
|
373
375
|
# order, then return self. The entire call takes place in its own
|
374
376
|
# transaction.
|
data/lib/internal_lite3/error.rb
CHANGED
@@ -10,18 +10,14 @@ module Lite3
|
|
10
10
|
|
11
11
|
private
|
12
12
|
|
13
|
-
|
14
13
|
module ErrUtil
|
15
|
-
|
16
14
|
# Error check: if block evaluates to false, raise a Lite3::DBM::Error
|
17
15
|
# with the given message.
|
18
16
|
def check(message, &block)
|
19
17
|
return if block && block.call
|
20
18
|
raise InternalError.new(message)
|
21
19
|
end
|
22
|
-
|
23
20
|
end
|
24
21
|
|
25
|
-
|
26
22
|
private_constant :ErrUtil
|
27
23
|
end
|
@@ -41,7 +41,7 @@ module Lite3
|
|
41
41
|
end
|
42
42
|
alias inspect to_s
|
43
43
|
|
44
|
-
|
44
|
+
|
45
45
|
#
|
46
46
|
# References to the DBM object(s) using this handle.
|
47
47
|
#
|
@@ -85,10 +85,14 @@ module Lite3
|
|
85
85
|
#
|
86
86
|
# Transactions
|
87
87
|
#
|
88
|
-
|
88
|
+
|
89
89
|
# Perform &block in a transaction. See DBM.transaction.
|
90
90
|
def transaction(&block)
|
91
|
-
|
91
|
+
result = nil
|
92
|
+
@db.transaction({}) {
|
93
|
+
result = block.call
|
94
|
+
}
|
95
|
+
return result
|
92
96
|
end
|
93
97
|
|
94
98
|
# Test if there is currently a transaction in progress
|
data/lib/internal_lite3/sql.rb
CHANGED
@@ -64,7 +64,10 @@ module Lite3
|
|
64
64
|
# corresponding `DBM`s have been closed or reclaimed).
|
65
65
|
#
|
66
66
|
# Returns a hash mapping the path to each open database file to
|
67
|
-
# the number of live DBM objects referencing it.
|
67
|
+
# the number of live DBM objects referencing it. (Note that DBM
|
68
|
+
# objects that have gone out of scope but are not yet finalized
|
69
|
+
# count as "live"; as a result, this will differ across Ruby
|
70
|
+
# implementations due to differing garbage collector semantics.)
|
68
71
|
#
|
69
72
|
# You normally won't need to explicitly call this, but it's
|
70
73
|
# useful for testing and debugging.
|
data/spec/dbmlite3_spec.rb
CHANGED
@@ -5,6 +5,10 @@ require_relative '../lib/dbmlite3.rb'
|
|
5
5
|
require 'fileutils'
|
6
6
|
require 'set'
|
7
7
|
|
8
|
+
def jruby?
|
9
|
+
return RUBY_PLATFORM == "java"
|
10
|
+
end
|
11
|
+
|
8
12
|
module Tmp
|
9
13
|
@root = File.join( File.dirname(__FILE__), "tmpdata")
|
10
14
|
@count = 0
|
@@ -468,6 +472,13 @@ Serializations = Set.new
|
|
468
472
|
db.close
|
469
473
|
end
|
470
474
|
|
475
|
+
it "transaction returns the result of the transaction block" do
|
476
|
+
db = newdb.call(Tmp.file, "floop")
|
477
|
+
|
478
|
+
result = db.transaction { db['foo'] = 42 }
|
479
|
+
expect( result ) .to be 42
|
480
|
+
end
|
481
|
+
|
471
482
|
it "provides the rest of DBM's interface as convenience methods." do
|
472
483
|
db = newdb.call(Tmp.file, "blopp")
|
473
484
|
vv = {
|
@@ -877,7 +888,8 @@ describe Lite3::SQL do
|
|
877
888
|
}
|
878
889
|
|
879
890
|
it "lets you close the actual handle without impeding database use" do
|
880
|
-
|
891
|
+
jruby? or # JRuby GC semantics throw this off
|
892
|
+
expect( Lite3::SQL.gc.size ) .to eq 0
|
881
893
|
|
882
894
|
file = Tmp.file
|
883
895
|
db1 = newbasic.call(file, "first")
|
@@ -885,14 +897,17 @@ describe Lite3::SQL do
|
|
885
897
|
|
886
898
|
# The above should be using the same handle, which is currently
|
887
899
|
# open.
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
900
|
+
#
|
901
|
+
# (Depends on GC wierdness so we skip this part for JRuby.)
|
902
|
+
unless jruby?
|
903
|
+
stats = Lite3::SQL.gc
|
904
|
+
expect( stats.keys.size ) .to eq 1
|
905
|
+
|
906
|
+
# Referencing DBM objects should be db1 and db2
|
907
|
+
path, refs = stats.to_a[0]
|
908
|
+
expect( path ) .to eq file
|
909
|
+
expect( refs ) .to eq 2
|
910
|
+
end
|
896
911
|
|
897
912
|
# We can no longer test if the underlying file handles are still
|
898
913
|
# open, so we don't.
|
@@ -908,7 +923,8 @@ describe Lite3::SQL do
|
|
908
923
|
db1.close
|
909
924
|
db2.close
|
910
925
|
|
911
|
-
|
926
|
+
jruby? or
|
927
|
+
expect( Lite3::SQL.gc.keys.size ) .to eq 0
|
912
928
|
end
|
913
929
|
|
914
930
|
it "allows multiple table accesses in the same transaction" do
|
@@ -971,6 +987,7 @@ describe Lite3::SQL do
|
|
971
987
|
#
|
972
988
|
# (Dropping into the debugger after GC.start seems to help.)
|
973
989
|
|
990
|
+
skip "JRuby GC is capricious" if jruby?
|
974
991
|
|
975
992
|
file = Tmp.file
|
976
993
|
db1 = newbasic.call(file, "first")
|
@@ -1010,6 +1027,7 @@ end
|
|
1010
1027
|
|
1011
1028
|
describe self do
|
1012
1029
|
it "(this test) closes all handles when done with them" do
|
1030
|
+
skip "JRuby GC is capricious"if jruby?
|
1013
1031
|
expect( Lite3::SQL.gc.size ) .to eq 0
|
1014
1032
|
end
|
1015
1033
|
end
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbmlite3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Reuter
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2022-02-21 00:00:00.000000000 Z
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.
|
19
|
+
version: 5.71.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.
|
26
|
+
version: 5.71.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,7 +87,7 @@ description: |2
|
|
87
87
|
(almost) any Ruby type to be stored. In addition, there is
|
88
88
|
rudimentary support for transactions with emphasis on simplicity
|
89
89
|
and safety.
|
90
|
-
email: chris@
|
90
|
+
email: chris@remove-this-part.blit.ca
|
91
91
|
executables: []
|
92
92
|
extensions: []
|
93
93
|
extra_rdoc_files: []
|
@@ -97,7 +97,25 @@ files:
|
|
97
97
|
- README.md
|
98
98
|
- Rakefile
|
99
99
|
- dbmlite3.gemspec
|
100
|
-
-
|
100
|
+
- doc/Lite3.html
|
101
|
+
- doc/Lite3/DBM.html
|
102
|
+
- doc/Lite3/Error.html
|
103
|
+
- doc/Lite3/InternalError.html
|
104
|
+
- doc/Lite3/SQL.html
|
105
|
+
- doc/_index.html
|
106
|
+
- doc/class_list.html
|
107
|
+
- doc/css/common.css
|
108
|
+
- doc/css/full_list.css
|
109
|
+
- doc/css/style.css
|
110
|
+
- doc/file.README.html
|
111
|
+
- doc/file_list.html
|
112
|
+
- doc/frames.html
|
113
|
+
- doc/index.html
|
114
|
+
- doc/js/app.js
|
115
|
+
- doc/js/full_list.js
|
116
|
+
- doc/js/jquery.js
|
117
|
+
- doc/method_list.html
|
118
|
+
- doc/top-level-namespace.html
|
101
119
|
- lib/dbmlite3.rb
|
102
120
|
- lib/internal_lite3/dbm.rb
|
103
121
|
- lib/internal_lite3/error.rb
|
@@ -109,7 +127,7 @@ homepage: https://codeberg.org/suetanvil/dbmlite3
|
|
109
127
|
licenses:
|
110
128
|
- MIT
|
111
129
|
metadata: {}
|
112
|
-
post_install_message:
|
130
|
+
post_install_message:
|
113
131
|
rdoc_options: []
|
114
132
|
require_paths:
|
115
133
|
- lib
|
@@ -120,13 +138,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
138
|
version: 2.7.0
|
121
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
140
|
requirements:
|
123
|
-
- - "
|
141
|
+
- - ">="
|
124
142
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
143
|
+
version: '0'
|
126
144
|
requirements:
|
127
145
|
- Sequel, sqlite3, Ruby MRI
|
128
|
-
rubygems_version: 3.
|
129
|
-
signing_key:
|
146
|
+
rubygems_version: 3.4.6
|
147
|
+
signing_key:
|
130
148
|
specification_version: 4
|
131
149
|
summary: A DBM-style key-value store using SQLite3
|
132
150
|
test_files: []
|
data/extras/benchmark.rb
DELETED
@@ -1,172 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Low-effort benchmark comparing Lite3::DBM in various modes against
|
4
|
-
# other equivalent Hash-like Ruby storage mechanisms.
|
5
|
-
|
6
|
-
require 'dbmlite3'
|
7
|
-
require 'yaml/dbm' unless RUBY_PLATFORM == "java"
|
8
|
-
require 'fileutils'
|
9
|
-
require 'optparse'
|
10
|
-
|
11
|
-
COUNT = 10000
|
12
|
-
|
13
|
-
Opts = proc do
|
14
|
-
opt_defaults = {
|
15
|
-
count: COUNT,
|
16
|
-
transaction_only: true,
|
17
|
-
}
|
18
|
-
|
19
|
-
opts = Struct.new(*opt_defaults.keys).new(*opt_defaults.values)
|
20
|
-
|
21
|
-
OptionParser.new do |opo|
|
22
|
-
opo.banner = "Usage: bench_1.rb [options]"
|
23
|
-
|
24
|
-
opo.on("-t", "--multi-transaction",
|
25
|
-
"Don't batch Lite3 accesses in one big transaction.") {
|
26
|
-
opts.transaction_only = false
|
27
|
-
}
|
28
|
-
|
29
|
-
opo.on("-c", "--count N", Integer, "Set test count.") { |c|
|
30
|
-
opts.count = c
|
31
|
-
}
|
32
|
-
end.parse!
|
33
|
-
|
34
|
-
next opts
|
35
|
-
end.call
|
36
|
-
|
37
|
-
|
38
|
-
module Tmp
|
39
|
-
@root = File.join( File.dirname(__FILE__), "tmpdata")
|
40
|
-
@count = 0
|
41
|
-
|
42
|
-
def self.file
|
43
|
-
FileUtils.mkdir(@root) unless File.directory?(@root)
|
44
|
-
|
45
|
-
file = "testfile_#{@count}_#{$$}.sqlite3"
|
46
|
-
@count += 1
|
47
|
-
|
48
|
-
return File.join(@root, file)
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.cleanup
|
52
|
-
return unless File.directory?(@root)
|
53
|
-
FileUtils.rm_rf(@root)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
def insert(count, db, offset)
|
60
|
-
for n in 0 .. count
|
61
|
-
db["k_#{n}"] = "#{n + offset}"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
def lookup(count, db)
|
67
|
-
rnd = Random.new(69_420)
|
68
|
-
sz = db.size
|
69
|
-
|
70
|
-
for _ in 0 .. count * 3
|
71
|
-
idx = rnd.rand(sz)
|
72
|
-
v = db["k_#{idx}"]
|
73
|
-
raise "Invalid value: #{v}" unless v.to_s == "#{idx + 1}"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
Times = {}
|
79
|
-
|
80
|
-
def time_it(type, task, db, use_tr, &block)
|
81
|
-
print "#{type} #{task} - "
|
82
|
-
STDOUT.flush
|
83
|
-
|
84
|
-
start = Time.now
|
85
|
-
|
86
|
-
if use_tr && db.respond_to?(:transaction)
|
87
|
-
db.transaction { block.call }
|
88
|
-
else
|
89
|
-
block.call
|
90
|
-
end
|
91
|
-
|
92
|
-
finish = Time.now
|
93
|
-
|
94
|
-
elapsed = (finish - start).to_f
|
95
|
-
Times[type] = Times.fetch(type, 0) + elapsed
|
96
|
-
|
97
|
-
puts "#{elapsed.round(4)}"
|
98
|
-
end
|
99
|
-
|
100
|
-
def bench(count, desc, db, use_tr)
|
101
|
-
time_it(desc, "insert", db, use_tr) {
|
102
|
-
insert(count, db, 0)
|
103
|
-
}
|
104
|
-
time_it(desc, "upsert", db, use_tr) {
|
105
|
-
insert(count, db, 1)
|
106
|
-
}
|
107
|
-
time_it(desc, "lookup", db, use_tr) {
|
108
|
-
lookup(count, db)
|
109
|
-
}
|
110
|
-
time_it(desc, "delete_if", db, use_tr) {
|
111
|
-
rnd = Random.new(69_420)
|
112
|
-
db.delete_if{|k,v| rnd.rand(2) == 0}
|
113
|
-
}
|
114
|
-
puts
|
115
|
-
end
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
def main
|
120
|
-
puts "Count = #{Opts.count}\n"
|
121
|
-
|
122
|
-
Tmp.cleanup
|
123
|
-
|
124
|
-
bench(Opts.count, "hash", {}, false)
|
125
|
-
|
126
|
-
if RUBY_PLATFORM != "java"
|
127
|
-
DBM.open(Tmp.file) {|dbm|
|
128
|
-
bench(Opts.count, "DBM", dbm, false)
|
129
|
-
}
|
130
|
-
|
131
|
-
YAML::DBM.open(Tmp.file) {|dbm|
|
132
|
-
bench(Opts.count, "YAML::DBM", dbm, false)
|
133
|
-
}
|
134
|
-
end
|
135
|
-
|
136
|
-
Lite3::DBM.open(Tmp.file, "benchmark", :yaml) { |dbm|
|
137
|
-
bench(Opts.count, "Lite3::DBM(yaml)", dbm, true)
|
138
|
-
}
|
139
|
-
|
140
|
-
Lite3::DBM.open(Tmp.file, "benchmark", :marshal) { |dbm|
|
141
|
-
bench(Opts.count, "Lite3::DBM(marshal)", dbm, true)
|
142
|
-
}
|
143
|
-
|
144
|
-
Lite3::DBM.open(Tmp.file, "benchmark", :string) { |dbm|
|
145
|
-
bench(Opts.count, "Lite3::DBM(string)", dbm, true)
|
146
|
-
}
|
147
|
-
|
148
|
-
if !Opts.transaction_only
|
149
|
-
Lite3::DBM.open(Tmp.file, "benchmark", :yaml) { |dbm|
|
150
|
-
bench(Opts.count, "Lite3::DBM(yaml, single-trans)", dbm, false)
|
151
|
-
}
|
152
|
-
|
153
|
-
Lite3::DBM.open(Tmp.file, "benchmark", :marshal) { |dbm|
|
154
|
-
bench(Opts.count, "Lite3::DBM(marshal, single-trans)", dbm, false)
|
155
|
-
}
|
156
|
-
|
157
|
-
Lite3::DBM.open(Tmp.file, "benchmark", :string) { |dbm|
|
158
|
-
bench(Opts.count, "Lite3::DBM(string, single-trans)", dbm, false)
|
159
|
-
}
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
puts
|
164
|
-
puts "Totals:"
|
165
|
-
Times.each{|k,v|
|
166
|
-
puts " #{k} - #{v.round(4)}"
|
167
|
-
}
|
168
|
-
|
169
|
-
Tmp.cleanup
|
170
|
-
end
|
171
|
-
|
172
|
-
main
|