bugs.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 493 行
SCALA
493 行
//############################################################################// Bugs//############################################################################// $Id: bugs.scala 13739 2008-01-18 20:50:06Z michelou $//############################################################################// Bug 98object Bug98Test { object MyCase { def name = "mycase" } def test(args: Array[String]) { println(MyCase.name) }}//############################################################################// Bug 120class Bug120A(x: Int) { println("A")}trait Bug120B { println("B")}class Bug120C(x: Int) extends Bug120A(Bug120Test.print("one", 1)) with Bug120B { println("C")}object Bug120Test { def print[A](str: String, res: A): A = { println(str); res } def test(args: Array[String]) { val c = new Bug120C(1) () }}//############################################################################// Bug 135object Bug135Test { import scala.collection.immutable.TreeMap def test(args: Array[String]) { val myMap:TreeMap[Int, String] = new TreeMap val map1 = myMap + Pair(42, "The answer") println(map1.get(42)) }}//############################################################################// Bug 142abstract 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 = {Console.println("ok"); null.asInstanceOf[Inner]}; }trait Bug142Bar2 { type Inner; def foo: Inner; foo; }trait Bug142Bar3 { class Inner; def foo: Inner = {Console.println("ok"); null}; }trait Bug142Bar4 { class Inner; def foo: Inner; foo; }object Bug142Test1 extends Bug142Foo1 with Bug142Bar1 { def test(args: Array[String]) {} }object Bug142Test2 extends Bug142Foo2 with Bug142Bar2 { def test(args: Array[String]) {} }object Bug142Test3 extends Bug142Foo3 with Bug142Bar3 { def test(args: Array[String]) {} }object Bug142Test4 extends Bug142Foo4 with Bug142Bar4 { def test(args: Array[String]) {} }object Bug142Test5 extends Bug142Foo1 with Bug142Bar1 { def test(args: Array[String]) {} }object Bug142Test6 extends Bug142Foo2 with Bug142Bar2 { def test(args: Array[String]) {} }object Bug142Test7 extends Bug142Foo3 with Bug142Bar3 { def test(args: Array[String]) {} }object Bug142Test8 extends Bug142Foo4 with Bug142Bar4 { def test(args: Array[String]) {} }object Bug142Test { def test(args:Array[String]) { Bug142Test1; Bug142Test2; Bug142Test3; Bug142Test4; Bug142Test5; Bug142Test6; Bug142Test7; Bug142Test8; () }}//############################################################################// Bug 166object Bug166Test { import scala.collection.mutable.HashMap def test(args: Array[String]) { val m: HashMap[String,String] = new HashMap[String, String] m.update("foo","bar") }}//############################################################################// Bug 167class Bug167Node(bar:Int) { val foo = { val bar = 1; bar }}object Bug167Test { def test(args: Array[String]) { if (new Bug167Node(0).foo != 1) println("bug 167"); }}//############################################################################// Bug 168class Bug168Foo { class Bar def foo = new Bar}object Bug168Test { def test(args: Array[String]) { (new Bug168Foo).foo () }}//############################################################################// Bug 174class 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 test(args: Array[String]) { (new Bug174Foo[Int]).inner.test () }}//############################################################################// Bug 176trait Bug176A { type T; def foo(x: T): Int; def bar: T; def test = foo(bar);}trait Bug176B { type S <: AnyRef; 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 test(args: Array[String]): Unit = { val x: Bug176A = new Bug176C; Console.println(x.test); }}//############################################################################// Bug 199class Bug199C { object o; }object Bug199Test { def test(args: Array[String]) = { (new Bug199C).o; () }}//############################################################################// Bug 213trait Bug213Foo { def testAll: Unit; def testAllRef: String;}class Bug213Bar extends Bug213Foo { def testAll = (().asInstanceOf[Nothing] : Nothing); def testAllRef = ("".asInstanceOf[Null] : Null);}object Bug213Test { def test(args: Array[String]): Unit = { val foo: Bug213Foo = new Bug213Bar; try { foo.testAll; } catch { case e: ClassCastException => Console.println("Cannot cast unit to Nothing"); } try { foo.testAllRef; } catch { case e: ClassCastException => Console.println("Cannot cast empty string to Null"); } () }}//############################################################################// Bug 217object Bug217Test { def foo[t](fun: Function0[t]): t = fun(); def bar(x: Int): Unit = { foo(() => 0); () } def test(args: Array[String]): Unit = bar(32);}//############################################################################// Bug 222object Bug222Test { def test(args:Array[String]): Unit = { val array: Array[String] = new Array(16); () }}//############################################################################// Bug 225case class Bug225C();object Bug225Test { def test(args: Array[String]): Unit = { val a = new Array[Array[Bug225C]](2); a(0) = new Array[Bug225C](2); a(0)(0) = new Bug225C(); }}//############################################################################// Bug 226object Bug226Test { def id[a](xs: Array[a]): Array[a] = xs; def test(args: Array[String]): Unit = { var xs = new Array[Int](1); class X { xs }; xs = id(xs); id(xs); () }}//############################################################################// Bug 233object Bug233Test { val b: Array[String] = null; def test(args: Array[String]): Unit = Console.println(b == null);}//############################################################################// Bug 250object Bug250Test { def test(args: Array[String]): Unit = { if (true) null; () }}//############################################################################// Bug 257object 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 test(args: Array[String]): Unit = { f(sayhello())(sayhi()) }}//############################################################################// Bug 266// version - Aabstract 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 test(args: Array[String]): Unit = { new I1; () }}// version - Babstract 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 { val a: Bug266BA1 = new Bug266BA1 with Bug266BB; def test(args: Array[String]): Unit = a.mkP.f(a.in);}// mainobject Bug266Test { def test(args: Array[String]): Unit = { Bug266ATest.test(args); Bug266BTest.test(args); }}//############################################################################// Bug 316class Bug316MyIterator extends Iterator[Int] { def hasNext = false; def next = 42;}object Bug316Test { def test(args: Array[String]): Unit = (new Bug316MyIterator) filter { x: Int => x == 1 };}//############################################################################// Bug 328object Bug328Test { def test0(f: Function1[Int,String]): Unit = (); def test(args: Array[String]): Unit = test0(args);}//############################################################################// Bug 396trait 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; Console.println("C"); } }}object Bug396Test extends Bug396B with Bug396C { class I2 extends super[Bug396B].I with super[Bug396C].I; def test(args: Array[String]): Unit = (new I2).run}//############################################################################// Bug 399object 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 test(args: Array[String]): Unit = { Console.println(f("a")); }}//############################################################################// Mainobject Test { var errors: Int = 0; def test(bug: Int, test: => Unit): Unit = { Console.println("<<< bug " + bug); try { test; } catch { case exception => { val curr: String = 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.test(args)); test(120, Bug120Test.test(args)); test(135, Bug135Test.test(args)); test(142, Bug142Test.test(args)); test(166, Bug166Test.test(args)); test(167, Bug167Test.test(args)); test(168, Bug168Test.test(args)); test(174, Bug174Test.test(args)); test(176, Bug176Test.test(args)); test(199, Bug199Test.test(args)); test(213, Bug213Test.test(args)); test(217, Bug217Test.test(args)); test(222, Bug222Test.test(args)); test(225, Bug225Test.test(args)); test(226, Bug226Test.test(args)); test(233, Bug233Test.test(args)); test(250, Bug250Test.test(args)); test(257, Bug257Test.test(args)); test(266, Bug266Test.test(args)); test(316, Bug316Test.test(args)); test(328, Bug328Test.test(args)); test(396, Bug396Test.test(args)); test(399, Bug399Test.test(args)); if (errors > 0) { Console.println; Console.println(errors + " error" + (if (errors > 1) "s" else "")); } }}//############################################################################
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?