From c6b059ed73ca3d066ded5a9c94f8e207aa8293c8 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Sun, 26 Apr 2009 10:29:39 +0200 Subject: [PATCH] Add (currently failing) test for correct virtual call resolution. --- tests/mini/virtcall2.d | 78 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/mini/virtcall2.d diff --git a/tests/mini/virtcall2.d b/tests/mini/virtcall2.d new file mode 100644 index 00000000..24129453 --- /dev/null +++ b/tests/mini/virtcall2.d @@ -0,0 +1,78 @@ +enum { + COMMON, + INPUT, + OUTPUT, + CONDUIT, + OTHER +} + +interface Common +{ int common(); } + +interface Input : Common +{ int input(); } + +interface Output : Common +{ int output(); } + +interface Conduit : Input, Output +{ abstract int conduit(); } + +class Abstract : Conduit +{ + abstract int conduit(); + abstract int output(); + abstract int input(); + int common() { return COMMON; } +} + +interface Other +{ int other(); } + +class Impl : Abstract, Other +{ + int conduit() { return CONDUIT; } + int output() { return OUTPUT; } + int other() { return OTHER; } + int input() { return INPUT; } +} + +void main() +{ + auto impl = new Impl; + + { + auto i = impl; + assert(i.common() == COMMON); + assert(i.input() == INPUT); + assert(i.output() == OUTPUT); + assert(i.conduit() == CONDUIT); + assert(i.other() == OTHER); + } + + { + Abstract i = impl; + assert(i.common() == COMMON); + assert(i.input() == INPUT); + assert(i.output() == OUTPUT); + assert(i.conduit() == CONDUIT); + } + + { + Conduit i = impl; + assert(i.common() == COMMON); + assert(i.input() == INPUT); + assert(i.output() == OUTPUT); + assert(i.conduit() == CONDUIT); + } + + { + Output i = impl; + assert(i.output() == OUTPUT); + } + + { + Common i = impl; + assert(i.common() == COMMON); + } +}