mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Removed dbm from ruby repo
This commit is contained in:
parent
ab3266ea5c
commit
55cd3e4ebf
Notes:
git
2021-05-25 15:18:56 +09:00
8 changed files with 0 additions and 2276 deletions
|
|
@ -312,10 +312,6 @@ Yukihiro Matsumoto (matz)
|
|||
_unmaintained_
|
||||
https://github.com/ruby/date
|
||||
https://rubygems.org/gems/date
|
||||
[ext/dbm]
|
||||
_unmaintained_
|
||||
https://github.com/ruby/dbm
|
||||
https://rubygems.org/gems/dbm
|
||||
[ext/etc]
|
||||
Ruby core team
|
||||
https://github.com/ruby/etc
|
||||
|
|
|
|||
|
|
@ -83,7 +83,6 @@ WeakRef:: Allows a referenced object to be garbage-collected
|
|||
BigDecimal:: Provides arbitrary-precision floating point decimal arithmetic
|
||||
Date:: A subclass of Object includes Comparable module for handling dates
|
||||
DateTime:: Subclass of Date to handling dates, hours, minutes, seconds, offsets
|
||||
DBM:: Provides a wrapper for the UNIX-style Database Manager Library
|
||||
Digest:: Provides a framework for message digest libraries
|
||||
Etc:: Provides access to information typically stored in UNIX /etc directory
|
||||
Fcntl:: Loads constants defined in the OS fcntl.h C header file
|
||||
|
|
|
|||
1156
ext/dbm/dbm.c
1156
ext/dbm/dbm.c
File diff suppressed because it is too large
Load diff
|
|
@ -1,21 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
Gem::Specification.new do |s|
|
||||
s.name = "dbm"
|
||||
s.version = '1.1.0'
|
||||
s.summary = "Provides a wrapper for the UNIX-style Database Manager Library"
|
||||
s.description = "Provides a wrapper for the UNIX-style Database Manager Library"
|
||||
|
||||
s.require_path = %w{lib}
|
||||
s.files = %w{README.md LICENSE.txt ext/dbm/extconf.rb ext/dbm/dbm.c}
|
||||
s.extensions = %w{ext/dbm/extconf.rb}
|
||||
s.required_ruby_version = ">= 2.3.0"
|
||||
|
||||
s.authors = ["Yukihiro Matsumoto"]
|
||||
s.email = ["matz@ruby-lang.org"]
|
||||
s.homepage = "https://github.com/ruby/dbm"
|
||||
s.licenses = ["Ruby", "BSD-2-Clause"]
|
||||
|
||||
s.add_development_dependency "rake-compiler"
|
||||
s.add_development_dependency "test-unit"
|
||||
s.metadata["msys2_mingw_dependencies"] = "gdbm"
|
||||
end
|
||||
162
ext/dbm/depend
162
ext/dbm/depend
|
|
@ -1,162 +0,0 @@
|
|||
# AUTOGENERATED DEPENDENCIES START
|
||||
dbm.o: $(RUBY_EXTCONF_H)
|
||||
dbm.o: $(arch_hdrdir)/ruby/config.h
|
||||
dbm.o: $(hdrdir)/ruby.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/anyargs.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/char.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/double.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/int.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/long.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/short.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/assume.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/alloc_size.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/artificial.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/cold.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/const.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/constexpr.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/deprecated.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/error.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/flag_enum.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/forceinline.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/format.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/noalias.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/nodiscard.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/noexcept.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/noinline.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/nonnull.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/noreturn.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/pure.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/restrict.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/warning.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/attr/weakref.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/cast.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_is.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_is/apple.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_is/clang.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_is/intel.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/compiler_since.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/config.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/constant_p.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rarray.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rbasic.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rbignum.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rclass.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rdata.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rfile.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rhash.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/robject.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rregexp.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rstring.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rstruct.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/core/rtypeddata.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/ctype.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/dllexport.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/dosish.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/error.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/eval.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/event.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/fl_type.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/gc.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/glob.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/globals.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/attribute.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/builtin.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/c_attribute.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/extension.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/feature.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/has/warning.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/array.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/bignum.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/class.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/compar.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/complex.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/cont.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/dir.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/enum.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/enumerator.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/error.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/eval.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/file.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/gc.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/hash.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/io.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/load.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/marshal.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/numeric.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/object.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/parse.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/proc.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/process.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/random.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/range.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/rational.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/re.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/ruby.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/select.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/select/largesize.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/signal.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/sprintf.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/string.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/struct.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/thread.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/time.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/variable.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/intern/vm.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/interpreter.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/iterator.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/memory.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/method.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/module.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/newobj.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/rgengc.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/scan_args.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/special_consts.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/static_assert.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/stdalign.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/stdbool.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/symbol.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/value.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/value_type.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/variable.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/warning_push.h
|
||||
dbm.o: $(hdrdir)/ruby/internal/xmalloc.h
|
||||
dbm.o: $(hdrdir)/ruby/assert.h
|
||||
dbm.o: $(hdrdir)/ruby/backward.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/assume.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/attributes.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/bool.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/inttypes.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/limits.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/long_long.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/stdalign.h
|
||||
dbm.o: $(hdrdir)/ruby/backward/2/stdarg.h
|
||||
dbm.o: $(hdrdir)/ruby/defines.h
|
||||
dbm.o: $(hdrdir)/ruby/intern.h
|
||||
dbm.o: $(hdrdir)/ruby/missing.h
|
||||
dbm.o: $(hdrdir)/ruby/ruby.h
|
||||
dbm.o: $(hdrdir)/ruby/st.h
|
||||
dbm.o: $(hdrdir)/ruby/subst.h
|
||||
dbm.o: dbm.c
|
||||
# AUTOGENERATED DEPENDENCIES END
|
||||
|
|
@ -1,292 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
# configure option:
|
||||
# --with-dbm-type=COMMA-SEPARATED-NDBM-TYPES
|
||||
#
|
||||
# ndbm type:
|
||||
# libc ndbm compatible library in libc.
|
||||
# db Berkeley DB (libdb)
|
||||
# db2 Berkeley DB (libdb2)
|
||||
# db1 Berkeley DB (libdb1)
|
||||
# db6 Berkeley DB (libdb6)
|
||||
# db5 Berkeley DB (libdb5)
|
||||
# db4 Berkeley DB (libdb4)
|
||||
# db3 Berkeley DB (libdb3)
|
||||
# gdbm_compat GDBM since 1.8.1 (libgdbm_compat)
|
||||
# gdbm GDBM until 1.8.0 (libgdbm)
|
||||
# qdbm QDBM (libqdbm)
|
||||
# ndbm Some legacy OS may have libndbm.
|
||||
|
||||
# :stopdoc:
|
||||
require 'mkmf'
|
||||
|
||||
dir_config("dbm")
|
||||
|
||||
if dblib = with_config("dbm-type", nil)
|
||||
dblib = dblib.split(/[ ,]+/)
|
||||
else
|
||||
dblib = %w(libc db db2 db1 db6 db5 db4 db3 gdbm_compat gdbm qdbm)
|
||||
end
|
||||
|
||||
headers = {
|
||||
"libc" => ["ndbm.h"], # 4.3BSD original ndbm, Berkeley DB 1 in 4.4BSD libc.
|
||||
"db" => ["db.h"],
|
||||
"db1" => ["db1/ndbm.h", "db1.h", "ndbm.h"],
|
||||
"db2" => ["db2/db.h", "db2.h", "db.h"],
|
||||
"db3" => ["db3/db.h", "db3.h", "db.h"],
|
||||
"db4" => ["db4/db.h", "db4.h", "db.h"],
|
||||
"db5" => ["db5/db.h", "db5.h", "db.h"],
|
||||
"db6" => ["db6/db.h", "db6.h", "db.h"],
|
||||
"gdbm_compat" => ["gdbm-ndbm.h", "gdbm/ndbm.h", "ndbm.h"], # GDBM since 1.8.1
|
||||
"gdbm" => ["gdbm-ndbm.h", "gdbm/ndbm.h", "ndbm.h"], # GDBM until 1.8.0
|
||||
"qdbm" => ["qdbm/relic.h", "relic.h"],
|
||||
}
|
||||
|
||||
class << headers
|
||||
attr_accessor :found
|
||||
attr_accessor :defs
|
||||
end
|
||||
headers.found = []
|
||||
headers.defs = nil
|
||||
|
||||
def headers.db_check(db, hdr)
|
||||
old_libs = $libs.dup
|
||||
old_defs = $defs.dup
|
||||
result = db_check2(db, hdr)
|
||||
if !result
|
||||
$libs = old_libs
|
||||
$defs = old_defs
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
def have_declared_libvar(var, headers = nil, opt = "", &b)
|
||||
checking_for checking_message([*var].compact.join(' '), headers, opt) do
|
||||
try_declared_libvar(var, headers, opt, &b)
|
||||
end
|
||||
end
|
||||
|
||||
def try_declared_libvar(var, headers = nil, opt = "", &b)
|
||||
if try_link(<<"SRC", opt, &b)
|
||||
#{cpp_include(headers)}
|
||||
/*top*/
|
||||
int main(int argc, char *argv[]) {
|
||||
void *conftest_var = &#{var};
|
||||
return 0;
|
||||
}
|
||||
SRC
|
||||
$defs.push(format("-DHAVE_DECLARED_LIBVAR_%s", var.tr_cpp))
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def have_undeclared_libvar(var, headers = nil, opt = "", &b)
|
||||
checking_for checking_message([*var].compact.join(' '), headers, opt) do
|
||||
try_undeclared_libvar(var, headers, opt, &b)
|
||||
end
|
||||
end
|
||||
|
||||
def try_undeclared_libvar(var, headers = nil, opt = "", &b)
|
||||
var, type = *var
|
||||
if try_link(<<"SRC", opt, &b)
|
||||
#{cpp_include(headers)}
|
||||
/*top*/
|
||||
int main(int argc, char *argv[]) {
|
||||
typedef #{type || 'int'} conftest_type;
|
||||
extern conftest_type #{var};
|
||||
conftest_type *conftest_var = &#{var};
|
||||
return 0;
|
||||
}
|
||||
SRC
|
||||
$defs.push(format("-DHAVE_UNDECLARED_LIBVAR_%s", var.tr_cpp))
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def have_empty_macro_dbm_clearerr(headers = nil, opt = "", &b)
|
||||
checking_for checking_message('empty macro of dbm_clearerr(foobarbaz)',
|
||||
headers, opt) do
|
||||
try_toplevel('dbm_clearerr(foobarbaz)', headers, opt, &b)
|
||||
end
|
||||
end
|
||||
|
||||
def try_toplevel(src, headers = nil, opt = "", &b)
|
||||
if try_compile(<<"SRC", opt, &b)
|
||||
#{cpp_include(headers)}
|
||||
/*top*/
|
||||
#{src}
|
||||
SRC
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def headers.db_check2(db, hdr)
|
||||
$defs.push(%{-DRUBYDBM_DBM_HEADER='"#{hdr}"'})
|
||||
$defs.push(%{-DRUBYDBM_DBM_TYPE='"#{db}"'})
|
||||
|
||||
hsearch = nil
|
||||
|
||||
case db
|
||||
when /^db[2-6]?$/
|
||||
hsearch = "-DDB_DBM_HSEARCH"
|
||||
when "gdbm_compat"
|
||||
have_library("gdbm") or return false
|
||||
end
|
||||
|
||||
if !have_type("DBM", hdr, hsearch)
|
||||
return false
|
||||
end
|
||||
|
||||
# 'libc' means ndbm is provided by libc.
|
||||
# 4.3BSD original ndbm is contained in libc.
|
||||
# 4.4BSD (and its derivatives such as NetBSD) contains Berkeley DB 1 in libc.
|
||||
if !(db == 'libc' ? have_func('dbm_open("", 0, 0)', hdr, hsearch) :
|
||||
have_library(db, 'dbm_open("", 0, 0)', hdr, hsearch))
|
||||
return false
|
||||
end
|
||||
|
||||
# Skip a mismatch of Berkeley DB's ndbm.h and old GDBM library.
|
||||
#
|
||||
# dbm_clearerr() should be available for any ndbm implementation.
|
||||
# It is available since the original (4.3BSD) ndbm and standardized by POSIX.
|
||||
#
|
||||
# However "can't resolve symbol 'dbm_clearerr'" problem may be caused by
|
||||
# header/library mismatch: Berkeley DB ndbm.h and GDBM library until 1.8.3.
|
||||
# GDBM (until 1.8.3) provides dbm_clearerr() as a empty macro in the header
|
||||
# and the library don't provide dbm_clearerr().
|
||||
# Berkeley DB provides dbm_clearerr() as a usual function.
|
||||
# So Berkeley DB header with GDBM library causes the problem.
|
||||
#
|
||||
if !have_func('dbm_clearerr((DBM *)0)', hdr, hsearch)
|
||||
return false
|
||||
end
|
||||
|
||||
# Berkeley DB's ndbm.h (since 1.85 at least) defines DBM_SUFFIX.
|
||||
# Note that _DB_H_ is not defined on Mac OS X because
|
||||
# it uses Berkeley DB 1 but ndbm.h doesn't include db.h.
|
||||
have_db_header = have_macro('DBM_SUFFIX', hdr, hsearch)
|
||||
|
||||
# Old GDBM's ndbm.h, until 1.8.3, defines dbm_clearerr as a macro which
|
||||
# expands to no tokens.
|
||||
have_gdbm_header1 = have_empty_macro_dbm_clearerr(hdr, hsearch)
|
||||
|
||||
# Recent GDBM's ndbm.h, since 1.9, includes gdbm.h and it defines _GDBM_H_.
|
||||
# ndbm compatibility layer of GDBM is provided by libgdbm (until 1.8.0)
|
||||
# and libgdbm_compat (since 1.8.1).
|
||||
have_gdbm_header2 = have_macro('_GDBM_H_', hdr, hsearch)
|
||||
|
||||
# 4.3BSD's ndbm.h defines _DBM_IOERR.
|
||||
# The original ndbm is provided by libc in 4.3BSD.
|
||||
have_ndbm_header = have_macro('_DBM_IOERR', hdr, hsearch)
|
||||
|
||||
# GDBM provides ndbm functions in libgdbm_compat since GDBM 1.8.1.
|
||||
# GDBM's ndbm.h defines _GDBM_H_ since GDBM 1.9.
|
||||
# If _GDBM_H_ is defined, 'gdbm_compat' is required and reject 'gdbm'.
|
||||
if have_gdbm_header2 && db == 'gdbm'
|
||||
return false
|
||||
end
|
||||
|
||||
if have_db_header
|
||||
$defs.push('-DRUBYDBM_DB_HEADER')
|
||||
end
|
||||
|
||||
have_gdbm_header = have_gdbm_header1 | have_gdbm_header2
|
||||
if have_gdbm_header
|
||||
$defs.push('-DRUBYDBM_GDBM_HEADER')
|
||||
end
|
||||
|
||||
# ndbm.h is provided by the original (4.3BSD) ndbm,
|
||||
# Berkeley DB 1 in libc of 4.4BSD and
|
||||
# ndbm compatibility layer of GDBM.
|
||||
# So, try to check header/library mismatch.
|
||||
#
|
||||
# Several (possibly historical) distributions provides libndbm.
|
||||
# It may be Berkeley DB, GDBM or 4.3BSD ndbm.
|
||||
# So mismatch check is not performed for that.
|
||||
# Note that libndbm is searched only when --with-dbm-type=ndbm is
|
||||
# given for configure.
|
||||
#
|
||||
if hdr == 'ndbm.h' && db != 'libc' && db != 'ndbm'
|
||||
if /\Adb\d?\z/ !~ db && have_db_header
|
||||
return false
|
||||
end
|
||||
|
||||
if /\Agdbm/ !~ db && have_gdbm_header
|
||||
return false
|
||||
end
|
||||
|
||||
if have_ndbm_header
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
# Berkeley DB
|
||||
have_func('db_version((int *)0, (int *)0, (int *)0)', hdr, hsearch)
|
||||
|
||||
# GDBM
|
||||
have_gdbm_version = have_declared_libvar("gdbm_version", hdr, hsearch)
|
||||
# gdbm_version is available since very old version (GDBM 1.5 at least).
|
||||
# However it is not declared by ndbm.h until GDBM 1.8.3.
|
||||
# We can't include both ndbm.h and gdbm.h because they both define datum type.
|
||||
# ndbm.h includes gdbm.h and gdbm_version is declared since GDBM 1.9.
|
||||
have_gdbm_version |= have_undeclared_libvar(["gdbm_version", "char *"], hdr, hsearch)
|
||||
|
||||
# QDBM
|
||||
have_var("dpversion", hdr, hsearch)
|
||||
|
||||
# detect mismatch between GDBM header and other library.
|
||||
# If GDBM header is included, GDBM library should be linked.
|
||||
if have_gdbm_header && !have_gdbm_version
|
||||
return false
|
||||
end
|
||||
|
||||
# DBC type is required to disable error messages by Berkeley DB 2 or later.
|
||||
if have_db_header
|
||||
have_type("DBC", hdr, hsearch)
|
||||
end
|
||||
|
||||
if hsearch
|
||||
$defs << hsearch
|
||||
@defs = hsearch
|
||||
end
|
||||
$defs << '-DDBM_HDR="<'+hdr+'>"'
|
||||
@found << hdr
|
||||
|
||||
puts "header: #{hdr}"
|
||||
puts "library: #{db}"
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
if dblib.any? {|db| headers.fetch(db, ["ndbm.h"]).any? {|hdr| headers.db_check(db, hdr) } }
|
||||
have_header("cdefs.h")
|
||||
have_header("sys/cdefs.h")
|
||||
have_func("dbm_pagfno((DBM *)0)", headers.found, headers.defs)
|
||||
have_func("dbm_dirfno((DBM *)0)", headers.found, headers.defs)
|
||||
convertible_int("datum.dsize", headers.found, headers.defs)
|
||||
checking_for("sizeof(DBM) is available") {
|
||||
if try_compile(<<SRC)
|
||||
#ifdef HAVE_CDEFS_H
|
||||
# include <cdefs.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_CDEFS_H
|
||||
# include <sys/cdefs.h>
|
||||
#endif
|
||||
#include DBM_HDR
|
||||
|
||||
const int sizeof_DBM = (int)sizeof(DBM);
|
||||
SRC
|
||||
$defs << '-DDBM_SIZEOF_DBM=sizeof(DBM)'
|
||||
else
|
||||
$defs << '-DDBM_SIZEOF_DBM=0'
|
||||
end
|
||||
}
|
||||
create_makefile("dbm")
|
||||
end
|
||||
# :startdoc:
|
||||
|
|
@ -1,634 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
require 'test/unit'
|
||||
require 'tmpdir'
|
||||
|
||||
begin
|
||||
require 'dbm'
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
if defined? DBM
|
||||
require 'tmpdir'
|
||||
require 'fileutils'
|
||||
|
||||
class TestDBM_RDONLY < Test::Unit::TestCase
|
||||
def TestDBM_RDONLY.uname_s
|
||||
require 'rbconfig'
|
||||
case RbConfig::CONFIG['target_os']
|
||||
when 'cygwin'
|
||||
require 'etc'
|
||||
Etc.uname[:sysname]
|
||||
else
|
||||
RbConfig::CONFIG['target_os']
|
||||
end
|
||||
end
|
||||
SYSTEM = uname_s
|
||||
|
||||
def setup
|
||||
@tmpdir = Dir.mktmpdir("tmptest_dbm")
|
||||
@prefix = "tmptest_dbm_#{$$}"
|
||||
@path = "#{@tmpdir}/#{@prefix}_"
|
||||
|
||||
# prepare to make readonly DBM file
|
||||
DBM.open("#{@tmpdir}/#{@prefix}_rdonly") {|dbm|
|
||||
dbm['foo'] = 'FOO'
|
||||
}
|
||||
|
||||
File.chmod(0400, *Dir.glob("#{@tmpdir}/#{@prefix}_rdonly.*"))
|
||||
|
||||
assert_instance_of(DBM, @dbm_rdonly = DBM.new("#{@tmpdir}/#{@prefix}_rdonly", nil))
|
||||
end
|
||||
def teardown
|
||||
assert_nil(@dbm_rdonly.close)
|
||||
ObjectSpace.each_object(DBM) do |obj|
|
||||
obj.close unless obj.closed?
|
||||
end
|
||||
FileUtils.remove_entry_secure @tmpdir
|
||||
end
|
||||
|
||||
def test_delete_rdonly
|
||||
skip("skipped because root can read anything") if Process.uid == 0
|
||||
|
||||
if /^CYGWIN_9/ !~ SYSTEM
|
||||
assert_raise(DBMError) {
|
||||
@dbm_rdonly.delete("foo")
|
||||
}
|
||||
|
||||
assert_nil(@dbm_rdonly.delete("bar"))
|
||||
end
|
||||
end
|
||||
|
||||
def test_fetch_not_found
|
||||
notfound = nil
|
||||
result = Object.new
|
||||
assert_same(result, @dbm_rdonly.fetch("bar") {|k| notfound = k; result})
|
||||
assert_equal("bar", notfound)
|
||||
end
|
||||
end
|
||||
|
||||
class TestDBM < Test::Unit::TestCase
|
||||
def setup
|
||||
@tmpdir = Dir.mktmpdir("tmptest_dbm")
|
||||
@prefix = "tmptest_dbm_#{$$}"
|
||||
@path = "#{@tmpdir}/#{@prefix}_"
|
||||
assert_instance_of(DBM, @dbm = DBM.new(@path))
|
||||
end
|
||||
def teardown
|
||||
assert_nil(@dbm.close) unless @dbm.closed?
|
||||
ObjectSpace.each_object(DBM) do |obj|
|
||||
obj.close unless obj.closed?
|
||||
end
|
||||
FileUtils.remove_entry_secure @tmpdir
|
||||
end
|
||||
|
||||
def check_size(expect, dbm=@dbm)
|
||||
assert_equal(expect, dbm.size)
|
||||
n = 0
|
||||
dbm.each { n+=1 }
|
||||
assert_equal(expect, n)
|
||||
if expect == 0
|
||||
assert_equal(true, dbm.empty?)
|
||||
else
|
||||
assert_equal(false, dbm.empty?)
|
||||
end
|
||||
end
|
||||
|
||||
def test_dbmfile_suffix
|
||||
@dbm.close
|
||||
prefix = File.basename(@path)
|
||||
suffixes = Dir.entries(@tmpdir).grep(/\A#{Regexp.escape prefix}/) { $' }.sort
|
||||
pagname = "#{@path}.pag"
|
||||
dirname = "#{@path}.dir"
|
||||
dbname = "#{@path}.db"
|
||||
case DBM::VERSION
|
||||
when /\bNDBM\b/
|
||||
assert_equal(%w[.dir .pag], suffixes)
|
||||
assert(File.zero?(pagname))
|
||||
assert(File.zero?(dirname))
|
||||
when /\bGDBM\b/
|
||||
assert_equal(%w[.dir .pag], suffixes)
|
||||
assert(!File.zero?(pagname))
|
||||
assert(!File.zero?(dirname))
|
||||
pag = File.binread(pagname, 16)
|
||||
pag_magics = [
|
||||
0x13579ace, # GDBM_OMAGIC
|
||||
0x13579acd, # GDBM_MAGIC32
|
||||
0x13579acf, # GDBM_MAGIC64
|
||||
]
|
||||
assert_operator(pag_magics, :include?,
|
||||
pag.unpack("i")[0]) # native endian, native int.
|
||||
if !File.identical?(pagname, dirname)
|
||||
dir = File.binread(dirname, 16)
|
||||
assert_equal("GDBM", dir[0, 4])
|
||||
end
|
||||
when /\bBerkeley DB\b/
|
||||
assert_equal(%w[.db], suffixes)
|
||||
assert(!File.zero?(dbname))
|
||||
db = File.binread(dbname, 16)
|
||||
assert(db[0,4].unpack("N") == [0x00061561] || # Berkeley DB 1
|
||||
db[12,4].unpack("L") == [0x00061561]) # Berkeley DBM 2 or later.
|
||||
when /\bQDBM\b/
|
||||
assert_equal(%w[.dir .pag], suffixes)
|
||||
assert(!File.zero?(pagname))
|
||||
assert(!File.zero?(dirname))
|
||||
dir = File.binread(dirname, 16)
|
||||
assert_equal("[depot]\0\v", dir[0, 9])
|
||||
pag = File.binread(pagname, 16)
|
||||
if [1].pack("s") == "\x00\x01" # big endian
|
||||
assert_equal("[DEPOT]\n\f", pag[0, 9])
|
||||
else # little endian
|
||||
assert_equal("[depot]\n\f", pag[0, 9])
|
||||
end
|
||||
end
|
||||
if suffixes == %w[.db]
|
||||
assert_match(/\bBerkeley DB\b/, DBM::VERSION)
|
||||
end
|
||||
end
|
||||
|
||||
def test_s_new_has_no_block
|
||||
# DBM.new ignore the block
|
||||
foo = true
|
||||
assert_instance_of(DBM, dbm = DBM.new("#{@tmpdir}/#{@prefix}") { foo = false })
|
||||
assert_equal(foo, true)
|
||||
assert_nil(dbm.close)
|
||||
end
|
||||
|
||||
def test_s_open_no_create
|
||||
skip "dbm_open() is broken on libgdbm 1.8.0 or prior (#{DBM::VERSION})" if /GDBM version 1\.(?:[0-7]\b|8\.0)/ =~ DBM::VERSION
|
||||
assert_nil(dbm = DBM.open("#{@tmpdir}/#{@prefix}", nil))
|
||||
ensure
|
||||
dbm.close if dbm
|
||||
end
|
||||
|
||||
def test_s_open_with_block
|
||||
assert_equal(DBM.open("#{@tmpdir}/#{@prefix}") { :foo }, :foo)
|
||||
end
|
||||
|
||||
def test_close
|
||||
assert_instance_of(DBM, dbm = DBM.open("#{@tmpdir}/#{@prefix}"))
|
||||
assert_nil(dbm.close)
|
||||
|
||||
# closed DBM file
|
||||
assert_raise(DBMError) { dbm.close }
|
||||
end
|
||||
|
||||
def test_aref
|
||||
assert_equal('bar', @dbm['foo'] = 'bar')
|
||||
assert_equal('bar', @dbm['foo'])
|
||||
|
||||
assert_nil(@dbm['bar'])
|
||||
end
|
||||
|
||||
def test_fetch
|
||||
assert_equal('bar', @dbm['foo']='bar')
|
||||
assert_equal('bar', @dbm.fetch('foo'))
|
||||
|
||||
# key not found
|
||||
assert_raise(IndexError) {
|
||||
@dbm.fetch('bar')
|
||||
}
|
||||
|
||||
# test for `ifnone' arg
|
||||
assert_equal('baz', @dbm.fetch('bar', 'baz'))
|
||||
|
||||
# test for `ifnone' block
|
||||
assert_equal('foobar', @dbm.fetch('bar') {|key| 'foo' + key })
|
||||
end
|
||||
|
||||
def test_aset
|
||||
num = 0
|
||||
2.times {|i|
|
||||
assert_equal('foo', @dbm['foo'] = 'foo')
|
||||
assert_equal('foo', @dbm['foo'])
|
||||
assert_equal('bar', @dbm['foo'] = 'bar')
|
||||
assert_equal('bar', @dbm['foo'])
|
||||
|
||||
num += 1 if i == 0
|
||||
assert_equal(num, @dbm.size)
|
||||
|
||||
# assign nil
|
||||
assert_equal('', @dbm['bar'] = '')
|
||||
assert_equal('', @dbm['bar'])
|
||||
|
||||
num += 1 if i == 0
|
||||
assert_equal(num, @dbm.size)
|
||||
|
||||
# empty string
|
||||
assert_equal('', @dbm[''] = '')
|
||||
assert_equal('', @dbm[''])
|
||||
|
||||
num += 1 if i == 0
|
||||
assert_equal(num, @dbm.size)
|
||||
|
||||
# Integer
|
||||
assert_equal('200', @dbm['100'] = '200')
|
||||
assert_equal('200', @dbm['100'])
|
||||
|
||||
num += 1 if i == 0
|
||||
assert_equal(num, @dbm.size)
|
||||
|
||||
# Big key and value
|
||||
assert_equal('y' * 100, @dbm['x' * 100] = 'y' * 100)
|
||||
assert_equal('y' * 100, @dbm['x' * 100])
|
||||
|
||||
num += 1 if i == 0
|
||||
assert_equal(num, @dbm.size)
|
||||
}
|
||||
end
|
||||
|
||||
def test_key
|
||||
assert_equal('bar', @dbm['foo'] = 'bar')
|
||||
assert_equal('foo', @dbm.key('bar'))
|
||||
assert_nil(@dbm['bar'])
|
||||
end
|
||||
|
||||
def test_values_at
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
assert_equal(values.reverse, @dbm.values_at(*keys.reverse))
|
||||
end
|
||||
|
||||
def test_select_with_block
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
ret = @dbm.select {|k,v|
|
||||
assert_equal(k.upcase, v)
|
||||
k != "bar"
|
||||
}
|
||||
assert_equal([['baz', 'BAZ'], ['foo', 'FOO']],
|
||||
ret.sort)
|
||||
end
|
||||
|
||||
def test_length
|
||||
num = 10
|
||||
assert_equal(0, @dbm.size)
|
||||
num.times {|i|
|
||||
i = i.to_s
|
||||
@dbm[i] = i
|
||||
}
|
||||
assert_equal(num, @dbm.size)
|
||||
|
||||
@dbm.shift
|
||||
|
||||
assert_equal(num - 1, @dbm.size)
|
||||
end
|
||||
|
||||
def test_empty?
|
||||
assert_equal(true, @dbm.empty?)
|
||||
@dbm['foo'] = 'FOO'
|
||||
assert_equal(false, @dbm.empty?)
|
||||
end
|
||||
|
||||
def test_each_pair
|
||||
n = 0
|
||||
@dbm.each_pair { n += 1 }
|
||||
assert_equal(0, n)
|
||||
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
|
||||
n = 0
|
||||
ret = @dbm.each_pair {|key, val|
|
||||
assert_not_nil(i = keys.index(key))
|
||||
assert_equal(val, values[i])
|
||||
|
||||
n += 1
|
||||
}
|
||||
assert_equal(keys.size, n)
|
||||
assert_equal(@dbm, ret)
|
||||
end
|
||||
|
||||
def test_each_value
|
||||
n = 0
|
||||
@dbm.each_value { n += 1 }
|
||||
assert_equal(0, n)
|
||||
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
|
||||
n = 0
|
||||
ret = @dbm.each_value {|val|
|
||||
assert_not_nil(key = @dbm.key(val))
|
||||
assert_not_nil(i = keys.index(key))
|
||||
assert_equal(val, values[i])
|
||||
|
||||
n += 1
|
||||
}
|
||||
assert_equal(keys.size, n)
|
||||
assert_equal(@dbm, ret)
|
||||
end
|
||||
|
||||
def test_each_key
|
||||
n = 0
|
||||
@dbm.each_key { n += 1 }
|
||||
assert_equal(0, n)
|
||||
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
|
||||
n = 0
|
||||
ret = @dbm.each_key {|key|
|
||||
assert_not_nil(i = keys.index(key))
|
||||
assert_equal(@dbm[key], values[i])
|
||||
|
||||
n += 1
|
||||
}
|
||||
assert_equal(keys.size, n)
|
||||
assert_equal(@dbm, ret)
|
||||
end
|
||||
|
||||
def test_keys
|
||||
assert_equal([], @dbm.keys)
|
||||
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
|
||||
assert_equal(keys.sort, @dbm.keys.sort)
|
||||
assert_equal(values.sort, @dbm.values.sort)
|
||||
end
|
||||
|
||||
def test_values
|
||||
test_keys
|
||||
end
|
||||
|
||||
def test_shift
|
||||
assert_nil(@dbm.shift)
|
||||
assert_equal(0, @dbm.size)
|
||||
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
|
||||
ret_keys = []
|
||||
ret_values = []
|
||||
while ret = @dbm.shift
|
||||
ret_keys.push ret[0]
|
||||
ret_values.push ret[1]
|
||||
|
||||
assert_equal(keys.size - ret_keys.size, @dbm.size)
|
||||
end
|
||||
|
||||
assert_equal(keys.sort, ret_keys.sort)
|
||||
assert_equal(values.sort, ret_values.sort)
|
||||
end
|
||||
|
||||
def test_delete
|
||||
keys = %w(foo bar baz)
|
||||
values = %w(FOO BAR BAZ)
|
||||
key = keys[1]
|
||||
|
||||
assert_nil(@dbm.delete(key))
|
||||
assert_equal(0, @dbm.size)
|
||||
|
||||
@dbm[keys[0]], @dbm[keys[1]], @dbm[keys[2]] = values
|
||||
|
||||
assert_equal('BAR', @dbm.delete(key))
|
||||
assert_nil(@dbm[key])
|
||||
assert_equal(2, @dbm.size)
|
||||
|
||||
assert_nil(@dbm.delete(key))
|
||||
end
|
||||
|
||||
def test_delete_with_block
|
||||
key = 'no called block'
|
||||
@dbm[key] = 'foo'
|
||||
assert_equal('foo', @dbm.delete(key) {|k| k.replace 'called block'; :blockval})
|
||||
assert_equal(0, @dbm.size)
|
||||
|
||||
key = 'no called block'.dup
|
||||
assert_equal(:blockval, @dbm.delete(key) {|k| k.replace 'called block'; :blockval})
|
||||
assert_equal(0, @dbm.size)
|
||||
end
|
||||
|
||||
def test_delete_if
|
||||
v = "0"
|
||||
100.times {@dbm[v] = v; v = v.next}
|
||||
|
||||
ret = @dbm.delete_if {|key, val| key.to_i < 50}
|
||||
assert_equal(@dbm, ret)
|
||||
check_size(50, @dbm)
|
||||
|
||||
ret = @dbm.delete_if {|key, val| key.to_i >= 50}
|
||||
assert_equal(@dbm, ret)
|
||||
check_size(0, @dbm)
|
||||
|
||||
# break
|
||||
v = "0"
|
||||
100.times {@dbm[v] = v; v = v.next}
|
||||
check_size(100, @dbm)
|
||||
n = 0;
|
||||
@dbm.delete_if {|key, val|
|
||||
break if n > 50
|
||||
n+=1
|
||||
true
|
||||
}
|
||||
assert_equal(51, n)
|
||||
check_size(49, @dbm)
|
||||
|
||||
@dbm.clear
|
||||
|
||||
# raise
|
||||
v = "0"
|
||||
100.times {@dbm[v] = v; v = v.next}
|
||||
check_size(100, @dbm)
|
||||
n = 0;
|
||||
begin
|
||||
@dbm.delete_if {|key, val|
|
||||
raise "runtime error" if n > 50
|
||||
n+=1
|
||||
true
|
||||
}
|
||||
rescue RuntimeError
|
||||
end
|
||||
assert_equal(51, n)
|
||||
check_size(49, @dbm)
|
||||
end
|
||||
|
||||
def test_reject
|
||||
v = "0"
|
||||
100.times {@dbm[v] = v; v = v.next}
|
||||
|
||||
hash = @dbm.reject {|key, val| key.to_i < 50}
|
||||
assert_instance_of(Hash, hash)
|
||||
assert_equal(100, @dbm.size)
|
||||
|
||||
assert_equal(50, hash.size)
|
||||
hash.each_pair {|key,val|
|
||||
assert_equal(false, key.to_i < 50)
|
||||
assert_equal(key, val)
|
||||
}
|
||||
|
||||
hash = @dbm.reject {|key, val| key.to_i < 100}
|
||||
assert_instance_of(Hash, hash)
|
||||
assert_equal(true, hash.empty?)
|
||||
end
|
||||
|
||||
def test_clear
|
||||
v = "1"
|
||||
100.times {v = v.next; @dbm[v] = v}
|
||||
|
||||
assert_equal(@dbm, @dbm.clear)
|
||||
|
||||
# validate DBM#size
|
||||
i = 0
|
||||
@dbm.each { i += 1 }
|
||||
assert_equal(@dbm.size, i)
|
||||
assert_equal(0, i)
|
||||
end
|
||||
|
||||
def test_invert
|
||||
v = "0"
|
||||
100.times {@dbm[v] = v; v = v.next}
|
||||
|
||||
hash = @dbm.invert
|
||||
assert_instance_of(Hash, hash)
|
||||
assert_equal(100, hash.size)
|
||||
hash.each_pair {|key, val|
|
||||
assert_equal(key.to_i, val.to_i)
|
||||
}
|
||||
end
|
||||
|
||||
def test_update
|
||||
hash = {}
|
||||
v = "0"
|
||||
100.times {v = v.next; hash[v] = v}
|
||||
|
||||
@dbm["101"] = "101"
|
||||
@dbm.update hash
|
||||
assert_equal(101, @dbm.size)
|
||||
@dbm.each_pair {|key, val|
|
||||
assert_equal(key.to_i, val.to_i)
|
||||
}
|
||||
end
|
||||
|
||||
def test_replace
|
||||
hash = {}
|
||||
v = "0"
|
||||
100.times {v = v.next; hash[v] = v}
|
||||
|
||||
@dbm["101"] = "101"
|
||||
@dbm.replace hash
|
||||
assert_equal(100, @dbm.size)
|
||||
@dbm.each_pair {|key, val|
|
||||
assert_equal(key.to_i, val.to_i)
|
||||
}
|
||||
end
|
||||
|
||||
def test_haskey?
|
||||
assert_equal('bar', @dbm['foo']='bar')
|
||||
assert_equal(true, @dbm.has_key?('foo'))
|
||||
assert_equal(false, @dbm.has_key?('bar'))
|
||||
end
|
||||
|
||||
def test_has_value?
|
||||
assert_equal('bar', @dbm['foo']='bar')
|
||||
assert_equal(true, @dbm.has_value?('bar'))
|
||||
assert_equal(false, @dbm.has_value?('foo'))
|
||||
end
|
||||
|
||||
def test_to_a
|
||||
v = "0"
|
||||
100.times {v = v.next; @dbm[v] = v}
|
||||
|
||||
ary = @dbm.to_a
|
||||
assert_instance_of(Array, ary)
|
||||
assert_equal(100, ary.size)
|
||||
ary.each {|key,val|
|
||||
assert_equal(key.to_i, val.to_i)
|
||||
}
|
||||
end
|
||||
|
||||
def test_to_hash
|
||||
v = "0"
|
||||
100.times {v = v.next; @dbm[v] = v}
|
||||
|
||||
hash = @dbm.to_hash
|
||||
assert_instance_of(Hash, hash)
|
||||
assert_equal(100, hash.size)
|
||||
hash.each {|key,val|
|
||||
assert_equal(key.to_i, val.to_i)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
class TestDBM2 < Test::Unit::TestCase
|
||||
def setup
|
||||
@tmproot = Dir.mktmpdir('ruby-dbm')
|
||||
end
|
||||
|
||||
def teardown
|
||||
FileUtils.remove_entry_secure @tmproot if File.directory?(@tmproot)
|
||||
end
|
||||
|
||||
def test_version
|
||||
assert_instance_of(String, DBM::VERSION)
|
||||
end
|
||||
|
||||
def test_reader_open_notexist
|
||||
assert_raise(Errno::ENOENT) {
|
||||
DBM.open("#{@tmproot}/a", 0666, DBM::READER)
|
||||
}
|
||||
end
|
||||
|
||||
def test_writer_open_notexist
|
||||
skip "dbm_open() is broken on libgdbm 1.8.0 or prior (#{DBM::VERSION})" if /GDBM version 1\.(?:[0-7]\b|8\.0)/ =~ DBM::VERSION
|
||||
assert_raise(Errno::ENOENT) {
|
||||
DBM.open("#{@tmproot}/a", 0666, DBM::WRITER)
|
||||
}
|
||||
end
|
||||
|
||||
def test_wrcreat_open_notexist
|
||||
v = DBM.open("#{@tmproot}/a", 0666, DBM::WRCREAT)
|
||||
assert_instance_of(DBM, v)
|
||||
v.close
|
||||
end
|
||||
|
||||
def test_newdb_open_notexist
|
||||
v = DBM.open("#{@tmproot}/a", 0666, DBM::NEWDB)
|
||||
assert_instance_of(DBM, v)
|
||||
v.close
|
||||
end
|
||||
|
||||
def test_reader_open
|
||||
DBM.open("#{@tmproot}/a") {} # create a db.
|
||||
v = DBM.open("#{@tmproot}/a", nil, DBM::READER) {|d|
|
||||
# Errno::EPERM is raised on Solaris which use ndbm.
|
||||
# DBMError is raised on Debian which use gdbm.
|
||||
assert_raise(Errno::EPERM, DBMError) { d["k"] = "v" }
|
||||
true
|
||||
}
|
||||
assert(v)
|
||||
end
|
||||
|
||||
def test_newdb_open
|
||||
DBM.open("#{@tmproot}/a") {|dbm|
|
||||
dbm["k"] = "v"
|
||||
}
|
||||
v = DBM.open("#{@tmproot}/a", nil, DBM::NEWDB) {|d|
|
||||
assert_equal(0, d.length)
|
||||
assert_nil(d["k"])
|
||||
true
|
||||
}
|
||||
assert(v)
|
||||
end
|
||||
|
||||
def test_freeze
|
||||
expected_error = defined?(FrozenError) ? FrozenError : RuntimeError
|
||||
DBM.open("#{@tmproot}/a") {|d|
|
||||
d.freeze
|
||||
assert_raise(expected_error) { d["k"] = "v" }
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -191,12 +191,6 @@ def sync_default_gems(gem)
|
|||
cp_r("#{upstream}/test/io/wait", "test/io")
|
||||
cp_r("#{upstream}/io-wait.gemspec", "ext/io/wait")
|
||||
`git checkout ext/io/wait/depend`
|
||||
when "dbm"
|
||||
rm_rf(%w[ext/dbm test/dbm])
|
||||
cp_r("#{upstream}/ext/dbm", "ext")
|
||||
cp_r("#{upstream}/test/dbm", "test")
|
||||
cp_r("#{upstream}/dbm.gemspec", "ext/dbm")
|
||||
`git checkout ext/dbm/depend`
|
||||
when "gdbm"
|
||||
rm_rf(%w[ext/gdbm test/gdbm])
|
||||
cp_r("#{upstream}/ext/gdbm", "ext")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue