long-decimal 0.00.06

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
+