実装するまで細かいことは考えられない病

https://twitter.coaam/turkey_pc/status/924077426174390272

C#のRandom.Next(int maxValue)のヘルプを見てわいてきた疑問が下記ツイートの件。

 

実際動かすとRandom.Next(0)は常に0を返していました。ヘルプの「指定した最大値より小さい」には反していますが、まぁこれはこれでいいのかなぁと。

 

で、なんでこんなアホなことに気が付いたのかといいますと、乱数を使うプログラムのテストプログラムを書きたかったからです。

乱数が最大値-1,最大値-2・・・・0を順序良く返した場合のテストを書くにはどうしたらいいのか?

ああ、そうだ。Randomクラスに似せてテストに都合のいい任意の値を吐いてくれるクラスを作ればいいんだと。

まあ上記のことはたぶん自動テスト書く人はみんなやってることでしょうが、自分もやってみたくて。 で、書いた。

f:id:turkey_pc:20171028104139p:plain

乱数をInterfaceにして本番用の乱数(RealRandom)とテスト用の乱数(FakeRandom)をそれぞれ実装。

 

FakeRandom.Nextを実装する際に「maxValueが0のときどうしよ?」と疑問が。で、本家のRandomはどうしているのか調べてみたところで冒頭のツイート。

 

境界値なんてバグの温床だからきちんと事前に確認しとけ、と言われるのですが日本語を読んでる段階では境界値に思いをはせることができないおいらです。