annotate tests/mini/union5.d @ 341:1bb99290e03a trunk

[svn r362] Started merging the old 'test' dir as well as the newer 'tangotests' dir into 'tests/mini' and 'tests/minicomplex'.
author lindquist
date Sun, 13 Jul 2008 02:51:19 +0200
parents test/union5.d@9e1bd80a7e98
children 44f08170f4ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
76
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
1 module union5;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
2
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
3 pragma(LLVM_internal, "notypeinfo")
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
4 {
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
5 union S
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
6 {
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
7 T t;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
8 U u;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
9 uint i;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
10 struct {
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
11 ushort sl,sh;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
12 }
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
13 }
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
14
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
15 struct T
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
16 {
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
17 int i;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
18 }
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
19
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
20 struct U
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
21 {
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
22 float f;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
23 }
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
24 }
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
25
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
26 void main()
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
27 {
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
28 S s;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
29 assert(s.t.i == 0);
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
30 assert(s.u.f == 0);
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
31 s.t.i = -1;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
32 assert(s.i == 0xFFFF_FFFF);
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
33 float f = 3.1415;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
34 s.u.f = f;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
35 uint pi = *cast(uint*)&f;
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
36 assert(s.i == pi);
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
37 assert(s.sl == (pi&0xFFFF));
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
38 assert(s.sh == (pi>>>16));
9e1bd80a7e98 [svn r80] Fixed union literals
lindquist
parents:
diff changeset
39 }