diff --git a/src/halfvec.c b/src/halfvec.c index 95c2067..fe0de2b 100644 --- a/src/halfvec.c +++ b/src/halfvec.c @@ -462,7 +462,7 @@ halfvec_in(PG_FUNCTION_ARGS) x[dim] = Float4ToHalfUnchecked(val); - if ((errno == ERANGE && isinf(val)) || (HalfIsInf(x[dim]) && !isinf(val)) || (HalfIsZero(x[dim]) && val != 0)) + if ((errno == ERANGE && (isinf(val) || val == 0)) || (HalfIsInf(x[dim]) && !isinf(val)) || (HalfIsZero(x[dim]) && val != 0)) ereport(ERROR, (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), errmsg("\"%s\" is out of range for type halfvec", pt))); diff --git a/test/expected/halfvec_input.out b/test/expected/halfvec_input.out index 76eab16..59c8556 100644 --- a/test/expected/halfvec_input.out +++ b/test/expected/halfvec_input.out @@ -62,6 +62,10 @@ SELECT '[4e38,1]'::halfvec; ERROR: "4e38" is out of range for type halfvec LINE 1: SELECT '[4e38,1]'::halfvec; ^ +SELECT '[1e-46,1]'::halfvec; +ERROR: "1e-46" is out of range for type halfvec +LINE 1: SELECT '[1e-46,1]'::halfvec; + ^ SELECT '[1,2,3'::halfvec; ERROR: malformed halfvec literal: "[1,2,3" LINE 1: SELECT '[1,2,3'::halfvec; diff --git a/test/sql/halfvec_input.sql b/test/sql/halfvec_input.sql index 1ae3abd..1b16f4a 100644 --- a/test/sql/halfvec_input.sql +++ b/test/sql/halfvec_input.sql @@ -11,6 +11,7 @@ SELECT '[65519,-65519]'::halfvec; SELECT '[65520,-65520]'::halfvec; SELECT '[1e-8,-1e-8]'::halfvec; SELECT '[4e38,1]'::halfvec; +SELECT '[1e-46,1]'::halfvec; SELECT '[1,2,3'::halfvec; SELECT '[1,2,3]9'::halfvec; SELECT '1,2,3'::halfvec;