From: shugo@... Date: 2016-01-23T11:24:50+00:00 Subject: [ruby-core:73312] [Ruby trunk - Bug #12003] Unexpected behavior of === with Range of Date objects Issue #12003 has been updated by Shugo Maeda. Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED Ross Kaffenberger wrote: > In Ruby 2.2, a Range of Date objects will return true when matched with === for a new Date that falls in the range: (snip) > In Ruby 2.3.0, === returns false for the same date and date range: Fixed in r53635, but Range#=== is slow when the receiver consists of Date objects, because it uses Enumerable#include? internally. So I recommend Range#cover? instead. ---------------------------------------- Bug #12003: Unexpected behavior of === with Range of Date objects https://bugs.ruby-lang.org/issues/12003#change-56542 * Author: Ross Kaffenberger * Status: Closed * Priority: Normal * Assignee: * ruby -v: * Backport: 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONTNEED, 2.3: REQUIRED ---------------------------------------- In Ruby 2.2, a Range of Date objects will return true when matched with === for a new Date that falls in the range: ~~~ puts ENV['RUBY_VERSION'] # => '2.2.3' require 'date' date_range = Date.new(1980, 1, 1)..Date.new(1990, 1, 10) # => #..# puts date_range.cover? Date.new(1989, 10, 13) # => true puts date_range === Date.new(1989, 10, 13) # => true ~~~ In Ruby 2.3.0, === returns false for the same date and date range: ~~~ puts ENV['RUBY_VERSION'] # => '2.3.0' require 'date' date_range = Date.new(1980, 1, 1)..Date.new(1990, 1, 10) # => #..# puts date_range.cover? Date.new(1989, 10, 13) # => true puts date_range === Date.new(1989, 10, 13) # => false ~~~ In both Ruby 2.2.3 and Ruby 2.3.0, date comparisons with === return true, i.e, Date.new(1980, 1, 1) === Date.new(1980, 1, 1) # => true. I believe this may be a regression in the === implementation of Range. -- https://bugs.ruby-lang.org/ Unsubscribe: