import kernel
+redef class Discrete
+ fun foo(o: OTHER): Bool is abstract
+end
+
+redef class Int
+ redef fun foo(o) do return self < o
+end
+
+redef class Char
+ redef fun foo(o) do return self < o
+end
+
var d1: Discrete = 1
var d2: Discrete = 2
var c1: Discrete = 'a'
var c2: Discrete = 'b'
-(1<2).output
-(d1<2).output
-#alt1#(c1<2).output
-#alt2#(1<d2).output
-(d1<d2).output
-#alt3#(c1<d2).output
-#alt4#(1<c2).output
-#alt5#(d1<c2).output
-(c1<c2).output
+1.foo(2).output
+d1.foo(2).output
+#alt1#c1.foo(2).output
+#alt2#1.foo(d2).output
+d1.foo(d2).output
+#alt3#c1.foo(d2).output
+#alt4#1.foo(c2).output
+#alt5#d1.foo(c2).output
+c1.foo(c2).output
-Runtime error: Cast failed. Expected `OTHER`, got `Int` (../lib/standard/kernel.nit:433)
+Runtime error: Cast failed. Expected `OTHER`, got `Int` (alt/base_covar_int_alt1.nit:26)
true
true
-alt/base_covar_int_alt2.nit:24,4--5: Type error: expected Int, got Discrete
+alt/base_covar_int_alt2.nit:36,7--8: Type error: expected Int, got Discrete
-Runtime error: Cast failed. Expected `OTHER`, got `Int` (../lib/standard/kernel.nit:433)
+Runtime error: Cast failed. Expected `OTHER`, got `Int` (alt/base_covar_int_alt3.nit:26)
true
true
true
-alt/base_covar_int_alt4.nit:27,4--5: Type error: expected Int, got Discrete
+alt/base_covar_int_alt4.nit:39,7--8: Type error: expected Int, got Discrete
-Runtime error: Cast failed. Expected `OTHER`, got `Char` (../lib/standard/kernel.nit:257)
+Runtime error: Cast failed. Expected `OTHER`, got `Char` (alt/base_covar_int_alt5.nit:22)
true
true
true
--- /dev/null
+true
+true
+false
+true
+true
--- /dev/null
+true
+true
+true
+false
+true
--- /dev/null
+true
+true
+true
+true
+true
--- /dev/null
+true
+true
+Cast error: Cannot cast Int to Char.
--- /dev/null
+true
+true
+true
+false
+true
--- /dev/null
+true
+true
+true
+false
+true
--- /dev/null
+true
+true
+false
+true
+true
--- /dev/null
+true
+true
+true
+false
+true
--- /dev/null
+true
+true
+true
+true
+true