// Copyright (c) Microsoft. All rights reserved. using System; using Microsoft.Extensions.VectorData; using Microsoft.Extensions.VectorData.ProviderServices; using Qdrant.Client.Grpc; using Xunit; namespace Microsoft.SemanticKernel.Connectors.Qdrant.UnitTests; /// /// Contains tests for the class. /// public class QdrantCollectionCreateMappingTests { [Fact] public void MapSingleVectorCreatesVectorParams() { // Arrange. var vectorProperty = new VectorPropertyModel("testvector", typeof(ReadOnlyMemory)) { Dimensions = 4, DistanceFunction = DistanceFunction.DotProductSimilarity }; // Act. var actual = QdrantCollectionCreateMapping.MapSingleVector(vectorProperty); // Assert. Assert.NotNull(actual); Assert.Equal(Distance.Dot, actual.Distance); Assert.Equal(4ul, actual.Size); } [Fact] public void MapSingleVectorDefaultsToCosine() { // Arrange. var vectorProperty = new VectorPropertyModel("testvector", typeof(ReadOnlyMemory)) { Dimensions = 4 }; // Act. var actual = QdrantCollectionCreateMapping.MapSingleVector(vectorProperty); // Assert. Assert.Equal(Distance.Cosine, actual.Distance); } [Fact] public void MapSingleVectorThrowsForUnsupportedDistanceFunction() { // Arrange. var vectorProperty = new VectorPropertyModel("testvector", typeof(ReadOnlyMemory)) { Dimensions = 4, DistanceFunction = DistanceFunction.CosineDistance }; // Act and assert. Assert.Throws(() => QdrantCollectionCreateMapping.MapSingleVector(vectorProperty)); } [Fact] public void MapNamedVectorsCreatesVectorParamsMap() { // Arrange. var vectorProperties = new VectorPropertyModel[] { new("testvector1", typeof(ReadOnlyMemory)) { Dimensions = 10, DistanceFunction = DistanceFunction.EuclideanDistance, StorageName = "storage_testvector1" }, new("testvector2", typeof(ReadOnlyMemory)) { Dimensions = 20, StorageName = "storage_testvector2" } }; // Act. var actual = QdrantCollectionCreateMapping.MapNamedVectors(vectorProperties); // Assert. Assert.NotNull(actual); Assert.Equal(2, actual.Map.Count); Assert.Equal(10ul, actual.Map["storage_testvector1"].Size); Assert.Equal(Distance.Euclid, actual.Map["storage_testvector1"].Distance); Assert.Equal(20ul, actual.Map["storage_testvector2"].Size); Assert.Equal(Distance.Cosine, actual.Map["storage_testvector2"].Distance); } }