@@ -292,4 +292,40 @@ def test_log
292292 end
293293 SRC
294294 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
295331end
0 commit comments