File: testDIP42.d

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (97 lines) | stat: -rw-r--r-- 2,588 bytes parent folder | download | duplicates (9)
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// REQUIRED_ARGS: -o-
// PERMUTE_ARGS:

// enum ident(tpl) = Initializer;

enum isIntegral(T) = is(T == int) || is(T == long);
static assert( isIntegral!int);
static assert( isIntegral!long);
static assert(!isIntegral!double);
static assert(!isIntegral!(int[]));

version(none)
{
enum
    allSatisfy(alias pred, TL...) =
        TL.length == 0 || (pred!(TL[0]) && allSatisfy!(pred, TL[1..$])),
    anySatisfy(alias pred, TL...) =
        TL.length != 0 && (pred!(TL[0]) || anySatisfy!(pred, TL[1..$])) || false;
static assert( allSatisfy!(isIntegral, int, long));
static assert(!allSatisfy!(isIntegral, int, double));
static assert( anySatisfy!(isIntegral, int, double));
static assert(!anySatisfy!(isIntegral, int[], double));
}

void test1()
{
    // statement
    enum isIntegral2(T) = is(T == int) || is(T == long);
    static assert(isIntegral2!int);
}

/******************************************/
// alias ident(tpl) = Type;

alias TypeTuple(TL...) = TL;
static assert(is(TypeTuple!(int, long)[0] == int));
static assert(is(TypeTuple!(int, long)[1] == long));

alias Id(T) = T, Id(alias A) = A;
static assert(is(Id!int == int));
static assert(__traits(isSame, Id!TypeTuple, TypeTuple));

void test2()
{
    // statement
    alias TypeTuple2(TL...) = TL;
    static assert(is(TypeTuple2!(int, long)[0] == int));
    static assert(is(TypeTuple2!(int, long)[1] == long));

    alias IdT(T) = T, IdA(alias A) = A;
    static assert(is(IdT!int == int));
    static assert(__traits(isSame, IdA!TypeTuple, TypeTuple));
}

/******************************************/
// template auto declaration

auto tynameLen(T) = T.stringof.length;

void test3()
{
    assert(tynameLen!int == 3);
    assert(tynameLen!long == 4);
    tynameLen!int = 4;
    tynameLen!long = 5;
    assert(tynameLen!int == 4);
    assert(tynameLen!long == 5);

    // statement
    auto tynameLen2(T) = T.stringof.length;

    assert(tynameLen2!int == 3);
    assert(tynameLen2!long == 4);
    tynameLen2!int = 4;
    tynameLen2!long = 5;
    assert(tynameLen2!int == 4);
    assert(tynameLen2!long == 5);
}

/******************************************/
// template variable declaration

static T math_pi(T) = cast(T)3.1415;

enum bool isFloatingPoint(T) = is(T == float) || is(T == double);
static assert( isFloatingPoint!double);
static assert(!isFloatingPoint!string);

void main()
{
    assert(math_pi!int == 3);
    assert(math_pi!double == 3.1415);

    enum bool isFloatingPoint2(T) = is(T == float) || is(T == double);
    static assert( isFloatingPoint2!double);
    static assert(!isFloatingPoint2!string);
}