|
|
1.1 root 1: /* The Plum Hall Validation Suite for C
2: * Unpublished copyright (c) 1986-1990, Chiron Systems Inc and Plum Hall Inc.
3: * VERSION: 2.00
4: * DATE: 90/04/05
5: * The "ANSI" mode of the Suite corresponds to the official ANSI C, X3.159-1989.
6: * As per your license agreement, your distribution is not to be moved or copied outside the Designated Site
7: * without specific permission from Plum Hall Inc.
8: */
9:
10: #define ANSI 1 /* This file follows ANSI arithmetic rules, which may not work in non-ANSI modes */
11: #include "types.h"
12: int main()
13: {
14: extern char *Filename;
15: auto struct {
16: CHAR c;
17: SHORT s;
18: INT i;
19: UCHAR uc;
20: USHORT us;
21: UINT ui;
22: LONG l;
23: ULONG ul;
24: FLOAT f;
25: DOUBLE d;
26: #if ANSI
27: SCHAR sc;
28: LDOUBLE ld;
29: #endif
30: } G, *pG = &G;
31: pG->c = 7;
32: #if ANSI
33: pG->sc = 8;
34: #endif
35: pG->s = 9;
36: pG->i = 10;
37: pG->uc = 11;
38: pG->us = 12;
39: pG->ui = 13;
40: pG->l = 14;
41: pG->ul = 15;
42: pG->f = 16;
43: pG->d = 17;
44: #if ANSI
45: pG->ld = 18;
46: #endif
47: {
48: auto CHAR Jc[12][12];
49: int x_0 = 0;
50: int y_0 = 0;
51: #if ANSI
52: auto SCHAR Jsc[12][12];
53: int x_1 = 1;
54: int y_1 = 1;
55: #endif
56: auto SHORT Js[12][12];
57: int x_2 = 2;
58: int y_2 = 2;
59: auto INT Ji[12][12];
60: int x_3 = 3;
61: int y_3 = 3;
62: auto UCHAR Juc[12][12];
63: int x_4 = 4;
64: int y_4 = 4;
65: auto USHORT Jus[12][12];
66: int x_5 = 5;
67: int y_5 = 5;
68: auto UINT Jui[12][12];
69: int x_6 = 6;
70: int y_6 = 6;
71: auto LONG Jl[12][12];
72: int x_7 = 7;
73: int y_7 = 7;
74: auto ULONG Jul[12][12];
75: int x_8 = 8;
76: int y_8 = 8;
77: auto FLOAT Jf[12][12];
78: int x_9 = 9;
79: int y_9 = 9;
80: auto DOUBLE Jd[12][12];
81: int x_10 = 10;
82: int y_10 = 10;
83: #if ANSI
84: auto LDOUBLE Jld[12][12];
85: int x_11 = 11;
86: int y_11 = 11;
87: #endif
88: Jc[x_0][y_0] = 7;
89: #if ANSI
90: Jsc[x_1][y_1] = 8;
91: #endif
92: Js[x_2][y_2] = 9;
93: Ji[x_3][y_3] = 10;
94: Juc[x_4][y_4] = 11;
95: Jus[x_5][y_5] = 12;
96: Jui[x_6][y_6] = 13;
97: Jl[x_7][y_7] = 14;
98: Jul[x_8][y_8] = 15;
99: Jf[x_9][y_9] = 16;
100: Jd[x_10][y_10] = 17;
101: #if ANSI
102: Jld[x_11][y_11] = 18;
103: #endif
104: {
105: int true = 1, false = 0;
106: Filename = " auto pstruct1 auto array2 plus ";
107: iequals(__LINE__, pG->c + Jc[x_0][y_0], 14);
108: iequals(__LINE__, Jc[x_0][y_0] + pG->c, 14);
109: #if ANSI
110: iequals(__LINE__, pG->c + Jsc[x_1][y_1], 15);
111: iequals(__LINE__, Jsc[x_1][y_1] + pG->c, 15);
112: #endif
113: iequals(__LINE__, pG->c + Js[x_2][y_2], 16);
114: iequals(__LINE__, Js[x_2][y_2] + pG->c, 16);
115: iequals(__LINE__, pG->c + Ji[x_3][y_3], 17);
116: iequals(__LINE__, Ji[x_3][y_3] + pG->c, 17);
117: iequals(__LINE__, pG->c + Juc[x_4][y_4], 18);
118: iequals(__LINE__, Juc[x_4][y_4] + pG->c, 18);
119: iequals(__LINE__, pG->c + Jus[x_5][y_5], 19);
120: iequals(__LINE__, Jus[x_5][y_5] + pG->c, 19);
121: iequals(__LINE__, pG->c + Jui[x_6][y_6], 20);
122: iequals(__LINE__, Jui[x_6][y_6] + pG->c, 20);
123: lequals(__LINE__, pG->c + Jl[x_7][y_7], 21L);
124: lequals(__LINE__, Jl[x_7][y_7] + pG->c, 21L);
125: lequals(__LINE__, pG->c + Jul[x_8][y_8], 22L);
126: lequals(__LINE__, Jul[x_8][y_8] + pG->c, 22L);
127: dequals(__LINE__, pG->c + Jf[x_9][y_9], 23.);
128: dequals(__LINE__, Jf[x_9][y_9] + pG->c, 23.);
129: dequals(__LINE__, pG->c + Jd[x_10][y_10], 24.);
130: dequals(__LINE__, Jd[x_10][y_10] + pG->c, 24.);
131: #if ANSI
132: ldequals(__LINE__, pG->c + Jld[x_11][y_11], 25.L);
133: ldequals(__LINE__, Jld[x_11][y_11] + pG->c, 25.L);
134: #endif
135: #if ANSI
136: iequals(__LINE__, pG->sc + Jc[x_0][y_0], 15);
137: iequals(__LINE__, Jc[x_0][y_0] + pG->sc, 15);
138: #endif
139: #if ANSI
140: iequals(__LINE__, pG->sc + Jsc[x_1][y_1], 16);
141: iequals(__LINE__, Jsc[x_1][y_1] + pG->sc, 16);
142: #endif
143: #if ANSI
144: iequals(__LINE__, pG->sc + Js[x_2][y_2], 17);
145: iequals(__LINE__, Js[x_2][y_2] + pG->sc, 17);
146: #endif
147: #if ANSI
148: iequals(__LINE__, pG->sc + Ji[x_3][y_3], 18);
149: iequals(__LINE__, Ji[x_3][y_3] + pG->sc, 18);
150: #endif
151: #if ANSI
152: iequals(__LINE__, pG->sc + Juc[x_4][y_4], 19);
153: iequals(__LINE__, Juc[x_4][y_4] + pG->sc, 19);
154: #endif
155: #if ANSI
156: iequals(__LINE__, pG->sc + Jus[x_5][y_5], 20);
157: iequals(__LINE__, Jus[x_5][y_5] + pG->sc, 20);
158: #endif
159: #if ANSI
160: iequals(__LINE__, pG->sc + Jui[x_6][y_6], 21);
161: iequals(__LINE__, Jui[x_6][y_6] + pG->sc, 21);
162: #endif
163: #if ANSI
164: lequals(__LINE__, pG->sc + Jl[x_7][y_7], 22L);
165: lequals(__LINE__, Jl[x_7][y_7] + pG->sc, 22L);
166: #endif
167: #if ANSI
168: lequals(__LINE__, pG->sc + Jul[x_8][y_8], 23L);
169: lequals(__LINE__, Jul[x_8][y_8] + pG->sc, 23L);
170: #endif
171: #if ANSI
172: dequals(__LINE__, pG->sc + Jf[x_9][y_9], 24.);
173: dequals(__LINE__, Jf[x_9][y_9] + pG->sc, 24.);
174: #endif
175: #if ANSI
176: dequals(__LINE__, pG->sc + Jd[x_10][y_10], 25.);
177: dequals(__LINE__, Jd[x_10][y_10] + pG->sc, 25.);
178: #endif
179: #if ANSI
180: ldequals(__LINE__, pG->sc + Jld[x_11][y_11], 26.L);
181: ldequals(__LINE__, Jld[x_11][y_11] + pG->sc, 26.L);
182: #endif
183: iequals(__LINE__, pG->s + Jc[x_0][y_0], 16);
184: iequals(__LINE__, Jc[x_0][y_0] + pG->s, 16);
185: #if ANSI
186: iequals(__LINE__, pG->s + Jsc[x_1][y_1], 17);
187: iequals(__LINE__, Jsc[x_1][y_1] + pG->s, 17);
188: #endif
189: iequals(__LINE__, pG->s + Js[x_2][y_2], 18);
190: iequals(__LINE__, Js[x_2][y_2] + pG->s, 18);
191: iequals(__LINE__, pG->s + Ji[x_3][y_3], 19);
192: iequals(__LINE__, Ji[x_3][y_3] + pG->s, 19);
193: iequals(__LINE__, pG->s + Juc[x_4][y_4], 20);
194: iequals(__LINE__, Juc[x_4][y_4] + pG->s, 20);
195: iequals(__LINE__, pG->s + Jus[x_5][y_5], 21);
196: iequals(__LINE__, Jus[x_5][y_5] + pG->s, 21);
197: iequals(__LINE__, pG->s + Jui[x_6][y_6], 22);
198: iequals(__LINE__, Jui[x_6][y_6] + pG->s, 22);
199: lequals(__LINE__, pG->s + Jl[x_7][y_7], 23L);
200: lequals(__LINE__, Jl[x_7][y_7] + pG->s, 23L);
201: lequals(__LINE__, pG->s + Jul[x_8][y_8], 24L);
202: lequals(__LINE__, Jul[x_8][y_8] + pG->s, 24L);
203: dequals(__LINE__, pG->s + Jf[x_9][y_9], 25.);
204: dequals(__LINE__, Jf[x_9][y_9] + pG->s, 25.);
205: dequals(__LINE__, pG->s + Jd[x_10][y_10], 26.);
206: dequals(__LINE__, Jd[x_10][y_10] + pG->s, 26.);
207: #if ANSI
208: ldequals(__LINE__, pG->s + Jld[x_11][y_11], 27.L);
209: ldequals(__LINE__, Jld[x_11][y_11] + pG->s, 27.L);
210: #endif
211: iequals(__LINE__, pG->i + Jc[x_0][y_0], 17);
212: iequals(__LINE__, Jc[x_0][y_0] + pG->i, 17);
213: #if ANSI
214: iequals(__LINE__, pG->i + Jsc[x_1][y_1], 18);
215: iequals(__LINE__, Jsc[x_1][y_1] + pG->i, 18);
216: #endif
217: iequals(__LINE__, pG->i + Js[x_2][y_2], 19);
218: iequals(__LINE__, Js[x_2][y_2] + pG->i, 19);
219: iequals(__LINE__, pG->i + Ji[x_3][y_3], 20);
220: iequals(__LINE__, Ji[x_3][y_3] + pG->i, 20);
221: iequals(__LINE__, pG->i + Juc[x_4][y_4], 21);
222: iequals(__LINE__, Juc[x_4][y_4] + pG->i, 21);
223: iequals(__LINE__, pG->i + Jus[x_5][y_5], 22);
224: iequals(__LINE__, Jus[x_5][y_5] + pG->i, 22);
225: iequals(__LINE__, pG->i + Jui[x_6][y_6], 23);
226: iequals(__LINE__, Jui[x_6][y_6] + pG->i, 23);
227: lequals(__LINE__, pG->i + Jl[x_7][y_7], 24L);
228: lequals(__LINE__, Jl[x_7][y_7] + pG->i, 24L);
229: lequals(__LINE__, pG->i + Jul[x_8][y_8], 25L);
230: lequals(__LINE__, Jul[x_8][y_8] + pG->i, 25L);
231: dequals(__LINE__, pG->i + Jf[x_9][y_9], 26.);
232: dequals(__LINE__, Jf[x_9][y_9] + pG->i, 26.);
233: dequals(__LINE__, pG->i + Jd[x_10][y_10], 27.);
234: dequals(__LINE__, Jd[x_10][y_10] + pG->i, 27.);
235: #if ANSI
236: ldequals(__LINE__, pG->i + Jld[x_11][y_11], 28.L);
237: ldequals(__LINE__, Jld[x_11][y_11] + pG->i, 28.L);
238: #endif
239: iequals(__LINE__, pG->uc + Jc[x_0][y_0], 18);
240: iequals(__LINE__, Jc[x_0][y_0] + pG->uc, 18);
241: #if ANSI
242: iequals(__LINE__, pG->uc + Jsc[x_1][y_1], 19);
243: iequals(__LINE__, Jsc[x_1][y_1] + pG->uc, 19);
244: #endif
245: iequals(__LINE__, pG->uc + Js[x_2][y_2], 20);
246: iequals(__LINE__, Js[x_2][y_2] + pG->uc, 20);
247: iequals(__LINE__, pG->uc + Ji[x_3][y_3], 21);
248: iequals(__LINE__, Ji[x_3][y_3] + pG->uc, 21);
249: iequals(__LINE__, pG->uc + Juc[x_4][y_4], 22);
250: iequals(__LINE__, Juc[x_4][y_4] + pG->uc, 22);
251: iequals(__LINE__, pG->uc + Jus[x_5][y_5], 23);
252: iequals(__LINE__, Jus[x_5][y_5] + pG->uc, 23);
253: iequals(__LINE__, pG->uc + Jui[x_6][y_6], 24);
254: iequals(__LINE__, Jui[x_6][y_6] + pG->uc, 24);
255: lequals(__LINE__, pG->uc + Jl[x_7][y_7], 25L);
256: lequals(__LINE__, Jl[x_7][y_7] + pG->uc, 25L);
257: lequals(__LINE__, pG->uc + Jul[x_8][y_8], 26L);
258: lequals(__LINE__, Jul[x_8][y_8] + pG->uc, 26L);
259: dequals(__LINE__, pG->uc + Jf[x_9][y_9], 27.);
260: dequals(__LINE__, Jf[x_9][y_9] + pG->uc, 27.);
261: dequals(__LINE__, pG->uc + Jd[x_10][y_10], 28.);
262: dequals(__LINE__, Jd[x_10][y_10] + pG->uc, 28.);
263: #if ANSI
264: ldequals(__LINE__, pG->uc + Jld[x_11][y_11], 29.L);
265: ldequals(__LINE__, Jld[x_11][y_11] + pG->uc, 29.L);
266: #endif
267: iequals(__LINE__, pG->us + Jc[x_0][y_0], 19);
268: iequals(__LINE__, Jc[x_0][y_0] + pG->us, 19);
269: #if ANSI
270: iequals(__LINE__, pG->us + Jsc[x_1][y_1], 20);
271: iequals(__LINE__, Jsc[x_1][y_1] + pG->us, 20);
272: #endif
273: iequals(__LINE__, pG->us + Js[x_2][y_2], 21);
274: iequals(__LINE__, Js[x_2][y_2] + pG->us, 21);
275: iequals(__LINE__, pG->us + Ji[x_3][y_3], 22);
276: iequals(__LINE__, Ji[x_3][y_3] + pG->us, 22);
277: iequals(__LINE__, pG->us + Juc[x_4][y_4], 23);
278: iequals(__LINE__, Juc[x_4][y_4] + pG->us, 23);
279: iequals(__LINE__, pG->us + Jus[x_5][y_5], 24);
280: iequals(__LINE__, Jus[x_5][y_5] + pG->us, 24);
281: iequals(__LINE__, pG->us + Jui[x_6][y_6], 25);
282: iequals(__LINE__, Jui[x_6][y_6] + pG->us, 25);
283: lequals(__LINE__, pG->us + Jl[x_7][y_7], 26L);
284: lequals(__LINE__, Jl[x_7][y_7] + pG->us, 26L);
285: lequals(__LINE__, pG->us + Jul[x_8][y_8], 27L);
286: lequals(__LINE__, Jul[x_8][y_8] + pG->us, 27L);
287: dequals(__LINE__, pG->us + Jf[x_9][y_9], 28.);
288: dequals(__LINE__, Jf[x_9][y_9] + pG->us, 28.);
289: dequals(__LINE__, pG->us + Jd[x_10][y_10], 29.);
290: dequals(__LINE__, Jd[x_10][y_10] + pG->us, 29.);
291: #if ANSI
292: ldequals(__LINE__, pG->us + Jld[x_11][y_11], 30.L);
293: ldequals(__LINE__, Jld[x_11][y_11] + pG->us, 30.L);
294: #endif
295: iequals(__LINE__, pG->ui + Jc[x_0][y_0], 20);
296: iequals(__LINE__, Jc[x_0][y_0] + pG->ui, 20);
297: #if ANSI
298: iequals(__LINE__, pG->ui + Jsc[x_1][y_1], 21);
299: iequals(__LINE__, Jsc[x_1][y_1] + pG->ui, 21);
300: #endif
301: iequals(__LINE__, pG->ui + Js[x_2][y_2], 22);
302: iequals(__LINE__, Js[x_2][y_2] + pG->ui, 22);
303: iequals(__LINE__, pG->ui + Ji[x_3][y_3], 23);
304: iequals(__LINE__, Ji[x_3][y_3] + pG->ui, 23);
305: iequals(__LINE__, pG->ui + Juc[x_4][y_4], 24);
306: iequals(__LINE__, Juc[x_4][y_4] + pG->ui, 24);
307: iequals(__LINE__, pG->ui + Jus[x_5][y_5], 25);
308: iequals(__LINE__, Jus[x_5][y_5] + pG->ui, 25);
309: iequals(__LINE__, pG->ui + Jui[x_6][y_6], 26);
310: iequals(__LINE__, Jui[x_6][y_6] + pG->ui, 26);
311: lequals(__LINE__, pG->ui + Jl[x_7][y_7], 27L);
312: lequals(__LINE__, Jl[x_7][y_7] + pG->ui, 27L);
313: lequals(__LINE__, pG->ui + Jul[x_8][y_8], 28L);
314: lequals(__LINE__, Jul[x_8][y_8] + pG->ui, 28L);
315: dequals(__LINE__, pG->ui + Jf[x_9][y_9], 29.);
316: dequals(__LINE__, Jf[x_9][y_9] + pG->ui, 29.);
317: dequals(__LINE__, pG->ui + Jd[x_10][y_10], 30.);
318: dequals(__LINE__, Jd[x_10][y_10] + pG->ui, 30.);
319: #if ANSI
320: ldequals(__LINE__, pG->ui + Jld[x_11][y_11], 31.L);
321: ldequals(__LINE__, Jld[x_11][y_11] + pG->ui, 31.L);
322: #endif
323: lequals(__LINE__, pG->l + Jc[x_0][y_0], 21L);
324: lequals(__LINE__, Jc[x_0][y_0] + pG->l, 21L);
325: #if ANSI
326: lequals(__LINE__, pG->l + Jsc[x_1][y_1], 22L);
327: lequals(__LINE__, Jsc[x_1][y_1] + pG->l, 22L);
328: #endif
329: lequals(__LINE__, pG->l + Js[x_2][y_2], 23L);
330: lequals(__LINE__, Js[x_2][y_2] + pG->l, 23L);
331: lequals(__LINE__, pG->l + Ji[x_3][y_3], 24L);
332: lequals(__LINE__, Ji[x_3][y_3] + pG->l, 24L);
333: lequals(__LINE__, pG->l + Juc[x_4][y_4], 25L);
334: lequals(__LINE__, Juc[x_4][y_4] + pG->l, 25L);
335: lequals(__LINE__, pG->l + Jus[x_5][y_5], 26L);
336: lequals(__LINE__, Jus[x_5][y_5] + pG->l, 26L);
337: lequals(__LINE__, pG->l + Jui[x_6][y_6], 27L);
338: lequals(__LINE__, Jui[x_6][y_6] + pG->l, 27L);
339: lequals(__LINE__, pG->l + Jl[x_7][y_7], 28L);
340: lequals(__LINE__, Jl[x_7][y_7] + pG->l, 28L);
341: lequals(__LINE__, pG->l + Jul[x_8][y_8], 29L);
342: lequals(__LINE__, Jul[x_8][y_8] + pG->l, 29L);
343: dequals(__LINE__, pG->l + Jf[x_9][y_9], 30.);
344: dequals(__LINE__, Jf[x_9][y_9] + pG->l, 30.);
345: dequals(__LINE__, pG->l + Jd[x_10][y_10], 31.);
346: dequals(__LINE__, Jd[x_10][y_10] + pG->l, 31.);
347: #if ANSI
348: ldequals(__LINE__, pG->l + Jld[x_11][y_11], 32.L);
349: ldequals(__LINE__, Jld[x_11][y_11] + pG->l, 32.L);
350: #endif
351: lequals(__LINE__, pG->ul + Jc[x_0][y_0], 22L);
352: lequals(__LINE__, Jc[x_0][y_0] + pG->ul, 22L);
353: #if ANSI
354: lequals(__LINE__, pG->ul + Jsc[x_1][y_1], 23L);
355: lequals(__LINE__, Jsc[x_1][y_1] + pG->ul, 23L);
356: #endif
357: lequals(__LINE__, pG->ul + Js[x_2][y_2], 24L);
358: lequals(__LINE__, Js[x_2][y_2] + pG->ul, 24L);
359: lequals(__LINE__, pG->ul + Ji[x_3][y_3], 25L);
360: lequals(__LINE__, Ji[x_3][y_3] + pG->ul, 25L);
361: lequals(__LINE__, pG->ul + Juc[x_4][y_4], 26L);
362: lequals(__LINE__, Juc[x_4][y_4] + pG->ul, 26L);
363: lequals(__LINE__, pG->ul + Jus[x_5][y_5], 27L);
364: lequals(__LINE__, Jus[x_5][y_5] + pG->ul, 27L);
365: lequals(__LINE__, pG->ul + Jui[x_6][y_6], 28L);
366: lequals(__LINE__, Jui[x_6][y_6] + pG->ul, 28L);
367: lequals(__LINE__, pG->ul + Jl[x_7][y_7], 29L);
368: lequals(__LINE__, Jl[x_7][y_7] + pG->ul, 29L);
369: lequals(__LINE__, pG->ul + Jul[x_8][y_8], 30L);
370: lequals(__LINE__, Jul[x_8][y_8] + pG->ul, 30L);
371: dequals(__LINE__, pG->ul + Jf[x_9][y_9], 31.);
372: dequals(__LINE__, Jf[x_9][y_9] + pG->ul, 31.);
373: dequals(__LINE__, pG->ul + Jd[x_10][y_10], 32.);
374: dequals(__LINE__, Jd[x_10][y_10] + pG->ul, 32.);
375: #if ANSI
376: ldequals(__LINE__, pG->ul + Jld[x_11][y_11], 33.L);
377: ldequals(__LINE__, Jld[x_11][y_11] + pG->ul, 33.L);
378: #endif
379: dequals(__LINE__, pG->f + Jc[x_0][y_0], 23.);
380: dequals(__LINE__, Jc[x_0][y_0] + pG->f, 23.);
381: #if ANSI
382: dequals(__LINE__, pG->f + Jsc[x_1][y_1], 24.);
383: dequals(__LINE__, Jsc[x_1][y_1] + pG->f, 24.);
384: #endif
385: dequals(__LINE__, pG->f + Js[x_2][y_2], 25.);
386: dequals(__LINE__, Js[x_2][y_2] + pG->f, 25.);
387: dequals(__LINE__, pG->f + Ji[x_3][y_3], 26.);
388: dequals(__LINE__, Ji[x_3][y_3] + pG->f, 26.);
389: dequals(__LINE__, pG->f + Juc[x_4][y_4], 27.);
390: dequals(__LINE__, Juc[x_4][y_4] + pG->f, 27.);
391: dequals(__LINE__, pG->f + Jus[x_5][y_5], 28.);
392: dequals(__LINE__, Jus[x_5][y_5] + pG->f, 28.);
393: dequals(__LINE__, pG->f + Jui[x_6][y_6], 29.);
394: dequals(__LINE__, Jui[x_6][y_6] + pG->f, 29.);
395: dequals(__LINE__, pG->f + Jl[x_7][y_7], 30.);
396: dequals(__LINE__, Jl[x_7][y_7] + pG->f, 30.);
397: dequals(__LINE__, pG->f + Jul[x_8][y_8], 31.);
398: dequals(__LINE__, Jul[x_8][y_8] + pG->f, 31.);
399: dequals(__LINE__, pG->f + Jf[x_9][y_9], 32.);
400: dequals(__LINE__, Jf[x_9][y_9] + pG->f, 32.);
401: dequals(__LINE__, pG->f + Jd[x_10][y_10], 33.);
402: dequals(__LINE__, Jd[x_10][y_10] + pG->f, 33.);
403: #if ANSI
404: ldequals(__LINE__, pG->f + Jld[x_11][y_11], 34.L);
405: ldequals(__LINE__, Jld[x_11][y_11] + pG->f, 34.L);
406: #endif
407: dequals(__LINE__, pG->d + Jc[x_0][y_0], 24.);
408: dequals(__LINE__, Jc[x_0][y_0] + pG->d, 24.);
409: #if ANSI
410: dequals(__LINE__, pG->d + Jsc[x_1][y_1], 25.);
411: dequals(__LINE__, Jsc[x_1][y_1] + pG->d, 25.);
412: #endif
413: dequals(__LINE__, pG->d + Js[x_2][y_2], 26.);
414: dequals(__LINE__, Js[x_2][y_2] + pG->d, 26.);
415: dequals(__LINE__, pG->d + Ji[x_3][y_3], 27.);
416: dequals(__LINE__, Ji[x_3][y_3] + pG->d, 27.);
417: dequals(__LINE__, pG->d + Juc[x_4][y_4], 28.);
418: dequals(__LINE__, Juc[x_4][y_4] + pG->d, 28.);
419: dequals(__LINE__, pG->d + Jus[x_5][y_5], 29.);
420: dequals(__LINE__, Jus[x_5][y_5] + pG->d, 29.);
421: dequals(__LINE__, pG->d + Jui[x_6][y_6], 30.);
422: dequals(__LINE__, Jui[x_6][y_6] + pG->d, 30.);
423: dequals(__LINE__, pG->d + Jl[x_7][y_7], 31.);
424: dequals(__LINE__, Jl[x_7][y_7] + pG->d, 31.);
425: dequals(__LINE__, pG->d + Jul[x_8][y_8], 32.);
426: dequals(__LINE__, Jul[x_8][y_8] + pG->d, 32.);
427: dequals(__LINE__, pG->d + Jf[x_9][y_9], 33.);
428: dequals(__LINE__, Jf[x_9][y_9] + pG->d, 33.);
429: dequals(__LINE__, pG->d + Jd[x_10][y_10], 34.);
430: dequals(__LINE__, Jd[x_10][y_10] + pG->d, 34.);
431: #if ANSI
432: ldequals(__LINE__, pG->d + Jld[x_11][y_11], 35.L);
433: ldequals(__LINE__, Jld[x_11][y_11] + pG->d, 35.L);
434: #endif
435: #if ANSI
436: ldequals(__LINE__, pG->ld + Jc[x_0][y_0], 25.L);
437: ldequals(__LINE__, Jc[x_0][y_0] + pG->ld, 25.L);
438: #endif
439: #if ANSI
440: ldequals(__LINE__, pG->ld + Jsc[x_1][y_1], 26.L);
441: ldequals(__LINE__, Jsc[x_1][y_1] + pG->ld, 26.L);
442: #endif
443: #if ANSI
444: ldequals(__LINE__, pG->ld + Js[x_2][y_2], 27.L);
445: ldequals(__LINE__, Js[x_2][y_2] + pG->ld, 27.L);
446: #endif
447: #if ANSI
448: ldequals(__LINE__, pG->ld + Ji[x_3][y_3], 28.L);
449: ldequals(__LINE__, Ji[x_3][y_3] + pG->ld, 28.L);
450: #endif
451: #if ANSI
452: ldequals(__LINE__, pG->ld + Juc[x_4][y_4], 29.L);
453: ldequals(__LINE__, Juc[x_4][y_4] + pG->ld, 29.L);
454: #endif
455: #if ANSI
456: ldequals(__LINE__, pG->ld + Jus[x_5][y_5], 30.L);
457: ldequals(__LINE__, Jus[x_5][y_5] + pG->ld, 30.L);
458: #endif
459: #if ANSI
460: ldequals(__LINE__, pG->ld + Jui[x_6][y_6], 31.L);
461: ldequals(__LINE__, Jui[x_6][y_6] + pG->ld, 31.L);
462: #endif
463: #if ANSI
464: ldequals(__LINE__, pG->ld + Jl[x_7][y_7], 32.L);
465: ldequals(__LINE__, Jl[x_7][y_7] + pG->ld, 32.L);
466: #endif
467: #if ANSI
468: ldequals(__LINE__, pG->ld + Jul[x_8][y_8], 33.L);
469: ldequals(__LINE__, Jul[x_8][y_8] + pG->ld, 33.L);
470: #endif
471: #if ANSI
472: ldequals(__LINE__, pG->ld + Jf[x_9][y_9], 34.L);
473: ldequals(__LINE__, Jf[x_9][y_9] + pG->ld, 34.L);
474: #endif
475: #if ANSI
476: ldequals(__LINE__, pG->ld + Jd[x_10][y_10], 35.L);
477: ldequals(__LINE__, Jd[x_10][y_10] + pG->ld, 35.L);
478: #endif
479: #if ANSI
480: ldequals(__LINE__, pG->ld + Jld[x_11][y_11], 36.L);
481: ldequals(__LINE__, Jld[x_11][y_11] + pG->ld, 36.L);
482: #endif
483: }}
484: report(Filename);
485: }
486: /* The Plum Hall Validation Suite for C
487: * Unpublished copyright (c) 1986-1990, Chiron Systems Inc and Plum Hall Inc.
488: * VERSION: 2.00
489: * DATE: 90/04/05
490: * The "ANSI" mode of this suite corresponds to official ANSI C, X3.159-1989.
491: * As per your license agreement, your distribution is not to be moved or copied outside the Designated Site
492: * without specific permission from Plum Hall Inc.
493: */
494:
495: /*
496: * UTILS - various utility routines.
497: */
498: #include <stdio.h>
499: #include <math.h>
500: #include "defs.h"
501: #ifdef __STDC__
502: #include <stdlib.h>
503: #include <string.h>
504: #endif
505:
506: void setzero(), setremark(), trace();
507: int Nerrs = 0;
508: int Nremarks = 0;
509: long Nsuccess = 0;
510: int Debug = FALSE;
511: char *Filename = NULL;
512: static char details[BUFSIZ] = {0};
513: static int trace_msg_len = 0;
514: static char trace_routine[20] = "";
515: static char trace_filename[BUFSIZ] = "";
516: static int remarks = FALSE;
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536: /*
537: * ERRMSG - print and tabulate each message
538: */
539: static void errmsg(msg, line)
540: char *msg;
541: int line;
542: {
543: if (trace_msg_len != 0)
544: {
545: printf("\n");
546: trace_msg_len = 0;
547: strcpy(trace_routine, "");
548: }
549: if (line > 0 || remarks)
550: printf("%s in %s at line %d%s\n",
551: line > 0 ? "ERROR" : "REMARK",
552: Filename,
553: line > 0 ? line : -line, msg);
554: fflush(stdout);
555: if (line > 0)
556: ++Nerrs;
557: else
558: ++Nremarks;
559: }
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586: /*
587: * IEQUALS - 'int' quality check. If val1 != val2, then report an error.
588: */
589: int iequals(line, val1, val2)
590: int val1, val2;
591: int line;
592: {
593: if (val1 != val2)
594: {
595: sprintf(details, ": (%d) != (%d)", val1, val2);
596: errmsg(details, line);
597: return (0);
598: }
599: else
600: trace("iequals", line);
601: return (1);
602: }
603:
604: /*
605: * INOTEQUALS - 'int' non-equality check. If val1 == val2, then
606: * report an error.
607: */
608: int inotequals(line, val1, val2)
609: int val1, val2;
610: int line;
611: {
612: if (val1 == val2)
613: {
614: sprintf(details, ": (%d) == (%d)", val1, val2);
615: errmsg(details, line);
616: return (0);
617: }
618: else
619: trace("inotequals", line);
620: return (1);
621: }
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636: /*
637: * LEQUALS - 'long' quality check. If val1 != val2, then
638: * report an error.
639: */
640: int lequals(line, val1, val2)
641: long val1, val2;
642: int line;
643: {
644: if (val1 != val2)
645: {
646: sprintf(details, ": (%ld) != (%ld)", val1, val2);
647: errmsg(details, line);
648: return (0);
649: }
650: else
651: trace("lequals", line);
652: return (1);
653: }
654:
655: /*
656: * COMPLAIN - unconditional failure.
657: */
658: int complain(line)
659: int line;
660: {
661: errmsg("", line);
662: return 0;
663: }
664:
665: /*
666: * STEQUALS - string equality.
667: */
668: int stequals(line, val1, val2)
669: char * val1, *val2;
670: int line;
671: {
672: if (strcmp(val1, val2))
673: {
674: sprintf(details, ": \"%s\" != \"%s\"", val1, val2);
675: errmsg(details, line);
676: return (0);
677: }
678: else
679: trace("stequals", line);
680: return (1);
681: }
682:
683:
684:
685:
686: /*
687: * AEQUALS - 'address' equality check. If val1 != val2, then
688: * report an error.
689: */
690: int aequals(line, val1, val2)
691: #if ANSI
692: const void * val1, * val2;
693: #else
694: char * val1, * val2;
695: #endif
696: int line;
697: {
698: if (val1 != val2)
699: {
700: #if ANSI
701: sprintf(details, ": (%p) != (%p)", val1, val2);
702: #else
703: sprintf(details, ": (%lx) != (%lx)", (long)val1, (long)val2);
704: #endif
705: errmsg(details, line);
706: return (0);
707: }
708: else
709: trace("aequals", line);
710: return (1);
711: }
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736: /*
737: * ARBHEX - convert an arbitrary byte-sequence into hex codes
738: */
739: #ifndef CHAR_BIT
740: #define CHAR_BIT 8
741: #endif
742: #define NIBBLES_PER_BYTE ((CHAR_BIT + 3) / 4)
743: char *arbhex(str, p, n)
744: char *str; /* where to store the target string */
745: char *p; /* where to find the source bytes */
746: int n; /* how many bytes */
747: {
748: int i, nib, hex_dig;
749: static char codes[] = "0123456789ABCDEF";
750:
751: for (i = 0; i < n; ++i, ++p)
752: for (nib = NIBBLES_PER_BYTE - 1; nib >= 0; --nib)
753: {
754: hex_dig = (*p & (unsigned int)(0xF << (nib*4))) >> (nib*4);
755: *str++ = codes[hex_dig];
756: }
757: *str = '\0';
758: return str;
759: }
760:
761: /*
762: * FAEQUALS - function address equality check. If val1 != val2, then
763: * report an error. The address of a function is not necessarily the same
764: * size/type as the address of data.
765: */
766: int faequals(line, val1, val2)
767: int (*val1)(), (*val2)();
768: int line;
769: {
770: char buf1[sizeof(val1)*NIBBLES_PER_BYTE + 1];
771: char buf2[sizeof(val2)*NIBBLES_PER_BYTE + 1];
772:
773: if (val1 != val2)
774: {
775: arbhex(buf1, (char *)&val1, (int)sizeof(val1));
776: arbhex(buf2, (char *)&val2, (int)sizeof(val2));
777: sprintf(details, ": (%s) != (%s)", buf1, buf2);
778: errmsg(details, line);
779: return (0);
780: }
781: else
782: trace("faequals", line);
783: return (1);
784: }
785:
786: /*
787: * DEQUALS - 'double' equality check. If val1 != val2, then
788: * report an error. This is computed using an equality approximation
789: * that verifies that the two numbers are equal to R digits whenever
790: *
791: * |x - y| 1 1-R
792: * ------- <= - 10
793: * |x| 2
794: *
795: * DIGITS_MAX is defined in defs.h
796: */
797: double Delta = 0.0;
798: int dequals(line, val1, val2)
799: double val1, val2;
800: int line;
801: {
802: double *pd;
803:
804: if (Delta == 0.0)
805: Delta = 0.5 / pow(10.0, DIGITS_MAX-1.0);
806: if (val1 == val2)
807: {
808: trace("dequals", line);
809: return (1);
810: }
811: pd = &val1;
812: if (val1 == 0.0)
813: pd = &val2;
814:
815: /* special cases to handle zero against very small numbers */
816: if (fabs(val1) == 0.0 && fabs(val2) < Delta)
817: ;
818: else if (fabs(val2) == 0.0 && fabs(val1) < Delta)
819: ;
820: else if ((fabs(val1 - val2) / fabs(*pd)) > Delta)
821: {
822: sprintf(details, ": (%.*G) != (%.*G)",
823: DIGITS_MAX+2, val1, DIGITS_MAX+2, val2);
824: errmsg(details, line);
825: return (0);
826: }
827: trace("dequals", line);
828: return (1);
829: }
830:
831:
832:
833:
834:
835:
836: #if ANSI
837: /*
838: * LDEQUALS - Long double equality ... more of the same.
839: */
840: #define ldabs(ld) ((ld) < 0.0 ? -(ld) : (ld))
841: long double LDelta = 0.0;
842: int ldequals(line, val1, val2)
843: long double val1, val2;
844: int line;
845: {
846: long double *pd;
847:
848: if (LDelta == 0.0)
849: {
850: LDelta = 0.5L / pow(10.0, LDIGITS_MAX-1.0);
851: }
852: if (val1 == val2)
853: {
854: trace("ldequals", line);
855: return (1);
856: }
857: pd = &val1;
858: if (val1 == 0.0)
859: pd = &val2;
860:
861: /* special cases to handle zero against very small numbers */
862: if (ldabs(val1) == 0.0 && ldabs(val2) < LDelta)
863: ;
864: else if (ldabs(val2) == 0.0 && ldabs(val1) < LDelta)
865: ;
866: else if ((ldabs(val1 - val2) / ldabs(*pd)) > LDelta)
867: {
868: sprintf(details, ": (%.*LE) != (%.*LE)",
869: LDIGITS_MAX+2, val1, LDIGITS_MAX+2, val2);
870: errmsg(details, line);
871: return (0);
872: }
873: trace("ldequals", line);
874: return (1);
875: }
876: #endif
877:
878:
879:
880:
881:
882:
883:
884:
885:
886: /*
887: * FEQUALS - same as DEQUALS, but to FDIGITS_MAX instead of DIGITS_MAX.
888: */
889: double FDelta = 0.0;
890: int fequals(line, in1, in2)
891: double in1, in2;
892: int line;
893: {
894: float *pf;
895: float val1 = in1;
896: float val2 = in2;
897:
898: if (FDelta == 0.0)
899: FDelta = 0.5 / pow(10.0, FDIGITS_MAX-1.0);
900: if (val1 == val2)
901: {
902: trace("fequals", line);
903: return (1);
904: }
905: pf = &val1;
906: if (val1 == 0.0)
907: pf = &val2;
908:
909: /* special cases to handle zero against very small numbers */
910: if (fabs(val1) == 0.0 && fabs(val2) < FDelta)
911: ;
912: else if (fabs(val2) == 0.0 && fabs(val1) < FDelta)
913: ;
914: else if ((fabs(val1 - val2) / fabs(*pf)) > FDelta)
915: {
916: sprintf(details, ": (%.*G) != (%.*G)",
917: FDIGITS_MAX+2, val1, FDIGITS_MAX+2, val2);
918: errmsg(details, line);
919: return (0);
920: }
921: trace("fequals", line);
922: return (1);
923: }
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936: /*
937: * CHECKTHAT - simple condition check. If val1 == 0, then
938: * report an error.
939: */
940: int checkthat(line, cond)
941: int cond;
942: int line;
943: {
944: if (!cond)
945: {
946: errmsg("", line);
947: return (0);
948: }
949: else
950: trace("checkthat", line);
951: return (1);
952: }
953:
954: /*
955: * VALUE - the value routines are used to defeat value propagation in optimizing compilers.
956: * We want to make sure that we are testing what we think we are testing, not what the compiler transformed it to.
957: * 1988: Some compilers "open-code" all small functions. Now we have to hide the constants still further.
958: */
959: static int Zero = 0; /* See setzero() below */
960: int ivalue(i)
961: int i;
962: {
963: return i + Zero;
964: }
965: long lvalue(i)
966: long i;
967: {
968: return i + Zero;
969: }
970: double dvalue(i)
971: double i;
972: {
973: return i + Zero;
974: }
975: float fvalue(i)
976: float i;
977: {
978: return i + Zero;
979: }
980: generic_ptr avalue(i)
981: generic_ptr i;
982: {
983: return (char *)i + Zero;
984: }
985:
986: /*
987: * SCHECK - check both values and side effects.
988: */
989: int Side = 0;
990: int scheck(line, val1, se, val2)
991: int val1, se, val2, line;
992: {
993: int status = 1;
994:
995: if (Side != se)
996: {
997: errmsg(": incorrect side effect", line);
998: status = 0;
999: }
1000: else
1001: trace("scheck", line);
1002: Side = 0;
1003: return (status == 1 && iequals(line, val1, val2));
1004: }
1005:
1006: /*
1007: * DO_NOTHING - this is also intended to defeat optimizers by passing
1008: * the addresses of variables for which we want to stop any value propagation.
1009: */
1010: #if ANSI
1011: #if NEW_STYLE_FN_DEF
1012: int do_nothing(void *p, ...) { *(char *)p = *((char *)p + Zero); return 0; }
1013: #else
1014: int do_nothing(p) void *p; { *(char *)p = *((char *)p + Zero); return 0; }
1015: #endif
1016: #else
1017: int do_nothing(){ return 0; }
1018: #endif
1019: /*
1020: * REPORT - summary report at end of testing.
1021: */
1022: void report(program)
1023: char *program;
1024: {
1025: if (trace_msg_len != 0)
1026: printf("\n");
1027: if (remarks && Nremarks != 0)
1028: printf("***** %d remark%s detected in %s *****\n", Nremarks,
1029: (Nremarks != 1) ? "s" : "", program);
1030: exit(Nerrs);
1031: }
1032: /*
1033: * DBPRINT - print the message if the Debug flag is on.
1034: */
1035: void dbprint(s)
1036: char *s;
1037: {
1038: if (Debug)
1039: {
1040: printf("***DEBUG***");
1041: printf(s);
1042: }
1043: }
1044:
1045: /*
1046: * TRACE - print a line-number trace for debugging
1047: * Also count successful tests.
1048: */
1049: void trace(routine, line)
1050: char *routine;
1051: int line;
1052: {
1053: char buf[10];
1054: static int first = 1;
1055:
1056: if (first)
1057: {
1058: setzero();
1059: setremark();
1060: first = 0;
1061: }
1062: if (Debug)
1063: {
1064: if (strcmp(trace_routine, routine) != 0 ||
1065: strcmp(trace_filename, Filename) != 0 ||
1066: trace_msg_len > 60)
1067: {
1068: printf("\nTRACE: %s at %s ", routine, Filename);
1069: strcpy(trace_routine, routine);
1070: strcpy(trace_filename, Filename);
1071: trace_msg_len = 11 + strlen(routine) + strlen(Filename);
1072: }
1073: sprintf(buf, "%d ", abs(line));
1074: printf("%s", buf);
1075: trace_msg_len += strlen(buf);
1076: fflush(stdout);
1077: }
1078: ++Nsuccess;
1079: }
1080:
1081:
1082: /*
1083: * DIGITS - calculate the number of digits after the decimal
1084: * place so that the number is printed to DIGITS_MAX significant
1085: * digits.
1086: */
1087: int digits(d)
1088: double d;
1089: {
1090: int i;
1091:
1092: if (d == 0.0)
1093: i = 0;
1094: else
1095: i = log10(fabs(d));
1096: return(DIGITS_MAX - (i < 0 ? 0 : i+1));
1097: }
1098: int fdigits(d)
1099: double d;
1100: {
1101: int i;
1102:
1103: if (d == 0.0)
1104: i = 0;
1105: else
1106: i = log10(fabs(d));
1107: return(FDIGITS_MAX - (i < 0 ? 0 : i+1));
1108: }
1109:
1110: /*
1111: * SETZERO - appear, to a compiler, as though Zero is unpredictably set
1112: */
1113: void setzero()
1114: {
1115: FILE *fp;
1116: int save;
1117:
1118: save = errno;
1119: fp = fopen("nonexistent", "r");
1120: if (fp != 0)
1121: {
1122: fscanf(fp, "ignore format", &Zero);
1123: fclose(fp);
1124: }
1125: errno = save;
1126: }
1127:
1128:
1129:
1130: /*
1131: * PR_OK - printf a text line in ok situation (no error, just text)
1132: */
1133: void pr_ok(s)
1134: char *s;
1135: {
1136: fputs(s, stdout);
1137: }
1138:
1139: /*
1140: * PR_ERR - printf a text line in error situation (such as "SKIP'ed")
1141: */
1142: void pr_err(s)
1143: char *s;
1144: {
1145: ++Nerrs;
1146: pr_ok(s);
1147: }
1148:
1149: /*
1150: * SETREMARK - determine whether "remark" messages should be printed
1151: */
1152: void setremark()
1153: {
1154: FILE *fp;
1155:
1156: if (getenv("SUITE_REMARK") != 0)
1157: remarks = TRUE;
1158: else if ((fp = fopen("REMARK", "r")) == 0)
1159: remarks = FALSE;
1160: else
1161: {
1162: remarks = TRUE;
1163: fclose(fp);
1164: }
1165: }
1166:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.