• Tom Lane's avatar
    Improve contrib/cube's handling of zero-D cubes, infinities, and NaNs. · f31a931f
    Tom Lane authored
    It's always been possible to create a zero-dimensional cube by converting
    from a zero-length float8 array, but cube_in failed to accept the '()'
    representation that cube_out produced for that case, resulting in a
    dump/reload hazard.  Make it accept the case.  Also fix a couple of
    other places that didn't behave sanely for zero-dimensional cubes:
    cube_size would produce 1.0 when surely the answer should be 0.0,
    and g_cube_distance risked a divide-by-zero failure.
    
    Likewise, it's always been possible to create cubes containing float8
    infinity or NaN coordinate values, but cube_in couldn't parse such input,
    and cube_out produced platform-dependent spellings of the values.  Convert
    them to use float8in_internal and float8out_internal so that the behavior
    will be the same as for float8, as we recently did for the core geometric
    types (cf commit 50861cd6).  As in that commit, I don't pretend that this
    patch fixes all insane corner-case behaviors that may exist for NaNs, but
    it's a step forward.
    
    (This change allows removal of the separate cube_1.out and cube_3.out
    expected-files, as the platform dependency that previously required them
    is now gone: an underflowing coordinate value will now produce an error
    not plus or minus zero.)
    
    Make errors from cube_in follow project conventions as to spelling
    ("invalid input syntax for cube" not "bad cube representation")
    and errcode (INVALID_TEXT_REPRESENTATION not SYNTAX_ERROR).
    
    Also a few marginal code cleanups and comment improvements.
    
    Tom Lane, reviewed by Amul Sul
    
    Discussion: <15085.1472494782@sss.pgh.pa.us>
    f31a931f
cube_2.out 34.4 KB