diff options
author | odersky <odersky@gmail.com> | 2017-04-10 10:33:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-10 10:33:32 +0200 |
commit | 318700fdaacd7e6707519e03f15a5ede99ca558a (patch) | |
tree | 809f66b68f9200afd8daef9172921405469a39c7 /tests/patmat/enum-Tree.scala | |
parent | 80f9b6da66cb4eeabfd5ab97e422752ff134d590 (diff) | |
parent | 2bf1e1913feb36d90d1c4e857c6cd9610d80ff61 (diff) | |
download | dotty-318700fdaacd7e6707519e03f15a5ede99ca558a.tar.gz dotty-318700fdaacd7e6707519e03f15a5ede99ca558a.tar.bz2 dotty-318700fdaacd7e6707519e03f15a5ede99ca558a.zip |
Merge pull request #2197 from dotty-staging/add-enum-exhaustiveness
Add enum exhaustivity checking
Diffstat (limited to 'tests/patmat/enum-Tree.scala')
-rw-r--r-- | tests/patmat/enum-Tree.scala | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/patmat/enum-Tree.scala b/tests/patmat/enum-Tree.scala new file mode 100644 index 000000000..ef5bd7a57 --- /dev/null +++ b/tests/patmat/enum-Tree.scala @@ -0,0 +1,29 @@ +enum Tree[T] { + case True extends Tree[Boolean] + case False extends Tree[Boolean] + case Zero extends Tree[Int] + case Succ(n: Tree[Int]) extends Tree[Int] + case Pred(n: Tree[Int]) extends Tree[Int] + case IsZero(n: Tree[Int]) extends Tree[Boolean] + case If(cond: Tree[Boolean], thenp: Tree[T], elsep: Tree[T]) +} + +object Test { + import Tree._ + + def eval[T](e: Tree[T]): T = e match { + case True => true + case False => false + case Zero => 0 + case Succ(f) => eval(f) + 1 + case Pred(f) => eval(f) - 1 + case IsZero(f) => eval(f) == 0 + case If(cond, thenp, elsep) => if (eval(cond)) eval(thenp) else eval(elsep) + } + + val data = If(IsZero(Pred(Succ(Zero))), Succ(Succ(Zero)), Pred(Pred(Zero))) + + def main(args: Array[String]) = { + println(s"$data --> ${eval(data)}") + } +} |