Testing for type A
A-virtual           A.SayHi()='Hi '
A-interface   Greeter.SayHi()='Hi '
A-virtual           A.SayHiTwice()='Hi Hi '
A-interface   Greeter.SayHiTwice()='Hi Hi '
End testing for type A
Testing for type B
B-virtual           B.SayHi()='Hello '
B-interface   Greeter.SayHi()='Hello '
B-interface  Greeter2.SayHi()='Hello '
B-virtual           B.SayHiTwice()='I say Hello Hello '
B-interface   Greeter.SayHiTwice()='I say Hello Hello '
B-interface  Greeter2.SayHiTwice()='I say Hello Hello '
End testing for type B
Testing for type C
C-virtual           A.SayHi()='Hi '
C-virtual           C.SayHi()='Hi '
C-interface   Greeter.SayHi()='Hi '
C-virtual           A.SayHiTwice()='You don't control me'
C-virtual           C.SayHiTwice()='You don't control me'
C-interface   Greeter.SayHiTwice()='You don't control me'
End testing for type C
Testing for type D
D-virtual           D.GetName()='Alex '
D-interface  Greeter3.GetName()='Alex '
D-virtual           D.SayHi()='Hello Alex '
D-interface   Greeter.SayHi()='Hello Alex '
D-interface  Greeter3.SayHi()='Hello Alex '
D-virtual           D.SayHiTwice()='Hello Alex Hello Alex '
D-interface   Greeter.SayHiTwice()='Hello Alex Hello Alex '
D-interface  Greeter3.SayHiTwice()='Hello Alex Hello Alex '
End testing for type D
Testing for type E
E-virtual           A.SayHi()='Hi2 '
E-virtual           E.SayHi()='Hi2 '
E-interface   Greeter.SayHi()='Hi2 '
E-interface  Greeter2.SayHi()='Hi2 '
E-virtual           A.SayHiTwice()='I say Hi2 Hi2 '
E-virtual           E.SayHiTwice()='I say Hi2 Hi2 '
E-interface   Greeter.SayHiTwice()='I say Hi2 Hi2 '
E-interface  Greeter2.SayHiTwice()='I say Hi2 Hi2 '
End testing for type E
Testing for type F
F-interface Attendant.GetPlace()='android'
F-virtual           F.GetPlace()='android'
F-virtual           A.SayHi()='Hi '
F-interface Attendant.SayHi()='Hi '
F-virtual           F.SayHi()='Hi '
F-interface   Greeter.SayHi()='Hi '
F-virtual           A.SayHiTwice()='We can override both interfaces'
F-interface Attendant.SayHiTwice()='We can override both interfaces'
F-virtual           F.SayHiTwice()='We can override both interfaces'
F-interface   Greeter.SayHiTwice()='We can override both interfaces'
End testing for type F
Testing for type G
G-interface Attendant.GetPlace()='android'
G-virtual           G.GetPlace()='android'
G-interface Attendant.SayHi()='welcome to android'
G-virtual           G.SayHi()='welcome to android'
G-interface Attendant.SayHiTwice()='welcome to androidwelcome to android'
G-virtual           G.SayHiTwice()='welcome to androidwelcome to android'
End testing for type G
Testing for type H
H-interface Extension.SayHi()='welcome '
H-virtual           H.SayHi()='welcome '
End testing for type H
Testing for type I
I-virtual           A.SayHi()='Hi '
I-interface   Greeter.SayHi()='Hi '
I-interface  Greeter2.SayHi()='Hi '
I-virtual           I.SayHi()='Hi '
I-virtual           A.SayHiTwice()='I say Hi Hi '
I-interface   Greeter.SayHiTwice()='I say Hi Hi '
I-interface  Greeter2.SayHiTwice()='I say Hi Hi '
I-virtual           I.SayHiTwice()='I say Hi Hi '
End testing for type I
Testing for type J
J-virtual           A.SayHi()='Hi '
J-interface   Greeter.SayHi()='Hi '
J-virtual           J.SayHi()='Hi '
J-virtual           A.SayHiTwice()='Hi Hi '
J-interface   Greeter.SayHiTwice()='Hi Hi '
J-virtual           J.SayHiTwice()='Hi Hi '
End testing for type J
Testing for type K
K-interface       Foo.bar()='foobar'
K-virtual           K.bar()='foobar'
End testing for type K
Testing for type L
L-interface       Foo.bar()='foobar'
L-virtual           K.bar()='foobar'
L-virtual           L.bar()='foobar'
End testing for type L
Testing for type M
M-interface       Foo.bar()='BAZ!'
M-interface     Fooer.bar()='BAZ!'
M-virtual           K.bar()='BAZ!'
M-virtual           L.bar()='BAZ!'
M-virtual           M.bar()='BAZ!'
End testing for type M
Testing for type N
N-interface       Foo.bar()='foobar'
N-virtual           N.bar()='foobar'
End testing for type N
Testing for type O
O-interface       Foo.bar()='foobar foobar'
O-interface      Foo2.bar()='foobar foobar'
O-virtual           N.bar()='foobar foobar'
O-virtual           O.bar()='foobar foobar'
End testing for type O
Testing for type P
P-interface       Foo.bar()='not foobar!'
P-interface      Foo2.bar()='not foobar!'
P-virtual           N.bar()='not foobar!'
P-virtual           O.bar()='not foobar!'
P-virtual           P.bar()='not foobar!'
End testing for type P
Testing for type Q
Q-interface on Foo: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-interface on Foo2: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-interface on Foo3: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-virtual on N: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-virtual on O: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
Q-virtual on Q: bar() threw exception!
Exception is of type java.lang.IncompatibleClassChangeError
End testing for type Q