@@ -294,4 +294,40 @@ def test_log
294
294
end
295
295
SRC
296
296
end
297
+
298
+ def test_log2
299
+ assert_raise ( Math ::DomainError ) { log2 ( BigDecimal ( "0" ) , N ) }
300
+ assert_raise ( Math ::DomainError ) { log2 ( BigDecimal ( "-1" ) , N ) }
301
+ assert_raise ( Math ::DomainError ) { log2 ( MINF , N ) }
302
+ assert_equal ( PINF , log2 ( PINF , N ) )
303
+ assert_in_epsilon ( BigDecimal ( "1.5849625007211561814537389439478165087598144076924810604557526545410982277943585625222804749180882420909806624750592" ) ,
304
+ log2 ( BigDecimal ( "3" ) , 100 ) , BigDecimal ( "1e-100" ) )
305
+ assert_relative_precision { |n | log2 ( BigDecimal ( "3" ) , n ) }
306
+ assert_relative_precision { |n | log2 ( BigDecimal ( "3e20" ) , n ) }
307
+ assert_relative_precision { |n | log2 ( BigDecimal ( "1e-20" ) + 1 , n ) }
308
+ [ BigDecimal ::ROUND_UP , BigDecimal ::ROUND_DOWN ] . each do |round_mode |
309
+ BigDecimal . mode ( BigDecimal ::ROUND_MODE , round_mode )
310
+ [ 0 , 1 , 2 , 11 , 123 ] . each do |n |
311
+ assert_equal ( n , log2 ( BigDecimal ( 2 **n ) , N ) )
312
+ end
313
+ end
314
+ end
315
+
316
+ def test_log10
317
+ assert_raise ( Math ::DomainError ) { log10 ( BigDecimal ( "0" ) , N ) }
318
+ assert_raise ( Math ::DomainError ) { log10 ( BigDecimal ( "-1" ) , N ) }
319
+ assert_raise ( Math ::DomainError ) { log10 ( MINF , N ) }
320
+ assert_equal ( PINF , log10 ( PINF , N ) )
321
+ assert_in_epsilon ( BigDecimal ( "0.4771212547196624372950279032551153092001288641906958648298656403052291527836611230429683556476163015104646927682520" ) ,
322
+ log10 ( BigDecimal ( "3" ) , 100 ) , BigDecimal ( "1e-100" ) )
323
+ assert_relative_precision { |n | log10 ( BigDecimal ( "3" ) , n ) }
324
+ assert_relative_precision { |n | log10 ( BigDecimal ( "3e20" ) , n ) }
325
+ assert_relative_precision { |n | log10 ( BigDecimal ( "1e-20" ) + 1 , n ) }
326
+ [ BigDecimal ::ROUND_UP , BigDecimal ::ROUND_DOWN ] . each do |round_mode |
327
+ BigDecimal . mode ( BigDecimal ::ROUND_MODE , round_mode )
328
+ [ 0 , 1 , 2 , 11 , 123 ] . each do |n |
329
+ assert_equal ( n , log10 ( BigDecimal ( 10 **n ) , N ) )
330
+ end
331
+ end
332
+ end
297
333
end
0 commit comments