ふなばさん
遠藤です。

まず確認ですが、valid_civil? が jd or nil を返すという仕様から
true or false を返すようになったのは 1.9 から (というか Date2
から?) の仕様変更ですよね。

その点を修正した上で、rubyspec が以下の挙動の変化を検出しました。


$ ruby18 -v -rdate -e 'p Date.valid_civil?(1582, -3, -18)'
ruby 1.8.8dev (2010-01-26 revision 26430) [i686-linux]
nil

$ ./ruby -v -rdate -e 'p Date.valid_civil?(1582, -3, -18)'
ruby 1.9.2dev (2010-01-28 trunk 26458) [i686-linux]
true

$ ruby-1.9.1-p378 -v -rdate -e 'p Date.valid_civil?(1582, -3, -18)'
ruby 1.9.1p378 (2010-01-10 revision 26273) [i686-linux]
true


「Date の月日に負の値を入れても動く」という spec があって、
それがうまく動かなくなっているようです。

http://github.com/rubyspec/rubyspec/blob/master/library/date/civil_spec.rb


date.rb の _valid_civil? のコメントによると、負の値でも動く
ようなことが書かれていますので、これはバグでしょうか。

    # +m+ and +d+ can be negative, in which case they count
    # backwards from the end of the year and the end of the
    # month respectively.

-- 
Yusuke ENDOH <mame / tsg.ne.jp>