From 56d32fa7bd548870c8382824fe748c5c5fde1d27 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 31 Jan 2017 17:15:13 +1100 Subject: Add to test case --- tests/run/generic/SearchResult.scala | 9 +++++---- tests/run/generic/Test.scala | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'tests/run/generic') diff --git a/tests/run/generic/SearchResult.scala b/tests/run/generic/SearchResult.scala index be8ebd15d..1c86d1b4f 100644 --- a/tests/run/generic/SearchResult.scala +++ b/tests/run/generic/SearchResult.scala @@ -11,7 +11,7 @@ import Shapes._ */ sealed trait SearchResult extends Enum -object SearchResult extends EnumValues[SearchResult](2) { +object SearchResult extends EnumValues[SearchResult](3) { private def $new(tag: Int, name: String) = new SearchResult { def enumTag = tag @@ -46,9 +46,10 @@ object SearchResult extends EnumValues[SearchResult](2) { } } - implicit def SearchResultShape: - SearchResult `shaped` Sum[Success, Sum[Ambiguous, EnumValue[SearchResult]]] = - new (SearchResult `shaped` Sum[Success, Sum[Ambiguous, EnumValue[SearchResult]]]) { + type Shape = Sum[Success, Sum[Ambiguous, EnumValue[SearchResult]]] + + implicit def SearchResultShape: SearchResult `unfolds` Shape = + new (SearchResult `shaped` Shape) { def toShape(x: SearchResult) = x match { case x: Success => Fst(x) case x: Ambiguous => Snd(Fst(x)) diff --git a/tests/run/generic/Test.scala b/tests/run/generic/Test.scala index 1431d1185..ac0dc4d5a 100644 --- a/tests/run/generic/Test.scala +++ b/tests/run/generic/Test.scala @@ -3,11 +3,12 @@ import Tree._ import List._ import java.io._ import Shapes._ +import SearchResult._ object Test { import Serialization._ - private var lCount, tCount = 0 + private var lCount, tCount, sCount = 0 // ------- Code that will eventually be produced by macros ------------- @@ -29,6 +30,11 @@ object Test { implicit lazy val tsInt: Serializable[Tree[Int]] = TreeSerializable[Int] implicit lazy val tsBoolean: Serializable[Tree[Boolean]] = TreeSerializable[Boolean] + implicit lazy val SearchResultSerializable: Serializable[SearchResult] = { + sCount += 1 + RecSerializable[SearchResult, SearchResult.Shape] + } + // ------- Test code -------------------------------------------------------- /** Serialize data, then deserialize it back and check that it is the same. */ @@ -49,10 +55,18 @@ object Test { val data2 = If(IsZero(Pred(Succ(Zero))), Succ(Succ(Zero)), Pred(Pred(Zero))) + val data3 = Cons(Color.Red, Cons(Color.Green, Cons(Color.Blue, Nil))) + + val data4 = Ambiguous(Success(Color.Green), Diverging) + def main(args: Array[String]) = { sds(data1) assert(lCount == 1, lCount) sds(data2) assert(tCount == 2, tCount) + sds(data3) + assert(lCount == 2, lCount) + sds(data4) + assert(sCount == 1, sCount) } } \ No newline at end of file -- cgit v1.2.3