@@ -309,4 +309,40 @@ def test_log
309
309
end
310
310
SRC
311
311
end
312
+
313
+ def test_log2
314
+ assert_raise ( Math ::DomainError ) { log2 ( BigDecimal ( "0" ) , N ) }
315
+ assert_raise ( Math ::DomainError ) { log2 ( BigDecimal ( "-1" ) , N ) }
316
+ assert_raise ( Math ::DomainError ) { log2 ( MINF , N ) }
317
+ assert_equal ( PINF , log2 ( PINF , N ) )
318
+ assert_in_epsilon ( BigDecimal ( "1.5849625007211561814537389439478165087598144076924810604557526545410982277943585625222804749180882420909806624750592" ) ,
319
+ log2 ( BigDecimal ( "3" ) , 100 ) , BigDecimal ( "1e-100" ) )
320
+ assert_relative_precision { |n | log2 ( BigDecimal ( "3" ) , n ) }
321
+ assert_relative_precision { |n | log2 ( BigDecimal ( "3e20" ) , n ) }
322
+ assert_relative_precision { |n | log2 ( BigDecimal ( "1e-20" ) + 1 , n ) }
323
+ [ BigDecimal ::ROUND_UP , BigDecimal ::ROUND_DOWN ] . each do |round_mode |
324
+ BigDecimal . mode ( BigDecimal ::ROUND_MODE , round_mode )
325
+ [ 0 , 1 , 2 , 11 , 123 ] . each do |n |
326
+ assert_equal ( n , log2 ( BigDecimal ( 2 **n ) , N ) )
327
+ end
328
+ end
329
+ end
330
+
331
+ def test_log10
332
+ assert_raise ( Math ::DomainError ) { log10 ( BigDecimal ( "0" ) , N ) }
333
+ assert_raise ( Math ::DomainError ) { log10 ( BigDecimal ( "-1" ) , N ) }
334
+ assert_raise ( Math ::DomainError ) { log10 ( MINF , N ) }
335
+ assert_equal ( PINF , log10 ( PINF , N ) )
336
+ assert_in_epsilon ( BigDecimal ( "0.4771212547196624372950279032551153092001288641906958648298656403052291527836611230429683556476163015104646927682520" ) ,
337
+ log10 ( BigDecimal ( "3" ) , 100 ) , BigDecimal ( "1e-100" ) )
338
+ assert_relative_precision { |n | log10 ( BigDecimal ( "3" ) , n ) }
339
+ assert_relative_precision { |n | log10 ( BigDecimal ( "3e20" ) , n ) }
340
+ assert_relative_precision { |n | log10 ( BigDecimal ( "1e-20" ) + 1 , n ) }
341
+ [ BigDecimal ::ROUND_UP , BigDecimal ::ROUND_DOWN ] . each do |round_mode |
342
+ BigDecimal . mode ( BigDecimal ::ROUND_MODE , round_mode )
343
+ [ 0 , 1 , 2 , 11 , 123 ] . each do |n |
344
+ assert_equal ( n , log10 ( BigDecimal ( 10 **n ) , N ) )
345
+ end
346
+ end
347
+ end
312
348
end
0 commit comments