https://github.com/rickynils/scalacheck/issues/136
CoArbitrary的な何かを実装するかもしれないらしいです
かなり昔に、以下のように悩みながら
URL (QuickCheckで関数のArbitrary生成時に使ってる) CoArbitrary というのがScalacheckには存在しないのだけど、なんですかこれ
結構雑?な独自実装なFunctionのArbitraryのpull reqをしたわけですが
https://github.com/rickynils/scalacheck/pull/66
結局pull reqの議論にもあまり参加しなかったし、mergeできない状態になったし、閉じられました。
まぁ実装詳細がどうであれ、いい感じにFunctionのArbitraryが生成できるようになるなら、なんでもいいのですが。(はやく欲しい)
以前(理解するのを)諦めたけれど、scalacheckでCoArbitraryを実装してくれる、もしくは少なくともいい感じの実装をしたら取り込んでもらえる余地がある、なら、今一度Haskellの実装かなにかを読んだりして、理解しておく必要がありますね。
ところで、Functional JavaにはCoArbitraryあるんですね、すごい・・・。
このFJの実装が、それなりにHaskellに近いものなら、ある意味Haskell読むよりJavaのほうが個人的に読める場合もあるので、これを簡単にScalaに移植しつつ、理解を深めるでもいいかもしれない。
あと、ほかにCoArbitraryの実装が他の言語やライブラリで存在してたら教えて下さい
(というか、単に教えてもらっても理解できない可能性高いので、もしそれぞれ実装詳細に違いがあるなら、誰かまとめというか比較記事を・・・)
ところで、最近以下のような記事見かけたし
FsCheck と ScalaCheck とを見比べる
Persimmon用のランダムテストライブラリ案(もしくは scalacheck の F# 移植)
F# で作ってる人達はどうしてる、どう考えてるんだろうなー、と思いつき、(F# ほぼ書けない、書いたこと無いのに) 調子に乗って、issue だけ立ててみました
https://github.com/persimmon-projects/Persimmon.Dried/issues/1
以下追記:
とりあえず、その他見つけたCoArbitrary的なものを貼り付けておく
- https://github.com/purescript/purescript-quickcheck/blob/v0.4.0/src/Test/QuickCheck.purs#L25-L26
- https://github.com/typelift/SwiftCheck/blob/00d6a7f5482da1671e2dd56f71068d6e33a8bdc8/SwiftCheck/Arbitrary.swift#L365-L367
- https://github.com/david-christiansen/idris-quickcheck/blob/51b7f619a3203c20ef8d8e30007bd83dba9fd386/QuickCheck.idr#L96