【问题标题】:Shrink macro for case class案例类的收缩宏
【发布时间】:2015-04-30 01:06:59
【问题描述】:

我正在为我的案例类实施Shrink instances。在我看来,宏可以完成这项工作。有人实施了吗?

【问题讨论】:

    标签: scala shrink scalacheck


    【解决方案1】:

    是的,他们有! shapeless-contrib 拥有an instanceShapelessTypeClassShrink

    scala> import org.scalacheck._
    import org.scalacheck._
    
    scala> case class Foo(s: String, i: Int)
    defined class Foo
    
    scala> val unshrunk = Foo("This is a very long string", 1000)
    unshrunk: Foo = Foo(This is a very long string,1000)
    
    scala> implicitly[Shrink[Foo]].shrink(unshrunk) // boring default instance
    res0: Stream[Foo] = Stream()
    
    scala> import shapeless.contrib.scalacheck._
    import shapeless.contrib.scalacheck._
    
    scala> implicitly[Shrink[Foo]].shrink(unshrunk) // interesting instance
    res1: Stream[Foo] = Stream(Foo(This is a ver,1000), ?)
    

    这由宏支持,但仅限于 Shapeless 用于其Generic 机制的宏。

    【讨论】:

    • 谢谢!它甚至可以生成Arbitrarys。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多