forked from dd86k/tests
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtypes.d
78 lines (74 loc) · 2.05 KB
/
types.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import std.stdio;
import std.conv : text;
immutable int padding = 12;
void printval(T)(string name, T val, string fmt)
{
writefln("%*s(%%"~fmt~"): %"~fmt, padding, name, val);
}
void print(T)(string altname = null)
{
writeln;
if (altname)
writeln(altname, " (", T.stringof, ")");
else
writeln(T.stringof);
// Character types
static if (is(T == char) || is(T == wchar) || is(T == dchar))
{
printval!T("init", T.init, "d");
printval!T("min", T.min, "d");
printval!T("max", T.max, "d");
}
// Float types
else static if (is(T == float) || is(T == double) || is(T == real))
{
printval!T("init", T.init, "s");
printval!T("max", T.max, "s");
printval!T("dig", T.dig, "s");
printval!T("mant_dig", T.mant_dig, "s");
printval!T("epsilon", T.epsilon, "s");
printval!T("min_normal", T.min_normal, "s");
}
// Integer types (last due to int promotion)
else static if (is(T == byte) || is(T == ubyte) ||
is(T == short) || is(T == ushort) ||
is(T == int) || is(T == uint) ||
is(T == long) || is(T == ulong))
{
printval!T("init", T.init, "s");
printval!T("min", T.min, "s");
printval!T("max", T.max, "s");
printval!T("min", T.min, "u");
printval!T("max", T.max, "u");
printval!T("min", T.min, "d");
printval!T("max", T.max, "d");
printval!T("min", T.min, "x");
printval!T("max", T.max, "x");
printval!T("min", T.min, "o");
printval!T("max", T.max, "o");
}
else
static assert(false, text("Unfit type: ", T.stringof));
}
void main()
{
// Integrals
print!byte;
print!ubyte;
print!short;
print!ushort;
print!int;
print!uint;
print!long;
print!ulong;
print!size_t("size_t");
print!ptrdiff_t("ptrdiff_t");
// Characters
print!char;
print!wchar;
print!dchar;
// Floats
print!float;
print!double;
print!real; // NOTE: `real` depends on the compiler and target
}