Mercurial > projects > dstress
diff run/mini/virtcall2.d @ 1628:c6ef09dfba4d
add mini test set from ldc project
author | Moritz Warning <moritzwarning@web.de> |
---|---|
date | Mon, 10 Jan 2011 19:47:18 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/mini/virtcall2.d Mon Jan 10 19:47:18 2011 +0100 @@ -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); + } +}