tiny_tds 3.1.0-x64-mingw-ucrt → 3.2.0-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +187 -74
  3. data/CHANGELOG.md +8 -0
  4. data/Gemfile +1 -1
  5. data/README.md +59 -50
  6. data/Rakefile +46 -37
  7. data/VERSION +1 -1
  8. data/ext/tiny_tds/extconf.rb +169 -70
  9. data/ext/tiny_tds/extconsts.rb +3 -4
  10. data/lib/tiny_tds/3.1/tiny_tds.so +0 -0
  11. data/lib/tiny_tds/3.2/tiny_tds.so +0 -0
  12. data/lib/tiny_tds/3.3/tiny_tds.so +0 -0
  13. data/lib/tiny_tds/3.4/tiny_tds.so +0 -0
  14. data/lib/tiny_tds/bin.rb +12 -26
  15. data/lib/tiny_tds/client.rb +38 -42
  16. data/lib/tiny_tds/error.rb +0 -2
  17. data/lib/tiny_tds/gem.rb +5 -9
  18. data/lib/tiny_tds/result.rb +0 -2
  19. data/lib/tiny_tds/version.rb +1 -1
  20. data/lib/tiny_tds.rb +28 -47
  21. data/ports/x64-mingw-ucrt/{freetds/1.4.23/bin → bin}/defncopy.exe +0 -0
  22. data/ports/x64-mingw-ucrt/bin/libsybdb-5.dll +0 -0
  23. data/ports/x64-mingw-ucrt/bin/tsql.exe +0 -0
  24. data/tasks/native_gem.rake +11 -18
  25. data/tasks/package.rake +1 -3
  26. data/tasks/ports.rake +7 -91
  27. data/tasks/test.rake +3 -5
  28. data/test/bin/install-freetds.sh +2 -4
  29. data/test/bin/restore-from-native-gem.ps1 +10 -0
  30. data/test/client_test.rb +106 -112
  31. data/test/gem_test.rb +31 -107
  32. data/test/result_test.rb +208 -221
  33. data/test/schema_test.rb +177 -181
  34. data/test/test_helper.rb +58 -63
  35. data/test/thread_test.rb +22 -31
  36. data/tiny_tds.gemspec +28 -29
  37. metadata +25 -41
  38. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/bsqldb.exe +0 -0
  39. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/datacopy.exe +0 -0
  40. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/freebcp.exe +0 -0
  41. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/libct-4.dll +0 -0
  42. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/libsybdb-5.dll +0 -0
  43. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/osql +0 -393
  44. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/tdspool.exe +0 -0
  45. data/ports/x64-mingw-ucrt/freetds/1.4.23/bin/tsql.exe +0 -0
  46. data/ports/x64-mingw-ucrt/freetds/1.4.23/lib/libct.dll.a +0 -0
  47. data/ports/x64-mingw-ucrt/freetds/1.4.23/lib/libct.la +0 -41
  48. data/ports/x64-mingw-ucrt/freetds/1.4.23/lib/libsybdb.dll.a +0 -0
  49. data/ports/x64-mingw-ucrt/freetds/1.4.23/lib/libsybdb.la +0 -41
  50. data/ports/x64-mingw-ucrt/libiconv/1.17/bin/iconv.exe +0 -0
  51. data/ports/x64-mingw-ucrt/libiconv/1.17/bin/libcharset-1.dll +0 -0
  52. data/ports/x64-mingw-ucrt/libiconv/1.17/bin/libiconv-2.dll +0 -0
  53. data/ports/x64-mingw-ucrt/libiconv/1.17/lib/libcharset.dll.a +0 -0
  54. data/ports/x64-mingw-ucrt/libiconv/1.17/lib/libcharset.la +0 -41
  55. data/ports/x64-mingw-ucrt/libiconv/1.17/lib/libiconv.dll.a +0 -0
  56. data/ports/x64-mingw-ucrt/libiconv/1.17/lib/libiconv.la +0 -41
  57. data/ports/x64-mingw-ucrt/openssl/3.4.0/bin/c_rehash +0 -252
  58. data/ports/x64-mingw-ucrt/openssl/3.4.0/bin/libcrypto-3-x64.dll +0 -0
  59. data/ports/x64-mingw-ucrt/openssl/3.4.0/bin/libssl-3-x64.dll +0 -0
  60. data/ports/x64-mingw-ucrt/openssl/3.4.0/bin/openssl.exe +0 -0
  61. data/tasks/ports/freetds.rb +0 -32
  62. data/tasks/ports/libiconv.rb +0 -26
  63. data/tasks/ports/openssl.rb +0 -62
  64. data/tasks/ports/recipe.rb +0 -64
  65. data/test/benchmark/query.rb +0 -77
  66. data/test/benchmark/query_odbc.rb +0 -106
  67. data/test/benchmark/query_tinytds.rb +0 -126
