diff options
author | Martin Odersky <odersky@gmail.com> | 2004-01-09 14:33:04 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-01-09 14:33:04 +0000 |
commit | 253a192ede3e994d6c832c124c7c02fb551d1006 (patch) | |
tree | c3fc90ddde9960bb4271ca758c58f92754dcc37b /test | |
parent | 57bf1138b8fdaafc9c4ea1e883aba222ec8117cc (diff) | |
download | scala-253a192ede3e994d6c832c124c7c02fb551d1006.tar.gz scala-253a192ede3e994d6c832c124c7c02fb551d1006.tar.bz2 scala-253a192ede3e994d6c832c124c7c02fb551d1006.zip |
*** empty log message ***
Diffstat (limited to 'test')
28 files changed, 422 insertions, 0 deletions
diff --git a/test/files/neg/182.check b/test/files/neg/182.check new file mode 100644 index 0000000000..d5370cd43b --- /dev/null +++ b/test/files/neg/182.check @@ -0,0 +1,5 @@ +bug182.scala:2: error overriding class Foo.I in class Foo; + class Bar.I in class Bar cannot override a class +class Bar extends Foo { class I; } + ^ +one error found diff --git a/test/files/neg/bug144.check b/test/files/neg/bug144.check new file mode 100644 index 0000000000..3342654b90 --- /dev/null +++ b/test/files/neg/bug144.check @@ -0,0 +1,4 @@ +bug144.scala:2: trait I is inherited twice +class C with I with I; + ^ +one error found diff --git a/test/files/neg/bug144.scala b/test/files/neg/bug144.scala new file mode 100644 index 0000000000..5702ed7224 --- /dev/null +++ b/test/files/neg/bug144.scala @@ -0,0 +1,2 @@ +trait I; +class C with I with I; diff --git a/test/files/neg/bug152.check b/test/files/neg/bug152.check new file mode 100644 index 0000000000..fddfbfa879 --- /dev/null +++ b/test/files/neg/bug152.check @@ -0,0 +1,4 @@ +bug152.scala:5: type foo.type escapes its defining scope as part of scala.Object { def a: foo.T } +class Bar(foo: Foo) { + ^ +one error found diff --git a/test/files/neg/bug152.scala b/test/files/neg/bug152.scala new file mode 100644 index 0000000000..c35fe00012 --- /dev/null +++ b/test/files/neg/bug152.scala @@ -0,0 +1,7 @@ +abstract class Foo { + type T; +} + +class Bar(foo: Foo) { + def a: foo.T = a; +} diff --git a/test/files/neg/bug169.check b/test/files/neg/bug169.check new file mode 100644 index 0000000000..4bd0c592fc --- /dev/null +++ b/test/files/neg/bug169.check @@ -0,0 +1,7 @@ +bug169.scala:8: not found: type TIMEOUT + case TIMEOUT() => { + ^ +bug169.scala:9: value ! is not a member of java.lang.Process + Child ! 'foo; + ^ +two errors found diff --git a/test/files/neg/bug169.scala b/test/files/neg/bug169.scala new file mode 100644 index 0000000000..28f1853a68 --- /dev/null +++ b/test/files/neg/bug169.scala @@ -0,0 +1,14 @@ +import scala.concurrent.Process._; + +class D() { + def start_listener(Child:Process) = { + var running = true; + while (running) { + receiveWithin(0) { + case TIMEOUT() => { + Child ! 'foo; + } + } + } + } +} diff --git a/test/files/neg/bug228.check b/test/files/neg/bug228.check new file mode 100644 index 0000000000..0dc891bced --- /dev/null +++ b/test/files/neg/bug228.check @@ -0,0 +1,4 @@ +/home/odersky/scala/test/pos/bug228.scala:11: constructor java.lang.reflect.AccessibleObject cannot be accessed in Foo + val o = new AccessibleObject; + ^ +one error found diff --git a/test/files/neg/bug228.scala b/test/files/neg/bug228.scala new file mode 100644 index 0000000000..55e4a8f818 --- /dev/null +++ b/test/files/neg/bug228.scala @@ -0,0 +1,13 @@ +import java.lang.reflect.AccessibleObject; + +class Test extends AccessibleObject { + + val o = new AccessibleObject; + +} + +class Foo { + + val o = new AccessibleObject; + +} diff --git a/test/files/neg/dep.check b/test/files/neg/dep.check new file mode 100644 index 0000000000..f6a2361121 --- /dev/null +++ b/test/files/neg/dep.check @@ -0,0 +1,4 @@ +dep.scala:5: type x.type escapes its defining scope as part of x.t + def foo(x: C, y: x.t): Object = null; + ^ +one error found diff --git a/test/files/neg/dep.scala b/test/files/neg/dep.scala new file mode 100644 index 0000000000..83c005b860 --- /dev/null +++ b/test/files/neg/dep.scala @@ -0,0 +1,6 @@ +object Test { + abstract class C { + type t; + } + def foo(x: C, y: x.t): Object = null; +}
\ No newline at end of file diff --git a/test/files/pos/MailBox.scala b/test/files/pos/MailBox.scala new file mode 100644 index 0000000000..c44da9fdfa --- /dev/null +++ b/test/files/pos/MailBox.scala @@ -0,0 +1,68 @@ +package test; + +import scala.concurrent._; + +class MailBox with Monitor { + private abstract class Receiver { + def isDefined(msg: Any): boolean; + var msg: Any = null; + } + + private val sent = new LinkedList[Any]; + private var lastSent = sent; + private val receivers = new LinkedList[Receiver]; + private var lastReceiver = receivers; + + def send(msg: Any): unit = synchronized { + var r = receivers, r1 = r.next; + while (r1 != null && !r1.elem.isDefined(msg)) { + r = r1; r1 = r1.next; + } + if (r1 != null) { + r.next = r1.next; r1.elem.msg = msg; r1.elem.notify; + } else { + lastSent = lastSent.insert(msg); + } + } + + def receive[a](f: PartialFunction[Any, a]): a = { + val msg: Any = synchronized { + var s = sent, s1 = s.next; + while (s1 != null && !f.isDefinedAt(s1.elem)) { + s = s1; s1 = s1.next + } + if (s1 != null) { + s.next = s1.next; s1.elem + } else { + val r = lastReceiver.insert(new Receiver { + def isDefined(msg: Any) = f.isDefinedAt(msg); + }); + lastReceiver = r; + r.elem.wait(); + r.elem.msg + } + } + f(msg) + } + + def receiveWithin[a](msec: long)(f: PartialFunction[Any, a]): a = { + val msg: Any = synchronized { + var s = sent, s1 = s.next; + while (s1 != null && !f.isDefinedAt(s1.elem)) { + s = s1; s1 = s1.next ; + } + if (s1 != null) { + s.next = s1.next; s1.elem + } else { + val r = lastReceiver.insert(new Receiver { + def isDefined(msg: Any) = f.isDefinedAt(msg); + }); + lastReceiver = r; + r.elem.wait(msec); + if (r.elem.msg == null) r.elem.msg = TIMEOUT; + r.elem.msg + } + } + f(msg) + } +} diff --git a/test/files/pos/abstract-data.scala b/test/files/pos/abstract-data.scala new file mode 100644 index 0000000000..f3d4a966bb --- /dev/null +++ b/test/files/pos/abstract-data.scala @@ -0,0 +1,55 @@ +package expAbstractData; + +/** A base class consisting of + * - a root trait (i.e. abstract class) `Exp' with an `eval' function + * - an abstract type `exp' bounded by `Exp' + * - a concrete instance class `Num' of `Exp' for numeric literals + */ +trait Base { + type exp <: Exp; + + trait Exp { + def eval: int + } + class Num(v: int): exp extends Exp { + val value = v; + def eval = value + } +} + +object testBase extends Base with Executable { + type exp = Exp; + val term = new Num(2); + System.out.println(term.eval); +} + +/** Data extension: An extension of `Base' with `Plus' expressions + */ +trait BasePlus extends Base { + class Plus(l: exp, r: exp): exp extends Exp { + val left = l; + val right = r; + def eval = left.eval + right.eval + } +} + +/** Operation extension: An extension of `Base' with 'show' methods. + */ +trait Show extends Base { + type exp <: Exp1; + + trait Exp1 extends Exp { + def show: String; + } + class Num1(v: int): exp extends Num(v) with Exp1 { + def show = value.toString(); + } +} + +/** Operation extension: An extension of `BasePlus' with 'show' methods. + */ +trait ShowPlus extends BasePlus with Show { + class Plus1(l: exp, r: exp): exp extends Plus(l, r) with Exp1 { + def show = left.show + " + " + right.show + } +}
\ No newline at end of file diff --git a/test/files/pos/bug245.scala b/test/files/pos/bug245.scala new file mode 100644 index 0000000000..3e5dee820b --- /dev/null +++ b/test/files/pos/bug245.scala @@ -0,0 +1,18 @@ +class Value { + def coerce: Int = 0; +} + +object Test { + + def foo(i: Int): Int = 0; + + def fun0 : Value = null; + def fun0(i: Int ): Value = null; + + def fun1(i: Int ): Value = null; + def fun1(l: Long): Value = null; + + foo(fun0 ); + foo(fun1(new Value)); + +} diff --git a/test/neg/182.check b/test/neg/182.check new file mode 100644 index 0000000000..d5370cd43b --- /dev/null +++ b/test/neg/182.check @@ -0,0 +1,5 @@ +bug182.scala:2: error overriding class Foo.I in class Foo; + class Bar.I in class Bar cannot override a class +class Bar extends Foo { class I; } + ^ +one error found diff --git a/test/neg/bug144.check b/test/neg/bug144.check new file mode 100644 index 0000000000..3342654b90 --- /dev/null +++ b/test/neg/bug144.check @@ -0,0 +1,4 @@ +bug144.scala:2: trait I is inherited twice +class C with I with I; + ^ +one error found diff --git a/test/neg/bug144.scala b/test/neg/bug144.scala new file mode 100644 index 0000000000..5702ed7224 --- /dev/null +++ b/test/neg/bug144.scala @@ -0,0 +1,2 @@ +trait I; +class C with I with I; diff --git a/test/neg/bug152.check b/test/neg/bug152.check new file mode 100644 index 0000000000..fddfbfa879 --- /dev/null +++ b/test/neg/bug152.check @@ -0,0 +1,4 @@ +bug152.scala:5: type foo.type escapes its defining scope as part of scala.Object { def a: foo.T } +class Bar(foo: Foo) { + ^ +one error found diff --git a/test/neg/bug152.scala b/test/neg/bug152.scala new file mode 100644 index 0000000000..c35fe00012 --- /dev/null +++ b/test/neg/bug152.scala @@ -0,0 +1,7 @@ +abstract class Foo { + type T; +} + +class Bar(foo: Foo) { + def a: foo.T = a; +} diff --git a/test/neg/bug169.check b/test/neg/bug169.check new file mode 100644 index 0000000000..4bd0c592fc --- /dev/null +++ b/test/neg/bug169.check @@ -0,0 +1,7 @@ +bug169.scala:8: not found: type TIMEOUT + case TIMEOUT() => { + ^ +bug169.scala:9: value ! is not a member of java.lang.Process + Child ! 'foo; + ^ +two errors found diff --git a/test/neg/bug169.scala b/test/neg/bug169.scala new file mode 100644 index 0000000000..28f1853a68 --- /dev/null +++ b/test/neg/bug169.scala @@ -0,0 +1,14 @@ +import scala.concurrent.Process._; + +class D() { + def start_listener(Child:Process) = { + var running = true; + while (running) { + receiveWithin(0) { + case TIMEOUT() => { + Child ! 'foo; + } + } + } + } +} diff --git a/test/neg/bug228.check b/test/neg/bug228.check new file mode 100644 index 0000000000..0dc891bced --- /dev/null +++ b/test/neg/bug228.check @@ -0,0 +1,4 @@ +/home/odersky/scala/test/pos/bug228.scala:11: constructor java.lang.reflect.AccessibleObject cannot be accessed in Foo + val o = new AccessibleObject; + ^ +one error found diff --git a/test/neg/bug228.scala b/test/neg/bug228.scala new file mode 100644 index 0000000000..55e4a8f818 --- /dev/null +++ b/test/neg/bug228.scala @@ -0,0 +1,13 @@ +import java.lang.reflect.AccessibleObject; + +class Test extends AccessibleObject { + + val o = new AccessibleObject; + +} + +class Foo { + + val o = new AccessibleObject; + +} diff --git a/test/neg/dep.check b/test/neg/dep.check new file mode 100644 index 0000000000..f6a2361121 --- /dev/null +++ b/test/neg/dep.check @@ -0,0 +1,4 @@ +dep.scala:5: type x.type escapes its defining scope as part of x.t + def foo(x: C, y: x.t): Object = null; + ^ +one error found diff --git a/test/neg/dep.scala b/test/neg/dep.scala new file mode 100644 index 0000000000..83c005b860 --- /dev/null +++ b/test/neg/dep.scala @@ -0,0 +1,6 @@ +object Test { + abstract class C { + type t; + } + def foo(x: C, y: x.t): Object = null; +}
\ No newline at end of file diff --git a/test/pos/MailBox.scala b/test/pos/MailBox.scala new file mode 100644 index 0000000000..c44da9fdfa --- /dev/null +++ b/test/pos/MailBox.scala @@ -0,0 +1,68 @@ +package test; + +import scala.concurrent._; + +class MailBox with Monitor { + private abstract class Receiver { + def isDefined(msg: Any): boolean; + var msg: Any = null; + } + + private val sent = new LinkedList[Any]; + private var lastSent = sent; + private val receivers = new LinkedList[Receiver]; + private var lastReceiver = receivers; + + def send(msg: Any): unit = synchronized { + var r = receivers, r1 = r.next; + while (r1 != null && !r1.elem.isDefined(msg)) { + r = r1; r1 = r1.next; + } + if (r1 != null) { + r.next = r1.next; r1.elem.msg = msg; r1.elem.notify; + } else { + lastSent = lastSent.insert(msg); + } + } + + def receive[a](f: PartialFunction[Any, a]): a = { + val msg: Any = synchronized { + var s = sent, s1 = s.next; + while (s1 != null && !f.isDefinedAt(s1.elem)) { + s = s1; s1 = s1.next + } + if (s1 != null) { + s.next = s1.next; s1.elem + } else { + val r = lastReceiver.insert(new Receiver { + def isDefined(msg: Any) = f.isDefinedAt(msg); + }); + lastReceiver = r; + r.elem.wait(); + r.elem.msg + } + } + f(msg) + } + + def receiveWithin[a](msec: long)(f: PartialFunction[Any, a]): a = { + val msg: Any = synchronized { + var s = sent, s1 = s.next; + while (s1 != null && !f.isDefinedAt(s1.elem)) { + s = s1; s1 = s1.next ; + } + if (s1 != null) { + s.next = s1.next; s1.elem + } else { + val r = lastReceiver.insert(new Receiver { + def isDefined(msg: Any) = f.isDefinedAt(msg); + }); + lastReceiver = r; + r.elem.wait(msec); + if (r.elem.msg == null) r.elem.msg = TIMEOUT; + r.elem.msg + } + } + f(msg) + } +} diff --git a/test/pos/abstract-data.scala b/test/pos/abstract-data.scala new file mode 100644 index 0000000000..f3d4a966bb --- /dev/null +++ b/test/pos/abstract-data.scala @@ -0,0 +1,55 @@ +package expAbstractData; + +/** A base class consisting of + * - a root trait (i.e. abstract class) `Exp' with an `eval' function + * - an abstract type `exp' bounded by `Exp' + * - a concrete instance class `Num' of `Exp' for numeric literals + */ +trait Base { + type exp <: Exp; + + trait Exp { + def eval: int + } + class Num(v: int): exp extends Exp { + val value = v; + def eval = value + } +} + +object testBase extends Base with Executable { + type exp = Exp; + val term = new Num(2); + System.out.println(term.eval); +} + +/** Data extension: An extension of `Base' with `Plus' expressions + */ +trait BasePlus extends Base { + class Plus(l: exp, r: exp): exp extends Exp { + val left = l; + val right = r; + def eval = left.eval + right.eval + } +} + +/** Operation extension: An extension of `Base' with 'show' methods. + */ +trait Show extends Base { + type exp <: Exp1; + + trait Exp1 extends Exp { + def show: String; + } + class Num1(v: int): exp extends Num(v) with Exp1 { + def show = value.toString(); + } +} + +/** Operation extension: An extension of `BasePlus' with 'show' methods. + */ +trait ShowPlus extends BasePlus with Show { + class Plus1(l: exp, r: exp): exp extends Plus(l, r) with Exp1 { + def show = left.show + " + " + right.show + } +}
\ No newline at end of file diff --git a/test/pos/bug245.scala b/test/pos/bug245.scala new file mode 100644 index 0000000000..3e5dee820b --- /dev/null +++ b/test/pos/bug245.scala @@ -0,0 +1,18 @@ +class Value { + def coerce: Int = 0; +} + +object Test { + + def foo(i: Int): Int = 0; + + def fun0 : Value = null; + def fun0(i: Int ): Value = null; + + def fun1(i: Int ): Value = null; + def fun1(l: Long): Value = null; + + foo(fun0 ); + foo(fun1(new Value)); + +} |