//############################################################################
// Overloads
//############################################################################
//############################################################################
object Ops {
def - = 0;
def -(c: Char) = c;
def -(i: Int) = i;
def -- = 0;
def --(c: Char) = c;
def --(i: Int) = i;
}
object Funcs {
def foo = 0;
// def foo() = 1;
def foo(c: Char) = 2;
def foo(i: Int) = 3;
}
object M1 {
def f[A](x: A) = 11;
def f[A <: Ordered[A]](x: Ordered[A]) = 12;
}
object M2 {
def f[A <: Ordered[A]](x: Ordered[A]) = 21;
def f[A](x: A) = 22;
}
object overloads {
def check(what: String, actual: Any, expected: Any): Unit = {
val success: Boolean = actual == expected;
Console.print(if (success) "ok" else "KO");
var value: String = if (actual == null) "null" else actual.toString();
if (value == "\u0000") value = "\\u0000";
Console.print(": " + what + " = " + value);
if (!success) Console.print(" != " + expected);
Console.println;
Console.flush;
}
def - = 0;
def -(c: Char) = c;
def -(i: Int) = i;
def -- = 0;
def --(c: Char) = c;
def --(i: Int) = i;
def test: Unit = {
check("-('a')", -('a'), -97);
check("-(97)", -(97), -97);
check("Ops.-('a')", Ops.-('a'), 'a');
check("Ops.-(97)", Ops.-(97), 97);
check("--", --, 0);
check("--('a')", --('a'), 'a');
check("--(97)", --(97), 97);
check("Ops.--", Ops.--, 0);
check("Ops.--('a')", Ops.--('a'), 'a');
check("Ops.--(97)", Ops.--(97), 97);
check("Funcs.foo", Funcs.foo, 0);
// check("Funcs.foo()", Funcs.foo(), 1);
check("Funcs.foo('a')", Funcs.foo('a'), 2);
check("Funcs.foo(97)", Funcs.foo(97), 3);
val x = 3;
check("M1.f(" + x +")", M1.f(x), 11);
check("M2.f(" + x +")", M2.f(x), 22);
// val y = new scala.collection.mutable.Stack[Int];
// check("M1.f(" + y +")", M1.f(y), 12);
// check("M2.f(" + y +")", M2.f(y), 21);
}
}
//############################################################################
object Test {
def main(args: Array[String]): Unit = {
overloads.test;
}
}
//############################################################################