今週の気になった bugs.ruby

内容は適当です。
今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。
今週は少なめ。

[Bug #17017] Range#max & Range#minmax incorrectly use Float end as max

  • Range#maxRange#minmax の戻り値に一貫性がない
  • 例えば以下のように to_a.maxmax で値が違う
(1..3.1).to_a        == [1, 2, 3] # As expected

(1..3.1).to_a.max    == 3         # As expected
(1..3.1).to_a.minmax == [1, 3]    # As expected

(1..3.1).max    == 3.1            # Should be 3, as above
(1..3.1).minmax == [1, 3.1]       # Should be [1, 3], as above
  • このバグは修正され、開発版では以下のような値が返ってくる
(1..3.1).max     # => 3
(1..3.1).minmax  # => [1, 3]
  • また以下のようなコードの場合、非互換な挙動になるので注意する
    • この影響で rubocop がぶっ壊れていたらしい
    • 明示的に Float に変換すると大丈夫
# 2.7.1    : Infinity を返す
# 2.8.0dev : error: `floor': Infinity (FloatDomainError)
p (42..Float::INFINITY).max

# 明示的に Float に変換すると OK
p (42.to_f..Float::INFINITY).max