ruby-decimal 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +3 -0
- data/License.txt +20 -0
- data/Manifest.txt +24 -0
- data/README.txt +306 -0
- data/Rakefile +35 -0
- data/lib/decimal.rb +4 -0
- data/lib/decimal/decimal.rb +2750 -0
- data/lib/decimal/support.rb +337 -0
- data/lib/decimal/version.rb +9 -0
- data/setup.rb +1585 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +192 -0
- data/tasks/git.rake +40 -0
- data/tasks/manifest.rake +48 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +39 -0
- data/tasks/rdoc.rake +50 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +279 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/test/all_tests.rb +11 -0
- data/test/helper.rb +7 -0
- data/test/test_basic.rb +398 -0
- data/test/test_coercion.rb +22 -0
- data/test/test_comparisons.rb +53 -0
- data/test/test_dectest.rb +207 -0
- data/test/test_define_conversions.rb +100 -0
- data/test/test_exact.rb +32 -0
- data/test/test_flags.rb +34 -0
- data/test/test_multithreading.rb +32 -0
- data/test/test_round.rb +49 -0
- data/test/test_to_int.rb +104 -0
- data/test/test_to_rf.rb +36 -0
- metadata +120 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
class TestCoercion < Test::Unit::TestCase
|
4
|
+
|
5
|
+
|
6
|
+
def setup
|
7
|
+
initialize_context
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_coerce
|
11
|
+
assert_equal Decimal('7.1'), Decimal('0.1') + 7
|
12
|
+
assert_equal Decimal('7.1'), 7 + Decimal('0.1')
|
13
|
+
assert_equal Decimal('14'), Decimal(7) * 2
|
14
|
+
assert_equal Decimal('14'), 2 * Decimal(7)
|
15
|
+
|
16
|
+
assert_equal Decimal('7.1'), Decimal(7) + Rational(1,10)
|
17
|
+
assert_equal Decimal('7.1'), Rational(1,10) + Decimal(7)
|
18
|
+
assert_equal Decimal('1.4'), Decimal(7) * Rational(2,10)
|
19
|
+
assert_equal Decimal('1.4'), Rational(2,10) * Decimal(7)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
class TestComparisons < Test::Unit::TestCase
|
4
|
+
|
5
|
+
|
6
|
+
def setup
|
7
|
+
initialize_context
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_hash
|
11
|
+
assert_equal Decimal('1.1').hash, Decimal('1.1').hash
|
12
|
+
assert_equal Decimal('1.1').hash, (Decimal('1.0')+Decimal('0.1')).hash
|
13
|
+
assert_equal Decimal('1.1',:precision=>10).hash, Decimal('1.1',:precision=>3).hash
|
14
|
+
assert_not_equal Decimal('1.0').hash, Decimal('1.1').hash
|
15
|
+
assert_not_equal Decimal('1.0').hash, 1.0.hash
|
16
|
+
assert_not_equal Decimal('1.0').hash, 1.hash
|
17
|
+
|
18
|
+
assert Decimal('1.1').eql?(Decimal('1.1'))
|
19
|
+
assert Decimal('1.1').eql?(Decimal('1.0')+Decimal('0.1'))
|
20
|
+
assert Decimal('1.1',:precision=>10).eql?(Decimal('1.1',:precision=>3))
|
21
|
+
assert !Decimal('1.1').eql?(Decimal('1.0'))
|
22
|
+
assert !Decimal('1.0').eql?(1.0)
|
23
|
+
assert !Decimal('1.0').eql?(1)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_equality
|
27
|
+
assert Decimal('1.1') == Decimal('1.1')
|
28
|
+
assert Decimal('1.1') == (Decimal('1.0')+Decimal('0.1'))
|
29
|
+
assert Decimal('1.1',:precision=>10) == Decimal('1.1',:precision=>3)
|
30
|
+
assert !(Decimal('1.1') == Decimal('1.0'))
|
31
|
+
#assert Decimal('1.1') == 1.1
|
32
|
+
#assert Decimal('1.0') == 1.0
|
33
|
+
#assert Decimal('1.0') == BigDecimal.new('1.000')
|
34
|
+
assert Decimal('1.0') == 1
|
35
|
+
assert Decimal('0.1') == Rational(1)/Rational(10)
|
36
|
+
|
37
|
+
assert !(Decimal.nan == Decimal.nan)
|
38
|
+
assert !(Decimal.nan == Decimal('1'))
|
39
|
+
assert !(Decimal.nan == Decimal('0'))
|
40
|
+
assert !(Decimal.nan == Decimal.infinity)
|
41
|
+
#assert !(Decimal.nan == (0.0/0.0))
|
42
|
+
|
43
|
+
assert !(Decimal.infinity(+1) == Decimal.infinity(-1))
|
44
|
+
assert !(Decimal.infinity(+1) == Decimal('0'))
|
45
|
+
assert Decimal.infinity(+1) == Decimal.infinity
|
46
|
+
assert Decimal.infinity(+1) == Decimal('1')/Decimal('0')
|
47
|
+
assert Decimal.infinity(-1) == Decimal('-1')/Decimal('0')
|
48
|
+
|
49
|
+
# TODO: test <=> <= etc.
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,207 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
ROUNDINGS = {
|
4
|
+
'ceiling' => :ceiling,
|
5
|
+
'down' => :down,
|
6
|
+
'floor' => :floor,
|
7
|
+
'half_down' => :half_down,
|
8
|
+
'half_even' => :half_even,
|
9
|
+
'half_up' => :half_up,
|
10
|
+
'up' => :up,
|
11
|
+
'05up' => :up05
|
12
|
+
}
|
13
|
+
FUNCTIONS = {
|
14
|
+
'add'=>'add',
|
15
|
+
'divide'=>'divide',
|
16
|
+
'multiply'=>'multiply',
|
17
|
+
'subtract'=>'subtract',
|
18
|
+
'compare'=>'compare',
|
19
|
+
'copyabs'=>'copy_abs',
|
20
|
+
'copynegate'=>'copy_negate',
|
21
|
+
'copysign'=>'copy_sign',
|
22
|
+
'divideint'=>'divide_int',
|
23
|
+
'logb'=>'logb',
|
24
|
+
'minus'=>'minus',
|
25
|
+
'plus'=>'plus',
|
26
|
+
'reduce'=>'reduce',
|
27
|
+
'remainder'=>'remainder',
|
28
|
+
'remaindernear'=>'remainder_near',
|
29
|
+
'scaleb'=>'scaleb',
|
30
|
+
'rescale'=>'rescale',
|
31
|
+
'quantize'=>'quantize',
|
32
|
+
'samequantum'=>'same_quantum?',
|
33
|
+
'tointegral'=>'to_integral_value',
|
34
|
+
'tointegralx'=>'to_integral_exact',
|
35
|
+
'fma'=>'fma',
|
36
|
+
'squareroot'=>'sqrt',
|
37
|
+
'abs'=>'abs',
|
38
|
+
'nextminus'=>'next_minus',
|
39
|
+
'nextplus'=>'next_plus',
|
40
|
+
'nexttoward'=>'next_toward',
|
41
|
+
'tosci'=>'to_sci_string',
|
42
|
+
'toeng'=>'to_eng_string',
|
43
|
+
'class'=>'number_class'
|
44
|
+
}
|
45
|
+
# Functions not yet implemented
|
46
|
+
PENDING = %w{
|
47
|
+
exp
|
48
|
+
power
|
49
|
+
ln
|
50
|
+
log10
|
51
|
+
|
52
|
+
rotate
|
53
|
+
shift
|
54
|
+
trim
|
55
|
+
|
56
|
+
and
|
57
|
+
or
|
58
|
+
xor
|
59
|
+
invert
|
60
|
+
|
61
|
+
max
|
62
|
+
min
|
63
|
+
maxmag
|
64
|
+
minmag
|
65
|
+
comparetotal
|
66
|
+
comparetotmag
|
67
|
+
}
|
68
|
+
IGNORED = PENDING + %w{
|
69
|
+
copy
|
70
|
+
apply
|
71
|
+
}
|
72
|
+
|
73
|
+
FLAG_NAMES = {
|
74
|
+
'inexact'=>:Inexact,
|
75
|
+
'rounded'=>:Rounded,
|
76
|
+
'clamped'=>:Clamped,
|
77
|
+
'subnormal'=>:Subnormal,
|
78
|
+
'invalid_operation'=>:InvalidOperation,
|
79
|
+
'underflow'=>:Underflow,
|
80
|
+
'overflow'=>:Overflow,
|
81
|
+
'division_by_zero'=>:DivisionByZero,
|
82
|
+
'division_undefined'=>:InvalidOperation,
|
83
|
+
'division_impossible'=>:DivisionImpossible,
|
84
|
+
'conversion_syntax'=>:ConversionSyntax
|
85
|
+
}
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
def unquote(txt)
|
90
|
+
if txt[0,1]=="'" && txt[-1,1]=="'"
|
91
|
+
txt = txt[1...-1].gsub("''","'")
|
92
|
+
end
|
93
|
+
if txt[0,1]=='"' && txt[-1,1]=='"'
|
94
|
+
txt = txt[1...-1].gsub('""','"')
|
95
|
+
end
|
96
|
+
#txt = 'NaN' if txt=='#' || txt=='?'
|
97
|
+
txt = 'sNaN' if txt=='#'
|
98
|
+
txt = 'NaN' if txt=='?'
|
99
|
+
txt
|
100
|
+
end
|
101
|
+
|
102
|
+
class TestBasic < Test::Unit::TestCase
|
103
|
+
|
104
|
+
def test_dec
|
105
|
+
missing = []
|
106
|
+
dir = File.join(File.dirname(__FILE__), 'dectest')
|
107
|
+
dir = nil unless File.exists?(dir)
|
108
|
+
if dir
|
109
|
+
Dir[File.join(dir, '*.decTest')].each do |fn|
|
110
|
+
|
111
|
+
name = File.basename(fn,'.decTest').downcase
|
112
|
+
next if %w{ds dd dq}.include?(name[0,2]) ||
|
113
|
+
%w{decsingle decdouble decquad testall}.include?(name)
|
114
|
+
|
115
|
+
initialize_context
|
116
|
+
|
117
|
+
|
118
|
+
File.open(fn,'r') do |file|
|
119
|
+
file.each_line do |line|
|
120
|
+
next if line[0,2]=='--' || line.strip.empty?
|
121
|
+
|
122
|
+
if line.include?(' -> ')
|
123
|
+
# test
|
124
|
+
# to do :remove inline comments --... on the right of ->
|
125
|
+
sides = line.split('->')
|
126
|
+
# now split by whitespace but avoid breaking quoted strings (and take care or repeated quotes!)
|
127
|
+
lhs = sides.first.strip.scan(/"(?:[^"]|"")*"|'(?:[^']|'')*'|\S+/)
|
128
|
+
id = lhs.first
|
129
|
+
funct = lhs[1].downcase
|
130
|
+
valstemp = lhs[2..-1]
|
131
|
+
rhs = sides.last.strip.split
|
132
|
+
ans = rhs.first
|
133
|
+
flags = rhs[1..-1].map{|f| Decimal.class_eval(FLAG_NAMES[f.downcase].to_s)}.compact
|
134
|
+
|
135
|
+
next unless valstemp.grep(/#/).empty?
|
136
|
+
|
137
|
+
$test_id = id
|
138
|
+
funct = FUNCTIONS[original_funct=funct]
|
139
|
+
if funct
|
140
|
+
# do test
|
141
|
+
msg = "Test #{id}: #{funct}(#{valstemp.join(',')}) = #{ans}"
|
142
|
+
#File.open('dectests.txt','a'){|f| f.puts msg}
|
143
|
+
expected = result = result_flags = nil
|
144
|
+
Decimal.local_context do |context|
|
145
|
+
context.flags.clear!
|
146
|
+
exact_input = !['apply','to_sci_string', 'to_eng_string'].include?(funct)
|
147
|
+
if exact_input
|
148
|
+
p = context.precision
|
149
|
+
context.exact = true
|
150
|
+
end
|
151
|
+
valstemp.map!{|v| Decimal(unquote(v))}
|
152
|
+
context.precision = p if exact_input
|
153
|
+
result = context.send(funct, *valstemp)
|
154
|
+
result_flags = context.flags.dup
|
155
|
+
expected = unquote(ans)
|
156
|
+
context.exact = true
|
157
|
+
expected = Decimal(expected) unless result.is_a?(String)
|
158
|
+
end
|
159
|
+
result = 1 if result==true
|
160
|
+
result = 0 if result==false
|
161
|
+
expected_flags = Decimal::Flags(*flags)
|
162
|
+
if ans!='?'
|
163
|
+
assert_equal expected.to_s, result.to_s, msg
|
164
|
+
end
|
165
|
+
assert_equal expected_flags, result_flags, msg
|
166
|
+
|
167
|
+
else
|
168
|
+
missing << original_funct unless IGNORED.include?(original_funct) || missing.include?(original_funct)
|
169
|
+
end
|
170
|
+
|
171
|
+
elsif line.include?(':')
|
172
|
+
# directive
|
173
|
+
funct,value = line.split(':').map{|x| x.strip.downcase}
|
174
|
+
case funct
|
175
|
+
when 'rounding'
|
176
|
+
value = ROUNDINGS[value]
|
177
|
+
else
|
178
|
+
value = value.to_i
|
179
|
+
end
|
180
|
+
if value.nil?
|
181
|
+
#raise "error"
|
182
|
+
# to do: skip untill next valid value of same funct
|
183
|
+
else
|
184
|
+
case funct
|
185
|
+
when 'rounding','precision'
|
186
|
+
Decimal.context.send "#{funct}=", value
|
187
|
+
when 'maxexponent'
|
188
|
+
Decimal.context.emax = value
|
189
|
+
when 'minexponent'
|
190
|
+
Decimal.context.emin = value
|
191
|
+
when 'clamp'
|
192
|
+
Decimal.context.clamp = (value==0 ? false : true)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
# assert_empty missing
|
202
|
+
# In Ruby 1.8 there's no assert_empty
|
203
|
+
assert missing.empty?, "#{missing.inspect} is not empty"
|
204
|
+
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
class TestDefineConversions < Test::Unit::TestCase
|
4
|
+
|
5
|
+
|
6
|
+
def setup
|
7
|
+
initialize_context
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_convert_to
|
11
|
+
d = Decimal('1.1')
|
12
|
+
x = d.convert_to(Rational)
|
13
|
+
assert x.is_a?(Rational)
|
14
|
+
assert_equal d.to_r, x
|
15
|
+
|
16
|
+
d = Decimal('11')
|
17
|
+
x = d.convert_to(Integer)
|
18
|
+
assert x.is_a?(Integer)
|
19
|
+
assert_equal d.to_i, x
|
20
|
+
|
21
|
+
d = Decimal('11')
|
22
|
+
x = d.convert_to(Float)
|
23
|
+
assert x.is_a?(Float)
|
24
|
+
assert_equal d.to_f, x
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def test_big_decimal_conversions
|
29
|
+
|
30
|
+
Decimal.local_context do
|
31
|
+
|
32
|
+
Decimal.context.define_conversion_from(BigDecimal) do |x, context|
|
33
|
+
Decimal(x.to_s) # or use x.split etc.
|
34
|
+
end
|
35
|
+
assert Decimal('0') == BigDecimal.new('0')
|
36
|
+
assert_equal BigDecimal.new('0'), Decimal('0')
|
37
|
+
assert_equal BigDecimal.new('1.2345'), Decimal('1.2345')
|
38
|
+
assert_equal BigDecimal.new('-1.2345'), Decimal('-1.2345')
|
39
|
+
assert_equal BigDecimal.new('1.2345'), Decimal('0.0012345000E3')
|
40
|
+
assert_equal Decimal('7.1'), BigDecimal.new('7')+Decimal('0.1')
|
41
|
+
assert_equal Decimal('7.1'), Decimal('7')+BigDecimal.new('0.1')
|
42
|
+
assert_equal Decimal('1.1'), Decimal(BigDecimal.new('1.1'))
|
43
|
+
assert Decimal(BigDecimal.new('1.1')).is_a?(Decimal)
|
44
|
+
|
45
|
+
Decimal.context.define_conversion_to(BigDecimal) do |x|
|
46
|
+
BigDecimal.new(x.to_s) # TODO: use x.split and handle special values
|
47
|
+
end
|
48
|
+
|
49
|
+
['0.1', '-0.1', '0.0', '1234567.1234567', '-1234567.1234567', '1.234E7', '1.234E-7'].each do |n|
|
50
|
+
f = BigDecimal.new(n)
|
51
|
+
d = Decimal(n)
|
52
|
+
c = d.convert_to(BigDecimal)
|
53
|
+
assert c.is_a?(BigDecimal)
|
54
|
+
assert_equal f, c
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
assert_raise(TypeError) { Decimal('0') == BigDecimal.new('0') }
|
59
|
+
assert_not_equal BigDecimal.new('0'), Decimal('0')
|
60
|
+
assert_not_equal BigDecimal.new('1.2345'), Decimal('1.2345')
|
61
|
+
assert_not_equal BigDecimal.new('-1.2345'), Decimal('-1.2345')
|
62
|
+
assert_not_equal BigDecimal.new('1.2345'), Decimal('0.0012345000E3')
|
63
|
+
assert_raise(TypeError) { BigDecimal.new('7')+Decimal('0.1') }
|
64
|
+
assert_raise(TypeError) { Decimal('7')+BigDecimal.new('0.1') }
|
65
|
+
assert_raise(TypeError) { Decimal(BigDecimal.new('1.1')) }
|
66
|
+
|
67
|
+
['0.1', '-0.1', '0.0', '1234567.1234567', '-1234567.1234567', '1.234E7', '1.234E-7'].each do |n|
|
68
|
+
assert_raise(TypeError) { Decimal(n).convert_to(BigDecimal) }
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_float_conversions
|
74
|
+
|
75
|
+
# Exact Float to Decimal conversion limited to context precision
|
76
|
+
# => Decimal('0.1') != Decimal(0.1) unless precision is low enough
|
77
|
+
Decimal.context.define_conversion_from(Float) do |x, context|
|
78
|
+
s,e = Math.frexp(x)
|
79
|
+
significand = Math.ldexp(s, Float::MANT_DIG).to_i
|
80
|
+
exponent = e - Float::MANT_DIG
|
81
|
+
# the number is (as a Rational) significand * exponent**Float::RADIX
|
82
|
+
Decimal(significand*(Float::RADIX**exponent ))
|
83
|
+
end
|
84
|
+
|
85
|
+
assert_equal 0.0, Decimal('0')
|
86
|
+
assert_equal Decimal('0'), 0.0
|
87
|
+
assert_equal 1234.5, Decimal('1234.5')
|
88
|
+
assert_equal Decimal('1234.5'), 1234.5
|
89
|
+
assert_equal(-1234.5, Decimal('-1234.5'))
|
90
|
+
assert_equal 1234.5, Decimal('0.0012345000E6')
|
91
|
+
assert_equal Decimal('7.1'), 7.0+Decimal('0.1')
|
92
|
+
Decimal.local_context(:precision=>12) do
|
93
|
+
assert_equal Decimal('7.1'), Decimal('7')+0.1
|
94
|
+
end
|
95
|
+
assert_equal Decimal('11'), Decimal(11.0)
|
96
|
+
assert Decimal(11.0).is_a?(Decimal)
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
data/test/test_exact.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
|
4
|
+
class TestExact < Test::Unit::TestCase
|
5
|
+
|
6
|
+
|
7
|
+
def setup
|
8
|
+
initialize_context
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def test_exact
|
13
|
+
|
14
|
+
Decimal.context.exact = true
|
15
|
+
|
16
|
+
assert_equal Decimal("9"*100+"E-50"), Decimal('1E50')-Decimal('1E-50')
|
17
|
+
assert_equal Decimal(2),Decimal(6)/Decimal(3)
|
18
|
+
assert_equal Decimal('1.5'),Decimal(6)/Decimal(4)
|
19
|
+
assert_equal Decimal('15241578780673678546105778281054720515622620750190521'), Decimal('123456789123456789123456789')*Decimal('123456789123456789123456789')
|
20
|
+
assert_nothing_raised(Decimal::Inexact){ Decimal(6)/Decimal(4) }
|
21
|
+
assert_raise(Decimal::Inexact){ Decimal(1)/Decimal(3) }
|
22
|
+
# assert_raise(Decimal::Inexact){ Decimal(2).sqrt }
|
23
|
+
|
24
|
+
assert_equal Decimal(2), Decimal('4').sqrt
|
25
|
+
assert_equal Decimal(4), Decimal('16').sqrt
|
26
|
+
assert_raise(Decimal::Inexact){ Decimal(2).sqrt }
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
end
|
data/test/test_flags.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper.rb'
|
2
|
+
|
3
|
+
|
4
|
+
class TestFlags < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_flags
|
7
|
+
f = DecimalSupport::Flags(:flag_one, :flag_three)
|
8
|
+
assert_equal "[:flag_one, :flag_three]", f.to_a.sort_by{|flg| flg.to_s}.inspect
|
9
|
+
f.values = DecimalSupport::FlagValues(:flag_one, :flag_two, :flag_three)
|
10
|
+
assert_equal "DecimalSupport::Flags[flag_one, flag_three] (0x5)", f.inspect
|
11
|
+
f[:flag_two] = true
|
12
|
+
assert_equal "DecimalSupport::Flags[flag_one, flag_two, flag_three] (0x7)", f.inspect
|
13
|
+
f[:flag_one] = false
|
14
|
+
assert_equal "DecimalSupport::Flags[flag_two, flag_three] (0x6)", f.inspect
|
15
|
+
f.clear!
|
16
|
+
assert_equal "DecimalSupport::Flags[] (0x0)", f.inspect
|
17
|
+
f << [:flag_one,:flag_two]
|
18
|
+
assert_equal "DecimalSupport::Flags[flag_one, flag_two] (0x3)", f.inspect
|
19
|
+
g = DecimalSupport::Flags(f.values)
|
20
|
+
g.bits = f.bits
|
21
|
+
assert_equal "DecimalSupport::Flags[flag_one, flag_two] (0x3)", g.inspect
|
22
|
+
assert g==f
|
23
|
+
g.set!
|
24
|
+
assert_equal "DecimalSupport::Flags[flag_one, flag_two, flag_three] (0x7)", g.inspect
|
25
|
+
assert g!=f
|
26
|
+
|
27
|
+
assert DecimalSupport::Flags(:flag_one, :flag_three)==DecimalSupport::Flags(:flag_three, :flag_one)
|
28
|
+
assert DecimalSupport::Flags(:flag_one, :flag_three)!=DecimalSupport::Flags(:flag_one)
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|