Change soft-fail to use the config, rather than env
[rbx.git] / spec / frozen / 1.8 / library / bigdecimal / floor_spec.rb
blobabc4092eb58d3df6c0e98bcfdd4c2aa76c196db5
1 require File.dirname(__FILE__) + '/../../spec_helper'
2 require 'bigdecimal'
4 describe "BigDecimal#floor" do
5   before(:each) do
6     @one = BigDecimal("1")
7     @three = BigDecimal("3")
8     @four = BigDecimal("4")
9     @zero = BigDecimal("0")
10     @mixed = BigDecimal("1.23456789")
11     @mixed_big = BigDecimal("1.23456789E100")
12     @pos_int = BigDecimal("2E5555")
13     @neg_int = BigDecimal("-2E5555")
14     @pos_frac = BigDecimal("2E-9999")
15     @neg_frac = BigDecimal("-2E-9999")
17     @infinity = BigDecimal("Infinity")
18     @infinity_neg = BigDecimal("-Infinity")
19     @nan = BigDecimal("NaN")
20     @zero_pos = BigDecimal("+0")
21     @zero_neg = BigDecimal("-0")
22   end
24   it "returns the greatest integer smaller or equal to self" do
25     @pos_int.floor.should == @pos_int
26     @neg_int.floor.should == @neg_int
27     @pos_frac.floor.should == @zero
28     @neg_frac.floor.should == BigDecimal("-1")
29     @infinity.floor.should == @infinity
30     @infinity_neg.floor.should == @infinity_neg
31     @nan.floor.nan?.should == true
32     @zero.floor.should == 0
33     @zero_pos.floor.should == @zero_pos
34     @zero_neg.floor.should == @zero_neg
36     BigDecimal('2.3').floor.should == 2
37     BigDecimal('2.5').floor.should == 2
38     BigDecimal('2.9999').floor.should == 2
39     BigDecimal('-2.3').floor.should == -3
40     BigDecimal('-2.5').floor.should == -3
41     BigDecimal('-2.9999').floor.should == -3
42     BigDecimal('0.8').floor.should == 0
43     BigDecimal('-0.8').floor.should == -1
44   end
46   it "returns n digits right of the decimal point if given n > 0" do
47     @mixed.floor(1).should == BigDecimal("1.2")
48     @mixed.floor(5).should == BigDecimal("1.23456")
50     BigDecimal("-0.03").floor(1).should == BigDecimal("-0.1")
51     BigDecimal("0.03").floor(1).should == BigDecimal("0")
53     BigDecimal("23.45").floor(0).should == BigDecimal('23')
54     BigDecimal("23.45").floor(1).should == BigDecimal('23.4')
55     BigDecimal("23.45").floor(2).should == BigDecimal('23.45')
57     BigDecimal("-23.45").floor(0).should == BigDecimal('-24')
58     BigDecimal("-23.45").floor(1).should == BigDecimal('-23.5')
59     BigDecimal("-23.45").floor(2).should == BigDecimal('-23.45')
61     BigDecimal("2E-10").floor(0).should == @zero
62     BigDecimal("2E-10").floor(9).should == @zero
63     BigDecimal("2E-10").floor(10).should == BigDecimal('2E-10')
64     BigDecimal("2E-10").floor(11).should == BigDecimal('2E-10')
66     (1..10).each do |n|
67       # 0.3, 0.33, 0.333, etc.
68       (@one/@three).floor(n).should == BigDecimal("0.#{'3'*n}")
69       # 1.3, 1.33, 1.333, etc.
70       (@four/@three).floor(n).should == BigDecimal("1.#{'3'*n}")
71       (BigDecimal('31')/@three).floor(n).should == BigDecimal("10.#{'3'*n}")
72     end
73     (1..10).each do |n|
74       # -0.4, -0.34, -0.334, etc.
75       (-@one/@three).floor(n).should == BigDecimal("-0.#{'3'*(n-1)}4")
76     end
77     (1..10).each do |n|
78       (@three/@one).floor(n).should == @three
79     end
80     (1..10).each do |n|
81       (-@three/@one).floor(n).should == -@three
82     end
83   end
85   it "sets n digits left of the decimal point to 0, if given n < 0" do
86     BigDecimal("13345.234").floor(-2).should == BigDecimal("13300.0")
87     @mixed_big.floor(-99).should == BigDecimal("0.12E101")
88     @mixed_big.floor(-100).should == BigDecimal("0.1E101")
89     @mixed_big.floor(-95).should == BigDecimal("0.123456E101")
90     (1..10).each do |n|
91       BigDecimal('1.8').floor(-n).should == @zero
92     end
93     BigDecimal("1E10").floor(-30).should == @zero
94     BigDecimal("-1E10").floor(-30).should == BigDecimal('-1E30')
95   end
97 end