aboutsummaryrefslogtreecommitdiff
path: root/tests/patmat/exhaustive_heuristics.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dark@d-d.me>2016-08-24 15:37:08 +0200
committerGitHub <noreply@github.com>2016-08-24 15:37:08 +0200
commit0e8f05d88bfef95fac59f522fd9d06792126bd11 (patch)
treebd83dcabb8de09fa48b9373b9431ef8c481da5ed /tests/patmat/exhaustive_heuristics.scala
parent265ade02e522c89844076b5339267eac08e44c37 (diff)
parentcc02243fbe8b7290265e1bdf540e4c2f256df199 (diff)
downloaddotty-0e8f05d88bfef95fac59f522fd9d06792126bd11.tar.gz
dotty-0e8f05d88bfef95fac59f522fd9d06792126bd11.tar.bz2
dotty-0e8f05d88bfef95fac59f522fd9d06792126bd11.zip
Merge pull request #1364 from dotty-staging/exhaustivity2
Implementation of exhaustivity and redundancy check
Diffstat (limited to 'tests/patmat/exhaustive_heuristics.scala')
-rw-r--r--tests/patmat/exhaustive_heuristics.scala26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/patmat/exhaustive_heuristics.scala b/tests/patmat/exhaustive_heuristics.scala
new file mode 100644
index 000000000..7d682f6aa
--- /dev/null
+++ b/tests/patmat/exhaustive_heuristics.scala
@@ -0,0 +1,26 @@
+// tests exhaustivity doesn't give warnings (due to its heuristic rewrites kicking in or it backing off)
+object Test {
+ // List() => Nil
+ List(1) match {
+ case List() =>
+ case x :: xs =>
+ }
+
+ // we don't look into guards
+ val turnOffChecks = true
+ List(1) match {
+ case _ if turnOffChecks =>
+ }
+
+ // we back off when there are any user-defined extractors
+ // in fact this is exhaustive, but we pretend we don't know since List's unapplySeq is not special to the compiler
+ // to compensate our ignorance, we back off
+ // well, in truth, we do rewrite List() to Nil, but otherwise we do nothing
+ // the full rewrite List(a, b) to a :: b :: Nil, for example is planned (but not sure it's a good idea)
+ List(true, false) match {
+ case List(_, _, _:_*) =>
+ case List(node, _:_*) =>
+ case Nil =>
+ }
+
+} \ No newline at end of file