//############################################################################
// Bugs
//############################################################################
// $Id$
//############################################################################
// serves as an entry point with the MSIL backend
object TestMain {
def main(args: Array[String]): Unit = {
Test.main(args);
}
}
//############################################################################
// Bug 98
object Bug98Test {
object MyCase { def name = "mycase" };
def main(args: Array[String]) = {
Console.println(MyCase.name);
}
}
//############################################################################
// Bug 120
class Bug120A(x: Int) {
Console.println("A");
}
trait Bug120B {
System.out.println("B");
}
class Bug120C(x: Int)
extends Bug120A(Bug120Test.print("one", 1))
with Bug120B {
System.out.println("C");
}
object Bug120Test {
def print[A](str: String, res: A): A = {
Console.println(str); res
}
def main(args: Array[String]) = {
val c = new Bug120C(1);
}
}
//############################################################################
// Bug 135
object Bug135Test {
import scala.collection.immutable.TreeMap;
def main(args: Array[String]): Unit = {
val myMap:TreeMap[int,String] = new TreeMap;
val map1 = myMap + 42 -> "The answer";
Console.println(map1.get(42));
}
}
//############################################################################
// Bug 142
abstract class Bug142Foo1 { class Inner; def foo: Inner; foo; }
abstract class Bug142Foo2 { class Inner; def foo: Inner = {Console.println("ok"); null};}
abstract class Bug142Foo3 { type Inner; def foo: Inner; foo; }
abstract class Bug142Foo4 { type Inner; def foo: Inner = {Console.println("ok"); null.asInstanceOf[Inner]}; }
trait Bug142Bar1 { type Inner; def foo: Inner = {System.out.println("ok"); null.asInstanceOf[Inner]}; }
trait Bug142Bar2 { type Inner; def foo: Inner; foo; }
trait Bug142Bar3 { class Inner; def foo: Inner = {System.out.println("ok"); null}; }
trait Bug142Bar4 { class Inner; def foo: Inner; foo; }
object Bug142Test1 extends Bug142Foo1 with Bug142Bar1 {def main(args:Array[String]):Unit=();}
object Bug142Test2 extends Bug142Foo2 with Bug142Bar2 {def main(args:Array[String]):Unit=();}
object Bug142Test3 extends Bug142Foo3 with Bug142Bar3 {def main(args:Array[String]):Unit=();}
object Bug142Test4 extends Bug142Foo4 with Bug142Bar4 {def main(args:Array[String]):Unit=();}
object Bug142Test5 extends Bug142Foo1 with Bug142Bar1 {def main(args:Array[String]):Unit=();}
object Bug142Test6 extends Bug142Foo2 with Bug142Bar2 {def main(args:Array[String]):Unit=();}
object Bug142Test7 extends Bug142Foo3 with Bug142Bar3 {def main(args:Array[String]):Unit=();}
object Bug142Test8 extends Bug142Foo4 with Bug142Bar4 {def main(args:Array[String]):Unit=();}
object Bug142Test {
def main(args:Array[String]): Unit = {
Bug142Test1;
Bug142Test2;
Bug142Test3;
Bug142Test4;
Bug142Test5;
Bug142Test6;
Bug142Test7;
Bug142Test8;
()
}
}
//############################################################################
// Bug 166
object Bug166Test {
import scala.collection.mutable.HashMap ;
def main(args:Array[String]) = {
val m:HashMap[String,String] = new HashMap[String,String];
m.update("foo","bar");
}
}
//############################################################################
// Bug 167
class Bug167Node(bar:Int) {
val foo = {
val bar = 1;
bar
}
}
object Bug167Test {
def main(args: Array[String]): Unit = {
if (new Bug167Node(0).foo != 1) Console.println("bug 167");
}
}
//############################################################################
// Bug 168
class Bug168Foo {
class Bar;
def foo = new Bar;
}
object Bug168Test {
def main(args: Array[String]): Unit = {
(new Bug168Foo).foo;
()
}
}
//############################################################################
// Bug 174
class Bug174Foo[X] {
class Tree;
class Node extends Tree;
val inner:Inner = new SubInner;
trait Inner {
def test: Bug174Foo[X]#Tree ;
}
class SubInner extends Inner {
def test = new Node;
}
}
object Bug174Test {
def main(args: Array[String]): Unit = {
(new Bug174Foo[Int]).inner.test;
()
}
}
//############################################################################
// Bug 176
trait Bug176A {
type T;
def foo(x: T): Int;
def bar: T;
def test = foo(bar);
}
trait Bug176B {
type S <: Object;
type T = S;
def foo(x: S): Int;
def bar: S;
}
class Bug176C extends Bug176A with Bug176B {
class S;
def foo(x: S) = 1;
def bar = new S;
}
object Bug176Test {
def main(args: Array[String]): Unit = {
val x: Bug176A = new Bug176C;
Console.println(x.test);
}
}
//############################################################################
// Bug 199
class Bug199C { object o; }
object Bug199Test {
def main(args: Array[String]) = {
(new Bug199C).o; ()
}
}
//############################################################################
// Bug 213
trait Bug213Foo {
def testAll: Unit;
def testAllRef: String;
}
class Bug213Bar extends Bug213Foo {
def testAll = (().asInstanceOf[Nothing] : Nothing);
def testAllRef = ("".asInstanceOf[Null] : Null);
}
object Bug213Test {
def main(args: Array[String]): Unit = {
val foo: Bug213Foo = new Bug213Bar;
try {
foo.testAll;
} catch {
case e: java.lang.ClassCastException =>
Console.println("Cannot cast unit to Nothing");
}
try {
foo.testAllRef;
} catch {
case e: java.lang.ClassCastException =>
Console.println("Cannot cast empty string to Null");
}
()
}
}
//############################################################################
// Bug 217
object Bug217Test {
def foo[t](fun: Function0[t]): t = fun();
def bar(x: Int): Unit = {
foo(() => 0);
()
}
def main(args: Array[String]): Unit = bar(32);
}
//############################################################################
// Bug 222
object Bug222Test {
def main(args:Array[String]): Unit = {
val array: Array[String] = new Array(16);
()
}
}
//############################################################################
// Bug 225
case class Bug225C();
object Bug225Test {
def main(args: Array[String]): Unit = {
val a = new Array[Array[Bug225C]](2);
a(0) = new Array[Bug225C](2);
a(0)(0) = new Bug225C();
}
}
//############################################################################
// Bug 226
object Bug226Test {
def id[a](xs: Array[a]): Array[a] = xs;
def main(args: Array[String]): Unit = {
var xs = new Array[Int](1);
class X { xs };
xs = id(xs);
id(xs);
()
}
}
//############################################################################
// Bug 233
object Bug233Test {
val b: Array[String] = null;
def main(args: Array[String]): Unit =
Console.println(b == null);
}
//############################################################################
// Bug 250
object Bug250Test {
def main(args: Array[String]): Unit = {
if (true) null;
()
}
}
//############################################################################
// Bug 257
object Bug257Test {
def sayhello(): Unit = { Console.println("I should come 1st and 2nd"); };
def sayhi(): Unit = { Console.println("I should come last"); };
def f1(x: Unit): Unit = ();
def f2(x: Unit)(y: Unit): Unit = ();
def f(x: => Unit): Unit => Unit = {
f1(x);
f2(x);
}
def main(args: Array[String]): Unit = {
f(sayhello())(sayhi())
}
}
//############################################################################
// Bug 266
// version - A
abstract class Bug266AFoo {
type T >: Null <: AnyRef;
abstract class I0 { def f(x: T): Unit; f(null); }
}
object Bug266ATest extends Bug266AFoo {
type T = String;
class I1 extends I0 { def f(x: String): Unit = { Console.println("hello"); ();} }
def main(args: Array[String]): Unit = { new I1; () }
}
// version - B
abstract class Bug266BA {
type t;
abstract class P {
def f(x: t): unit;
}
}
abstract class Bug266BA1 extends Bug266BA {
def mkP: Bug266BA1.this.P;
val in: t;
}
trait Bug266BB extends Bug266BA {
type t = int;
class P1 extends Bug266BB.this.P {
def f(x: int): unit = Console.println(x + 1);
}
def mkP = new P1;
val in = 3;
}
object Bug266BTest extends Application {
val a: Bug266BA1 = new Bug266BA1 with Bug266BB;
a.mkP.f(a.in);
}
// main
object Bug266Test {
def main(args: Array[String]): Unit = {
Bug266ATest.main(args);
Bug266BTest.main(args);
}
}
//############################################################################
// Bug 316
class Bug316MyIterator extends Iterator[Int] {
def hasNext = false;
def next = 42;
}
object Bug316Test {
def main(args: Array[String]): Unit =
(new Bug316MyIterator) filter { x: Int => x == 1 };
}
//############################################################################
// Bug 328
object Bug328Test {
def test(f: Function1[Int,String]): Unit = ();
def main(args: Array[String]): Unit = test(args);
}
//############################################################################
// Bug 396
trait Bug396A {
class I {
def run = Console.println("A");
}
}
trait Bug396B extends Bug396A {
class I extends super.I {
override def run = { super.run; Console.println("B"); }
}
}
trait Bug396C extends Bug396A {
trait I extends super.I {
override def run = { super.run; System.out.println("C"); }
}
}
object Bug396Test extends Application with Bug396B with Bug396C {
class I2 extends super[Bug396B].I with super[Bug396C].I;
(new I2).run
}
//############################################################################
// Bug 399
object Bug399Test {
def f(x: String): String = {
trait C { def f: String = x; }
class D extends C;
trait F extends C;
class G extends D with F;
(new G).f
}
def main(args: Array[String]): Unit = {
Console.println(f("a"));
}
}
//############################################################################
// Main
object Test {
var errors: Int = 0;
def test(bug: Int, test: => Unit): Unit = {
Console.println("<<< bug " + bug);
try {
test;
} catch {
case exception => {
val curr: String = compat.Platform.currentThread.toString();
Console.print("Exception in thread \"" + curr + "\" " + exception);
Console.println;
errors = errors + 1;
}
}
Console.println(">>> bug " + bug);
Console.println;
}
def main(args: Array[String]): Unit = {
test( 98, Bug98Test.main(args));
test(120, Bug120Test.main(args));
test(135, Bug135Test.main(args));
test(142, Bug142Test.main(args));
test(166, Bug166Test.main(args));
test(167, Bug167Test.main(args));
test(168, Bug168Test.main(args));
test(174, Bug174Test.main(args));
test(176, Bug176Test.main(args));
test(199, Bug199Test.main(args));
test(213, Bug213Test.main(args));
test(217, Bug217Test.main(args));
test(222, Bug222Test.main(args));
test(225, Bug225Test.main(args));
test(226, Bug226Test.main(args));
test(233, Bug233Test.main(args));
test(250, Bug250Test.main(args));
test(257, Bug257Test.main(args));
test(266, Bug266Test.main(args));
test(316, Bug316Test.main(args));
test(328, Bug328Test.main(args));
test(396, Bug396Test.main(args));
test(399, Bug399Test.main(args));
if (errors > 0) {
Console.println;
Console.println(errors + " error" + (if (errors > 1) "s" else ""));
}
}
}
//############################################################################