source: trunk/testcase/631main.c@ 672

Last change on this file since 672 was 672, checked in by bird, 22 years ago

Inital testcase.

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
Line 
1/* $Id: 631main.c 672 2003-09-09 13:47:42Z bird $
2 *
3 * Testcase #631 - return structs from _System and _Optlink.
4 *
5 * InnoTek Systemberatung GmbH confidential
6 *
7 * Copyright (c) 2003 InnoTek Systemberatung GmbH
8 * Author: knut st. osmundsen <bird-srcspam@anduin.net>
9 *
10 * All Rights Reserved
11 *
12 */
13
14
15
16
17/*******************************************************************************
18* Structures and Typedefs *
19*******************************************************************************/
20struct ret4bytes
21{
22 unsigned int au[1];
23};
24
25struct ret8bytes
26{
27 unsigned int au[2];
28};
29
30struct ret12bytes
31{
32 unsigned int au[3];
33};
34
35struct ret16bytes
36{
37 unsigned int au[4];
38};
39
40
41/*******************************************************************************
42* External Functions *
43*******************************************************************************/
44extern struct ret4bytes _System asmfoo4(void);
45extern struct ret8bytes _System asmfoo8(void);
46extern struct ret12bytes _System asmfoo12(void);
47extern struct ret16bytes _System asmfoo16(void);
48
49struct ret4bytes _System foo4(void)
50{
51 struct ret4bytes ret = {1};
52 return ret;
53}
54
55struct ret8bytes _System foo8(void)
56{
57 struct ret8bytes ret = {1,2};
58 return ret;
59}
60
61struct ret12bytes _System foo12(void)
62{
63 struct ret12bytes ret = {1,2,3};
64 return ret;
65}
66
67struct ret16bytes _System foo16(void)
68{
69 struct ret16bytes ret = {1,2,3,4};
70 return ret;
71}
72
73
74int main(void)
75{
76 int rcRet = 0;
77 struct ret4bytes rc4;
78 struct ret8bytes rc8;
79 struct ret12bytes rc12;
80 struct ret16bytes rc16;
81
82
83 /* gcc */
84 memset(&rc4, 0, sizeof(rc4));
85 rc4 = foo4();
86 if (rc4.au[0] != 1)
87 {
88 printf("631main: foo4 failed\n");
89 rcRet++;
90 }
91
92 memset(&rc8, 0, sizeof(rc8));
93 rc8 = foo8();
94 if (rc8.au[0] != 1 && rc8.au[1] != 2)
95 {
96 printf("631main: foo8 failed\n");
97 rcRet++;
98 }
99
100 memset(&rc12, 0, sizeof(rc12));
101 rc12 = foo12();
102 if (rc12.au[0] != 1 && rc12.au[1] != 2 && rc16.au[2] != 3)
103 {
104 printf("631main: foo12 failed\n");
105 rcRet++;
106 }
107
108 memset(&rc16, 0, sizeof(rc16));
109 rc16 = foo16();
110 if (rc16.au[0] != 1 && rc16.au[1] != 2 && rc16.au[2] != 3 && rc16.au[3] != 4)
111 {
112 printf("631main: foo12 failed\n");
113 rcRet++;
114 }
115
116 /* asm */
117 memset(&rc4, 0, sizeof(rc4));
118 rc4 = asmfoo4();
119 if (rc4.au[0] != 1)
120 {
121 printf("631main: asmfoo4 failed\n");
122 rcRet++;
123 }
124
125 memset(&rc8, 0, sizeof(rc8));
126 rc8 = asmfoo8();
127 if (rc8.au[0] != 1 && rc8.au[1] != 2)
128 {
129 printf("631main: asmfoo8 failed\n");
130 rcRet++;
131 }
132
133 memset(&rc12, 0, sizeof(rc12));
134 rc12 = asmfoo12();
135 if (rc12.au[0] != 1 && rc12.au[1] != 2 && rc16.au[2] != 3)
136 {
137 printf("631main: asmfoo12 failed\n");
138 rcRet++;
139 }
140
141 memset(&rc16, 0, sizeof(rc16));
142 rc16 = asmfoo16();
143 if (rc16.au[0] != 1 && rc16.au[1] != 2 && rc16.au[2] != 3 && rc16.au[3] != 4)
144 {
145 printf("631main: asmfoo12 failed\n");
146 rcRet++;
147 }
148
149 if (!rcRet)
150 printf("Successfully executed return struct testcase (#631).\n");
151 else
152 printf("631main: %d failures.\n", rcRet);
153 return rcRet;
154}
155
Note: See TracBrowser for help on using the repository browser.