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