long-decimal 0.00.06

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1731 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # testlongdecimal.rb -- runit test for longdecimal.rb
4
+ #
5
+ # CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/test/testlongdecimal.rb,v 1.2 2006/02/25 19:52:11 bk1 Exp $
6
+ # CVS-Label: $Name: PRE_ALPHA_0_06 $
7
+ # Author: $Author: bk1 $ (Karl Brodowsky)
8
+ #
9
+
10
+ require "runit/testcase"
11
+ require "runit/cui/testrunner"
12
+ require "runit/testsuite"
13
+
14
+ load "lib/longdecimal.rb"
15
+
16
+ class TestLongDecimal_class < RUNIT::TestCase
17
+
18
+ @RCS_ID='-$Id: testlongdecimal.rb,v 1.2 2006/02/25 19:52:11 bk1 Exp $-'
19
+
20
+ def test_gcd_with_high_power
21
+ n = 224
22
+ assert_equal(32, n.gcd_with_high_power(2), "2-part of 224 is 32")
23
+ assert_equal(7, n.gcd_with_high_power(7), "7-part of 224 is 7")
24
+ assert_equal(1, n.gcd_with_high_power(3), "3-part of 224 is 1")
25
+ end
26
+
27
+ def test_multiplicity_of_factor
28
+ n = 224
29
+ assert_equal(5, n.multiplicity_of_factor(2), "ny_2(224) is 5")
30
+ assert_equal(1, n.multiplicity_of_factor(7), "ny_7(224) is 1")
31
+ assert_equal(0, n.multiplicity_of_factor(3), "ny_3(224) is 0")
32
+ end
33
+
34
+ def test_rat_multiplicity_of_factor
35
+ n = Rational(224, 225)
36
+ assert_equal(5, n.multiplicity_of_factor(2), "ny_2(n) is 5")
37
+ assert_equal(1, n.multiplicity_of_factor(7), "ny_7(n) is 1")
38
+ assert_equal(-2, n.multiplicity_of_factor(3), "ny_3(n) is -2")
39
+ assert_equal(-2, n.multiplicity_of_factor(5), "ny_5(n) is -2")
40
+ assert_equal(0, n.multiplicity_of_factor(11), "ny_11(n) is 0")
41
+ end
42
+
43
+ def test_rat_long_multiplicity_of_factor
44
+ n = Rational(224*(10**600+1), 225*(5**800))
45
+ assert_equal(5, n.multiplicity_of_factor(2), "ny_2(n) is 5")
46
+ assert_equal(1, n.multiplicity_of_factor(7), "ny_7(n) is 1")
47
+ assert_equal(-2, n.multiplicity_of_factor(3), "ny_3(n) is -2")
48
+ assert_equal(-802, n.multiplicity_of_factor(5), "ny_5(n) is -2")
49
+ assert_equal(0, n.multiplicity_of_factor(11), "ny_11(n) is 0")
50
+ end
51
+
52
+ def test_int_init
53
+ l = LongDecimal(224)
54
+ assert_equal(224, l.to_i, "no loss of information for integers allowed")
55
+ l = LongDecimal(-333)
56
+ assert_equal(-333, l.to_i, "no loss of information for integers allowed")
57
+ l = LongDecimal(1000000000000000000000000000000000000000000000000)
58
+ assert_equal(1000000000000000000000000000000000000000000000000, l.to_i, "no loss of information for integers allowed")
59
+ l = LongDecimal(19, 1)
60
+ assert_equal(1, l.to_i, "loss of information 1.9->1")
61
+ end
62
+
63
+ def test_rat_init
64
+ r = Rational(227, 100)
65
+ l = LongDecimal(r)
66
+ assert_equal(r, l.to_r, "no loss of information for rationals with denominator power of 10 allowed l=#{l.inspect}")
67
+ l = LongDecimal(r, 3)
68
+ assert_equal(r, l.to_r * 1000, "scaling for rationals")
69
+ r = Rational(224, 225)
70
+ l = LongDecimal(r)
71
+ assert((r - l.to_r).to_f.abs < 0.01, "difference of #{r.inspect} and #{l.inspect} must be less 0.01 but is #{(r - l.to_r).to_f.abs}")
72
+ end
73
+
74
+ def test_float_init
75
+ s = "5.32"
76
+ l = LongDecimal(s)
77
+ assert_equal(s, l.to_s, "l=#{l.inspect}")
78
+ f = 2.24
79
+ l = LongDecimal(f)
80
+ assert_equal(f.to_s, l.to_s, "l=#{l.inspect} f=#{f.inspect}")
81
+ f = 2.71E-4
82
+ l = LongDecimal(f)
83
+ assert_equal("0.000271", l.to_s, "l=#{l.inspect} f=#{f.inspect}")
84
+ end
85
+
86
+ def test_round_to_scale_up
87
+ l = LongDecimal("2.21")
88
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
89
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
90
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
91
+ l = LongDecimal("-2.21")
92
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
93
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
94
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
95
+ l = LongDecimal("2.20")
96
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
97
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
98
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
99
+ l = LongDecimal("-2.20")
100
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
101
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
102
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
103
+ l = LongDecimal("2.24")
104
+ r = l.round_to_scale(4, LongDecimal::ROUND_UP)
105
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
106
+ end
107
+
108
+ def test_round_to_scale_down
109
+ l = LongDecimal("2.29")
110
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
111
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
112
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
113
+ l = LongDecimal("-2.29")
114
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
115
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
116
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
117
+ l = LongDecimal("2.20")
118
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
119
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
120
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
121
+ l = LongDecimal("-2.20")
122
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
123
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
124
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
125
+ l = LongDecimal("2.24")
126
+ r = l.round_to_scale(4, LongDecimal::ROUND_DOWN)
127
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
128
+ end
129
+
130
+ def test_round_to_scale_ceiling
131
+ l = LongDecimal("2.21")
132
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
133
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
134
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
135
+ l = LongDecimal("-2.29")
136
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
137
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
138
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
139
+ l = LongDecimal("2.20")
140
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
141
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
142
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
143
+ l = LongDecimal("-2.20")
144
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
145
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
146
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
147
+ l = LongDecimal("2.24")
148
+ r = l.round_to_scale(4, LongDecimal::ROUND_CEILING)
149
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
150
+ end
151
+
152
+ def test_round_to_scale_floor
153
+ l = LongDecimal("2.29")
154
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
155
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
156
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
157
+ l = LongDecimal("-2.21")
158
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
159
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
160
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
161
+ l = LongDecimal("2.20")
162
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
163
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
164
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
165
+ l = LongDecimal("-2.20")
166
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
167
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
168
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
169
+ l = LongDecimal("2.24")
170
+ r = l.round_to_scale(4, LongDecimal::ROUND_FLOOR)
171
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
172
+ end
173
+
174
+ def test_round_to_scale_half_up
175
+ l = LongDecimal("2.20")
176
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
177
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
178
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
179
+ l = LongDecimal("2.21")
180
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
181
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
182
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
183
+ l = LongDecimal("2.25")
184
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
185
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
186
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
187
+ l = LongDecimal("2.29")
188
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
189
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
190
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
191
+ l = LongDecimal("-2.20")
192
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
193
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
194
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
195
+ l = LongDecimal("-2.21")
196
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
197
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
198
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
199
+ l = LongDecimal("-2.25")
200
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
201
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
202
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
203
+ l = LongDecimal("-2.29")
204
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
205
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
206
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
207
+ l = LongDecimal("2.24")
208
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_UP)
209
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
210
+ end
211
+
212
+ def test_round_to_scale_half_down
213
+ l = LongDecimal("2.20")
214
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
215
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
216
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
217
+ l = LongDecimal("2.21")
218
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
219
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
220
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
221
+ l = LongDecimal("2.25")
222
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
223
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
224
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
225
+ l = LongDecimal("2.29")
226
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
227
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
228
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
229
+ l = LongDecimal("-2.20")
230
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
231
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
232
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
233
+ l = LongDecimal("-2.21")
234
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
235
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
236
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
237
+ l = LongDecimal("-2.25")
238
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
239
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
240
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
241
+ l = LongDecimal("-2.29")
242
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
243
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
244
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
245
+ l = LongDecimal("2.24")
246
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_DOWN)
247
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
248
+ end
249
+
250
+ def test_round_to_scale_half_even
251
+ l = LongDecimal("2.20")
252
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
253
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
254
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
255
+ l = LongDecimal("2.21")
256
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
257
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
258
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
259
+ l = LongDecimal("2.25")
260
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
261
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
262
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
263
+ l = LongDecimal("2.35")
264
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
265
+ assert_equal("2.4", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
266
+ assert_equal("2.35", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
267
+ l = LongDecimal("2.29")
268
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
269
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
270
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
271
+ l = LongDecimal("-2.20")
272
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
273
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
274
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
275
+ l = LongDecimal("-2.21")
276
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
277
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
278
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
279
+ l = LongDecimal("-2.25")
280
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
281
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
282
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
283
+ l = LongDecimal("-2.35")
284
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
285
+ assert_equal("-2.4", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
286
+ assert_equal("-2.35", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
287
+ l = LongDecimal("-2.29")
288
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
289
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
290
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
291
+ l = LongDecimal("2.24")
292
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_EVEN)
293
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
294
+ end
295
+
296
+ def test_round_to_scale_unnecessary
297
+ l = LongDecimal("2.24")
298
+ r = l.round_to_scale(4, LongDecimal::ROUND_UNNECESSARY)
299
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
300
+ l = LongDecimal("2.2400")
301
+ r = l.round_to_scale(2, LongDecimal::ROUND_UNNECESSARY)
302
+ assert_equal("2.24", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
303
+ begin
304
+ l = LongDecimal("2.24")
305
+ r = l.round_to_scale(1, LongDecimal::ROUND_UNNECESSARY)
306
+ assert_fail("should not have succeeded l=#{l.inspect} r=#{r.inspect}")
307
+ rescue ArgumentError
308
+ # ignored
309
+ end
310
+ end
311
+
312
+ def test_to_s
313
+ l = LongDecimal(224, 0)
314
+ assert_equal("224", l.to_s, "l=#{l.inspect}")
315
+ l = LongDecimal(224, 1)
316
+ assert_equal("22.4", l.to_s, "l=#{l.inspect}")
317
+ l = LongDecimal(224, 2)
318
+ assert_equal("2.24", l.to_s, "l=#{l.inspect}")
319
+ l = LongDecimal(224, 3)
320
+ assert_equal("0.224", l.to_s, "l=#{l.inspect}")
321
+ l = LongDecimal(224, 4)
322
+ assert_equal("0.0224", l.to_s, "l=#{l.inspect}")
323
+
324
+ l = LongDecimal(-224, 0)
325
+ assert_equal("-224", l.to_s, "l=#{l.inspect}")
326
+ l = LongDecimal(-224, 1)
327
+ assert_equal("-22.4", l.to_s, "l=#{l.inspect}")
328
+ l = LongDecimal(-224, 2)
329
+ assert_equal("-2.24", l.to_s, "l=#{l.inspect}")
330
+ l = LongDecimal(-224, 3)
331
+ assert_equal("-0.224", l.to_s, "l=#{l.inspect}")
332
+ l = LongDecimal(-224, 4)
333
+ assert_equal("-0.0224", l.to_s, "l=#{l.inspect}")
334
+ end
335
+
336
+ def test_to_r
337
+ l = LongDecimal(224, 0)
338
+ assert_equal(l, l.to_r.to_ld, "l=#{l.inspect}")
339
+ l = LongDecimal(224, 1)
340
+ assert_equal(l, l.to_r.to_ld, "l=#{l.inspect}")
341
+ l = LongDecimal(224, 2)
342
+ assert_equal(l, l.to_r.to_ld, "l=#{l.inspect}")
343
+ l = LongDecimal(224, 3)
344
+ assert_equal(l, l.to_r.to_ld, "l=#{l.inspect}")
345
+ l = LongDecimal(224, 4)
346
+ assert_equal(l, l.to_r.to_ld, "l=#{l.inspect}")
347
+ end
348
+
349
+ def test_to_f
350
+ l = LongDecimal(224, 0)
351
+ assert((l.to_f - 224).abs < 224 * 0.000001, "l=#{l.inspect}")
352
+ l = LongDecimal(224, 1)
353
+ assert((l.to_f - 22.4).abs < 22.4 * 0.000001, "l=#{l.inspect}")
354
+ l = LongDecimal(224, 2)
355
+ assert((l.to_f - 2.24).abs < 2.24 * 0.000001, "l=#{l.inspect}")
356
+ l = LongDecimal(224, 3)
357
+ assert((l.to_f - 0.224).abs < 0.224 * 0.000001, "l=#{l.inspect}")
358
+ l = LongDecimal(224, 4)
359
+ assert((l.to_f - 0.0224).abs < 0.0224 * 0.000001, "l=#{l.inspect}")
360
+ end
361
+
362
+ def test_to_i
363
+ l = LongDecimal(224, 0)
364
+ assert_equal(224, l.to_i, "l=#{l.inspect}")
365
+ l = LongDecimal(224, 1)
366
+ assert_equal(22, l.to_i, "l=#{l.inspect}")
367
+ l = LongDecimal(224, 2)
368
+ assert_equal(2, l.to_i, "l=#{l.inspect}")
369
+ l = LongDecimal(224, 3)
370
+ assert_equal(0, l.to_i, "l=#{l.inspect}")
371
+ l = LongDecimal(224, 4)
372
+ assert_equal(0, l.to_i, "l=#{l.inspect}")
373
+ l = LongDecimal(229, 1)
374
+ assert_equal(22, l.to_i, "l=#{l.inspect}")
375
+ l = LongDecimal(-229, 1)
376
+ assert_equal(-23, l.to_i, "l=#{l.inspect}")
377
+ l = LongDecimal(-221, 1)
378
+ assert_equal(-23, l.to_i, "l=#{l.inspect}")
379
+ end
380
+
381
+ def test_equalize_scale
382
+ x = LongDecimal(1, 0)
383
+ y = LongDecimal(10, 1)
384
+ assert_equal(0, (x - y).sgn, "difference must be 0")
385
+ assert(! (x == y), "x and y have the same value, but are not equal")
386
+ u, v = x.equalize_scale(y)
387
+ assert_equal(u, v, "u and v must be equal")
388
+ assert_equal(y, v, "y and v must be equal")
389
+ assert_equal(1, u.scale, "scale must be 1")
390
+ y = LongDecimal(200, 2)
391
+ v, u = y.equalize_scale(x)
392
+ assert_equal(2, u.scale, "scale must be 2")
393
+ assert_equal(2, v.scale, "scale must be 2")
394
+ assert_equal(100, u.int_val, "int_val must be 100")
395
+ assert_equal(200, v.int_val, "int_val must be 200")
396
+ end
397
+
398
+ def test_anti_equalize_scale
399
+ x = LongDecimal(20, 3)
400
+ y = LongDecimal(10, 1)
401
+ u, v = x.anti_equalize_scale(y)
402
+ assert_equal(0, u.scale, "scale must be 0")
403
+ assert_equal(0, v.scale, "scale must be 0")
404
+ assert_equal(20, u.int_val, "int_val must be 20")
405
+ assert_equal(1000, v.int_val, "int_val must be 1000")
406
+ end
407
+
408
+ def test_negation
409
+ x = LongDecimal(0, 5)
410
+ assert_equal(-x, x, "x and -x are equal for negative x=#{x.inspect}")
411
+ x = LongDecimal(224, 2)
412
+ y = -x
413
+ assert_equal(-1, y.sgn, "sign of y must be -1 y=#{y.inspect}")
414
+ assert_equal(2, y.scale, "scale of y must be 2 y=#{y.inspect}")
415
+ assert_equal(-224, y.int_val, "int_val of y must be -224 y=#{y.inspect}")
416
+ end
417
+
418
+ def test_add
419
+ x = LongDecimal(224, 2)
420
+
421
+ y = LongDecimal(3, 1)
422
+ z = x + y
423
+ zz = LongDecimal(254, 2)
424
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
425
+ assert_equal(zz, z, "z=#{z.inspect}")
426
+ z = y + x
427
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
428
+ assert_equal(zz, z, "z=#{z.inspect}")
429
+
430
+ y = 5
431
+ z = x + y
432
+ zz = LongDecimal(724, 2)
433
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
434
+ assert_equal(zz, z, "z=#{z.inspect}")
435
+ z = y + x
436
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
437
+ assert_equal(zz, z, "z=#{z.inspect}")
438
+
439
+ y = 5.001
440
+ z = x + y
441
+ zz = LongDecimal(724, 2)
442
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
443
+ assert_equal(zz, z, "z=#{z.inspect}")
444
+ z = y + x
445
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
446
+ assert_equal(zz, z, "z=#{z.inspect}")
447
+
448
+ y = Rational(5, 3)
449
+ z = x + y
450
+ zz = LongDecimalQuot(Rational(293, 75), 2)
451
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
452
+ assert_equal(zz, z, "z=#{z.inspect}")
453
+ z = y + x
454
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
455
+ assert_equal(zz, z, "z=#{z.inspect}")
456
+
457
+ y = LongDecimalQuot(Rational(5, 3), 3)
458
+ z = x + y
459
+ zz = LongDecimalQuot(Rational(293, 75), 3)
460
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
461
+ assert_equal(zz, z, "z=#{z.inspect}")
462
+ z = y + x
463
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
464
+ assert_equal(zz, z, "z=#{z.inspect}")
465
+
466
+ y = Complex(5, 3)
467
+ z = x + y
468
+ zz = Complex(7.24, 3)
469
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
470
+ assert_equal(zz, z, "z=#{z.inspect}")
471
+ z = y + x
472
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
473
+ assert_equal(zz, z, "z=#{z.inspect}")
474
+ end
475
+
476
+ def test_sub
477
+ x = LongDecimal(224, 2)
478
+
479
+ y = LongDecimal(3, 1)
480
+ z = x - y
481
+ zz = LongDecimal(194, 2)
482
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
483
+ assert_equal(zz, z, "z=#{z.inspect}")
484
+ z = y - x
485
+ zz = LongDecimal(-194, 2)
486
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
487
+ assert_equal(zz, z, "z=#{z.inspect}")
488
+
489
+ y = 5
490
+ z = x - y
491
+ zz = LongDecimal(-276, 2)
492
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
493
+ assert_equal(zz, z, "z=#{z.inspect}")
494
+ z = y - x
495
+ zz = LongDecimal(276, 2)
496
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
497
+ assert_equal(zz, z, "z=#{z.inspect}")
498
+
499
+ y = 5.001
500
+ z = x - y
501
+ zz = LongDecimal(-276, 2)
502
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
503
+ assert_equal(zz, z, "z=#{z.inspect}")
504
+ z = y - x
505
+ zz = LongDecimal(276, 2)
506
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
507
+ assert_equal(zz, z, "z=#{z.inspect}")
508
+
509
+ y = Rational(5, 3)
510
+ z = x - y
511
+ zz = LongDecimalQuot(Rational(43, 75), 2)
512
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
513
+ assert_equal(zz, z, "z=#{z.inspect}")
514
+ z = y - x
515
+ zz = LongDecimalQuot(Rational(-43, 75), 2)
516
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
517
+ assert_equal(zz, z, "z=#{z.inspect}")
518
+
519
+ y = LongDecimalQuot(Rational(5, 3), 3)
520
+ z = x - y
521
+ zz = LongDecimalQuot(Rational(43, 75), 3)
522
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
523
+ assert_equal(zz, z, "z=#{z.inspect}")
524
+ z = y - x
525
+ zz = LongDecimalQuot(Rational(-43, 75), 3)
526
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
527
+ assert_equal(zz, z, "z=#{z.inspect}")
528
+
529
+ y = Complex(5, 3)
530
+ z = x - y
531
+ zz = Complex(-2.76, -3)
532
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
533
+ assert_equal(zz, z, "z=#{z.inspect}")
534
+ z = y - x
535
+ zz = Complex(2.76, 3)
536
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
537
+ assert_equal(zz, z, "z=#{z.inspect}")
538
+ end
539
+
540
+ def test_mul
541
+ x = LongDecimal(224, 2)
542
+
543
+ y = LongDecimal(3, 1)
544
+ z = x * y
545
+ zz = LongDecimal(224*3, 3)
546
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
547
+ assert_equal(zz, z, "z=#{z.inspect}")
548
+ z = y * x
549
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
550
+ assert_equal(zz, z, "z=#{z.inspect}")
551
+
552
+ y = 5
553
+ z = x * y
554
+ zz = LongDecimal(224*5, 2)
555
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
556
+ assert_equal(zz, z, "z=#{z.inspect}")
557
+ z = y * x
558
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
559
+ assert_equal(zz, z, "z=#{z.inspect}")
560
+
561
+ y = 5.001
562
+ z = x * y
563
+ zz = LongDecimal(112000, 4)
564
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
565
+ assert_equal(zz, z, "z=#{z.inspect}")
566
+ z = y * x
567
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
568
+ assert_equal(zz, z, "z=#{z.inspect}")
569
+
570
+ y = Rational(5, 3)
571
+ z = x * y
572
+ zz = LongDecimalQuot(Rational(224*5, 300), 4)
573
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
574
+ assert_equal(zz, z, "z=#{z.inspect}")
575
+ z = y * x
576
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
577
+ assert_equal(zz, z, "z=#{z.inspect}")
578
+
579
+ y = LongDecimalQuot(Rational(5, 3), 3)
580
+ z = x * y
581
+ zz = LongDecimalQuot(Rational(224*5, 300), 5)
582
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
583
+ assert_equal(zz, z, "z=#{z.inspect}")
584
+ z = y * x
585
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
586
+ assert_equal(zz, z, "z=#{z.inspect}")
587
+
588
+ y = Complex(5, 3)
589
+ z = x * y
590
+ zz = Complex(11.20, 6.72)
591
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
592
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
593
+ z = y * x
594
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
595
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
596
+ end
597
+
598
+ def test_div
599
+ x = LongDecimal(224, 2)
600
+
601
+ y = LongDecimal(3, 1)
602
+ z = x / y
603
+ zz = LongDecimalQuot(Rational(224, 30), 2)
604
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
605
+ assert_equal(zz, z, "z=#{z.inspect}")
606
+ z = y / x
607
+ zz = LongDecimalQuot(Rational(30, 224), 1)
608
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
609
+ assert_equal(zz, z, "z=#{z.inspect}")
610
+
611
+ y = 5
612
+ z = x / y
613
+ zz = LongDecimalQuot(Rational(224, 500), 2)
614
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
615
+ assert_equal(zz, z, "z=#{z.inspect}")
616
+ z = y / x
617
+ zz = LongDecimalQuot(Rational(500, 224), 0)
618
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
619
+ assert_equal(zz, z, "z=#{z.inspect}")
620
+
621
+ y = 5.001
622
+ z = x / y
623
+ zz = LongDecimalQuot(Rational(224, 500), 2)
624
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
625
+ assert_equal(zz, z, "z=#{z.inspect}")
626
+ z = y / x
627
+ zz = LongDecimalQuot(Rational(500, 224), 2)
628
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
629
+ assert_equal(zz, z, "z=#{z.inspect}")
630
+
631
+ y = Rational(5, 3)
632
+ z = x / y
633
+ zz = LongDecimalQuot(Rational(224*3, 500), 2)
634
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
635
+ assert_equal(zz, z, "z=#{z.inspect}")
636
+ z = y / x
637
+ zz = LongDecimalQuot(Rational(500, 224*3), 2)
638
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
639
+ assert_equal(zz, z, "z=#{z.inspect}")
640
+
641
+ y = LongDecimalQuot(Rational(5, 3), 3)
642
+ z = x / y
643
+ zz = LongDecimalQuot(Rational(224*3, 500), 2)
644
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
645
+ assert_equal(zz, z, "z=#{z.inspect}")
646
+ z = y / x
647
+ zz = LongDecimalQuot(Rational(500, 224*3), 3)
648
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
649
+ assert_equal(zz, z, "z=#{z.inspect}")
650
+
651
+ y = Complex(5, 3)
652
+ z = x / y
653
+ zz = 2.24 / Complex(5, 3)
654
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
655
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
656
+ z = y / x
657
+ zz = Complex(5 / 2.24, 3 / 2.24)
658
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
659
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
660
+ end
661
+
662
+ def test_pow
663
+
664
+ x = LongDecimal(224, 2)
665
+
666
+ y = 0.5
667
+ z = x ** y
668
+ zz = Math.sqrt(2.24)
669
+ assert_kind_of(Float, z, "z=#{z.inspect} must be Float")
670
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
671
+
672
+ y = 0
673
+ z = x ** y
674
+ zz = LongDecimal(1, 0)
675
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect} must be LongDecimal")
676
+ assert_equal(zz, z, "must be 1")
677
+
678
+ y = 1
679
+ z = x ** y
680
+ zz = x
681
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect} must be LongDecimal")
682
+ assert_equal(zz, z, "must be self")
683
+
684
+ y = 2
685
+ z = x ** y
686
+ zz = LongDecimal(224**2, 4)
687
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect} must be LongDecimal")
688
+ assert_equal(zz, z, "must be self")
689
+
690
+ y = LongDecimal(2, 0)
691
+ z = x ** y
692
+ zz = LongDecimal(224**2, 4)
693
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect} must be LongDecimal")
694
+ assert_equal(zz, z, "must be self")
695
+
696
+ y = -1
697
+ z = x ** y
698
+ zz = LongDecimalQuot(Rational(100, 224), 2)
699
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimalQuot")
700
+ assert_equal(zz, z, "must be inverse")
701
+
702
+ y = -2
703
+ z = x ** y
704
+ zz = LongDecimalQuot(Rational(10000, 224**2), 4)
705
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimalQuot")
706
+ assert_equal(zz, z, "must be inverse")
707
+
708
+ y = LongDecimal(5, 1)
709
+ z = x ** y
710
+ zz = Math.sqrt(2.24)
711
+ assert_kind_of(Float, z, "z=#{z.inspect} must be Float")
712
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
713
+
714
+ y = LongDecimal(5, 1)
715
+ z = 9 ** y
716
+ zz = 3.0
717
+ assert_kind_of(Float, z, "z=#{z.inspect} must be Float")
718
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
719
+ end
720
+
721
+ def test_divmod
722
+ x = LongDecimal(224, 2)
723
+
724
+ y = LongDecimal(3, 1)
725
+ q, r = x.divmod y
726
+ assert_kind_of(Integer, q, "q must be integer")
727
+ assert_kind_of(LongDecimal, r, "r must be LongDecimalQuot")
728
+ assert(r.abs < y.abs, "remainder must be less then divisor")
729
+ zz = LongDecimalQuot(Rational(224, 30), 2)
730
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
731
+ q, r = y.divmod x
732
+ assert_kind_of(Integer, q, "q must be integer")
733
+ assert_kind_of(LongDecimal, r, "r must be LongDecimal")
734
+ assert(r.abs < x.abs, "remainder must be less then divisor")
735
+ zz = LongDecimalQuot(Rational(30, 224), 2)
736
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
737
+
738
+ y = 5
739
+ q, r = x.divmod y
740
+ assert_kind_of(Integer, q, "q must be integer")
741
+ assert_kind_of(LongDecimal, r, "r must be LongDecimal")
742
+ assert(r.abs < y.abs, "remainder must be less then divisor")
743
+ zz = LongDecimalQuot(Rational(224, 500), 2)
744
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
745
+ q, r = y.divmod x
746
+ assert_kind_of(Integer, q, "q must be integer")
747
+ assert_kind_of(LongDecimal, r, "r must be LongDecimal")
748
+ assert(r.abs < x.abs, "remainder must be less then divisor")
749
+ zz = LongDecimalQuot(Rational(500, 224), 2)
750
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
751
+
752
+ y = 5.001
753
+ q, r = x.divmod y
754
+ assert_kind_of(Integer, q, "q must be integer")
755
+ assert_kind_of(LongDecimal, r, "r must be LongDecimal")
756
+ assert(r.abs < y.abs, "remainder must be less then divisor")
757
+ zz = LongDecimalQuot(Rational(224, 500), 2)
758
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
759
+ q, r = y.divmod x
760
+ assert_kind_of(Integer, q, "q must be integer")
761
+ assert_kind_of(LongDecimal, r, "r must be LongDecimal")
762
+ assert(r.abs < x.abs, "remainder must be less then divisor")
763
+ zz = LongDecimalQuot(Rational(500, 224), 2)
764
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
765
+
766
+ y = Rational(5, 3)
767
+ q, r = x.divmod y
768
+ assert_kind_of(Integer, q, "q must be integer")
769
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
770
+ assert(r.abs < y.abs, "remainder must be less then divisor")
771
+ zz = LongDecimalQuot(Rational(224*3, 500), 2)
772
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
773
+ q, r = y.divmod x
774
+ assert_kind_of(Integer, q, "q must be integer")
775
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
776
+ assert(r.abs < x.abs, "remainder must be less then divisor")
777
+ zz = LongDecimalQuot(Rational(500, 224*3), 2)
778
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
779
+
780
+ y = LongDecimalQuot(Rational(5, 3), 3)
781
+ q, r = x.divmod y
782
+ assert_kind_of(Integer, q, "q must be integer")
783
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
784
+ assert(r.abs < y.abs, "remainder must be less then divisor")
785
+ zz = LongDecimalQuot(Rational(224*3, 500), 6)
786
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
787
+ q, r = y.divmod x
788
+ assert_kind_of(Integer, q, "q must be integer")
789
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
790
+ assert(r.abs < x.abs, "remainder must be less then divisor")
791
+ zz = LongDecimalQuot(Rational(500, 224*3), 3)
792
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
793
+
794
+ y = Complex(5, 3)
795
+ begin
796
+ q, r = x.divmod y
797
+ assert_fail "should have created TypeError"
798
+ rescue TypeError
799
+ # ignored, expected
800
+ end
801
+ end
802
+
803
+ def test_abs
804
+ x = LongDecimal(-224, 2)
805
+ y = x.abs
806
+ assert_equal(-x, y, "abs of negative")
807
+ x = LongDecimal(224, 2)
808
+ y = x.abs
809
+ assert_equal(x, y, "abs of positive")
810
+ x = LongDecimal(0, 2)
811
+ y = x.abs
812
+ assert_equal(x, y, "abs of zero")
813
+ end
814
+
815
+ def test_move_point
816
+ x = LongDecimal(224, 2)
817
+
818
+ y = x.move_point_left(0)
819
+ assert_equal(x, y, "point not moved")
820
+ y = x.move_point_right(0)
821
+ assert_equal(x, y, "point not moved")
822
+
823
+ z = LongDecimal(224, 3)
824
+ y = x.move_point_left(1)
825
+ assert_equal(z, y, "0.224")
826
+ y = x.move_point_right(-1)
827
+ assert_equal(z, y, "0.224")
828
+
829
+ z = LongDecimal(224, 1)
830
+ y = x.move_point_left(-1)
831
+ assert_equal(z, y, "22.4")
832
+ y = x.move_point_right(1)
833
+ assert_equal(z, y, "22.4")
834
+
835
+ z = LongDecimal(224, 5)
836
+ y = x.move_point_left(3)
837
+ assert_equal(z, y, "0.00224")
838
+ y = x.move_point_right(-3)
839
+ assert_equal(z, y, "0.00224")
840
+
841
+ z = LongDecimal(2240, 0)
842
+ y = x.move_point_left(-3)
843
+ assert_equal(z, y, "2240")
844
+ y = x.move_point_right(3)
845
+ assert_equal(z, y, "2240")
846
+ end
847
+
848
+ def test_ufo
849
+ x = LongDecimal(224, 2)
850
+
851
+ z = x <=> x
852
+ zz = 0
853
+ assert_equal(zz, z, "z=#{z.inspect}")
854
+ y = LongDecimal(2240, 3)
855
+ z = y <=> x
856
+ zz = 0
857
+ assert_equal(zz, z, "z=#{z.inspect}")
858
+
859
+ y = LongDecimal(3, 1)
860
+ z = x <=> y
861
+ zz = 1
862
+ assert_equal(zz, z, "z=#{z.inspect}")
863
+ z = y <=> x
864
+ zz = -1
865
+ assert_equal(zz, z, "z=#{z.inspect}")
866
+
867
+ y = 5
868
+ z = x <=> y
869
+ zz = -1
870
+ assert_equal(zz, z, "z=#{z.inspect}")
871
+ z = y <=> x
872
+ zz = 1
873
+ assert_equal(zz, z, "z=#{z.inspect}")
874
+
875
+ y = 5.001
876
+ z = x <=> y
877
+ zz = -1
878
+ assert_equal(zz, z, "z=#{z.inspect}")
879
+ z = y <=> x
880
+ zz = 1
881
+ assert_equal(zz, z, "z=#{z.inspect}")
882
+
883
+ y = Rational(5, 3)
884
+ z = x <=> y
885
+ zz = 1
886
+ assert_equal(zz, z, "z=#{z.inspect}")
887
+ z = y <=> x
888
+ zz = -1
889
+ assert_equal(zz, z, "z=#{z.inspect}")
890
+
891
+ y = LongDecimalQuot(Rational(5, 3), 3)
892
+ z = x <=> y
893
+ zz = 1
894
+ assert_equal(zz, z, "z=#{z.inspect}")
895
+ z = y <=> x
896
+ zz = -1
897
+ assert_equal(zz, z, "z=#{z.inspect}")
898
+
899
+ end
900
+
901
+ def test_sgn
902
+ x = LongDecimal(0, 5)
903
+ s = x.sgn
904
+ assert_equal(0, s, "must be 0")
905
+ x = LongDecimal(4, 5)
906
+ s = x.sgn
907
+ assert_equal(1, s, "must be 1")
908
+ x = LongDecimal(-3, 5)
909
+ s = x.sgn
910
+ assert_equal(-1, s, "must be -1")
911
+ end
912
+
913
+ def test_equal
914
+ x = LongDecimal(224, 2)
915
+ y = LongDecimal(2240, 3)
916
+ assert((x <=> y) == 0, "diff is zero")
917
+ assert(x != y, "but not equal")
918
+ assert(! (x == y), "but not equal")
919
+ assert_equal(x, x, "x equals x")
920
+ assert_equal(y, y, "y equals y")
921
+ end
922
+
923
+ def test_ldq_ld_init
924
+ x = LongDecimal(224, 2)
925
+ y = LongDecimal(225, 3)
926
+ z = LongDecimalQuot(x, y)
927
+ zz = LongDecimalQuot(Rational(2240, 225), 2)
928
+ assert_equal(zz, z, "224/225")
929
+ end
930
+
931
+ def test_ldq_round_to_scale_up
932
+
933
+ # 0.99555555555555...
934
+ l = LongDecimalQuot(Rational(224, 225), 0)
935
+ # 1.0
936
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
937
+ assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
938
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
939
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
940
+ l = LongDecimalQuot(-Rational(224, 225), 0)
941
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
942
+ assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
943
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
944
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
945
+ # 0.00444444444444444
946
+ l = LongDecimalQuot(Rational(1, 225), 0)
947
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
948
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
949
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
950
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
951
+ l = LongDecimalQuot(Rational(-1, 225), 0)
952
+ r = l.round_to_scale(1, LongDecimal::ROUND_UP)
953
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
954
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
955
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
956
+ l = LongDecimalQuot(Rational(1, 1), 1000)
957
+ r = l.round_to_scale(4, LongDecimal::ROUND_UP)
958
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
959
+ l = LongDecimalQuot(Rational(1, 1), 1)
960
+ r = l.round_to_scale(4, LongDecimal::ROUND_UP)
961
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
962
+ end
963
+
964
+ def test_ldq_round_to_scale_down
965
+
966
+ # 0.99555555555555...
967
+ l = LongDecimalQuot(Rational(224, 225), 0)
968
+ # 0.9
969
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
970
+ assert_equal("0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
971
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
972
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
973
+ l = LongDecimalQuot(-Rational(224, 225), 0)
974
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
975
+ assert_equal("-0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
976
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
977
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
978
+ # 0.00444444444444444
979
+ l = LongDecimalQuot(Rational(1, 225), 0)
980
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
981
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
982
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
983
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
984
+ l = LongDecimalQuot(Rational(-1, 225), 0)
985
+ r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
986
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
987
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
988
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
989
+ l = LongDecimalQuot(Rational(1, 1), 1000)
990
+ r = l.round_to_scale(4, LongDecimal::ROUND_DOWN)
991
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
992
+ l = LongDecimalQuot(Rational(1, 1), 1)
993
+ r = l.round_to_scale(4, LongDecimal::ROUND_DOWN)
994
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
995
+ end
996
+
997
+ def test_ldq_round_to_scale_ceiling
998
+
999
+ # 0.99555555555555...
1000
+ l = LongDecimalQuot(Rational(224, 225), 0)
1001
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1002
+ assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1003
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1004
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1005
+ l = LongDecimalQuot(-Rational(224, 225), 0)
1006
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1007
+ assert_equal("-0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1008
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1009
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1010
+ # 0.00444444444444444
1011
+ l = LongDecimalQuot(Rational(1, 225), 0)
1012
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1013
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1014
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1015
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1016
+ l = LongDecimalQuot(Rational(-1, 225), 0)
1017
+ r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1018
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1019
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1020
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1021
+ l = LongDecimalQuot(Rational(1, 1), 1000)
1022
+ r = l.round_to_scale(4, LongDecimal::ROUND_CEILING)
1023
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1024
+ l = LongDecimalQuot(Rational(1, 1), 1)
1025
+ r = l.round_to_scale(4, LongDecimal::ROUND_CEILING)
1026
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1027
+ end
1028
+
1029
+ def test_ldq_round_to_scale_floor
1030
+
1031
+ # 0.99555555555555...
1032
+ l = LongDecimalQuot(Rational(224, 225), 0)
1033
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1034
+ assert_equal("0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1035
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1036
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1037
+ l = LongDecimalQuot(-Rational(224, 225), 0)
1038
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1039
+ assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1040
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1041
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1042
+ # 0.00444444444444444
1043
+ l = LongDecimalQuot(Rational(1, 225), 0)
1044
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1045
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1046
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1047
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1048
+ l = LongDecimalQuot(Rational(-1, 225), 0)
1049
+ r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1050
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1051
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1052
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1053
+ l = LongDecimalQuot(Rational(1, 1), 1000)
1054
+ r = l.round_to_scale(4, LongDecimal::ROUND_FLOOR)
1055
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1056
+ l = LongDecimalQuot(Rational(1, 1), 1)
1057
+ r = l.round_to_scale(4, LongDecimal::ROUND_FLOOR)
1058
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1059
+ end
1060
+
1061
+ def test_ldq_round_to_scale_half_up
1062
+
1063
+ # 0.99555555555555...
1064
+ l = LongDecimalQuot(Rational(224, 225), 0)
1065
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1066
+ assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1067
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1068
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1069
+ l = LongDecimalQuot(-Rational(224, 225), 0)
1070
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1071
+ assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1072
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1073
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1074
+ # 0.00444444444444444
1075
+ l = LongDecimalQuot(Rational(1, 225), 0)
1076
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1077
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1078
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1079
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1080
+ l = LongDecimalQuot(Rational(-1, 225), 0)
1081
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1082
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1083
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1084
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1085
+ l = LongDecimalQuot(Rational(1, 1), 1000)
1086
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_UP)
1087
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1088
+ l = LongDecimalQuot(Rational(1, 1), 1)
1089
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_UP)
1090
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1091
+ # 56.25
1092
+ l = LongDecimalQuot(Rational(225, 4), 0)
1093
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1094
+ assert_equal("56.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1095
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1096
+ assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1097
+ end
1098
+
1099
+ def test_ldq_round_to_scale_half_down
1100
+
1101
+ # 0.99555555555555...
1102
+ l = LongDecimalQuot(Rational(224, 225), 0)
1103
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1104
+ assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1105
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1106
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1107
+ l = LongDecimalQuot(-Rational(224, 225), 0)
1108
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1109
+ assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1110
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1111
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1112
+ # 0.00444444444444444
1113
+ l = LongDecimalQuot(Rational(1, 225), 0)
1114
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1115
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1116
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1117
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1118
+ l = LongDecimalQuot(Rational(-1, 225), 0)
1119
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1120
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1121
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1122
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1123
+ l = LongDecimalQuot(Rational(1, 1), 1000)
1124
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_DOWN)
1125
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1126
+ l = LongDecimalQuot(Rational(1, 1), 1)
1127
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_DOWN)
1128
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1129
+ # 56.25
1130
+ l = LongDecimalQuot(Rational(225, 4), 0)
1131
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1132
+ assert_equal("56.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1133
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1134
+ assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1135
+ end
1136
+
1137
+ def test_ldq_round_to_scale_half_even
1138
+
1139
+ # 0.99555555555555...
1140
+ l = LongDecimalQuot(Rational(224, 225), 0)
1141
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1142
+ assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1143
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1144
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1145
+ l = LongDecimalQuot(-Rational(224, 225), 0)
1146
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1147
+ assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1148
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1149
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1150
+ # 0.00444444444444444
1151
+ l = LongDecimalQuot(Rational(1, 225), 0)
1152
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1153
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1154
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1155
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1156
+ l = LongDecimalQuot(Rational(-1, 225), 0)
1157
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1158
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1159
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1160
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1161
+ l = LongDecimalQuot(Rational(1, 1), 1000)
1162
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_EVEN)
1163
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1164
+ l = LongDecimalQuot(Rational(1, 1), 1)
1165
+ r = l.round_to_scale(4, LongDecimal::ROUND_HALF_EVEN)
1166
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1167
+ # 56.25
1168
+ l = LongDecimalQuot(Rational(225, 4), 0)
1169
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1170
+ assert_equal("56.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1171
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1172
+ assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1173
+ # 56.75
1174
+ l = LongDecimalQuot(Rational(227, 4), 0)
1175
+ r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1176
+ assert_equal("56.8", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1177
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
1178
+ assert_equal("227/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1179
+ end
1180
+
1181
+ def test_ldq_round_to_scale_unnecessary
1182
+ l = LongDecimalQuot(Rational(225, 4), 5)
1183
+ r = l.round_to_scale(2, LongDecimal::ROUND_UNNECESSARY)
1184
+ assert_equal("56.25", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1185
+ begin
1186
+ r = l.round_to_scale(1, LongDecimal::ROUND_UNNECESSARY)
1187
+ assert_fail("should not have succeeded l=#{l.inspect} r=#{r.inspect}")
1188
+ rescue ArgumentError
1189
+ # ignored
1190
+ end
1191
+ end
1192
+
1193
+ def test_ldq_to_s
1194
+ l = LongDecimalQuot(Rational(224, 225), 226)
1195
+ assert_equal("224/225[226]", l.to_s, "l=#{l.inspect}")
1196
+ l = LongDecimalQuot(Rational(-224, 225), 226)
1197
+ assert_equal("-224/225[226]", l.to_s, "l=#{l.inspect}")
1198
+ end
1199
+
1200
+ def test_ldq_to_r
1201
+ rr = Rational(224, 225)
1202
+ l = LongDecimalQuot(rr, 22)
1203
+ r = l.to_r
1204
+ assert_kind_of(Rational, r, "must be rational")
1205
+ assert_equal(rr, r, "must be equal")
1206
+ rr = Rational(-224, 225)
1207
+ l = LongDecimalQuot(rr, 22)
1208
+ r = l.to_r
1209
+ assert_kind_of(Rational, r, "must be rational")
1210
+ assert_equal(rr, r, "must be equal")
1211
+ rr = Rational(0, 225)
1212
+ l = LongDecimalQuot(rr, 22)
1213
+ r = l.to_r
1214
+ assert_kind_of(Rational, r, "must be rational")
1215
+ assert_equal(rr, r, "must be equal")
1216
+ end
1217
+
1218
+ def test_ldq_to_f
1219
+ rr = Rational(224, 225)
1220
+ l = LongDecimalQuot(rr, 22)
1221
+ f = l.to_f
1222
+ ff = rr.to_f
1223
+ assert_kind_of(Float, f, "must be float")
1224
+ assert_equal(ff, f, "must be equal")
1225
+ rr = Rational(-224, 225)
1226
+ l = LongDecimalQuot(rr, 22)
1227
+ f = l.to_f
1228
+ ff = rr.to_f
1229
+ assert_kind_of(Float, f, "must be float")
1230
+ assert_equal(ff, f, "must be equal")
1231
+ rr = Rational(0, 225)
1232
+ l = LongDecimalQuot(rr, 22)
1233
+ f = l.to_f
1234
+ ff = rr.to_f
1235
+ assert_kind_of(Float, f, "must be float")
1236
+ assert_equal(ff, f, "must be equal")
1237
+ end
1238
+
1239
+ # to_i not tested, goes via to_r anyway
1240
+
1241
+ def test_ldq_negation
1242
+ x = LongDecimalQuot(Rational(0, 2), 3)
1243
+ assert_equal(-x, x, "x and -x are equal for negative x=#{x.inspect}")
1244
+ x = LongDecimalQuot(Rational(224, 225), 226)
1245
+ yy = LongDecimalQuot(Rational(-224, 225), 226)
1246
+ y = -x
1247
+ assert_equal(-1, y.sgn, "sign of y must be -1 y=#{y.inspect}")
1248
+ assert_equal(226, y.scale, "scale of y must be 2 y=#{y.inspect}")
1249
+ assert_equal(yy, y, "yy and y must be equal")
1250
+ end
1251
+
1252
+ def test_ldq_add
1253
+ x = LongDecimalQuot(Rational(224, 225), 226)
1254
+
1255
+ y = LongDecimal(3, 1)
1256
+ z = x + y
1257
+ zz = LongDecimalQuot(Rational(583, 450), 226)
1258
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1259
+ assert_equal(zz, z, "z=#{z.inspect}")
1260
+ z = y + x
1261
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1262
+ assert_equal(zz, z, "z=#{z.inspect}")
1263
+
1264
+ y = 5
1265
+ z = x + y
1266
+ zz = LongDecimalQuot(Rational(1349, 225), 226)
1267
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1268
+ assert_equal(zz, z, "z=#{z.inspect}")
1269
+ z = y + x
1270
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1271
+ assert_equal(zz, z, "z=#{z.inspect}")
1272
+
1273
+ y = 5.001
1274
+ z = x + y
1275
+ zz = LongDecimalQuot(Rational(53969, 9000), 226)
1276
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1277
+ assert_equal(zz, z, "z=#{z.inspect}")
1278
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
1279
+ z = y + x
1280
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1281
+ assert_equal(zz, z, "z=#{z.inspect}")
1282
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
1283
+
1284
+ y = Rational(5, 3)
1285
+ z = x + y
1286
+ zz = LongDecimalQuot(Rational(599, 225), 226)
1287
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1288
+ assert_equal(zz, z, "z=#{z.inspect}")
1289
+ z = y + x
1290
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1291
+ assert_equal(zz, z, "z=#{z.inspect}")
1292
+
1293
+ y = LongDecimalQuot(Rational(5, 3), 3)
1294
+ z = x + y
1295
+ zz = LongDecimalQuot(Rational(599, 225), 226)
1296
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1297
+ assert_equal(zz, z, "z=#{z.inspect}")
1298
+ z = y + x
1299
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1300
+ assert_equal(zz, z, "z=#{z.inspect}")
1301
+
1302
+ y = Complex(5, 3)
1303
+ z = x + y
1304
+ zz = Complex(5+224.0/225.0, 3)
1305
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1306
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
1307
+ z = y + x
1308
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1309
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
1310
+ end
1311
+
1312
+ def test_ldq_sub
1313
+ x = LongDecimalQuot(Rational(224, 225), 226)
1314
+
1315
+ y = LongDecimal(3, 1)
1316
+ z = x - y
1317
+ zz = LongDecimalQuot(Rational(313, 450), 226)
1318
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1319
+ assert_equal(zz, z, "z=#{z.inspect}")
1320
+ z = y - x
1321
+ zz = LongDecimalQuot(Rational(-313, 450), 226)
1322
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1323
+ assert_equal(zz, z, "z=#{z.inspect}")
1324
+
1325
+ y = 5
1326
+ z = x - y
1327
+ zz = LongDecimalQuot(Rational(-901, 225), 226)
1328
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1329
+ assert_equal(zz, z, "z=#{z.inspect}")
1330
+ z = y - x
1331
+ zz = LongDecimalQuot(Rational(901, 225), 226)
1332
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1333
+ assert_equal(zz, z, "z=#{z.inspect}")
1334
+
1335
+ y = 5.001
1336
+ z = x - y
1337
+ zz = LongDecimalQuot(Rational(-36049, 9000), 226)
1338
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1339
+ assert_equal(zz, z, "z=#{z.inspect}")
1340
+ z = y - x
1341
+ zz = LongDecimalQuot(Rational(36049, 9000), 226)
1342
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1343
+ assert_equal(zz, z, "z=#{z.inspect}")
1344
+
1345
+ y = Rational(5, 3)
1346
+ z = x - y
1347
+ zz = LongDecimalQuot(Rational(-151, 225), 226)
1348
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1349
+ assert_equal(zz, z, "z=#{z.inspect}")
1350
+ z = y - x
1351
+ zz = LongDecimalQuot(Rational(151, 225), 226)
1352
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1353
+ assert_equal(zz, z, "z=#{z.inspect}")
1354
+
1355
+ y = LongDecimalQuot(Rational(5, 3), 3)
1356
+ z = x - y
1357
+ zz = LongDecimalQuot(Rational(-151, 225), 226)
1358
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1359
+ assert_equal(zz, z, "z=#{z.inspect}")
1360
+ z = y - x
1361
+ zz = LongDecimalQuot(Rational(151, 225), 226)
1362
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1363
+ assert_equal(zz, z, "z=#{z.inspect}")
1364
+
1365
+ y = Complex(5, 3)
1366
+ z = x - y
1367
+ zz = Complex(224.0/225.0 -5, -3)
1368
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1369
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect} zz=#{zz.inspect}")
1370
+ zz = -zz
1371
+ z = y - x
1372
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1373
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect} zz=#{zz.inspect}")
1374
+ end
1375
+
1376
+ def test_ldq_mul
1377
+ x = LongDecimalQuot(Rational(224, 225), 226)
1378
+
1379
+ y = LongDecimal(3, 1)
1380
+ z = x * y
1381
+ zz = LongDecimalQuot(Rational(224*3, 2250), 227)
1382
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1383
+ assert_equal(zz, z, "z=#{z.inspect}")
1384
+ z = y * x
1385
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1386
+ assert_equal(zz, z, "z=#{z.inspect}")
1387
+
1388
+ y = 5
1389
+ z = x * y
1390
+ zz = LongDecimalQuot(Rational(224*5, 225), 226*2)
1391
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1392
+ assert_equal(zz, z, "z=#{z.inspect}")
1393
+ z = y * x
1394
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1395
+ assert_equal(zz, z, "z=#{z.inspect}")
1396
+
1397
+ y = 5.001
1398
+ z = x * y
1399
+ zz = LongDecimalQuot(Rational(46676, 9375), 226*2)
1400
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1401
+ assert_equal(zz, z, "z=#{z.inspect}")
1402
+ z = y * x
1403
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1404
+ assert_equal(zz, z, "z=#{z.inspect}")
1405
+
1406
+ y = Rational(5, 3)
1407
+ z = x * y
1408
+ zz = LongDecimalQuot(Rational(224*5, 225*3), 226*2)
1409
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1410
+ assert_equal(zz, z, "z=#{z.inspect}")
1411
+ z = y * x
1412
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1413
+ assert_equal(zz, z, "z=#{z.inspect}")
1414
+
1415
+ y = LongDecimalQuot(Rational(5, 3), 3)
1416
+ z = x * y
1417
+ zz = LongDecimalQuot(Rational(224*5, 225*3), 226+3)
1418
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1419
+ assert_equal(zz, z, "z=#{z.inspect}")
1420
+ z = y * x
1421
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1422
+ assert_equal(zz, z, "z=#{z.inspect}")
1423
+
1424
+ y = Complex(5, 3)
1425
+ z = x * y
1426
+ zz = Complex(224.0/45.0, 224.0/75.0)
1427
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1428
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect} zz=#{zz.inspect}")
1429
+ z = y * x
1430
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1431
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect} zz=#{zz.inspect}")
1432
+ end
1433
+
1434
+ def test_ldq_div
1435
+ x = LongDecimalQuot(Rational(224, 225), 226)
1436
+
1437
+ y = LongDecimal(3, 1)
1438
+ z = x / y
1439
+ zz = LongDecimalQuot(Rational(2240, 225*3), 226)
1440
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1441
+ assert_equal(zz, z, "z=#{z.inspect}")
1442
+ zz = LongDecimalQuot(Rational(225*3, 2240), 1)
1443
+ z = y / x
1444
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1445
+ assert_equal(zz, z, "z=#{z.inspect}")
1446
+
1447
+ y = 5
1448
+ z = x / y
1449
+ zz = LongDecimalQuot(Rational(224, 225*5), 226)
1450
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1451
+ assert_equal(zz, z, "z=#{z.inspect}")
1452
+ z = y / x
1453
+ zz = LongDecimalQuot(Rational(225*5, 224), 226)
1454
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1455
+ assert_equal(zz, z, "z=#{z.inspect}")
1456
+
1457
+ y = 5.001
1458
+ z = x / y
1459
+ zz = LongDecimalQuot(Rational(8960, 45009), 226)
1460
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1461
+ assert_equal(zz, z, "z=#{z.inspect}")
1462
+ z = y / x
1463
+ zz = LongDecimalQuot(Rational(45009, 8960), 226)
1464
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1465
+ assert_equal(zz, z, "z=#{z.inspect}")
1466
+
1467
+ y = Rational(5, 3)
1468
+ z = x / y
1469
+ zz = LongDecimalQuot(Rational(224*3, 225*5), 226)
1470
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1471
+ assert_equal(zz, z, "z=#{z.inspect}")
1472
+ z = y / x
1473
+ zz = LongDecimalQuot(Rational(225*5, 224*3), 226)
1474
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1475
+ assert_equal(zz, z, "z=#{z.inspect}")
1476
+
1477
+ y = LongDecimalQuot(Rational(5, 3), 3)
1478
+ z = x / y
1479
+ zz = LongDecimalQuot(Rational(224*3, 225*5), 226)
1480
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1481
+ assert_equal(zz, z, "z=#{z.inspect}")
1482
+ z = y / x
1483
+ zz = LongDecimalQuot(Rational(225*5, 224*3), 3)
1484
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
1485
+ assert_equal(zz, z, "z=#{z.inspect}")
1486
+
1487
+ y = Complex(5, 3)
1488
+ z = x / y
1489
+ zz = Complex(112.0/765.0, -112.0/1275.0)
1490
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1491
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect} zz=#{zz.inspect}")
1492
+ z = y / x
1493
+ zz = Complex(1125.0/224.0, 675.0/224.0)
1494
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
1495
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect} zz=#{zz.inspect}")
1496
+ end
1497
+
1498
+ def test_ldq_pow
1499
+
1500
+ x = LongDecimalQuot(Rational(224, 225), 226)
1501
+
1502
+ y = 0.5
1503
+ z = x ** y
1504
+ zz = Math.sqrt(224.0/225.0)
1505
+ assert_kind_of(Float, z, "z=#{z.inspect} must be Float")
1506
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
1507
+
1508
+ y = 0
1509
+ z = x ** y
1510
+ zz = LongDecimalQuot(Rational(1, 1), 0)
1511
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimal")
1512
+ assert_equal(zz, z, "must be 1")
1513
+
1514
+ y = 1
1515
+ z = x ** y
1516
+ zz = x
1517
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimal")
1518
+ assert_equal(zz, z, "must be self")
1519
+
1520
+ y = 2
1521
+ z = x ** y
1522
+ zz = LongDecimalQuot(Rational(224**2, 225**2), 226*2)
1523
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimal")
1524
+ assert_equal(zz, z, "must be self")
1525
+
1526
+ y = LongDecimal(2, 0)
1527
+ z = x ** y
1528
+ zz = LongDecimalQuot(Rational(224**2, 225**2), 226*2)
1529
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimal")
1530
+ assert_equal(zz, z, "must be self")
1531
+
1532
+ y = -1
1533
+ z = x ** y
1534
+ zz = LongDecimalQuot(Rational(225, 224), 226)
1535
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimalQuot")
1536
+ assert_equal(zz, z, "must be inverse")
1537
+
1538
+ y = -2
1539
+ z = x ** y
1540
+ zz = LongDecimalQuot(Rational(225**2, 224**2), 226)
1541
+ assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect} must be LongDecimalQuot")
1542
+ assert_equal(zz, z, "must be inverse")
1543
+
1544
+ y = LongDecimal(5, 1)
1545
+ z = x ** y
1546
+ zz = Math.sqrt(2.24/2.25)
1547
+ assert_kind_of(Float, z, "z=#{z.inspect} must be Float")
1548
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
1549
+
1550
+ y = LongDecimal(5, 1)
1551
+ z = 9 ** y
1552
+ zz = 3.0
1553
+ assert_kind_of(Float, z, "z=#{z.inspect} must be Float")
1554
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
1555
+ end
1556
+
1557
+ def test_ldq_divmod
1558
+ x = LongDecimalQuot(Rational(224, 225), 226)
1559
+
1560
+ y = LongDecimal(3, 1)
1561
+ q, r = x.divmod y
1562
+ assert_kind_of(Integer, q, "q must be integer")
1563
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimalQuot")
1564
+ assert(r.abs < y.abs, "remainder must be less then divisor")
1565
+ zz = LongDecimalQuot(Rational(224*10, 225*3), 226)
1566
+ assert_equal(zz, q + r / y, "z=#{(q+r/y).inspect} y=#{y.inspect} q=#{q.inspect} r=#{r.inspect}")
1567
+ q, r = y.divmod x
1568
+ assert_kind_of(Integer, q, "q must be integer")
1569
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1570
+ assert(r.abs < x.abs, "remainder must be less then divisor")
1571
+ zz = LongDecimalQuot(Rational(225*3, 224*10), 226*2)
1572
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
1573
+
1574
+ y = 5
1575
+ q, r = x.divmod y
1576
+ assert_kind_of(Integer, q, "q must be integer")
1577
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1578
+ assert(r.abs < y.abs, "remainder must be less then divisor")
1579
+ zz = LongDecimalQuot(Rational(224, 225*5), 226)
1580
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
1581
+ q, r = y.divmod x
1582
+ assert_kind_of(Integer, q, "q must be integer")
1583
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1584
+ assert(r.abs < x.abs, "remainder must be less then divisor")
1585
+ zz = LongDecimalQuot(Rational(225*5, 224), 226*2)
1586
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
1587
+
1588
+ y = 5.001
1589
+ q, r = x.divmod y
1590
+ assert_kind_of(Integer, q, "q must be integer")
1591
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1592
+ assert(r.abs < y.abs, "remainder must be less then divisor")
1593
+ zz = LongDecimalQuot(Rational(8960, 45009), 226)
1594
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
1595
+ q, r = y.divmod x
1596
+ assert_kind_of(Integer, q, "q must be integer")
1597
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1598
+ assert(r.abs < x.abs, "remainder must be less then divisor")
1599
+ zz = LongDecimalQuot(Rational(45009, 8960), 226*2)
1600
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
1601
+
1602
+ y = Rational(5, 3)
1603
+ q, r = x.divmod y
1604
+ assert_kind_of(Integer, q, "q must be integer")
1605
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1606
+ assert(r.abs < y.abs, "remainder must be less then divisor")
1607
+ zz = LongDecimalQuot(Rational(224*3, 225*5), 226)
1608
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
1609
+ q, r = y.divmod x
1610
+ assert_kind_of(Integer, q, "q must be integer")
1611
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1612
+ assert(r.abs < x.abs, "remainder must be less then divisor")
1613
+ zz = LongDecimalQuot(Rational(225*5, 224*3), 226*2)
1614
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
1615
+
1616
+ y = LongDecimalQuot(Rational(5, 3), 3)
1617
+ q, r = x.divmod y
1618
+ assert_kind_of(Integer, q, "q must be integer")
1619
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1620
+ assert(r.abs < y.abs, "remainder must be less then divisor")
1621
+ zz = LongDecimalQuot(Rational(224*3, 225*5), 226)
1622
+ assert_equal(zz, q + r / y, "z=q=#{q.inspect} r=#{r.inspect}")
1623
+ q, r = y.divmod x
1624
+ assert_kind_of(Integer, q, "q must be integer")
1625
+ assert_kind_of(LongDecimalQuot, r, "r must be LongDecimal")
1626
+ assert(r.abs < x.abs, "remainder must be less then divisor")
1627
+ zz = LongDecimalQuot(Rational(225*5, 224*3), 226*2)
1628
+ assert_equal(zz, q + r / x, "z=q=#{q.inspect} r=#{r.inspect}")
1629
+
1630
+ y = Complex(5, 3)
1631
+ begin
1632
+ q, r = x.divmod y
1633
+ assert_fail "should have created TypeError"
1634
+ rescue TypeError
1635
+ # ignored, expected
1636
+ end
1637
+ end
1638
+
1639
+ def test_ldq_abs
1640
+ x = LongDecimalQuot(Rational(-224, 225), 226)
1641
+ y = x.abs
1642
+ assert_equal(-x, y, "abs of negative")
1643
+ x = LongDecimalQuot(Rational(224, 225), 226)
1644
+ y = x.abs
1645
+ assert_equal(x, y, "abs of positive")
1646
+ x = LongDecimalQuot(Rational(0, 2), 3)
1647
+ y = x.abs
1648
+ assert_equal(x, y, "abs of zero")
1649
+ end
1650
+
1651
+ def test_ldq_ufo
1652
+ x = LongDecimalQuot(Rational(224, 225), 226)
1653
+
1654
+ z = x <=> x
1655
+ zz = 0
1656
+ assert_equal(zz, z, "z=#{z.inspect}")
1657
+ y = LongDecimalQuot(Rational(224, 225), 0)
1658
+ z = y <=> x
1659
+ zz = 0
1660
+ assert_equal(zz, z, "z=#{z.inspect}")
1661
+
1662
+ y = LongDecimal(3, 1)
1663
+ z = x <=> y
1664
+ zz = 1
1665
+ assert_equal(zz, z, "z=#{z.inspect}")
1666
+ z = y <=> x
1667
+ zz = -1
1668
+ assert_equal(zz, z, "z=#{z.inspect}")
1669
+
1670
+ y = 5
1671
+ z = x <=> y
1672
+ zz = -1
1673
+ assert_equal(zz, z, "z=#{z.inspect}")
1674
+ z = y <=> x
1675
+ zz = 1
1676
+ assert_equal(zz, z, "z=#{z.inspect}")
1677
+
1678
+ y = 5.001
1679
+ z = x <=> y
1680
+ zz = -1
1681
+ assert_equal(zz, z, "z=#{z.inspect}")
1682
+ z = y <=> x
1683
+ zz = 1
1684
+ assert_equal(zz, z, "z=#{z.inspect}")
1685
+
1686
+ y = Rational(5, 3)
1687
+ z = x <=> y
1688
+ zz = -1
1689
+ assert_equal(zz, z, "z=#{z.inspect}")
1690
+ z = y <=> x
1691
+ zz = 1
1692
+ assert_equal(zz, z, "z=#{z.inspect}")
1693
+
1694
+ y = LongDecimalQuot(Rational(5, 3), 3)
1695
+ z = x <=> y
1696
+ zz = -1
1697
+ assert_equal(zz, z, "z=#{z.inspect}")
1698
+ z = y <=> x
1699
+ zz = 1
1700
+ assert_equal(zz, z, "z=#{z.inspect}")
1701
+
1702
+ end
1703
+
1704
+ def test_ldq_sgn
1705
+ x = LongDecimalQuot(Rational(0, 5), 1000)
1706
+ s = x.sgn
1707
+ assert_equal(0, s, "must be 0")
1708
+ x = LongDecimalQuot(Rational(4, 5), 6)
1709
+ s = x.sgn
1710
+ assert_equal(1, s, "must be 1")
1711
+ x = LongDecimalQuot(Rational(-3, 5), 7)
1712
+ s = x.sgn
1713
+ assert_equal(-1, s, "must be -1")
1714
+ end
1715
+
1716
+ def test_ldq_equal
1717
+ x = LongDecimalQuot(Rational(224, 225), 226)
1718
+ y = LongDecimalQuot(Rational(224, 225), 227)
1719
+ assert((x <=> y) == 0, "diff is zero")
1720
+ assert(x != y, "but not equal")
1721
+ assert(! (x == y), "but not equal")
1722
+ assert_equal(x, x, "x equals x")
1723
+ assert_equal(y, y, "y equals y")
1724
+ end
1725
+
1726
+ end
1727
+
1728
+ RUNIT::CUI::TestRunner.run(TestLongDecimal_class.suite)
1729
+
1730
+ # end of file testlongdecimal.rb
1731
+