Removed mathn.rb from stdlib. It's deprecated from Ruby 2.2.

[Feature #10169][[ruby-core:64553]]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58432 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
hsbt 2017-04-21 06:16:11 +00:00
Родитель 20d81b4287
Коммит 7a856b11c8
10 изменённых файлов: 3 добавлений и 401 удалений

3
NEWS
Просмотреть файл

@ -70,6 +70,9 @@ with all sufficient information, see the ChangeLog file or Redmine
=== Stdlib compatibility issues (excluding feature bug fixes)
* mathn.rb
Removed from stdlib. [Feature #10169]
=== C API updates
=== Supported platform changes

Просмотреть файл

@ -70,8 +70,6 @@ Zachary Scott (zzak)
Keiju ISHITSUKA (keiju)
[lib/logger.rb]
Naotoshi Seo (sonots)
[lib/mathn.rb]
Keiju ISHITSUKA (keiju)
[lib/matrix.rb]
Marc-Andre Lafortune (marcandre)
[lib/mkmf.rb]

Просмотреть файл

@ -25,7 +25,6 @@ GetoptLong:: Parse command line options similar to the GNU C getopt_long()
IPAddr:: Provides methods to manipulate IPv4 and IPv6 IP addresses
IRB:: Interactive Ruby command-line tool for REPL (Read Eval Print Loop)
Logger:: Provides a simple logging utility for outputting messages
mathn.rb:: Deprecated library that extends math operations
MakeMakefile:: Module used to generate a Makefile for C extensions
Matrix:: Represents a mathematical matrix.
Monitor:: Provides an object or module to use safely by more than one thread

Просмотреть файл

@ -1,16 +0,0 @@
Gem::Specification.new do |s|
s.name = "mathn"
s.version = '0.0.1'
s.date = '2017-03-20'
s.summary = "Deprecated library that extends math operations."
s.description = "Deprecated library that extends math operations."
s.require_path = %w{lib}
s.files = %w{mathn.rb}
s.required_ruby_version = ">= 2.5.0dev"
s.authors = ["Keiju ISHITSUKA"]
s.email = [nil]
s.homepage = "https://www.ruby-lang.org"
s.license = "BSD-2-Clause"
end

Просмотреть файл

@ -1,167 +0,0 @@
# frozen_string_literal: false
#--
# $Release Version: 0.5 $
# $Revision: 1.1.1.1.4.1 $
##
# = mathn
#
# mathn serves to make mathematical operations more precise in Ruby
# and to integrate other mathematical standard libraries.
#
# Without mathn:
#
# 3 / 2 => 1 # Integer
#
# With mathn:
#
# 3 / 2 => 3/2 # Rational
#
# mathn keeps value in exact terms.
#
# Without mathn:
#
# 20 / 9 * 3 * 14 / 7 * 3 / 2 # => 18
#
# With mathn:
#
# 20 / 9 * 3 * 14 / 7 * 3 / 2 # => 20
#
#
# When you require 'mathn', the libraries for Prime, CMath, Matrix and Vector
# are also loaded.
#
# == Copyright
#
# Author: Keiju ISHITSUKA (SHL Japan Inc.)
#--
# class Numeric follows to make this documentation findable in a reasonable
# location
warn('lib/mathn.rb is deprecated') if $VERBOSE
class Numeric; end
require "cmath.rb"
require "matrix.rb"
require "prime.rb"
unless defined?(Math.exp!)
Object.instance_eval{remove_const :Math}
Math = CMath # :nodoc:
end
##
# When mathn is required, Integer's division is enhanced to
# return more precise values from mathematical expressions.
#
# 2/3*3 # => 0
# require 'mathn'
# 2/3*3 # => 2
#
# (2**72) / ((2**70) * 3) # => 4/3
class Integer
remove_method :/
##
# +/+ defines the Rational division for Bignum.
#
# (2**72) / ((2**70) * 3) # => 4/3
alias / quo
end
##
# When mathn is required, the Math module changes as follows:
#
# Standard Math module behaviour:
# Math.sqrt(4/9) # => 0.0
# Math.sqrt(4.0/9.0) # => 0.666666666666667
# Math.sqrt(- 4/9) # => Errno::EDOM: Numerical argument out of domain - sqrt
#
# After require 'mathn', this is changed to:
#
# require 'mathn'
# Math.sqrt(4/9) # => 2/3
# Math.sqrt(4.0/9.0) # => 0.666666666666667
# Math.sqrt(- 4/9) # => Complex(0, 2/3)
module Math
remove_method(:sqrt)
##
# Computes the square root of +a+. It makes use of Complex and
# Rational to have no rounding errors if possible.
#
# Math.sqrt(4/9) # => 2/3
# Math.sqrt(- 4/9) # => Complex(0, 2/3)
# Math.sqrt(4.0/9.0) # => 0.666666666666667
def sqrt(a)
if a.kind_of?(Complex)
sqrt!(a)
elsif a.respond_to?(:nan?) and a.nan?
a
elsif a >= 0
rsqrt(a)
else
Complex(0,rsqrt(-a))
end
end
##
# Compute square root of a non negative number. This method is
# internally used by +Math.sqrt+.
def rsqrt(a) # :nodoc:
if a.kind_of?(Float)
sqrt!(a)
elsif a.kind_of?(Rational)
rsqrt(a.numerator)/rsqrt(a.denominator)
else
src = a
max = 2 ** 32
byte_a = [src & 0xffffffff]
# ruby's bug
while (src >= max) and (src >>= 32)
byte_a.unshift src & 0xffffffff
end
answer = 0
main = 0
side = 0
for elm in byte_a
main = (main << 32) + elm
side <<= 16
if answer != 0
if main * 4 < side * side
applo = main.div(side)
else
applo = ((sqrt!(side * side + 4 * main) - side)/2.0).to_i + 1
end
else
applo = sqrt!(main).to_i + 1
end
while (x = (side + applo) * applo) > main
applo -= 1
end
main -= x
answer = (answer << 16) + applo
side += applo * 2
end
if main == 0
answer
else
sqrt!(a)
end
end
end
class << self
remove_method(:sqrt)
end
module_function :sqrt
module_function :rsqrt
end

Просмотреть файл

@ -1765,12 +1765,6 @@ class TestBigDecimal < Test::Unit::TestCase
assert_kind_of(c, y)
end
def test_to_d
bug6093 = '[ruby-core:42969]'
code = "exit(BigDecimal.new('10.0') == 10.0.to_d)"
assert_ruby_status(%w[-rbigdecimal -rbigdecimal/util -rmathn -], code, bug6093)
end
def test_bug6406
assert_in_out_err(%w[-rbigdecimal --disable-gems], <<-EOS, [], [])
Thread.current.keys.to_s

Просмотреть файл

@ -2859,10 +2859,6 @@ class TestArray < Test::Unit::TestCase
assert_raise(TypeError) {[0].sum("")}
assert_raise(TypeError) {[1].sum("")}
assert_separately(%w[-rmathn], <<-EOS, ignore_stderr: true)
assert_equal(6, [1r, 2, 3r].sum)
EOS
end
private

Просмотреть файл

@ -907,10 +907,6 @@ class TestEnumerable < Test::Unit::TestCase
assert_equal("abc", ["a", "b", "c"].each.sum(""))
assert_equal([1, [2], 3], [[1], [[2]], [3]].each.sum([]))
assert_separately(%w[-rmathn], <<-EOS, ignore_stderr: true)
assert_equal(6, [1r, 2, 3r].each.sum)
EOS
end
def test_hash_sum

Просмотреть файл

@ -640,17 +640,6 @@ class TestRange < Test::Unit::TestCase
assert_raise(TypeError) { ("a".."z").bsearch {} }
end
def test_bsearch_with_mathn
assert_separately ['-r', 'mathn'], %q{
msg = '[ruby-core:25740]'
answer = (1..(1 << 100)).bsearch{|x|
assert_predicate(x, :integer?, msg)
x >= 42
}
assert_equal(42, answer, msg)
}, ignore_stderr: true
end
def test_each_no_blockarg
a = "a"
def a.upto(x, e, &b)

Просмотреть файл

@ -1,190 +0,0 @@
# frozen_string_literal: false
require 'test/unit'
# mathn redefines too much. It must be isolated to child processes.
class TestMathn < Test::Unit::TestCase
def test_power
stderr = $VERBOSE ? ["lib/mathn.rb is deprecated"] : []
assert_in_out_err ['-r', 'mathn', '-e', 'a=1**2;!a'], "", [], stderr, '[ruby-core:25740]'
assert_in_out_err ['-r', 'mathn', '-e', 'a=(1 << 126)**2;!a'], "", [], stderr, '[ruby-core:25740]'
end
def test_quo
stderr = $VERBOSE ? ["lib/mathn.rb is deprecated"] : []
assert_in_out_err ['-r', 'mathn'], <<-EOS, %w(OK), stderr, '[ruby-core:41575]'
1.quo(2); puts :OK
EOS
end
def test_floor
assert_separately(%w[-rmathn], <<-EOS, ignore_stderr: true)
assert_equal( 2, ( 13/5).floor)
assert_equal( 2, ( 5/2).floor)
assert_equal( 2, ( 12/5).floor)
assert_equal(-3, (-12/5).floor)
assert_equal(-3, ( -5/2).floor)
assert_equal(-3, (-13/5).floor)
assert_equal( 2, ( 13/5).floor(0))
assert_equal( 2, ( 5/2).floor(0))
assert_equal( 2, ( 12/5).floor(0))
assert_equal(-3, (-12/5).floor(0))
assert_equal(-3, ( -5/2).floor(0))
assert_equal(-3, (-13/5).floor(0))
assert_equal(( 13/5), ( 13/5).floor(2))
assert_equal(( 5/2), ( 5/2).floor(2))
assert_equal(( 12/5), ( 12/5).floor(2))
assert_equal((-12/5), (-12/5).floor(2))
assert_equal(( -5/2), ( -5/2).floor(2))
assert_equal((-13/5), (-13/5).floor(2))
EOS
end
def test_ceil
assert_separately(%w[-rmathn], <<-EOS, ignore_stderr: true)
assert_equal( 3, ( 13/5).ceil)
assert_equal( 3, ( 5/2).ceil)
assert_equal( 3, ( 12/5).ceil)
assert_equal(-2, (-12/5).ceil)
assert_equal(-2, ( -5/2).ceil)
assert_equal(-2, (-13/5).ceil)
assert_equal( 3, ( 13/5).ceil(0))
assert_equal( 3, ( 5/2).ceil(0))
assert_equal( 3, ( 12/5).ceil(0))
assert_equal(-2, (-12/5).ceil(0))
assert_equal(-2, ( -5/2).ceil(0))
assert_equal(-2, (-13/5).ceil(0))
assert_equal(( 13/5), ( 13/5).ceil(2))
assert_equal(( 5/2), ( 5/2).ceil(2))
assert_equal(( 12/5), ( 12/5).ceil(2))
assert_equal((-12/5), (-12/5).ceil(2))
assert_equal(( -5/2), ( -5/2).ceil(2))
assert_equal((-13/5), (-13/5).ceil(2))
EOS
end
def test_truncate
assert_separately(%w[-rmathn], <<-EOS, ignore_stderr: true)
assert_equal( 2, ( 13/5).truncate)
assert_equal( 2, ( 5/2).truncate)
assert_equal( 2, ( 12/5).truncate)
assert_equal(-2, (-12/5).truncate)
assert_equal(-2, ( -5/2).truncate)
assert_equal(-2, (-13/5).truncate)
assert_equal( 2, ( 13/5).truncate(0))
assert_equal( 2, ( 5/2).truncate(0))
assert_equal( 2, ( 12/5).truncate(0))
assert_equal(-2, (-12/5).truncate(0))
assert_equal(-2, ( -5/2).truncate(0))
assert_equal(-2, (-13/5).truncate(0))
assert_equal(( 13/5), ( 13/5).truncate(2))
assert_equal(( 5/2), ( 5/2).truncate(2))
assert_equal(( 12/5), ( 12/5).truncate(2))
assert_equal((-12/5), (-12/5).truncate(2))
assert_equal(( -5/2), ( -5/2).truncate(2))
assert_equal((-13/5), (-13/5).truncate(2))
EOS
end
def test_round
assert_separately(%w[-rmathn], <<-EOS, ignore_stderr: true)
assert_equal( 3, ( 13/5).round)
assert_equal( 3, ( 5/2).round)
assert_equal( 2, ( 12/5).round)
assert_equal(-2, (-12/5).round)
assert_equal(-3, ( -5/2).round)
assert_equal(-3, (-13/5).round)
assert_equal( 3, ( 13/5).round(0))
assert_equal( 3, ( 5/2).round(0))
assert_equal( 2, ( 12/5).round(0))
assert_equal(-2, (-12/5).round(0))
assert_equal(-3, ( -5/2).round(0))
assert_equal(-3, (-13/5).round(0))
assert_equal(( 13/5), ( 13/5).round(2))
assert_equal(( 5/2), ( 5/2).round(2))
assert_equal(( 12/5), ( 12/5).round(2))
assert_equal((-12/5), (-12/5).round(2))
assert_equal(( -5/2), ( -5/2).round(2))
assert_equal((-13/5), (-13/5).round(2))
assert_equal( 3, ( 13/5).round(half: :even))
assert_equal( 2, ( 5/2).round(half: :even))
assert_equal( 2, ( 12/5).round(half: :even))
assert_equal(-2, (-12/5).round(half: :even))
assert_equal(-2, ( -5/2).round(half: :even))
assert_equal(-3, (-13/5).round(half: :even))
assert_equal( 3, ( 13/5).round(0, half: :even))
assert_equal( 2, ( 5/2).round(0, half: :even))
assert_equal( 2, ( 12/5).round(0, half: :even))
assert_equal(-2, (-12/5).round(0, half: :even))
assert_equal(-2, ( -5/2).round(0, half: :even))
assert_equal(-3, (-13/5).round(0, half: :even))
assert_equal(( 13/5), ( 13/5).round(2, half: :even))
assert_equal(( 5/2), ( 5/2).round(2, half: :even))
assert_equal(( 12/5), ( 12/5).round(2, half: :even))
assert_equal((-12/5), (-12/5).round(2, half: :even))
assert_equal(( -5/2), ( -5/2).round(2, half: :even))
assert_equal((-13/5), (-13/5).round(2, half: :even))
assert_equal( 3, ( 13/5).round(half: :up))
assert_equal( 3, ( 5/2).round(half: :up))
assert_equal( 2, ( 12/5).round(half: :up))
assert_equal(-2, (-12/5).round(half: :up))
assert_equal(-3, ( -5/2).round(half: :up))
assert_equal(-3, (-13/5).round(half: :up))
assert_equal( 3, ( 13/5).round(0, half: :up))
assert_equal( 3, ( 5/2).round(0, half: :up))
assert_equal( 2, ( 12/5).round(0, half: :up))
assert_equal(-2, (-12/5).round(0, half: :up))
assert_equal(-3, ( -5/2).round(0, half: :up))
assert_equal(-3, (-13/5).round(0, half: :up))
assert_equal(( 13/5), ( 13/5).round(2, half: :up))
assert_equal(( 5/2), ( 5/2).round(2, half: :up))
assert_equal(( 12/5), ( 12/5).round(2, half: :up))
assert_equal((-12/5), (-12/5).round(2, half: :up))
assert_equal(( -5/2), ( -5/2).round(2, half: :up))
assert_equal((-13/5), (-13/5).round(2, half: :up))
assert_equal( 3, ( 13/5).round(half: :down))
assert_equal( 2, ( 5/2).round(half: :down))
assert_equal( 2, ( 12/5).round(half: :down))
assert_equal(-2, (-12/5).round(half: :down))
assert_equal(-2, ( -5/2).round(half: :down))
assert_equal(-3, (-13/5).round(half: :down))
assert_equal( 3, ( 13/5).round(0, half: :down))
assert_equal( 2, ( 5/2).round(0, half: :down))
assert_equal( 2, ( 12/5).round(0, half: :down))
assert_equal(-2, (-12/5).round(0, half: :down))
assert_equal(-2, ( -5/2).round(0, half: :down))
assert_equal(-3, (-13/5).round(0, half: :down))
assert_equal(( 13/5), ( 13/5).round(2, half: :down))
assert_equal(( 5/2), ( 5/2).round(2, half: :down))
assert_equal(( 12/5), ( 12/5).round(2, half: :down))
assert_equal((-12/5), (-12/5).round(2, half: :down))
assert_equal(( -5/2), ( -5/2).round(2, half: :down))
assert_equal((-13/5), (-13/5).round(2, half: :down))
EOS
end
def test_rational
assert_separately(%w[-rmathn], "#{<<-"begin;"}\n#{<<-"end;"}", ignore_stderr: true)
begin;
assert_equal(-5, "-5".to_r)
assert_equal(1, "5/5".to_r)
assert_equal(5, "5e0".to_r)
end;
end
end