1 require File.dirname(__FILE__) + '/../../spec_helper'
4 describe "BigDecimal#floor" do
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")
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
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')
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}")
74 # -0.4, -0.34, -0.334, etc.
75 (-@one/@three).floor(n).should == BigDecimal("-0.#{'3'*(n-1)}4")
78 (@three/@one).floor(n).should == @three
81 (-@three/@one).floor(n).should == -@three
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")
91 BigDecimal('1.8').floor(-n).should == @zero
93 BigDecimal("1E10").floor(-30).should == @zero
94 BigDecimal("-1E10").floor(-30).should == BigDecimal('-1E30')