Fix floating-point min/max tests, and mark them xfail.
authorTaylor R Campbell <campbell@mumble.net>
Thu, 3 Oct 2019 14:49:34 +0000 (14:49 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Thu, 3 Oct 2019 16:11:27 +0000 (16:11 +0000)
commit3551710b4964a2908956ebd32daceedbc1aaadbf
tree9a65ed2c91b06078c95de144c1a4ba1e10f16dc4
parent33e3a188ffb8e332db58af2a4942b8fa044034f2
Fix floating-point min/max tests, and mark them xfail.

I misread IEEE 754 semantics on min/max for _signalling_ NaN.

If given a number and a _quiet_ NaN, min/max are to return the
_number_.  But if given a _signalling_ NaN, min/max are to return a
quiet version of the NaN.

References:

Sec. 5.3 `Homogeneous general-computational operations',
subsec. 5.3.1 `General operations',
on minNum/maxNum/minNumMag/maxNumMag reads:

  `minNum(x, y) is...the canonicalized number if one operand is a
   number and the other is a quiet NaN.'

  `When either x or y is a signaling NaN, then the result is according
   to 6.2.'

Sec. 6.2 `Operations with NaNs' reads:

  `Under default exception handling, any operation signaling an invalid
   operation exception and for which a floating-point result is to be
   delivered shall deliver a quiet NaN.'

     [Consequently, _if_ min/max raise invalid-operation and
      nevertheless return a result, they shall return a quiet NaN.]

  `Signaling NaNs shall be reserved operands that, under default
   exception handling, signal the invalid operation exception (see 7.2)
   for every general-computational and signaling-computational
   operation except for the conversions described in 5.12.'

     [min/max (i.e., minNum/maxNum/minNumMag/maxNumMag) are listed
      under homogeneous general-computational, so this clause applies.]

Subsec. 6.2.3 `NaN propagation' further reads:

  `An operation that propagates a NaN operand to its result and has a
   single NaN as an input should produce a NaN with the payload of the
   input NaN.'

  `If two or more inputs are NaN, then the payload of the resulting NaN
   should be identical to the payload of one of the input NaNs if
   representable in the destination format.'
tests/runtime/test-flonum.scm