|
|
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.