It should describe an int
auto result = describeType!int; result.name.should.equal("int"); result.unqualName.should.equal("int"); result.fullyQualifiedName.should.equal("int"); result.isBasicType.should.equal(true); result.isBuiltinType.should.equal(true); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe an int at compile time
enum result = describeType!int; result.name.should.equal("int"); result.unqualName.should.equal("int");
It should describe a const int
auto result = describeType!(const(int)); result.name.should.equal("const(int)"); result.unqualName.should.equal("int"); result.isBasicType.should.equal(true); result.isBuiltinType.should.equal(true); result.isConst.should.equal(true); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe an inout int
auto result = describeType!(inout(int)); result.name.should.equal("inout(int)"); result.unqualName.should.equal("int"); result.isBasicType.should.equal(true); result.isBuiltinType.should.equal(true); result.isConst.should.equal(false); result.isInout.should.equal(true); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe an immutable int
auto result = describeType!(immutable(int)); result.name.should.equal("immutable(int)"); result.unqualName.should.equal("int"); result.isBasicType.should.equal(true); result.isBuiltinType.should.equal(true); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(true); result.isShared.should.equal(false);
It should describe a shared int
auto result = describeType!(shared(int)); result.name.should.equal("shared(int)"); result.unqualName.should.equal("int"); result.isBasicType.should.equal(true); result.isBuiltinType.should.equal(true); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(true);
It should describe a int pointer
auto result = describeType!(int*); result.name.should.equal("int*"); result.unqualName.should.equal("int*"); result.isBasicType.should.equal(false); result.isBuiltinType.should.equal(false); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe a manifest constant
enum a = "value"; auto result = describeType!(a); result.name.should.equal("string"); result.unqualName.should.equal("string"); result.isBasicType.should.equal(false); result.isBuiltinType.should.equal(true); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false); result.isManifestConstant.should.equal(true);
It shuld describe an array of ints
auto result = describeType!(int[]); result.name.should.equal("int[]"); result.unqualName.should.equal("int[]"); result.isArray.should.equal(true); result.keyType.should.equal("size_t"); result.valueType.should.equal("int");
It shuld describe an array of strings
auto result = describeType!(string[]); result.name.should.equal("string[]"); result.unqualName.should.equal("string[]"); result.isArray.should.equal(true); result.keyType.should.equal("size_t"); result.valueType.should.equal("string");
It shuld describe an assoc array of ints
auto result = describeType!(int[string]); result.name.should.equal("int[string]"); result.unqualName.should.equal("int[string]"); result.isArray.should.equal(false); result.isAssociativeArray.should.equal(true); result.keyType.should.equal("string"); result.valueType.should.equal("int");
It shuld describe an assoc array of strings
auto result = describeType!(string[string]); result.name.should.equal("string[string]"); result.unqualName.should.equal("string[string]"); result.isArray.should.equal(false); result.isAssociativeArray.should.equal(true); result.keyType.should.equal("string"); result.valueType.should.equal("string");
It shuld describe a nested array
auto result = describeType!(int[ulong][][ulong]); result.name.should.equal("int[ulong][][ulong]"); result.unqualName.should.equal("int[ulong][][ulong]"); result.isArray.should.equal(false); result.isAssociativeArray.should.equal(true); result.keyType.should.equal("ulong"); result.valueType.should.equal("int[ulong][]");
It should describe a struct
struct Test {} auto result = describeType!Test; result.name.should.equal("Test"); result.unqualName.should.equal("Test"); result.fullyQualifiedName.should.equal("introspection.type.__unittest_L344_C1.Test"); result.isStruct.should.equal(true); result.isBasicType.should.equal(false); result.isBuiltinType.should.equal(false); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe a class
class Test {} auto result = describeType!Test; result.name.should.equal("Test"); result.unqualName.should.equal("Test"); result.isStruct.should.equal(false); result.isClass.should.equal(true); result.isBasicType.should.equal(false); result.isBuiltinType.should.equal(false); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe an union
union Test {} auto result = describeType!Test; result.name.should.equal("Test"); result.unqualName.should.equal("Test"); result.isStruct.should.equal(false); result.isClass.should.equal(false); result.isUnion.should.equal(true); result.isBasicType.should.equal(false); result.isBuiltinType.should.equal(false); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe an interface
interface Test {} auto result = describeType!Test; result.name.should.equal("Test"); result.unqualName.should.equal("Test"); result.isStruct.should.equal(false); result.isClass.should.equal(false); result.isUnion.should.equal(false); result.isInterface.should.equal(true); result.isBasicType.should.equal(false); result.isBuiltinType.should.equal(false); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
It should describe an enum
enum Test { a,b,c } auto result = describeType!Test; result.name.should.equal("Test"); result.unqualName.should.equal("Test"); result.module_.should.equal("introspection.type"); result.isStruct.should.equal(false); result.isClass.should.equal(false); result.isUnion.should.equal(false); result.isInterface.should.equal(false); result.isEnum.should.equal(true); result.isBasicType.should.equal(false); result.isBuiltinType.should.equal(false); result.isConst.should.equal(false); result.isInout.should.equal(false); result.isImmutable.should.equal(false); result.isShared.should.equal(false);
Describe a type