@@ -1,252 +0,0 @@
1
- #!/usr/bin/env perl
2
-
3
- # WARNING: do not edit!
4
- # Generated by Makefile from tools/c_rehash.in
5
- # Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved.
6
- #
7
- # Licensed under the Apache License 2.0 (the "License"). You may not use
8
- # this file except in compliance with the License. You can obtain a copy
9
- # in the file LICENSE in the source distribution or at
10
- # https://www.openssl.org/source/license.html
11
-
12
- # Perl c_rehash script, scan all files in a directory
13
- # and add symbolic links to their hash values.
14
-
15
- my $dir = "/__w/tiny_tds/tiny_tds/ports/x64-mingw-ucrt/openssl/3.4.0";
16
- my $prefix = "/__w/tiny_tds/tiny_tds/ports/x64-mingw-ucrt/openssl/3.4.0";
17
-
18
- my $errorcount = 0;
19
- my $openssl = $ENV{OPENSSL} || "openssl";
20
- my $pwd;
21
- my $x509hash = "-subject_hash";
22
- my $crlhash = "-hash";
23
- my $verbose = 0;
24
- my $symlink_exists=eval {symlink("",""); 1};
25
- my $removelinks = 1;
26
-
27
- ## Parse flags.
28
- while ( $ARGV[0] =~ /^-/ ) {
29
- my $flag = shift @ARGV;
30
- last if ( $flag eq '--');
31
- if ( $flag eq '-old') {
32
- $x509hash = "-subject_hash_old";
33
- $crlhash = "-hash_old";
34
- } elsif ( $flag eq '-h' || $flag eq '-help' ) {
35
- help();
36
- } elsif ( $flag eq '-n' ) {
37
- $removelinks = 0;
38
- } elsif ( $flag eq '-v' ) {
39
- $verbose++;
40
- }
41
- else {
42
- print STDERR "Usage error; try -h.\n";
43
- exit 1;
44
- }
45
- }
46
-
47
- sub help {
48
- print "Usage: c_rehash [-old] [-h] [-help] [-v] [dirs...]\n";
49
- print " -old use old-style digest\n";
50
- print " -h or -help print this help text\n";
51
- print " -v print files removed and linked\n";
52
- exit 0;
53
- }
54
-
55
- eval "require Cwd";
56
- if (defined(&Cwd::getcwd)) {
57
- $pwd=Cwd::getcwd();
58
- } else {
59
- $pwd=`pwd`;
60
- chomp($pwd);
61
- }
62
-
63
- # DOS/Win32 or Unix delimiter? Prefix our installdir, then search.
64
- my $path_delim = ($pwd =~ /^[a-z]\:/i) ? ';' : ':';
65
- $ENV{PATH} = "$prefix/bin" . ($ENV{PATH} ? $path_delim . $ENV{PATH} : "");
66
-
67
- if (! -x $openssl) {
68
- my $found = 0;
69
- foreach (split /$path_delim/, $ENV{PATH}) {
70
- if (-x "$_/$openssl") {
71
- $found = 1;
72
- $openssl = "$_/$openssl";
73
- last;
74
- }
75
- }
76
- if ($found == 0) {
77
- print STDERR "c_rehash: rehashing skipped ('openssl' program not available)\n";
78
- exit 0;
79
- }
80
- }
81
-
82
- if (@ARGV) {
83
- @dirlist = @ARGV;
84
- } elsif ($ENV{SSL_CERT_DIR}) {
85
- @dirlist = split /$path_delim/, $ENV{SSL_CERT_DIR};
86
- } else {
87
- $dirlist[0] = "$dir/certs";
88
- }
89
-
90
- if (-d $dirlist[0]) {
91
- chdir $dirlist[0];
92
- $openssl="$pwd/$openssl" if (!-x $openssl);
93
- chdir $pwd;
94
- }
95
-
96
- foreach (@dirlist) {
97
- if (-d $_ ) {
98
- if ( -w $_) {
99
- hash_dir($_);
100
- } else {
101
- print "Skipping $_, can't write\n";
102
- $errorcount++;
103
- }
104
- }
105
- }
106
- exit($errorcount);
107
-
108
- sub copy_file {
109
- my ($src_fname, $dst_fname) = @_;
110
-
111
- if (open(my $in, "<", $src_fname)) {
112
- if (open(my $out, ">", $dst_fname)) {
113
- print $out $_ while (<$in>);
114
- close $out;
115
- } else {
116
- warn "Cannot open $dst_fname for write, $!";
117
- }
118
- close $in;
119
- } else {
120
- warn "Cannot open $src_fname for read, $!";
121
- }
122
- }
123
-
124
- sub hash_dir {
125
- my $dir = shift;
126
- my %hashlist;
127
-
128
- print "Doing $dir\n";
129
-
130
- if (!chdir $dir) {
131
- print STDERR "WARNING: Cannot chdir to '$dir', $!\n";
132
- return;
133
- }
134
-
135
- opendir(DIR, ".") || print STDERR "WARNING: Cannot opendir '.', $!\n";
136
- my @flist = sort readdir(DIR);
137
- closedir DIR;
138
- if ( $removelinks ) {
139
- # Delete any existing symbolic links
140
- foreach (grep {/^[\da-f]+\.r{0,1}\d+$/} @flist) {
141
- if (-l $_) {
142
- print "unlink $_\n" if $verbose;
143
- unlink $_ || warn "Can't unlink $_, $!\n";
144
- }
145
- }
146
- }
147
- FILE: foreach $fname (grep {/\.(pem|crt|cer|crl)$/} @flist) {
148
- # Check to see if certificates and/or CRLs present.
149
- my ($cert, $crl) = check_file($fname);
150
- if (!$cert && !$crl) {
151
- print STDERR "WARNING: $fname does not contain a certificate or CRL: skipping\n";
152
- next;
153
- }
154
- link_hash_cert($fname) if ($cert);
155
- link_hash_crl($fname) if ($crl);
156
- }
157
-
158
- chdir $pwd;
159
- }
160
-
161
- sub check_file {
162
- my ($is_cert, $is_crl) = (0,0);
163
- my $fname = $_[0];
164
-
165
- open(my $in, "<", $fname);
166
- while(<$in>) {
167
- if (/^-----BEGIN (.*)-----/) {
168
- my $hdr = $1;
169
- if ($hdr =~ /^(X509 |TRUSTED |)CERTIFICATE$/) {
170
- $is_cert = 1;
171
- last if ($is_crl);
172
- } elsif ($hdr eq "X509 CRL") {
173
- $is_crl = 1;
174
- last if ($is_cert);
175
- }
176
- }
177
- }
178
- close $in;
179
- return ($is_cert, $is_crl);
180
- }
181
-
182
- sub compute_hash {
183
- my $fh;
184
- if ( $^O eq "VMS" ) {
185
- # VMS uses the open through shell
186
- # The file names are safe there and list form is unsupported
187
- if (!open($fh, "-|", join(' ', @_))) {
188
- print STDERR "Cannot compute hash on '$fname'\n";
189
- return;
190
- }
191
- } else {
192
- if (!open($fh, "-|", @_)) {
193
- print STDERR "Cannot compute hash on '$fname'\n";
194
- return;
195
- }
196
- }
197
- return (<$fh>, <$fh>);
198
- }
199
-
200
- # Link a certificate to its subject name hash value, each hash is of
201
- # the form <hash>.<n> where n is an integer. If the hash value already exists
202
- # then we need to up the value of n, unless its a duplicate in which
203
- # case we skip the link. We check for duplicates by comparing the
204
- # certificate fingerprints
205
-
206
- sub link_hash_cert {
207
- link_hash($_[0], 'cert');
208
- }
209
-
210
- # Same as above except for a CRL. CRL links are of the form <hash>.r<n>
211
-
212
- sub link_hash_crl {
213
- link_hash($_[0], 'crl');
214
- }
215
-
216
- sub link_hash {
217
- my ($fname, $type) = @_;
218
- my $is_cert = $type eq 'cert';
219
-
220
- my ($hash, $fprint) = compute_hash($openssl,
221
- $is_cert ? "x509" : "crl",
222
- $is_cert ? $x509hash : $crlhash,
223
- "-fingerprint", "-noout",
224
- "-in", $fname);
225
- chomp $hash;
226
- $hash =~ s/^.*=// if !$is_cert;
227
- chomp $fprint;
228
- return if !$hash;
229
- $fprint =~ s/^.*=//;
230
- $fprint =~ tr/://d;
231
- my $suffix = 0;
232
- # Search for an unused hash filename
233
- my $crlmark = $is_cert ? "" : "r";
234
- while(exists $hashlist{"$hash.$crlmark$suffix"}) {
235
- # Hash matches: if fingerprint matches its a duplicate cert
236
- if ($hashlist{"$hash.$crlmark$suffix"} eq $fprint) {
237
- my $what = $is_cert ? 'certificate' : 'CRL';
238
- print STDERR "WARNING: Skipping duplicate $what $fname\n";
239
- return;
240
- }
241
- $suffix++;
242
- }
243
- $hash .= ".$crlmark$suffix";
244
- if ($symlink_exists) {
245
- print "link $fname -> $hash\n" if $verbose;
246
- symlink $fname, $hash || warn "Can't symlink, $!";
247
- } else {
248
- print "copy $fname -> $hash\n" if $verbose;
249
- copy_file($fname, $hash);
250
- }
251
- $hashlist{$hash} = $fprint;
252
- }
@@ -1,32 +0,0 @@
1
- require_relative './recipe'
2
-
3
- module Ports
4
- class Freetds < Recipe
5
- def initialize(version)
6
- super('freetds', version)
7
-
8
- set_patches
9
- end
10
-
11
- private
12
-
13
- def configure_defaults
14
- opts = super
15
-
16
- opts << '--with-pic'
17
- opts << '--disable-odbc'
18
- opts << '--with-tdsver=7.3'
19
-
20
- if windows?
21
- opts << '--sysconfdir=C:/Sites'
22
- opts << '--enable-sspi'
23
- end
24
-
25
- opts
26
- end
27
-
28
- def set_patches
29
- self.patch_files.concat get_patches(name, version)
30
- end
31
- end
32
- end
@@ -1,26 +0,0 @@
1
- require_relative './recipe'
2
-
3
- module Ports
4
- class Libiconv < Recipe
5
- def initialize(version)
6
- super('libiconv', version)
7
-
8
- set_patches
9
- end
10
-
11
- private
12
-
13
- def configure_defaults
14
- [
15
- "--host=#{@host}",
16
- '--disable-static',
17
- '--enable-shared',
18
- 'CFLAGS=-fPIC -O2'
19
- ]
20
- end
21
-
22
- def set_patches
23
- self.patch_files.concat get_patches(name, version)
24
- end
25
- end
26
- end
@@ -1,62 +0,0 @@
1
- require_relative './recipe'
2
-
3
- module Ports
4
- class Openssl < Recipe
5
- def initialize(version)
6
- super('openssl', version)
7
-
8
- set_patches
9
- end
10
-
11
- def configure
12
- return if configured?
13
-
14
- md5_file = File.join(tmp_path, 'configure.md5')
15
- digest = Digest::MD5.hexdigest(computed_options.to_s)
16
- File.open(md5_file, "w") { |f| f.write digest }
17
-
18
- # Windows doesn't recognize the shebang so always explicitly use sh
19
- execute('configure', "sh -c \"./Configure #{computed_options.join(' ')}\"")
20
- end
21
-
22
- def install
23
- unless installed?
24
- execute('install', %Q(#{make_cmd} install_sw install_ssldirs))
25
- end
26
- end
27
-
28
- private
29
-
30
- def configure_defaults
31
- opts = [
32
- 'shared',
33
- target_arch,
34
- "--openssldir=#{path}",
35
- ]
36
-
37
- if cross_build?
38
- opts << "--cross-compile-prefix=#{host}-"
39
- end
40
-
41
- opts
42
- end
43
-
44
- def target_arch
45
- if windows?
46
- arch = ''
47
- arch = '64' if host=~ /x86_64/
48
-
49
- "mingw#{arch}"
50
- else
51
- arch = 'x32'
52
- arch = 'x86_64' if host=~ /x86_64/
53
-
54
- "linux-#{arch}"
55
- end
56
- end
57
-
58
- def set_patches
59
- self.patch_files.concat get_patches(name, version)
60
- end
61
- end
62
- end
@@ -1,64 +0,0 @@
1
- # encoding: UTF-8
2
- require 'mini_portile2'
3
- require 'fileutils'
4
- require 'rbconfig'
5
-
6
- module Ports
7
- class Recipe < MiniPortile
8
- attr_writer :gem_platform
9
-
10
- def cook
11
- checkpoint = "ports/checkpoints/#{name}-#{version}-#{gem_platform}.installed"
12
-
13
- unless File.exist? checkpoint
14
- super
15
- FileUtils.mkdir_p("ports/checkpoints")
16
- FileUtils.touch checkpoint
17
- end
18
- end
19
-
20
- private
21
-
22
- attr_reader :gem_platform
23
-
24
- def port_path
25
- "#{@target}/#{gem_platform}/#{@name}/#{@version}"
26
- end
27
-
28
- def tmp_path
29
- "tmp/#{gem_platform}/ports/#{@name}/#{@version}"
30
- end
31
-
32
- def configure_defaults
33
- [
34
- "--host=#{@host}",
35
- '--disable-static',
36
- '--enable-shared'
37
- ]
38
- end
39
-
40
- def windows?
41
- host =~ /mswin|mingw32/
42
- end
43
-
44
- def system_host
45
- RbConfig::CONFIG['host']
46
- end
47
-
48
- def cross_build?
49
- host != system_host
50
- end
51
-
52
- def get_patches(libname, version)
53
- patches = []
54
-
55
- patch_path = File.expand_path(
56
- File.join('..','..','..','patches',libname,version),
57
- __FILE__
58
- )
59
-
60
- patches.concat(Dir[File.join(patch_path, '*.patch')].sort)
61
- patches.concat(Dir[File.join(patch_path, '*.diff')].sort)
62
- end
63
- end
64
- end
@@ -1,77 +0,0 @@
1
- $:.unshift File.expand_path('../../../lib',__FILE__)
2
- require 'rubygems'
3
- require 'bench_press'
4
- require 'tiny_tds'
5
- require 'odbc'
6
- require 'odbc_utf8'
7
-
8
- extend BenchPress
9
-
10
- author 'Ken Collins'
11
- summary 'Query everything.'
12
-
13
- reps 1_000
14
-
15
- @odbc = ODBC.connect ENV['TINYTDS_UNIT_DATASERVER'], 'tinytds', ''
16
- @odbc.use_time = true
17
-
18
- @odbc_utf8 = ODBC_UTF8.connect ENV['TINYTDS_UNIT_DATASERVER'], 'tinytds', ''
19
- @odbc_utf8.use_time = true
20
-
21
- @tinytds = TinyTds::Client.new(
22
- :dataserver => ENV['TINYTDS_UNIT_DATASERVER'],
23
- :username => 'tinytds',
24
- :password => '',
25
- :database => 'tinytdstest',
26
- :appname => 'TinyTds Dev',
27
- :login_timeout => 5,
28
- :timeout => 5 )
29
-
30
- @query_all = "SELECT * FROM [datatypes]"
31
-
32
-
33
- measure "ODBC (ascii-8bit)" do
34
- h = @odbc.run(@query_all)
35
- h.fetch_all
36
- h.drop
37
- end
38
-
39
- # measure "ODBC (utf8)" do
40
- # h = @odbc_utf8.run(@query_all)
41
- # h.fetch_all
42
- # h.drop
43
- # end
44
-
45
- measure "TinyTDS (row caching)" do
46
- @tinytds.execute(@query_all).each
47
- end
48
-
49
- measure "TinyTDS (no caching)" do
50
- @tinytds.execute(@query_all).each(:cache_rows => false)
51
- end
52
-
53
-
54
-
55
- =begin
56
-
57
- Author: Ken Collins
58
- Date: January 22, 2011
59
- Summary: Query everything.
60
-
61
- System Information
62
- ------------------
63
- Operating System: Mac OS X 10.6.6 (10J567)
64
- CPU: Intel Core 2 Duo 1.6 GHz
65
- Processor Count: 2
66
- Memory: 4 GB
67
- ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-darwin10.4.3], MBARI 0x6770, Ruby Enterprise Edition 2010.02
68
-
69
- "TinyTDS (row caching)" is up to 79% faster over 1,000 repetitions
70
- ------------------------------------------------------------------
71
-
72
- TinyTDS (row caching) 4.90862512588501 secs Fastest
73
- TinyTDS (no caching) 4.91626906394958 secs 0% Slower
74
- ODBC (ascii-8bit) 23.959536075592 secs 79% Slower
75
-
76
- =end
77
-
@@ -1,106 +0,0 @@
1
- require 'rubygems'
2
- require 'bench_press'
3
- begin gem 'odbc', '0.99992' ; rescue Gem::LoadError ; end
4
- require 'odbc'
5
-
6
- extend BenchPress
7
-
8
- author 'Ken Collins'
9
- summary 'Benchmarking ODBC Querys'
10
-
11
- reps 1_000
12
-
13
- @client = ODBC.connect ENV['TINYTDS_UNIT_DATASERVER'], 'tinytds', ''
14
- @client.use_time = true
15
-
16
- @query_nothing = "SELECT NULL AS [null]"
17
- @query_ints = "SELECT [int], [bigint], [smallint], [tinyint] FROM [datatypes]"
18
- @query_binaries = "SELECT [binary_50], [image], [varbinary_50] FROM [datatypes]"
19
- @query_bits = "SELECT [bit] FROM [datatypes]"
20
- @query_chars = "SELECT [char_10], [nchar_10], [ntext], [nvarchar_50], [text], [varchar_50] FROM [datatypes]"
21
- @query_dates = "SELECT [datetime], [smalldatetime] FROM [datatypes]"
22
- @query_decimals = "SELECT [decimal_9_2], [decimal_16_4], [numeric_18_0], [numeric_36_2] FROM [datatypes]"
23
- @query_floats = "SELECT [float], [real] FROM [datatypes]"
24
- @query_moneys = "SELECT [money], [smallmoney] FROM [datatypes]"
25
- @query_guids = "SELECT [uniqueidentifier] FROM [datatypes]"
26
- @query_all = "SELECT * FROM [datatypes]"
27
-
28
- def select_all(query)
29
- h = @client.run(query)
30
- h.fetch_all
31
- h.drop
32
- end
33
-
34
-
35
- measure "Nothing" do
36
- select_all @query_nothing
37
- end
38
-
39
- measure "Integers" do
40
- select_all @query_ints
41
- end
42
-
43
- measure "Binaries" do
44
- select_all @query_binaries
45
- end
46
-
47
- measure "Bits" do
48
- select_all @query_bits
49
- end
50
-
51
- measure "Chars" do
52
- select_all @query_chars
53
- end
54
-
55
- measure "Dates" do
56
- select_all @query_dates
57
- end
58
-
59
- measure "Decimals" do
60
- select_all @query_decimals
61
- end
62
-
63
- measure "Floats" do
64
- select_all @query_floats
65
- end
66
-
67
- measure "Moneys" do
68
- select_all @query_moneys
69
- end
70
-
71
- measure "Guids" do
72
- select_all @query_guids
73
- end
74
-
75
- measure "All" do
76
- select_all @query_all
77
- end
78
-
79
-
80
- =begin
81
-
82
- System Information
83
- ------------------
84
- Operating System: Mac OS X 10.6.4 (10F569)
85
- CPU: Intel Core 2 Duo 2.4 GHz
86
- Processor Count: 2
87
- Memory: 4 GB
88
- ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0]
89
-
90
- "Nothing" is up to 98% faster over 1,000 repetitions
91
- ----------------------------------------------------
92
-
93
- Nothing 0.297961950302124 secs Fastest
94
- Bits 0.377611875534058 secs 21% Slower
95
- Guids 0.381000995635986 secs 21% Slower
96
- Moneys 0.405518054962158 secs 26% Slower
97
- Floats 0.409428119659424 secs 27% Slower
98
- Integers 0.448167085647583 secs 33% Slower
99
- Decimals 0.471596956253052 secs 36% Slower
100
- Dates 0.52501106262207 secs 43% Slower
101
- Binaries 3.66349482536316 secs 91% Slower
102
- Chars 6.82928085327148 secs 95% Slower
103
- All 28.4982612133026 secs 98% Slower
104
-
105
- =end
106
-