xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/testsuite/libphobos.typeinfo/isbaseof.d (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1 // https://issues.dlang.org/show_bug.cgi?id=20178
2 
3 interface I {}
4 interface J : I {}
K(T)5 interface K(T) {}
6 class C1 : I {}
7 class C2 : C1 {}
8 class C3 : J {}
C4(T)9 class C4(T) : C3, K!T {}
10 class C5(T) : C4!T {}
11 
main()12 void main() @nogc nothrow pure @safe
13 {
14     assert(typeid(C1).isBaseOf(typeid(C1)));
15     assert(typeid(C1).isBaseOf(typeid(C2)));
16 
17     assert(!typeid(C2).isBaseOf(typeid(C1)));
18     assert(typeid(C2).isBaseOf(typeid(C2)));
19 
20     assert(!typeid(C1).isBaseOf(typeid(Object)));
21     assert(!typeid(C2).isBaseOf(typeid(Object)));
22     assert(typeid(Object).isBaseOf(typeid(C1)));
23     assert(typeid(Object).isBaseOf(typeid(C2)));
24 
25     assert(typeid(I).isBaseOf(typeid(I)));
26     assert(typeid(I).isBaseOf(typeid(J)));
27     assert(typeid(I).isBaseOf(typeid(C1)));
28     assert(typeid(I).isBaseOf(typeid(C2)));
29     assert(typeid(I).isBaseOf(typeid(C3)));
30     assert(!typeid(I).isBaseOf(typeid(Object)));
31 
32     assert(!typeid(J).isBaseOf(typeid(I)));
33     assert(typeid(J).isBaseOf(typeid(J)));
34     assert(!typeid(J).isBaseOf(typeid(C1)));
35     assert(!typeid(J).isBaseOf(typeid(C2)));
36     assert(typeid(J).isBaseOf(typeid(C3)));
37     assert(!typeid(J).isBaseOf(typeid(Object)));
38 
39     assert(typeid(C4!int).isBaseOf(typeid(C5!int)));
40     assert(typeid(K!int).isBaseOf(typeid(C5!int)));
41     assert(!typeid(C4!Object).isBaseOf(typeid(C5!int)));
42     assert(!typeid(K!Object).isBaseOf(typeid(C5!int)));
43 
44     static assert(!__traits(compiles, TypeInfo.init.isBaseOf(typeid(C1))));
45     static assert(!__traits(compiles, typeid(C1).isBaseOf(TypeInfo.init)));
46 }
47