File: test9565.d

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (86 lines) | stat: -rw-r--r-- 3,178 bytes parent folder | download | duplicates (6)
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
// REQUIRED_ARGS: -o-
// PERMUTE_ARGS:

template TypeTuple(T...) { alias TypeTuple = T; }

bool startsWith(string s, string m) { return s[0 .. m.length] == m; }

void main()
{
    enum string castPrefix = "cast(" ~ size_t.stringof ~ ")";

    // TypeSArray
    static assert((int[10]).stringof == "int[10]", T.stringof);

    int[] arr;

    // IndexExp
    {
        // index == IntegerExp
        static assert((arr[ 4  ]).stringof == "arr[4]");
        static assert((arr[ 4U ]).stringof == "arr[4]");
        static assert((arr[ 4L ]).stringof == "arr[4]");
        static assert((arr[ 4LU]).stringof == "arr[4]");

        // index == UAddExp
        static assert((arr[+4  ]).stringof == "arr[4]");
        static assert((arr[+4U ]).stringof == "arr[4]");
        static assert((arr[+4L ]).stringof == "arr[4]");
        static assert((arr[+4LU]).stringof == "arr[4]");

        // index == NegExp
        static assert((arr[-4  ]).stringof == "arr[" ~ castPrefix ~ "-4]");
        static assert((arr[-4U ]).stringof == "arr[4294967292]");
        static assert((arr[int.min] ).stringof == "arr[" ~ castPrefix ~ "-2147483648]");
      static if (is(size_t == ulong))
      {
        static assert((arr[-4L ]).stringof == "arr[" ~ castPrefix ~ "-4L]");
        static assert((arr[-4LU]).stringof == "arr[-4LU]");

        // IntegerLiteral needs suffix if the value is greater than long.max
        static assert((arr[long.max + 0]).stringof == "arr[9223372036854775807]");
        static assert((arr[long.max + 1]).stringof == "arr[" ~ castPrefix ~ "(9223372036854775807L + 1L)]");
      }

        foreach (Int; TypeTuple!(byte, ubyte, short, ushort, int, uint, long, ulong))
        {
            enum Int p4 = +4;
            enum string result1 = (arr[p4]).stringof;
            static assert(result1 == "arr[4]");

            enum string result2 = (arr[cast(Int)+4]).stringof;
            static assert(result2 == "arr[4]");
        }
        foreach (Int; TypeTuple!(byte, short, int, long))
        {
            // keep "cast(Type)" in the string representation

            enum Int m4 = -4;
            static if (is(typeof({ size_t x = m4; })))
            {
                enum string result1 = (arr[m4]).stringof;
                static assert(result1.startsWith("arr[" ~ castPrefix));
            }
            else
                static assert(!__traits(compiles, arr[m4]));

            enum string result2 = (arr[cast(Int)-4]).stringof;
            static assert(result2.startsWith("arr[" ~ castPrefix));
        }
    }

    // SliceExp
    {
        // lwr,upr == IntegerExp
        static assert((arr[4   .. 8  ]).stringof == "arr[4..8]");
        static assert((arr[4U  .. 8U ]).stringof == "arr[4..8]");
        static assert((arr[4L  .. 8L ]).stringof == "arr[4..8]");
        static assert((arr[4LU .. 8LU]).stringof == "arr[4..8]");

        // lwr,upr == UAddExp
        static assert((arr[+4   .. +8  ]).stringof == "arr[4..8]");
        static assert((arr[+4U  .. +8U ]).stringof == "arr[4..8]");
        static assert((arr[+4L  .. +8L ]).stringof == "arr[4..8]");
        static assert((arr[+4LU .. +8LU]).stringof == "arr[4..8]");
    }
}