Skip to content

Commit f0b9c70

Browse files
aardvark179chrisseaton
authored andcommitted
Implement Integer rounding specs.
1 parent 9ed7675 commit f0b9c70

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

spec/tags/core/integer/round_tags.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/main/ruby/truffleruby/core/integer.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def chr(enc=undefined)
155155
String.from_codepoint self, enc
156156
end
157157

158-
def round(ndigits=undefined)
158+
def round(ndigits=undefined, half: nil)
159159
return self if undefined.equal? ndigits
160160

161161
if Float === ndigits && ndigits.infinite?
@@ -165,9 +165,7 @@ def round(ndigits=undefined)
165165
ndigits = Truffle::Type.coerce_to_int(ndigits)
166166
Truffle::Type.check_int(ndigits)
167167

168-
if ndigits > 0
169-
to_f
170-
elsif ndigits == 0
168+
if ndigits >= 0
171169
self
172170
else
173171
ndigits = -ndigits
@@ -181,7 +179,13 @@ def round(ndigits=undefined)
181179

182180
if kind_of? Integer and f.kind_of? Integer
183181
x = self < 0 ? -self : self
184-
x = (x + f / 2) / f * f
182+
x = if (half == :down)
183+
(x - f / 2) / f
184+
else
185+
(x + f / 2) / f
186+
end
187+
x = (x / 2) * 2 if half == :even
188+
x = x * f
185189
x = -x if self < 0
186190
return x
187191
end

0 commit comments

Comments
 (0)