ruby-decimal 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ require 'decimal'
2
+
3
+ D = Decimal
4
+ def D(*args)
5
+ Decimal(*args)
6
+ end
@@ -2,7 +2,7 @@ module DecimalSupport
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 0
5
+ TINY = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -9,3 +9,6 @@ require File.dirname(__FILE__) + '/test_coercion.rb'
9
9
  require File.dirname(__FILE__) + '/test_to_int.rb'
10
10
  require File.dirname(__FILE__) + '/test_to_rf.rb'
11
11
  require File.dirname(__FILE__) + '/test_define_conversions.rb'
12
+ require File.dirname(__FILE__) + '/test_odd_even.rb'
13
+ require File.dirname(__FILE__) + '/test_odd_epsilon.rb'
14
+ require File.dirname(__FILE__) + '/test_ulp.rb'
@@ -50,8 +50,6 @@ def exp1(x, c=nil)
50
50
  return +y
51
51
  end
52
52
 
53
-
54
-
55
53
  class TestBasic < Test::Unit::TestCase
56
54
 
57
55
 
@@ -95,6 +95,18 @@ class TestDefineConversions < Test::Unit::TestCase
95
95
  assert_equal Decimal('11'), Decimal(11.0)
96
96
  assert Decimal(11.0).is_a?(Decimal)
97
97
 
98
+ Decimal.context.define_conversion_from(Float) do |x, context|
99
+ Decimal.context(context, :exact=>true) do
100
+ s,e = Math.frexp(x)
101
+ s = Math.ldexp(s, Float::MANT_DIG).to_i
102
+ e -= Float::MANT_DIG
103
+ Decimal(s*(Float::RADIX**e))
104
+ end
105
+ end
106
+
107
+ assert_equal '0.1000000000000000055511151231257827021181583404541015625', Decimal(0.1).to_s
108
+ assert_equal '1.100000000000000088817841970012523233890533447265625', Decimal(1.1).to_s
109
+
98
110
  end
99
111
 
100
112
  end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/helper.rb'
