dec_number 0.1.1 → 0.1.2
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.
- data/{ext/dec_number/Gemfile → Gemfile} +0 -0
- data/Rakefile +7 -0
- data/dec_number.gemspec +2 -2
- data/ext/dec_number/bench.rb +38 -0
- data/ext/dec_number/decNumber/libdecNumber.a +0 -0
- data/ext/dec_number/dec_number.c +3 -2
- data/test/test_dec_number.rb +20 -0
- metadata +8 -4
File without changes
|
data/Rakefile
ADDED
data/dec_number.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s| # -*-ruby-*-
|
2
2
|
s.name = "dec_number"
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.2'
|
4
4
|
s.authors = ["Paris Sinclair"]
|
5
5
|
s.email = ["paris@rubypanther.com"]
|
6
6
|
s.summary = "ICU-decNumber wrapper for arbitrary precision math with context objects"
|
@@ -9,5 +9,5 @@ Gem::Specification.new do |s| # -*-ruby-*-
|
|
9
9
|
s.extensions << 'ext/dec_number/extconf.rb'
|
10
10
|
s.rubyforge_project = "dec-number"
|
11
11
|
s.files = Dir['**/**']
|
12
|
+
s.test_files = Dir.glob("test/**/*.rb")
|
12
13
|
end
|
13
|
-
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'decimal'
|
3
|
+
require 'bigdecimal'
|
4
|
+
require 'dec_number'
|
5
|
+
require 'benchmark'
|
6
|
+
include Benchmark
|
7
|
+
n = 123.58132134
|
8
|
+
m = Math::PI
|
9
|
+
bm(6) do |x|
|
10
|
+
x.report("dec_number") do
|
11
|
+
a = n.to_dec_number
|
12
|
+
b = m.to_dec_number
|
13
|
+
100_000.times do
|
14
|
+
((a * b + DecNumber.new(rand().to_s) - b / a) ** b).to_s
|
15
|
+
end
|
16
|
+
end
|
17
|
+
x.report("decimal") do
|
18
|
+
a = Decimal.new n.to_s
|
19
|
+
b = Decimal.new m.to_s
|
20
|
+
100_000.times do
|
21
|
+
((a * b + Decimal.new(rand().to_s) - b / a) ** b).to_s
|
22
|
+
end
|
23
|
+
end
|
24
|
+
x.report("bigdecimal") do
|
25
|
+
a = BigDecimal.new n.to_s
|
26
|
+
b = BigDecimal.new m.to_s
|
27
|
+
100_000.times do
|
28
|
+
(a * b + BigDecimal.new(rand().to_s) - b / a).to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
x.report("float") do
|
32
|
+
a = n
|
33
|
+
b = m
|
34
|
+
100_000.times do
|
35
|
+
((a * b + rand() - b / a) ** b).to_s
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
Binary file
|
data/ext/dec_number/dec_number.c
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#include "ruby.h"
|
2
|
+
#define DECNUMDIGITS 34
|
2
3
|
#include "decNumber.h"
|
3
4
|
#include <stdio.h>
|
4
5
|
|
@@ -69,7 +70,7 @@ static VALUE con_initialize(int argc, VALUE *argv, VALUE self) {
|
|
69
70
|
Data_Get_Struct(self, decContext, self_ptr);
|
70
71
|
decContextDefault(self_ptr, DEC_INIT_BASE);
|
71
72
|
self_ptr->traps = 0; // no traps TODO: error handling
|
72
|
-
|
73
|
+
self_ptr->digits = DECNUMDIGITS;
|
73
74
|
|
74
75
|
// TODO: Handle arguments
|
75
76
|
|
@@ -235,7 +236,7 @@ static VALUE num_negate(VALUE self) {
|
|
235
236
|
new = rb_funcall( cDecNumber, rb_intern("new"), 0 );
|
236
237
|
Data_Get_Struct(self, decNumber, dec_num_ptr);
|
237
238
|
if ( decNumberIsNaN( dec_num_ptr ) ) {
|
238
|
-
rb_raise(rb_eTypeError, "can't negate
|
239
|
+
rb_raise(rb_eTypeError, "can't negate a NaN" );
|
239
240
|
return Qnil;
|
240
241
|
}
|
241
242
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
$: << File.join(File.dirname(__FILE__), '..', 'ext', 'dec_number')
|
3
|
+
require 'dec_number'
|
4
|
+
require 'bigdecimal'
|
5
|
+
|
6
|
+
class TestDecNumber < Test::Unit::TestCase
|
7
|
+
[ [ "addition", :+ ],
|
8
|
+
[ "subtraction", :- ],
|
9
|
+
[ "equality", :== ]
|
10
|
+
].each do |name,op|
|
11
|
+
define_method "test_#{name}" do
|
12
|
+
data = [ 0, 1, Math::PI, BigDecimal.new("123.5813") ]
|
13
|
+
data.each do |n|
|
14
|
+
d = n.to_dec_number
|
15
|
+
assert_equal d.send(op,d), n.send(op,n)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dec_number
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-28 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: Wrapper for ICU-decNumber library
|
15
15
|
email:
|
@@ -24,8 +24,8 @@ files:
|
|
24
24
|
- ext/dec_number/extconf2.rb
|
25
25
|
- ext/dec_number/test_numeric.rb
|
26
26
|
- ext/dec_number/NOTES
|
27
|
-
- ext/dec_number/Gemfile
|
28
27
|
- ext/dec_number/extconf.rb
|
28
|
+
- ext/dec_number/bench.rb
|
29
29
|
- ext/dec_number/test_dec_number.rb
|
30
30
|
- ext/dec_number/decNumber/decimal64.c
|
31
31
|
- ext/dec_number/decNumber/config.h.in
|
@@ -82,7 +82,10 @@ files:
|
|
82
82
|
- ext/dec_number/decNumber/decSingle.h
|
83
83
|
- ext/dec_number/decNumber/decCommon.c
|
84
84
|
- ext/dec_number/decNumber/decimal128.c
|
85
|
+
- test/test_dec_number.rb
|
86
|
+
- Rakefile
|
85
87
|
- dec_number.gemspec
|
88
|
+
- Gemfile
|
86
89
|
- README
|
87
90
|
homepage: http://github.com/rubypanther/dec_number
|
88
91
|
licenses: []
|
@@ -108,4 +111,5 @@ rubygems_version: 1.8.10
|
|
108
111
|
signing_key:
|
109
112
|
specification_version: 3
|
110
113
|
summary: ICU-decNumber wrapper for arbitrary precision math with context objects
|
111
|
-
test_files:
|
114
|
+
test_files:
|
115
|
+
- test/test_dec_number.rb
|