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