##make時に実行されれば良いので`pwd`/$srcdirで絶対パスにしてみた。
#新しく clone した tree で、sh DIST gen; ./configure; make; make check で Total: 15910 tests, 15910 passed, 0 failed, 0 aborted. でした。
#Mahalo
#あ、でも out of tree build の config を絶対パスでやった場合は?
#あれ、さっき絶対パスで確認したつもりだったんだけど考えてみたらおかしいですね。
#srcdir がすでに絶対パスなのに、その上に pwd ちゃうので test 失敗しますね。
#s/pwd ちゃう/pwd つけちゃう/
#abs_srcdir=`case '$(srcdir)' in /*);; *) pwd;; esac`/$(srcdir) とかですかね。
#MinGWの場合は、と思ったけどGauche自体のビルド時はMSYSを想定していいからバックスラッシュとかドライブレターとかは考慮しなくていいかな。
#とりあえずcaseでコミットしました。でもssltestを走らせる状況ではgauche本体のビルドは済んでるので、gosh経由でパスの処理して呼び出す方がわかりやすかもしれないなあ。
#gosh> (car (lrange (greatest-fixnum)))
*** ERROR: Exact infinity/nan is not supported: +inf.0
#lrange が実は無限列を生成していないバグ(?)を発見しました。
#うぉう。
#bignumのcoercionの問題っぽい
#gosh> (>= (+ (greatest-fixnum) 1) +inf.0)
*** ERROR: Exact infinity/nan is not supported: +inf.0
#ははーん。これだ。src/number.c
#と書きかけて違うことに気づいた
#こっちだ
#if (SCM_BIGNUMP(arg1) || SCM_RATNUMP(arg1)) {
/* R7RS requires transitivity in '=', so we can't coerce
arg1 to inexact; we'd rather convert arg0 to exact.
NB: Thus we'll have a case that (= x y) => #f but
(- x y) => 0.0. It's ok for the latter is inexact result. */
return Scm_NumCmp(Scm_Exact(arg0), arg1);
}
#flonum vs bignumの比較の時、bignum->flonumに変換してflonum同士で比較すると精度落ちのため推移律が保たれなくなるから、flonumをexactに変換していたんだけど、無限大は変換できないと。
#比較で問題が起きるだろうと踏んでいたので、そっちの例を出すべきでした。(頭が lrange でいっぱいだった)
#やっぱり lrange 等のデフォルト値が +inf.0 なのはよくないんじゃないか、みたいなことを考えていました。