diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-01-28 17:19:49 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-18 20:36:54 -0800 |
commit | 971358bf0a90d7bbb6af7cc34eb282e9ade66460 (patch) | |
tree | e59545c508bf2c46c61dd226abd54ddc1b531833 /test/files/run | |
parent | 3dbcb1b9d4daa5cba98747bbc66f898ba0f864fd (diff) | |
download | scala-971358bf0a90d7bbb6af7cc34eb282e9ade66460.tar.gz scala-971358bf0a90d7bbb6af7cc34eb282e9ade66460.tar.bz2 scala-971358bf0a90d7bbb6af7cc34eb282e9ade66460.zip |
SI-4577 singleton type pattern test should use `eq`, not `==`
I find it hard to imagine anyone is relying on `case x: foo.type =>`
erroneously being compiled to `foo == x` instead of the spec'ed `foo eq x`,
so let's finally fix this.
Diffstat (limited to 'test/files/run')
-rw-r--r-- | test/files/run/t4577.scala | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/files/run/t4577.scala b/test/files/run/t4577.scala new file mode 100644 index 0000000000..b08100d3ea --- /dev/null +++ b/test/files/run/t4577.scala @@ -0,0 +1,38 @@ +object Test { + val bippy = new Symbol("bippy") + val imposter = new Symbol("bippy") + val notBippy = new Symbol("not-bippy") + val syms = List(bippy, imposter, notBippy) + + // the equals method should only be used for case `bippy`, + // for the singleton type pattern, case _: bippy.type, the spec mandates `bippy eq _` as the test + class Symbol(val name: String) { + override def equals(other: Any) = other match { + case x: Symbol => name == x.name + case _ => false + } + override def toString = name + } + + // TODO: test bytecode equality for f and fDirect (and g and gDirect), + // for now the optimizer doesn't quite get from `f` to `fDirect` + def f(s: Symbol) = s match { + case _: bippy.type => true + case _ => false + } + def fDirect(s: Symbol) = bippy eq s + + def g(s: Symbol) = s match { + case _: bippy.type => 1 + case `bippy` => 2 + case _ => 3 + } + def gDirect(s: Symbol) = if (bippy eq s) 1 else if (bippy == s) 2 else 3 + + def main(args: Array[String]): Unit = { + // `syms map f` should be: true false false + assert(syms forall (s => f(s) == fDirect(s))) + // `syms map g` should be: 1 2 3 + assert(syms forall (s => g(s) == gDirect(s))) + } +}
\ No newline at end of file |