summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/files/neg/checksensible.check125
-rw-r--r--test/files/neg/checksensible.flags1
-rw-r--r--test/files/neg/checksensible.scala96
3 files changed, 160 insertions, 62 deletions
diff --git a/test/files/neg/checksensible.check b/test/files/neg/checksensible.check
index 9d0487f9a2..b36b11bf98 100644
--- a/test/files/neg/checksensible.check
+++ b/test/files/neg/checksensible.check
@@ -1,44 +1,91 @@
-checksensible.scala:1: error: class Test needs to be abstract, since method isabstract is not defined
-class Test {
+checksensible.scala:13: error: comparing a fresh object using `eq' will always yield false
+ (new AnyRef) eq (new AnyRef)
+ ^
+checksensible.scala:14: error: comparing a fresh object using `ne' will always yield true
+ (new AnyRef) ne (new AnyRef)
+ ^
+checksensible.scala:15: error: comparing a fresh object using `eq' will always yield false
+ Shmoopie eq (new AnyRef)
+ ^
+checksensible.scala:16: error: comparing a fresh object using `eq' will always yield false
+ (Shmoopie: AnyRef) eq (new AnyRef)
+ ^
+checksensible.scala:17: error: comparing a fresh object using `eq' will always yield false
+ (new AnyRef) eq Shmoopie
+ ^
+checksensible.scala:18: error: comparing a fresh object using `eq' will always yield false
+ (new AnyRef) eq null
+ ^
+checksensible.scala:19: error: comparing a fresh object using `eq' will always yield false
+ null eq new AnyRef
+ ^
+checksensible.scala:26: error: comparing values of types Unit and Int using `==' will always yield false
+ (c = 1) == 0
+ ^
+checksensible.scala:27: error: comparing values of types Int and Unit using `==' will always yield false
+ 0 == (c = 1)
+ ^
+checksensible.scala:29: error: comparing values of types Int and java.lang.String using `==' will always yield false
+ 1 == "abc"
+ ^
+checksensible.scala:32: error: comparing a fresh object using `==' will always yield false
+ new AnyRef == 1
+ ^
+checksensible.scala:33: error: comparing values of types Int and java.lang.Object using `==' will always yield false
+ 1 == new AnyRef
+ ^
+checksensible.scala:35: error: comparing values of types Int and Boolean using `!=' will always yield true
+ 1 != true
+ ^
+checksensible.scala:36: error: comparing values of types Unit and Boolean using `==' will always yield false
+ () == true
+ ^
+checksensible.scala:37: error: comparing values of types Unit and Unit using `==' will always yield true
+ () == ()
+ ^
+checksensible.scala:38: error: comparing values of types Unit and Unit using `==' will always yield true
+ () == println
+ ^
+checksensible.scala:40: error: comparing values of types Int and Unit using `!=' will always yield true
+ (1 != println)
+ ^
+checksensible.scala:41: error: comparing values of types Int and Symbol using `!=' will always yield true
+ (1 != 'sym)
+ ^
+checksensible.scala:47: error: comparing a fresh object using `==' will always yield false
+ ((x: Int) => x + 1) == null
+ ^
+checksensible.scala:48: error: comparing values of types object Bep and (Int) => Int using `==' will always yield false
+ Bep == ((_: Int) + 1)
^
-checksensible.scala:3: warning: comparing values of types Unit and Int using `==' will always yield false
- println((c = 1) == 0)
+checksensible.scala:50: error: comparing a fresh object using `==' will always yield false
+ new Object == new Object
+ ^
+checksensible.scala:51: error: comparing a fresh object using `==' will always yield false
+ new Object == "abc"
+ ^
+checksensible.scala:52: error: comparing a fresh object using `!=' will always yield true
+ new Exception() != new Exception()
^
-checksensible.scala:5: warning: comparing values of types Int and java.lang.String using `==' will always yield false
- println(1 == "abc")
- ^
-checksensible.scala:6: warning: comparing values of types Int and Boolean using `!=' will always yield true
- println(1 != true)
- ^
-checksensible.scala:8: warning: comparing a fresh object using `==' will always yield false
- println(((x: Int) => x + 1) == null)
- ^
-checksensible.scala:9: warning: comparing a fresh object using `==' will always yield false
- println(new Object == new Object)
- ^
-checksensible.scala:10: warning: comparing a fresh object using `!=' will always yield true
- println(new Exception() != new Exception())
- ^
-checksensible.scala:13: warning: comparing values of types Int and Null using `==' will always yield false
- if (foo.length == null) // == 0 makes more sense, but still
+checksensible.scala:55: error: comparing values of types Int and Null using `==' will always yield false
+ if (foo.length == null) "plante" else "plante pas"
^
-checksensible.scala:22: warning: comparing values of types Unit and Int using `!=' will always yield true
+checksensible.scala:60: error: comparing values of types Bip and Bop using `==' will always yield false
+ (x1 == x2)
+ ^
+checksensible.scala:71: error: comparing values of types EqEqRefTest.this.C3 and EqEqRefTest.this.Z1 using `==' will always yield false
+ c3 == z1
+ ^
+checksensible.scala:72: error: comparing values of types EqEqRefTest.this.Z1 and EqEqRefTest.this.C3 using `==' will always yield false
+ z1 == c3
+ ^
+checksensible.scala:73: error: comparing values of types EqEqRefTest.this.Z1 and EqEqRefTest.this.C3 using `!=' will always yield true
+ z1 != c3
+ ^
+checksensible.scala:74: error: comparing values of types EqEqRefTest.this.C3 and java.lang.String using `!=' will always yield true
+ c3 != "abc"
+ ^
+checksensible.scala:83: error: comparing values of types Unit and Int using `!=' will always yield true
while ((c = in.read) != -1)
^
-checksensible.scala:28: warning: comparing values of types Unit and Boolean using `==' will always yield false
- println({} == true)
- ^
-checksensible.scala:30: warning: comparing a fresh object using `==' will always yield false
- println(new Object == 1)
- ^
-checksensible.scala:31: warning: comparing values of types Int and java.lang.Object using `==' will always yield false
- println(1 == (new Object))
- ^
-checksensible.scala:35: warning: comparing values of types Int and Unit using `!=' will always yield true
- println(1 != println)
- ^
-checksensible.scala:36: warning: comparing values of types Int and Symbol using `!=' will always yield true
- println(1 != 'sym)
- ^
-13 warnings found
-one error found
+30 errors found
diff --git a/test/files/neg/checksensible.flags b/test/files/neg/checksensible.flags
new file mode 100644
index 0000000000..e8fb65d50c
--- /dev/null
+++ b/test/files/neg/checksensible.flags
@@ -0,0 +1 @@
+-Xfatal-warnings \ No newline at end of file
diff --git a/test/files/neg/checksensible.scala b/test/files/neg/checksensible.scala
index 092c08592f..f67e9ea57f 100644
--- a/test/files/neg/checksensible.scala
+++ b/test/files/neg/checksensible.scala
@@ -1,38 +1,88 @@
-class Test {
+final class Bip { def <=(other: Bop) = true }
+final class Bop { }
+object Bep { }
+
+final class Zing {
+ def !=(other: Zing) = false
+}
+
+// 7 warnings
+class RefEqTest {
+ object Shmoopie
+
+ (new AnyRef) eq (new AnyRef)
+ (new AnyRef) ne (new AnyRef)
+ Shmoopie eq (new AnyRef)
+ (Shmoopie: AnyRef) eq (new AnyRef)
+ (new AnyRef) eq Shmoopie
+ (new AnyRef) eq null
+ null eq new AnyRef
+}
+
+// 11 warnings
+class EqEqValTest {
var c = 0
- println((c = 1) == 0)
- println(1 == "abc")
- println(1 != true)
+ (c = 1) == 0
+ 0 == (c = 1)
+
+ 1 == "abc"
+ "abc" == 1 // doesn't warn since String defines an equals method
+
+ new AnyRef == 1
+ 1 == new AnyRef
+
+ 1 != true
+ () == true
+ () == ()
+ () == println
+
+ (1 != println)
+ (1 != 'sym)
+}
- println(((x: Int) => x + 1) == null)
- println(new Object == new Object)
- println(new Exception() != new Exception())
+// 12 warnings
+class EqEqRefTest {
+ val ref = new Bop
+ ((x: Int) => x + 1) == null
+ Bep == ((_: Int) + 1)
+
+ new Object == new Object
+ new Object == "abc"
+ new Exception() != new Exception()
val foo: Array[String] = Array("1","2","3")
- if (foo.length == null) // == 0 makes more sense, but still
- println("plante") // this code leads to runtime crash
- else
- println("plante pas")
+ if (foo.length == null) "plante" else "plante pas"
+
+ // final classes with default equals
+ val x1 = new Bip
+ val x2 = new Bop
+ (x1 == x2)
+
+ class C1 { }
+ class C2 extends C1 { }
+ final class Z1 extends C2 { }
+ final class C3 extends C2 { def !=(other: Z1) = false }
+ val z1 = new Z1
+ val c3 = new C3
+
+ // all but c3 != z1 should warn
+ c3 != z1
+ c3 == z1
+ z1 == c3
+ z1 != c3
+ c3 != "abc"
+
+ // non-warners
+ (null: AnyRef) == (null: AnyRef)
+ (x1 <= x2)
def main(args: Array[String]) = {
val in = new java.io.FileInputStream(args(0))
-
var c = 0
while ((c = in.read) != -1)
print(c.toChar)
in.close
}
-
- println({} == true)
- println("hello" == 2)
- println(new Object == 1)
- println(1 == (new Object))
-
- def isabstract: Int
-
- println(1 != println)
- println(1 != 'sym)
-
}