From e36cf20bce482b18bb1158aedd9171ab8704fd72 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Tue, 25 Jul 2023 15:44:04 -0700 Subject: [PATCH] Fixed CI --- src/vector.c | 6 ++++++ test/expected/functions.out | 16 ++++++++-------- test/sql/functions.sql | 4 ++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/vector.c b/src/vector.c index 6709b0d..0b907f7 100644 --- a/src/vector.c +++ b/src/vector.c @@ -645,6 +645,12 @@ cosine_distance(PG_FUNCTION_ARGS) /* Use sqrt(a * b) over sqrt(a) * sqrt(b) */ similarity = (double) distance / sqrt((double) norma * (double) normb); +#ifdef _MSC_VER + /* /fp:fast may not propagate NaN */ + if (isnan(similarity)) + PG_RETURN_FLOAT8(NAN); +#endif + /* Keep in range */ if (similarity > 1) similarity = 1.0; diff --git a/test/expected/functions.out b/test/expected/functions.out index 268706a..0e3ccf1 100644 --- a/test/expected/functions.out +++ b/test/expected/functions.out @@ -96,16 +96,16 @@ SELECT cosine_distance('[1,1]', '[-1,-1]'); SELECT cosine_distance('[1,2]', '[3]'); ERROR: different vector dimensions 2 and 1 -SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(0.111, ARRAY[1536])::vector); - cosine_distance ------------------ - 0 +SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(0.111, ARRAY[1536])::vector) <= 1; + ?column? +---------- + t (1 row) -SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(-0.111, ARRAY[1536])::vector); - cosine_distance ------------------ - 2 +SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(-0.111, ARRAY[1536])::vector) >= -1; + ?column? +---------- + t (1 row) SELECT l1_distance('[0,0]', '[3,4]'); diff --git a/test/sql/functions.sql b/test/sql/functions.sql index 26bf567..c5d0bd6 100644 --- a/test/sql/functions.sql +++ b/test/sql/functions.sql @@ -24,8 +24,8 @@ SELECT cosine_distance('[1,2]', '[0,0]'); SELECT cosine_distance('[1,1]', '[1,1]'); SELECT cosine_distance('[1,1]', '[-1,-1]'); SELECT cosine_distance('[1,2]', '[3]'); -SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(0.111, ARRAY[1536])::vector); -SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(-0.111, ARRAY[1536])::vector); +SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(0.111, ARRAY[1536])::vector) <= 1; +SELECT cosine_distance(array_fill(0.1, ARRAY[1536])::vector, array_fill(-0.111, ARRAY[1536])::vector) >= -1; SELECT l1_distance('[0,0]', '[3,4]'); SELECT l1_distance('[0,0]', '[0,1]');