Scala の BigInt に関しての既知のBug(?)に遭遇したけど最新版ではなおってるらしい・・・というメモ

これまとめた時点の情報なので、 2.8.2 や 2.9.2 、 2.10.0 のfinalが出るときはどーなるかわかりませんが、現状 2.8.1.finalも2.9.1.final もこんな動作らしいので気をつけましょう
0
Kenji Yoshida @xuwei_k

scala> BigInt("100000000000000000000000000000000").isValidByte res0: Boolean = true ・・・え?(´・ω・`)バグってなイカ? isValidByte の意味とは・・・? #Scala

2011-09-19 14:50:06
Kenji Yoshida @xuwei_k

isValidByte って、BigIntの内部の値がByteの範囲に収まるか否かじゃないの? ゴゴゴゴゴゴゴゴゴ(・Д・`)??? #Scala

2011-09-19 14:51:24
kmizu @kmizu

@xuwei_k バグってますね。実装見るに、toIntとtoByteの結果を比較して判定していますが、このケースだと、toIntもtoByteも0返すのでアチャーな事になってるのかと。

2011-09-19 14:54:26
Kenji Yoshida @xuwei_k

@kmizu そうですね、isValidByte の仕様の解釈が正しいとしたらバグってますね・・・。新たにバグが入ったとかではなく、2.9.1.finalでも2.8.1.finalでも同じ実装で同じ動作・・・

2011-09-19 15:00:34
Kenji Yoshida @xuwei_k

これ、 isValidShort とか isValidInt も同じ実装だからバグるんじゃ・・・

2011-09-19 15:01:53
Kenji Yoshida @xuwei_k

> set resolvers += ScalaToolsSnapshots して > set scalaVersion := "2.10.0-SNAPSHOT" で > console すると最新版の #Scala が試せる sbt !

2011-09-19 15:06:02
Kenji Yoshida @xuwei_k

あー trunk だと override されてるから直ってるっぽい? http://t.co/T0fNAYq5

2011-09-19 15:08:37
Kenji Yoshida @xuwei_k

http://t.co/0aTVBkTR あーそして、2.9.1で 「なんでBigInt に isValidLong だけないんだよ」 とか思ってたら、 trunk だと追加されてる・・・ #Scala

2011-09-19 15:11:38
Kenji Yoshida @xuwei_k

ぐぬぬぬぬ、2.9.2 早く出ないかな・・・

2011-09-19 15:13:24
Kenji Yoshida @xuwei_k

今試したら 2.9.2-SNAPSHOT だと バグったまま(´・ω・`) そして、isValidLong は 2.9.2-SNAPSHOT には今のところ追加されてなくて、 2.10.0-SNAPSHOT だけか・・・

2011-09-19 15:17:45