mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
242 lines
3.8 KiB
C
242 lines
3.8 KiB
C
// https://issues.dlang.org/show_bug.cgi?id=24031
|
|
|
|
#include <assert.h>
|
|
|
|
/**************************************/
|
|
|
|
struct ES {
|
|
struct {
|
|
char data[24];
|
|
};
|
|
int length;
|
|
};
|
|
|
|
struct ES empty = {.data = {1}, .length = 2};
|
|
|
|
void test1()
|
|
{
|
|
assert(empty.data[0] == 1);
|
|
assert(empty.length == 2);
|
|
}
|
|
|
|
/**************************************/
|
|
|
|
struct SH {
|
|
int k;
|
|
struct {
|
|
struct {
|
|
struct {
|
|
int s;
|
|
} f;
|
|
};
|
|
};
|
|
};
|
|
|
|
struct SH data = (struct SH) {
|
|
.k = 1,
|
|
{{.f = {.s = 2}}}
|
|
};
|
|
|
|
void test2()
|
|
{
|
|
assert(data.k == 1);
|
|
assert(data.f.s == 2);
|
|
}
|
|
|
|
/**************************************/
|
|
|
|
// https://issues.dlang.org/show_bug.cgi?id=24266
|
|
|
|
struct S3
|
|
{
|
|
int context[4];
|
|
int id;
|
|
};
|
|
|
|
void test3()
|
|
{
|
|
struct S3 tn = (struct S3) {{1}, 4};
|
|
assert(tn.context[0] == 1);
|
|
assert(tn.context[1] == 0);
|
|
assert(tn.context[2] == 0);
|
|
assert(tn.context[3] == 0);
|
|
assert(tn.id == 4);
|
|
}
|
|
|
|
/**************************************/
|
|
// https://issues.dlang.org/show_bug.cgi?id=24274
|
|
|
|
struct S0
|
|
{
|
|
struct
|
|
{
|
|
char short_data[24];
|
|
};
|
|
int length;
|
|
};
|
|
|
|
void test4()
|
|
{
|
|
struct S0 s0 = { {.short_data = {1}}, .length = 2};
|
|
assert(s0.short_data[0] == 1);
|
|
assert(s0.length == 2);
|
|
}
|
|
|
|
/**************************************/
|
|
|
|
struct S1
|
|
{
|
|
struct
|
|
{
|
|
int long_data;
|
|
char short_data[24];
|
|
};
|
|
int length;
|
|
};
|
|
|
|
void test5()
|
|
{
|
|
struct S1 s1 = { {.short_data = {7}}, .length = 8};
|
|
assert(s1.long_data == 0);
|
|
assert(s1.short_data[0] == 7);
|
|
assert(s1.length == 8);
|
|
}
|
|
|
|
/**************************************/
|
|
|
|
struct S6
|
|
{
|
|
int abc[4];
|
|
};
|
|
|
|
void test6()
|
|
{
|
|
struct S6 s = {{4},5,6,7};
|
|
assert(s.abc[0] == 4);
|
|
assert(s.abc[1] == 0);
|
|
assert(s.abc[2] == 0);
|
|
assert(s.abc[3] == 0);
|
|
|
|
struct S6 t = {4,{5},6,7};
|
|
assert(t.abc[0] == 4);
|
|
assert(t.abc[1] == 5);
|
|
assert(t.abc[2] == 6);
|
|
assert(t.abc[3] == 7);
|
|
}
|
|
|
|
/**************************************/
|
|
// https://issues.dlang.org/show_bug.cgi?id=24495
|
|
struct Subitem {
|
|
int x;
|
|
int y;
|
|
};
|
|
|
|
struct Item {
|
|
|
|
int a;
|
|
|
|
struct {
|
|
int b1;
|
|
struct Subitem b2;
|
|
int b3;
|
|
};
|
|
|
|
};
|
|
|
|
void test7() {
|
|
|
|
struct Item first = {
|
|
.a = 1,
|
|
.b1 = 2,
|
|
.b3 = 3,
|
|
};
|
|
struct Item second = {
|
|
.a = 1,
|
|
{
|
|
.b1 = 2,
|
|
.b2 = { 1, 2 },
|
|
.b3 = 3
|
|
}
|
|
};
|
|
|
|
assert(second.a == 1);
|
|
assert(second.b1 == 2);
|
|
assert(second.b2.x == 1);
|
|
assert(second.b2.y == 2);
|
|
assert(second.b3 == 3);
|
|
}
|
|
|
|
|
|
/**************************************/
|
|
// https://issues.dlang.org/show_bug.cgi?id=24277
|
|
struct S8
|
|
{
|
|
int s;
|
|
struct
|
|
{
|
|
int vis;
|
|
int count;
|
|
int id;
|
|
struct
|
|
{
|
|
int symbol;
|
|
int state;
|
|
} leaf;
|
|
};
|
|
};
|
|
|
|
struct S8 s8 = (struct S8) {
|
|
.s = 10,
|
|
{
|
|
.count = 20,
|
|
.id = 30,
|
|
.leaf = {.symbol = 40, .state = 50},
|
|
}
|
|
};
|
|
|
|
void test8()
|
|
{
|
|
assert(s8.id == 30);
|
|
assert(s8.leaf.symbol == 40);
|
|
assert(s8.leaf.state == 50);
|
|
}
|
|
|
|
/**************************************/
|
|
// https://github.com/dlang/dmd/issues/21210
|
|
|
|
struct Sa {int x, y;};
|
|
struct Sb {
|
|
struct Sa v[1];
|
|
};
|
|
struct Sb s9 = {0};
|
|
|
|
void test9()
|
|
{
|
|
struct Sb v = {1};
|
|
__check(v.v[0].x == 1);
|
|
__check(v.v[0].y == 0);
|
|
struct Sb v2[1] = {1};
|
|
__check(v2[0].v[0].x == 1);
|
|
__check(v2[0].v[0].y == 0);
|
|
struct Sb v3[2] = {1, 2, 3, 4};
|
|
__check(v3[0].v[0].x == 1);
|
|
__check(v3[0].v[0].y == 2);
|
|
__check(v3[1].v[0].x == 3);
|
|
__check(v3[1].v[0].y == 4);
|
|
}
|
|
|
|
/**************************************/
|
|
|
|
int main()
|
|
{
|
|
test1();
|
|
test2();
|
|
test3();
|
|
test4();
|
|
test5();
|
|
test6();
|
|
test7();
|
|
test8();
|
|
test9();
|
|
return 0;
|
|
}
|