From b49352e3466c3bb3d9d33d819e22584f309d91d3 Mon Sep 17 00:00:00 2001 From: atakavci Date: Wed, 26 Jun 2024 09:42:21 +0300 Subject: [PATCH 1/3] adding tests for bfloat16 --- .../Search/IndexCreationTests.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tests/NRedisStack.Tests/Search/IndexCreationTests.cs diff --git a/tests/NRedisStack.Tests/Search/IndexCreationTests.cs b/tests/NRedisStack.Tests/Search/IndexCreationTests.cs new file mode 100644 index 00000000..e5ef7863 --- /dev/null +++ b/tests/NRedisStack.Tests/Search/IndexCreationTests.cs @@ -0,0 +1,52 @@ +using StackExchange.Redis; +using NRedisStack.Search; +using NRedisStack.RedisStackCommands; +using Xunit; +using System.Runtime.InteropServices; + +namespace NRedisStack.Tests.Search; + +public class IndexCreationTests : AbstractNRedisStackTest, IDisposable +{ + public IndexCreationTests(RedisFixture redisFixture) : base(redisFixture) { } + + [SkipIfRedis(Is.OSSCluster, Comparison.LessThan, "7.3.240")] + public void TestCreateFloat16VectorField() + { + IDatabase db = redisFixture.Redis.GetDatabase(); + db.Execute("FLUSHALL"); + var ft = db.FT(2); + + var schema = new Schema().AddVectorField("v", Schema.VectorField.VectorAlgo.FLAT, new Dictionary() + { + ["TYPE"] = "FLOAT16", + ["DIM"] = "5", + ["DISTANCE_METRIC"] = "L2", + }).AddVectorField("v2", Schema.VectorField.VectorAlgo.FLAT, new Dictionary() + { + ["TYPE"] = "BFLOAT16", + ["DIM"] = "4", + ["DISTANCE_METRIC"] = "L2", + }); + Assert.True(ft.Create("idx", new FTCreateParams(), schema)); + + short[] vec1 = new short[] { 2, 1, 2, 2, 2 }; + byte[] vec1ToBytes = MemoryMarshal.Cast(vec1).ToArray(); + + short[] vec2 = new short[] { 1, 2, 2, 2 }; + byte[] vec2ToBytes = MemoryMarshal.Cast(vec2).ToArray(); + + var entries = new HashEntry[] { new HashEntry("v", vec1ToBytes), new HashEntry("v2", vec2ToBytes) }; + db.HashSet("a", entries); + db.HashSet("b", entries); + db.HashSet("c", entries); + + var q = new Query("*=>[KNN 2 @v $vec]").ReturnFields("__v_score"); + var res = ft.Search("idx", q.AddParam("vec", vec1ToBytes)); + Assert.Equal(2, res.TotalResults); + + q = new Query("*=>[KNN 2 @v2 $vec]").ReturnFields("__v_score"); + res = ft.Search("idx", q.AddParam("vec", vec2ToBytes)); + Assert.Equal(2, res.TotalResults); + } +} \ No newline at end of file From 31efb4461efb42ec6e2b79273e9d7f5cb6325ae1 Mon Sep 17 00:00:00 2001 From: atakavci Date: Tue, 2 Jul 2024 17:41:28 +0300 Subject: [PATCH 2/3] disable profile tests for 7.3.240 --- tests/NRedisStack.Tests/Search/SearchTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/NRedisStack.Tests/Search/SearchTests.cs b/tests/NRedisStack.Tests/Search/SearchTests.cs index a269b331..98f94b02 100644 --- a/tests/NRedisStack.Tests/Search/SearchTests.cs +++ b/tests/NRedisStack.Tests/Search/SearchTests.cs @@ -2619,7 +2619,7 @@ public async Task getSuggestionLengthAndDeleteSuggestionAsync() Assert.Equal(2L, await ft.SugLenAsync(key)); } - [SkipIfRedis(Is.Enterprise)] + [SkipIfRedis(Is.Enterprise, Comparison.GreaterThanOrEqual, "7.3.240")] public void TestProfileSearch() { IDatabase db = redisFixture.Redis.GetDatabase(); @@ -2643,7 +2643,7 @@ public void TestProfileSearch() Assert.Equal("1", iteratorsProfile["Size"].ToString()); } - [SkipIfRedis(Is.Enterprise)] + [SkipIfRedis(Is.Enterprise, Comparison.GreaterThanOrEqual, "7.3.240")] public async Task TestProfileSearchAsync() { IDatabase db = redisFixture.Redis.GetDatabase(); @@ -2727,7 +2727,7 @@ public async Task TestProfileAsync() Assert.Equal(2, aggregateRes.TotalResults); } - [SkipIfRedis(Is.Enterprise, Comparison.LessThan, "7.3.240")] + [SkipIfRedis(Is.Enterprise, Comparison.LessThan, "7.3.242")] public void TestProfileIssue306() { IDatabase db = redisFixture.Redis.GetDatabase(); @@ -2757,7 +2757,7 @@ public void TestProfileIssue306() Assert.Equal(2, aggregateRes.TotalResults); } - [SkipIfRedis(Is.Enterprise, Comparison.LessThan, "7.3.240")] + [SkipIfRedis(Is.Enterprise, Comparison.LessThan, "7.3.242")] public async Task TestProfileAsyncIssue306() { IDatabase db = redisFixture.Redis.GetDatabase(); From d208978d04efabfab1f2b31bc923e8e607ac35d6 Mon Sep 17 00:00:00 2001 From: atakavci Date: Wed, 3 Jul 2024 09:02:05 +0300 Subject: [PATCH 3/3] remove interop --- tests/NRedisStack.Tests/Search/IndexCreationTests.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/NRedisStack.Tests/Search/IndexCreationTests.cs b/tests/NRedisStack.Tests/Search/IndexCreationTests.cs index 6373a0d5..c3d73122 100644 --- a/tests/NRedisStack.Tests/Search/IndexCreationTests.cs +++ b/tests/NRedisStack.Tests/Search/IndexCreationTests.cs @@ -2,7 +2,6 @@ using NRedisStack.Search; using NRedisStack.RedisStackCommands; using Xunit; -using System.Runtime.InteropServices; using NetTopologySuite.Geometries; namespace NRedisStack.Tests.Search; @@ -144,10 +143,12 @@ public void TestCreateFloat16VectorField() Assert.True(ft.Create("idx", new FTCreateParams(), schema)); short[] vec1 = new short[] { 2, 1, 2, 2, 2 }; - byte[] vec1ToBytes = MemoryMarshal.Cast(vec1).ToArray(); + byte[] vec1ToBytes = new byte[vec1.Length * sizeof(short)]; + Buffer.BlockCopy(vec1, 0, vec1ToBytes, 0, vec1ToBytes.Length); short[] vec2 = new short[] { 1, 2, 2, 2 }; - byte[] vec2ToBytes = MemoryMarshal.Cast(vec2).ToArray(); + byte[] vec2ToBytes = new byte[vec2.Length * sizeof(short)]; + Buffer.BlockCopy(vec2, 0, vec2ToBytes, 0, vec2ToBytes.Length); var entries = new HashEntry[] { new HashEntry("v", vec1ToBytes), new HashEntry("v2", vec2ToBytes) }; db.HashSet("a", entries);