(linenum→info "unix/slp.c:2238")

glibc/2.7/math/bug-nextafter.c

    1: #include <fenv.h>
    2: #include <math.h>
    3: #include <float.h>
    4: #include <stdlib.h>
    5: #include <stdio.h>
    6: 
    7: float zero = 0.0;
    8: float inf = INFINITY;
    9: 
   10: int
   11: main (void)
   12: {
   13:   int result = 0;
   14: 
   15:   float i = INFINITY;
   16:   float m = FLT_MAX;
   17:   feclearexcept (FE_ALL_EXCEPT);
   18:   if (nextafterf (m, i) != i)
   19:     {
   20:       puts ("nextafterf+ failed");
   21:       ++result;
   22:     }
   23:   if (fetestexcept (FE_OVERFLOW) == 0)
   24:     {
   25:       puts ("nextafterf+ did not overflow");
   26:       ++result;
   27:     }
   28:   feclearexcept (FE_ALL_EXCEPT);
   29:   if (nextafterf (-m, -i) != -i)
   30:     {
   31:       puts ("nextafterf- failed");
   32:       ++result;
   33:     }
   34:   if (fetestexcept (FE_OVERFLOW) == 0)
   35:     {
   36:       puts ("nextafterf- did not overflow");
   37:       ++result;
   38:     }
   39: 
   40:   i = 0;
   41:   m = FLT_MIN;
   42:   feclearexcept (FE_ALL_EXCEPT);
   43:   i = nextafterf (m, i);
   44:   if (i < 0 || i >= FLT_MIN)
   45:     {
   46:       puts ("nextafterf+ failed");
   47:       ++result;
   48:     }
   49:   if (fetestexcept (FE_UNDERFLOW) == 0)
   50:     {
   51:       puts ("nextafterf+ did not underflow");
   52:       ++result;
   53:     }
   54:   i = 0;
   55:   feclearexcept (FE_ALL_EXCEPT);
   56:   i = nextafterf (-m, -i);
   57:   if (i > 0 || i <= -FLT_MIN)
   58:     {
   59:       puts ("nextafterf- failed");
   60:       ++result;
   61:     }
   62:   if (fetestexcept (FE_UNDERFLOW) == 0)
   63:     {
   64:       puts ("nextafterf- did not underflow");
   65:       ++result;
   66:     }
   67:   i = -INFINITY;
   68:   feclearexcept (FE_ALL_EXCEPT);
   69:   m = nextafterf (zero, inf);
   70:   if (m < 0.0 || m >= FLT_MIN)
   71:     {
   72:       puts ("nextafterf+ failed");
   73:       ++result;
   74:     }
   75:   if (fetestexcept (FE_UNDERFLOW) == 0)
   76:     {
   77:       puts ("nextafterf+ did not underflow");
   78:       ++result;
   79:     }
   80:   feclearexcept (FE_ALL_EXCEPT);
   81:   if (nextafterf (m, i) != 0.0)
   82:     {
   83:       puts ("nextafterf+ failed");
   84:       ++result;
   85:     }
   86:   if (fetestexcept (FE_UNDERFLOW) == 0)
   87:     {
   88:       puts ("nextafterf+ did not underflow");
   89:       ++result;
   90:     }
   91:   feclearexcept (FE_ALL_EXCEPT);
   92:   m = nextafterf (copysignf (zero, -1.0), -inf);
   93:   if (m > 0.0 || m <= -FLT_MIN)
   94:     {
   95:       puts ("nextafterf- failed");
   96:       ++result;
   97:     }
   98:   if (fetestexcept (FE_UNDERFLOW) == 0)
   99:     {
  100:       puts ("nextafterf- did not underflow");
  101:       ++result;
  102:     }
  103:   feclearexcept (FE_ALL_EXCEPT);
  104:   if (nextafterf (m, -i) != 0.0)
  105:     {
  106:       puts ("nextafterf- failed");
  107:       ++result;
  108:     }
  109:   if (fetestexcept (FE_UNDERFLOW) == 0)
  110:     {
  111:       puts ("nextafterf- did not underflow");
  112:       ++result;
  113:     }
  114: 
  115:   double di = INFINITY;
  116:   double dm = DBL_MAX;
  117:   feclearexcept (FE_ALL_EXCEPT);
  118:   if (nextafter (dm, di) != di)
  119:     {
  120:       puts ("nextafter+ failed");
  121:       ++result;
  122:     }
  123:   if (fetestexcept (FE_OVERFLOW) == 0)
  124:     {
  125:       puts ("nextafter+ did not overflow");
  126:       ++result;
  127:     }
  128:   feclearexcept (FE_ALL_EXCEPT);
  129:   if (nextafter (-dm, -di) != -di)
  130:     {
  131:       puts ("nextafter failed");
  132:       ++result;
  133:     }
  134:   if (fetestexcept (FE_OVERFLOW) == 0)
  135:     {
  136:       puts ("nextafter- did not overflow");
  137:       ++result;
  138:     }
  139: 
  140:   di = 0;
  141:   dm = DBL_MIN;
  142:   feclearexcept (FE_ALL_EXCEPT);
  143:   di = nextafter (dm, di);
  144:   if (di < 0 || di >= DBL_MIN)
  145:     {
  146:       puts ("nextafter+ failed");
  147:       ++result;
  148:     }
  149:   if (fetestexcept (FE_UNDERFLOW) == 0)
  150:     {
  151:       puts ("nextafter+ did not underflow");
  152:       ++result;
  153:     }
  154:   di = 0;
  155:   feclearexcept (FE_ALL_EXCEPT);
  156:   di = nextafter (-dm, -di);
  157:   if (di > 0 || di <= -DBL_MIN)
  158:     {
  159:       puts ("nextafter- failed");
  160:       ++result;
  161:     }
  162:   if (fetestexcept (FE_UNDERFLOW) == 0)
  163:     {
  164:       puts ("nextafter- did not underflow");
  165:       ++result;
  166:     }
  167:   di = -INFINITY;
  168:   feclearexcept (FE_ALL_EXCEPT);
  169:   dm = nextafter (zero, inf);
  170:   if (dm < 0.0 || dm >= DBL_MIN)
  171:     {
  172:       puts ("nextafter+ failed");
  173:       ++result;
  174:     }
  175:   if (fetestexcept (FE_UNDERFLOW) == 0)
  176:     {
  177:       puts ("nextafter+ did not underflow");
  178:       ++result;
  179:     }
  180:   feclearexcept (FE_ALL_EXCEPT);
  181:   if (nextafter (dm, di) != 0.0)
  182:     {
  183:       puts ("nextafter+ failed");
  184:       ++result;
  185:     }
  186:   if (fetestexcept (FE_UNDERFLOW) == 0)
  187:     {
  188:       puts ("nextafter+ did not underflow");
  189:       ++result;
  190:     }
  191:   feclearexcept (FE_ALL_EXCEPT);
  192:   dm = nextafter (copysign (zero, -1.0), -inf);
  193:   if (dm > 0.0 || dm <= -DBL_MIN)
  194:     {
  195:       puts ("nextafter- failed");
  196:       ++result;
  197:     }
  198:   if (fetestexcept (FE_UNDERFLOW) == 0)
  199:     {
  200:       puts ("nextafter- did not underflow");
  201:       ++result;
  202:     }
  203:   feclearexcept (FE_ALL_EXCEPT);
  204:   if (nextafter (dm, -di) != 0.0)
  205:     {
  206:       puts ("nextafter- failed");
  207:       ++result;
  208:     }
  209:   if (fetestexcept (FE_UNDERFLOW) == 0)
  210:     {
  211:       puts ("nextafter- did not underflow");
  212:       ++result;
  213:     }
  214: 
  215: #ifndef NO_LONG_DOUBLE
  216:   long double li = INFINITY;
  217:   long double lm = LDBL_MAX;
  218:   feclearexcept (FE_ALL_EXCEPT);
  219:   if (nextafterl (lm, li) != li)
  220:     {
  221:       puts ("nextafterl+ failed");
  222:       ++result;
  223:     }
  224:   if (fetestexcept (FE_OVERFLOW) == 0)
  225:     {
  226:       puts ("nextafterl+ did not overflow");
  227:       ++result;
  228:     }
  229:   feclearexcept (FE_ALL_EXCEPT);
  230:   if (nextafterl (-lm, -li) != -li)
  231:     {
  232:       puts ("nextafterl failed");
  233:       ++result;
  234:     }
  235:   if (fetestexcept (FE_OVERFLOW) == 0)
  236:     {
  237:       puts ("nextafterl- did not overflow");
  238:       ++result;
  239:     }
  240: 
  241:   li = 0;
  242:   lm = LDBL_MIN;
  243:   feclearexcept (FE_ALL_EXCEPT);
  244:   li = nextafterl (lm, li);
  245:   if (li < 0 || li >= LDBL_MIN)
  246:     {
  247:       puts ("nextafterl+ failed");
  248:       ++result;
  249:     }
  250:   if (fetestexcept (FE_UNDERFLOW) == 0)
  251:     {
  252:       puts ("nextafterl+ did not underflow");
  253:       ++result;
  254:     }
  255:   li = 0;
  256:   feclearexcept (FE_ALL_EXCEPT);
  257:   li = nextafterl (-lm, -li);
  258:   if (li > 0 || li <= -LDBL_MIN)
  259:     {
  260:       puts ("nextafterl- failed");
  261:       ++result;
  262:     }
  263:   if (fetestexcept (FE_UNDERFLOW) == 0)
  264:     {
  265:       puts ("nextafterl- did not underflow");
  266:       ++result;
  267:     }
  268:   li = -INFINITY;
  269:   feclearexcept (FE_ALL_EXCEPT);
  270:   lm = nextafterl (zero, inf);
  271:   if (lm < 0.0 || lm >= LDBL_MIN)
  272:     {
  273:       puts ("nextafterl+ failed");
  274:       ++result;
  275:     }
  276:   if (fetestexcept (FE_UNDERFLOW) == 0)
  277:     {
  278:       puts ("nextafterl+ did not underflow");
  279:       ++result;
  280:     }
  281:   feclearexcept (FE_ALL_EXCEPT);
  282:   if (nextafterl (lm, li) != 0.0)
  283:     {
  284:       puts ("nextafterl+ failed");
  285:       ++result;
  286:     }
  287:   if (fetestexcept (FE_UNDERFLOW) == 0)
  288:     {
  289:       puts ("nextafterl+ did not underflow");
  290:       ++result;
  291:     }
  292:   feclearexcept (FE_ALL_EXCEPT);
  293:   lm = nextafterl (copysign (zero, -1.0), -inf);
  294:   if (lm > 0.0 || lm <= -LDBL_MIN)
  295:     {
  296:       puts ("nextafterl- failed");
  297:       ++result;
  298:     }
  299:   if (fetestexcept (FE_UNDERFLOW) == 0)
  300:     {
  301:       puts ("nextafterl- did not underflow");
  302:       ++result;
  303:     }
  304:   feclearexcept (FE_ALL_EXCEPT);
  305:   if (nextafterl (lm, -li) != 0.0)
  306:     {
  307:       puts ("nextafterl- failed");
  308:       ++result;
  309:     }
  310:   if (fetestexcept (FE_UNDERFLOW) == 0)
  311:     {
  312:       puts ("nextafterl- did not underflow");
  313:       ++result;
  314:     }
  315: #endif
  316: 
  317:   return result;
  318: }
Syntax (Markdown)