2
+
3
+ class TestEpsilon < Test::Unit::TestCase
4
+
5
+
6
+ def setup
7
+ initialize_context
8
+ end
9
+
10
+ def test_epsilon
11
+ eps = Decimal.context.epsilon
12
+ assert_equal((Decimal(1).next_plus - Decimal(1)), eps)
13
+ assert_equal Decimal(1,1,1-Decimal.context.precision), eps
14
+ end
15
+
16
+ def test_strict_epsilon
17
+
18
+ [:up, :ceiling, :down, :floor, :half_up, :half_down, :half_even, :up05].each do |rounding|
19
+ Decimal.context.rounding = rounding
20
+ eps = Decimal.context.strict_epsilon
21
+ eps_1 = Decimal(1)+eps
22
+ r = eps.next_minus
23
+ r_1 = Decimal(1)+r
24
+ assert((eps_1 > Decimal(1)) && (r_1 == Decimal(1)), "Test stritct epsilon for rounding #{rounding}")
25
+ assert_equal(((Decimal(1)+eps)-Decimal(1)), Decimal.context.epsilon)
26
+ end
27
+ end
28
+
29
+ def test_half_epsilon
30
+ assert_equal Decimal.context.epsilon/2, Decimal.context.half_epsilon
31
+ end
32
+
33
+
34
+ end
@@ -0,0 +1,76 @@
1
+ require File.dirname(__FILE__) + '/helper.rb'
2
+
3
+ class TestUlp < Test::Unit::TestCase
4
+
5
+
6
+ def setup
7
+ initialize_context
8
+ end
9
+
10
+
11
+ NUMBERS = %w{
12
+ 0.0000
13
+ 0.0001
14
+ 0.0002
15
+ 0.0003
16
+ 0.0999
17
+ 0.1000
18
+ 0.1001
19
+ 0.1999
20
+ 0.2000
21
+ 0.2001
22
+ 0.8999
23
+ 0.9000
24
+ 0.9001
25
+ 0.9999
26
+ 1.0000
27
+ 1.0001
28
+ 1E27
29
+ 1.0001E27
30
+ }
31
+
32
+ def test_ulp_4dig
33
+ Decimal.context.precision = 4
34
+ Decimal.context.emin = -99
35
+ Decimal.context.emax = 99
36
+
37
+ (NUMBERS+[Decimal.zero,Decimal.zero(-1),
38
+ Decimal.context.minimum_nonzero, Decimal.context.maximum_subnormal, Decimal.context.minimum_normal,
39
+ Decimal.context.maximum_finite]).each do |n|
40
+ x = Decimal(n)
41
+ if x >= 0
42
+ assert_equal x-x.next_minus, x.ulp
43
+ else
44
+ assert_equal x.next_plus-x, x.ulp
45
+ end
46
+ end
47
+
48
+ assert_equal Decimal.context.maximum_finite-Decimal.context.maximum_finite.next_minus, Decimal.infinity.ulp
49
+ assert_equal Decimal('0.00001'), Decimal('0.1').ulp
50
+ assert_equal Decimal('1E-7'), Decimal('0.001').ulp
51
+ assert_equal Decimal('0.00001'), Decimal('0.100').ulp
52
+ assert_equal Decimal('0.00001'), Decimal('0.1000').ulp
53
+ assert_equal Decimal('0.0001'), Decimal('0.1001').ulp
54
+ assert_equal Decimal('0.0001'), Decimal('0.9').ulp
55
+ assert_equal Decimal('0.0001'), Decimal('0.99999').ulp
56
+ assert_equal Decimal('0.0001'), Decimal('0.9000').ulp
57
+ assert_equal Decimal('0.0001'), Decimal('0.990').ulp
58
+ assert_equal Decimal('0.0001'), Decimal('0.23').ulp
59
+ assert_equal Decimal('1E-101'), Decimal('1.001E-98').ulp
60
+ assert_equal Decimal('1E-102'), Decimal('1.001E-99').ulp
61
+ assert_equal Decimal('1E-102'), Decimal('1E-99').ulp
62
+ assert_equal Decimal('1E-102'), Decimal('9.99E-100').ulp
63
+ assert_equal Decimal('1E-102'), Decimal('1E-102').ulp
64
+ assert_equal Decimal('1E-102'), Decimal('0').ulp
65
+ assert_equal Decimal('1E-102'), Decimal('0').ulp
66
+
67
+ Decimal.context.exact = true
68
+ assert Decimal(1).ulp.nan?, "No ulps can be computed in exact contexts"
69
+ Decimal.context.traps[Decimal::InvalidOperation] = true
70
+ assert_raise(Decimal::InvalidOperation) { Decimal(1).ulp }
71
+
72
+ end
73
+
74
+
75
+
76
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-decimal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Goizueta
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-21 00:00:00 +02:00
12
+ date: 2009-06-23 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -40,6 +40,7 @@ files:
40
40
  - Rakefile
41
41
  - lib/decimal.rb
42
42
  - lib/decimal/decimal.rb
43
+ - lib/decimal/shortcut.rb
43
44
  - lib/decimal/support.rb
44
45
  - lib/decimal/version.rb
45
46
  - setup.rb
@@ -63,6 +64,7 @@ files:
63
64
  - test/test_comparisons.rb
64
65
  - test/test_dectest.rb
65
66
  - test/test_define_conversions.rb
67
+ - test/test_epsilon.rb
66
68
  - test/test_exact.rb
67
69
  - test/test_flags.rb
68
70
  - test/test_multithreading.rb
@@ -70,6 +72,7 @@ files:
70
72
  - test/test_round.rb
71
73
  - test/test_to_int.rb
72
74
  - test/test_to_rf.rb
75
+ - test/test_ulp.rb
73
76
  has_rdoc: true
74
77
  homepage: http://ruby-decimal.rubyforge.org
75
78
  licenses: []
@@ -113,6 +116,7 @@ test_files:
113
116
  - test/test_comparisons.rb
114
117
  - test/test_dectest.rb
115
118
  - test/test_define_conversions.rb
119
+ - test/test_epsilon.rb
116
120
  - test/test_exact.rb
117
121
  - test/test_flags.rb
118
122
  - test/test_multithreading.rb
@@ -120,3 +124,4 @@ test_files:
120
124
  - test/test_round.rb
121
125
  - test/test_to_int.rb
122
126
  - test/test_to_rf.rb
127
+ - test/test_ulp.rb