|
|
1.1 root 1: /* The Plum Hall Validation Suite for C
2: * Unpublished copyright (c) 1986-1991, Chiron Systems Inc and Plum Hall Inc.
3: * VERSION: 4
4: * DATE: 1993-01-01
5: * The "ANSI" mode of this suite corresponds to 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 LIB_TEST 1
11: #include "defs.h"
12: #if !ANSI || !HAS_PROTOTYPES
13: #define SKIP41 1
14: #endif
15:
16: #include "flags.h"
17: #ifndef SKIP41
18: #include <float.h>
19: /*
20: * 4.1.4 - Limits <float.h>
21: */
22: void d41_4b()
23: {
24: Filename = "d41c.c";
25:
26: /* FLT_RADIX must be a restricted constant expression.
27: * All the others need not be constant expressions (ANSI8706).
28: */
29: #if FLT_RADIX < 2
30: complain(__LINE__);
31: #endif
32:
33: checkthat( - __LINE__, FLT_ROUNDS >= -1); /* other values of FLT_ROUNDS may be implem-def */
34: {
35: double d1, d2, d3;
36:
37: d1 = dvalue(1.);
38: d2 = dvalue(2 * DBL_EPSILON / 3);
39: d3 = d1 + d2; /* should cause rounding into lowest-order digit */
40: if (FLT_ROUNDS == 0 /* toward zero */ && d3 > d1) complain(__LINE__);
41: else if (FLT_ROUNDS == 1 /* to nearest */ && d3 <= d1) complain(__LINE__);
42: else if (FLT_ROUNDS == 2 /* toward pos inf */ && d3 <= d1) complain(__LINE__);
43: else if (FLT_ROUNDS == 3 /* to neg inf */ && d3 > d1) complain(__LINE__);
44:
45: d1 = -dvalue(1.);
46: d2 = -dvalue(2 * DBL_EPSILON / 3);
47: d3 = d1 + d2; /* should cause rounding into lowest-order digit */
48: if (FLT_ROUNDS == 0 /* toward zero */ && d3 < d1) complain(__LINE__);
49: else if (FLT_ROUNDS == 1 /* to nearest */ && d3 >= d1) complain(__LINE__);
50: else if (FLT_ROUNDS == 2 /* toward pos inf */ && d3 < d1) complain(__LINE__);
51: else if (FLT_ROUNDS == 3 /* to neg inf */ && d3 >= d1) complain(__LINE__);
52: }
53:
54: checkthat(__LINE__, FLT_MANT_DIG > 0);
55: checkthat(__LINE__, DBL_MANT_DIG > 0);
56: checkthat(__LINE__, LDBL_MANT_DIG > 0);
57: checkthat(__LINE__, FLT_DIG >= 6);
58: checkthat(__LINE__, DBL_DIG >= (ANSI8703 ? 10 : 6));
59: checkthat(__LINE__, LDBL_DIG >= (ANSI8703 ? 10 : 6));
60: checkthat(__LINE__, FLT_MIN_EXP < 0);
61: checkthat(__LINE__, DBL_MIN_EXP < 0);
62: checkthat(__LINE__, LDBL_MIN_EXP < 0);
63: checkthat(__LINE__, FLT_MIN_10_EXP <= -37);
64: checkthat(__LINE__, DBL_MIN_10_EXP <= -37);
65: checkthat(__LINE__, LDBL_MIN_10_EXP <= -37);
66: checkthat(__LINE__, FLT_MAX_EXP > 0);
67: checkthat(__LINE__, DBL_MAX_EXP > 0);
68: checkthat(__LINE__, LDBL_MAX_EXP > 0);
69: checkthat(__LINE__, FLT_MAX_10_EXP >= 37);
70: checkthat(__LINE__, DBL_MAX_10_EXP >= 37);
71: checkthat(__LINE__, LDBL_MAX_10_EXP >= 37);
72: checkthat(__LINE__, FLT_MAX >= 1E+37);
73: checkthat(__LINE__, DBL_MAX >= 1E+37);
74: checkthat(__LINE__, LDBL_MAX >= 1E+37);
75: checkthat(__LINE__, FLT_EPSILON <= 1E-5);
76: checkthat(__LINE__, DBL_EPSILON <= (ANSI8703 ? 1E-9 : 1E-5));
77: checkthat(__LINE__, LDBL_EPSILON <= (ANSI8703 ? 1E-9 : 1E-5));
78: checkthat(__LINE__, FLT_MIN <= 1E-37);
79: checkthat(__LINE__, DBL_MIN <= 1E-37);
80: checkthat(__LINE__, LDBL_MIN <= 1E-37);
81:
82: /* check that all names are really macros */
83: #if !defined(FLT_MANT_DIG) || !defined(DBL_MANT_DIG) || !defined(LDBL_MANT_DIG)
84: complain(__LINE__);
85: #endif
86: #if !defined(FLT_DIG) || !defined(DBL_DIG) || !defined(LDBL_DIG)
87: complain(__LINE__);
88: #endif
89: #if !defined(FLT_MIN_EXP) || !defined(DBL_MIN_EXP) || !defined(LDBL_MIN_EXP)
90: complain(__LINE__);
91: #endif
92: #if !defined(FLT_MIN_10_EXP) || !defined(DBL_MIN_10_EXP) || !defined(LDBL_MIN_10_EXP)
93: complain(__LINE__);
94: #endif
95: #if !defined(FLT_MAX_EXP) || !defined(DBL_MAX_EXP) || !defined(LDBL_MAX_EXP)
96: complain(__LINE__);
97: #endif
98: #if !defined(FLT_MAX_10_EXP) || !defined(DBL_MAX_10_EXP) || !defined(LDBL_MAX_10_EXP)
99: complain(__LINE__);
100: #endif
101:
102:
103: #if !defined(FLT_MAX) || !defined(DBL_MAX) || !defined(LDBL_MAX)
104: complain(__LINE__);
105: #endif
106: #if !defined(FLT_EPSILON) || !defined(DBL_EPSILON) || !defined(LDBL_EPSILON)
107: complain(__LINE__);
108: #endif
109: #if !defined(FLT_MIN) || !defined(DBL_MIN) || !defined(LDBL_MIN)
110: complain(__LINE__);
111: #endif
112: }
113: #else
114: int skp41c = 1; /* must have one def */
115: #endif /* SKIP41 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.