mirror of
https://github.com/dlang/dmd.git
synced 2025-04-27 05:30:13 +03:00
Move dmd files into compiler/
This commit is contained in:
parent
20bd0cacbd
commit
6374bb87b7
4579 changed files with 4 additions and 4 deletions
452
compiler/test/runnable/testenum.d
Normal file
452
compiler/test/runnable/testenum.d
Normal file
|
@ -0,0 +1,452 @@
|
|||
/*
|
||||
PERMUTE_ARGS:
|
||||
RUN_OUTPUT:
|
||||
---
|
||||
Success
|
||||
---
|
||||
*/
|
||||
|
||||
extern(C) int printf(const char*, ...);
|
||||
|
||||
/**********************************************/
|
||||
|
||||
enum Bar
|
||||
{
|
||||
bar2 = 2,
|
||||
bar3,
|
||||
bar4 = 0
|
||||
}
|
||||
|
||||
void test1()
|
||||
{
|
||||
Bar b;
|
||||
|
||||
assert(b == 2);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
|
||||
void test2()
|
||||
{
|
||||
enum E
|
||||
{
|
||||
a=-1
|
||||
}
|
||||
|
||||
assert(E.min == -1);
|
||||
assert(E.max == -1);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************/
|
||||
|
||||
void test3()
|
||||
{
|
||||
enum E
|
||||
{
|
||||
a = 1,
|
||||
b = -1,
|
||||
c = 3,
|
||||
d = 2
|
||||
}
|
||||
|
||||
assert(E.min == -1);
|
||||
assert(E.max == 3);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
|
||||
void test4()
|
||||
{
|
||||
enum E
|
||||
{
|
||||
a = -1,
|
||||
b = -1,
|
||||
c = -3,
|
||||
d = -3
|
||||
}
|
||||
|
||||
assert(E.min==-3);
|
||||
assert(E.max==-1);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
|
||||
enum Enum5
|
||||
{
|
||||
A = 3,
|
||||
B = 10,
|
||||
E = -5,
|
||||
}
|
||||
|
||||
void test5()
|
||||
{
|
||||
assert(Enum5.init == Enum5.A);
|
||||
assert(Enum5.init == 3);
|
||||
Enum5 e;
|
||||
assert(e == Enum5.A);
|
||||
assert(e == 3);
|
||||
}
|
||||
|
||||
/***********************************/
|
||||
|
||||
enum E6 : byte
|
||||
{
|
||||
NORMAL_VALUE = 0,
|
||||
REFERRING_VALUE = NORMAL_VALUE + 1,
|
||||
OTHER_NORMAL_VALUE = 2
|
||||
}
|
||||
|
||||
void foo6(E6 e)
|
||||
{
|
||||
}
|
||||
|
||||
void test6()
|
||||
{
|
||||
foo6(E6.NORMAL_VALUE);
|
||||
foo6(E6.REFERRING_VALUE);
|
||||
foo6(E6.OTHER_NORMAL_VALUE);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=2407
|
||||
|
||||
int i2407;
|
||||
|
||||
void add2407() { ++i2407; }
|
||||
void sub2407() { --i2407; }
|
||||
|
||||
enum EF2407f : void function()
|
||||
{
|
||||
a = &add2407,
|
||||
s = &sub2407,
|
||||
}
|
||||
|
||||
enum EF2407s
|
||||
{
|
||||
a = &add2407,
|
||||
s = &sub2407,
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
a2407 = &add2407,
|
||||
s2407 = &sub2407,
|
||||
}
|
||||
|
||||
enum : void function()
|
||||
{
|
||||
at2407 = &add2407,
|
||||
st2407 = &sub2407,
|
||||
}
|
||||
|
||||
enum EEF2407 : EF2407s
|
||||
{
|
||||
a = EF2407s.a,
|
||||
s = EF2407s.s,
|
||||
}
|
||||
|
||||
void test2407()
|
||||
{
|
||||
alias i2407 i;
|
||||
|
||||
EF2407f.a();
|
||||
assert(i == 1);
|
||||
EF2407f.s();
|
||||
assert(i == 0);
|
||||
|
||||
EF2407s.a();
|
||||
assert(i == 1);
|
||||
EF2407s.s();
|
||||
assert(i == 0);
|
||||
|
||||
a2407();
|
||||
assert(i == 1);
|
||||
s2407();
|
||||
assert(i == 0);
|
||||
|
||||
at2407();
|
||||
assert(i == 1);
|
||||
st2407();
|
||||
assert(i == 0);
|
||||
|
||||
EEF2407.a();
|
||||
assert(i == 1);
|
||||
EEF2407.s();
|
||||
assert(i == 0);
|
||||
|
||||
EEF2407.init();
|
||||
assert(i == 1);
|
||||
|
||||
struct S { int i; }
|
||||
enum ES : S
|
||||
{
|
||||
a = S(1),
|
||||
b = S(3),
|
||||
c = S(2),
|
||||
}
|
||||
static assert(ES.init == S(1));
|
||||
static assert(!__traits(compiles, ES.min));
|
||||
static assert(!__traits(compiles, ES.max));
|
||||
|
||||
enum EES : ES
|
||||
{
|
||||
a = ES.a,
|
||||
b = ES.b,
|
||||
c = ES.c,
|
||||
}
|
||||
static assert(EES.init == S(1));
|
||||
static assert(!__traits(compiles, EES.min));
|
||||
static assert(!__traits(compiles, EES.max));
|
||||
|
||||
ES es = ES.c;
|
||||
assert(es.i == 2);
|
||||
es = ES.b;
|
||||
assert(es.i == 3);
|
||||
|
||||
class C { this(int i) { this.i = i; } int i; }
|
||||
enum EC : C
|
||||
{
|
||||
a = new C(42),
|
||||
b = null,
|
||||
c = new C(1),
|
||||
d = new C(33),
|
||||
}
|
||||
static assert(EC.init.i == (new C(42)).i);
|
||||
static assert(!__traits(compiles, EC.min));
|
||||
static assert(!__traits(compiles, EC.max));
|
||||
|
||||
EC ec = EC.d;
|
||||
assert(ec.i == 33);
|
||||
ec = EC.b;
|
||||
assert(ec is null);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=3096
|
||||
|
||||
void test3096()
|
||||
{
|
||||
template Tuple(T...) { alias Tuple = T; }
|
||||
|
||||
template Base(E)
|
||||
{
|
||||
static if(is(E B == enum))
|
||||
alias Base = B;
|
||||
}
|
||||
|
||||
template GetEnum(T)
|
||||
{
|
||||
enum GetEnum { v = T.init }
|
||||
}
|
||||
|
||||
struct S { }
|
||||
class C { }
|
||||
|
||||
foreach (Type; Tuple!(char, wchar, dchar, byte, ubyte,
|
||||
short, ushort, int, uint, long,
|
||||
ulong, float, double, real, S, C))
|
||||
{
|
||||
static assert(is(Base!(GetEnum!Type) == Type));
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=7719
|
||||
|
||||
enum foo7719 = bar7719;
|
||||
enum { bar7719 = 1 }
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=9845
|
||||
|
||||
enum { A9845 = B9845 }
|
||||
enum { B9845 = 1 }
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=9846
|
||||
|
||||
const int A9846 = B9846;
|
||||
enum { B9846 = 1 }
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=10105
|
||||
|
||||
enum E10105 : char[1] { a = "a" }
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=10113
|
||||
|
||||
enum E10113 : string
|
||||
{
|
||||
a = "a",
|
||||
b = "b",
|
||||
abc = "abc"
|
||||
}
|
||||
|
||||
void test10113()
|
||||
{
|
||||
E10113 v = E10113.b;
|
||||
bool check = false;
|
||||
|
||||
final switch (v) {
|
||||
case E10113.a: assert(false);
|
||||
case E10113.b: check = true; break;
|
||||
case E10113.abc: assert(false);
|
||||
}
|
||||
|
||||
assert(check);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=10503
|
||||
|
||||
@property int octal10503(string num)()
|
||||
{
|
||||
return num.length;
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
A10503 = octal10503!"2000000",
|
||||
B10503 = octal10503!"4000",
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=10505
|
||||
|
||||
enum
|
||||
{
|
||||
a10505 = true,
|
||||
b10505 = 10.0f,
|
||||
c10505 = false,
|
||||
d10505 = 10,
|
||||
e10505 = null
|
||||
}
|
||||
|
||||
static assert(is(typeof(a10505) == bool));
|
||||
static assert(is(typeof(b10505) == float));
|
||||
static assert(is(typeof(c10505) == bool));
|
||||
static assert(is(typeof(d10505) == int));
|
||||
static assert(is(typeof(e10505) == typeof(null)));
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=10561
|
||||
|
||||
void test10561()
|
||||
{
|
||||
template Tuple(T...) { alias Tuple = T; }
|
||||
|
||||
foreach (Type; Tuple!(char, wchar, dchar, byte, ubyte,
|
||||
short, ushort, int, uint, long,
|
||||
ulong, float, double, real))
|
||||
{
|
||||
enum : Type { v = 0, w = 0, x, y = x }
|
||||
static assert(is(typeof(v) == Type));
|
||||
static assert(is(typeof(w) == Type));
|
||||
static assert(is(typeof(x) == Type));
|
||||
static assert(is(typeof(y) == Type));
|
||||
}
|
||||
|
||||
class B { }
|
||||
class D : B { }
|
||||
enum : B { a = new D, b = new B, c = null }
|
||||
static assert(is(typeof(a) == B));
|
||||
static assert(is(typeof(b) == B));
|
||||
static assert(is(typeof(c) == B));
|
||||
|
||||
struct S { this(int) { } }
|
||||
enum : S { d = S(1), e = S(2) }
|
||||
static assert(is(typeof(d) == S));
|
||||
static assert(is(typeof(e) == S));
|
||||
|
||||
enum : float[] { f = [], g = [1.0, 2.0], h = [1.0f] }
|
||||
static assert(is(typeof(f) == float[]));
|
||||
static assert(is(typeof(g) == float[]));
|
||||
static assert(is(typeof(h) == float[]));
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=10612
|
||||
|
||||
int[E10612] ie10612;
|
||||
E10612[int] ei10612;
|
||||
E10612[E10612] ee10612;
|
||||
|
||||
enum E10612 { a }
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=10788
|
||||
|
||||
enum v10788 = e10788;
|
||||
enum : int { e10788 }
|
||||
|
||||
/**********************************************/
|
||||
|
||||
class C7
|
||||
{
|
||||
enum Policy
|
||||
{
|
||||
PREFER_READERS,
|
||||
PREFER_WRITERS
|
||||
}
|
||||
|
||||
void foo1( Policy policy = Policy.PREFER_READERS ) { }
|
||||
void foo2( Policy policy = Policy.PREFER_WRITERS ) { }
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
|
||||
void test8()
|
||||
{
|
||||
enum E
|
||||
{
|
||||
A = B,
|
||||
E = D + 7,
|
||||
B = 3,
|
||||
C,
|
||||
D,
|
||||
}
|
||||
|
||||
assert(E.A == 3);
|
||||
assert(E.B == 3);
|
||||
assert(E.C == 4);
|
||||
assert(E.D == 5);
|
||||
assert(E.E == 12);
|
||||
assert(E.max == 12);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
// https://issues.dlang.org/show_bug.cgi?id=13220
|
||||
|
||||
enum E13220a;
|
||||
@(1) enum E13220b;
|
||||
|
||||
void test13220()
|
||||
{
|
||||
auto prot = __traits(getProtection, E13220a);
|
||||
assert(prot == "public");
|
||||
|
||||
auto udas = __traits(getAttributes, E13220b);
|
||||
assert(udas[0] == 1);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
|
||||
int main()
|
||||
{
|
||||
test1();
|
||||
test2();
|
||||
test3();
|
||||
test4();
|
||||
test5();
|
||||
test6();
|
||||
test2407();
|
||||
test10113();
|
||||
test10561();
|
||||
test8();
|
||||
test13220();
|
||||
|
||||
printf("Success\n");
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue