diff --git a/.gitignore b/.gitignore
index 6c8a8efaa13d..fe14c1529238 100644
--- a/.gitignore
+++ b/.gitignore
@@ -415,6 +415,9 @@ FodyWeavers.xsd
*.iml
*.iws
+# VS Code
+.vscode/
+
.env
certs/
launchSettings.json
diff --git a/dotnet/src/VectorData/CosmosNoSql/CosmosNoSqlCollection.cs b/dotnet/src/VectorData/CosmosNoSql/CosmosNoSqlCollection.cs
index 678eb0e8dd8b..1dbf66eca099 100644
--- a/dotnet/src/VectorData/CosmosNoSql/CosmosNoSqlCollection.cs
+++ b/dotnet/src/VectorData/CosmosNoSql/CosmosNoSqlCollection.cs
@@ -322,6 +322,8 @@ await this._database
///
public override async Task GetAsync(TKey key, RecordRetrievalOptions? options = null, CancellationToken cancellationToken = default)
{
+ Verify.NotNull(key);
+
return await this.GetAsync([key], options, cancellationToken)
.FirstOrDefaultAsync(cancellationToken)
.ConfigureAwait(false);
@@ -343,11 +345,17 @@ public override async IAsyncEnumerable GetAsync(
throw new NotSupportedException(VectorDataStrings.IncludeVectorsNotSupportedWithEmbeddingGeneration);
}
+ var compositeKeys = GetCompositeKeys(keys).ToList();
+ if (compositeKeys.Count == 0)
+ {
+ yield break;
+ }
+
var queryDefinition = CosmosNoSqlCollectionQueryBuilder.BuildSelectQuery(
this._model,
this._model.KeyProperty.StorageName,
this._partitionKeyProperty.StorageName,
- GetCompositeKeys(keys).ToList(),
+ compositeKeys,
includeVectors);
await foreach (var jsonObject in this.GetItemsAsync(queryDefinition, OperationName, cancellationToken).ConfigureAwait(false))
diff --git a/dotnet/src/VectorData/Redis/RedisJsonCollection.cs b/dotnet/src/VectorData/Redis/RedisJsonCollection.cs
index 91b4c1998610..6db5dbf92e9e 100644
--- a/dotnet/src/VectorData/Redis/RedisJsonCollection.cs
+++ b/dotnet/src/VectorData/Redis/RedisJsonCollection.cs
@@ -289,6 +289,11 @@ public override async IAsyncEnumerable GetAsync(IEnumerable keys,
};
#pragma warning restore CA1851 // Possible multiple enumerations of 'IEnumerable' collection
+ if (keysList.Count == 0)
+ {
+ yield break;
+ }
+
// Create Options
var maybePrefixedKeys = keysList.Select(key => this.PrefixKeyIfNeeded(key));
var redisKeys = maybePrefixedKeys.Select(x => new RedisKey(x)).ToArray();
@@ -392,6 +397,11 @@ public override async Task UpsertAsync(IEnumerable records, Cancellatio
redisRecords.Add((maybePrefixedKey, redisJsonRecord.Key, redisJsonRecord.SerializedRecord));
}
+ if (redisRecords.Count == 0)
+ {
+ return;
+ }
+
// Upsert.
var keyPathValues = redisRecords.Select(x => new KeyPathValue(x.maybePrefixedKey, "$", x.serializedRecord)).ToArray();
await this.RunOperationAsync(
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchAllSupportedTypesTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchAllSupportedTypesTests.cs
new file mode 100644
index 000000000000..a69879faa3c5
--- /dev/null
+++ b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchAllSupportedTypesTests.cs
@@ -0,0 +1,106 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using AzureAISearch.ConformanceTests.Support;
+using Microsoft.Extensions.VectorData;
+using VectorData.ConformanceTests.Xunit;
+using Xunit;
+
+namespace AzureAISearch.ConformanceTests;
+
+public class AzureAISearchAllSupportedTypesTests(AzureAISearchFixture fixture) : IClassFixture
+{
+ [ConditionalFact]
+ public async Task AllTypesBatchGetAsync()
+ {
+ var collection = fixture.TestStore.DefaultVectorStore.GetCollection("all-types", AzureAISearchAllTypes.GetRecordDefinition());
+ await collection.EnsureCollectionExistsAsync();
+
+ List records =
+ [
+ new()
+ {
+ Id = "all-types-1",
+ BoolProperty = true,
+ NullableBoolProperty = false,
+ StringProperty = "string prop 1",
+ NullableStringProperty = "nullable prop 1",
+ IntProperty = 1,
+ NullableIntProperty = 10,
+ LongProperty = 100L,
+ NullableLongProperty = 1000L,
+ FloatProperty = 10.5f,
+ NullableFloatProperty = 100.5f,
+ DoubleProperty = 23.75d,
+ NullableDoubleProperty = 233.75d,
+ DateTimeOffsetProperty = DateTimeOffset.UtcNow,
+ NullableDateTimeOffsetProperty = DateTimeOffset.UtcNow,
+ StringArray = ["one", "two"],
+ StringList = ["eleven", "twelve"],
+ BoolArray = [true, false],
+ BoolList = [true, false],
+ IntArray = [1, 2],
+ IntList = [11, 12],
+ LongArray = [100L, 200L],
+ LongList = [1100L, 1200L],
+ FloatArray = [1.5f, 2.5f],
+ FloatList = [11.5f, 12.5f],
+ DoubleArray = [1.5d, 2.5d],
+ DoubleList = [11.5d, 12.5d],
+ DateTimeOffsetArray = [DateTimeOffset.UtcNow, DateTimeOffset.UtcNow],
+ DateTimeOffsetList = [DateTimeOffset.UtcNow, DateTimeOffset.UtcNow],
+ Embedding = new ReadOnlyMemory([1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 7.5f, 8.5f])
+ },
+ new()
+ {
+ Id = "all-types-2",
+ BoolProperty = false,
+ NullableBoolProperty = null,
+ StringProperty = "string prop 2",
+ NullableStringProperty = null,
+ IntProperty = 2,
+ NullableIntProperty = null,
+ LongProperty = 200L,
+ NullableLongProperty = null,
+ FloatProperty = 20.5f,
+ NullableFloatProperty = null,
+ DoubleProperty = 43.75,
+ NullableDoubleProperty = null,
+ Embedding = ReadOnlyMemory.Empty,
+ // From https://learn.microsoft.com/en-us/rest/api/searchservice/supported-data-types:
+ // "All of the above types are nullable, except for collections of primitive and complex types, for example, Collection(Edm.String)"
+ // So for collections, we can't use nulls.
+ StringArray = [],
+ StringList = [],
+ BoolArray = [],
+ BoolList = [],
+ IntArray = [],
+ IntList = [],
+ LongArray = [],
+ LongList = [],
+ FloatArray = [],
+ FloatList = [],
+ DoubleArray = [],
+ DoubleList = [],
+ DateTimeOffsetArray = [],
+ DateTimeOffsetList = [],
+ }
+ ];
+
+ try
+ {
+ await collection.UpsertAsync(records);
+
+ var allTypes = await collection.GetAsync(records.Select(r => r.Id), new RecordRetrievalOptions { IncludeVectors = true }).ToListAsync();
+
+ var allTypes1 = allTypes.Single(x => x.Id == records[0].Id);
+ var allTypes2 = allTypes.Single(x => x.Id == records[1].Id);
+
+ records[0].AssertEqual(allTypes1);
+ records[1].AssertEqual(allTypes2);
+ }
+ finally
+ {
+ await collection.EnsureCollectionDeletedAsync();
+ }
+ }
+}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchCollectionManagementTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchCollectionManagementTests.cs
new file mode 100644
index 000000000000..b2b6fb7605eb
--- /dev/null
+++ b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchCollectionManagementTests.cs
@@ -0,0 +1,14 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using AzureAISearch.ConformanceTests.Support;
+using VectorData.ConformanceTests;
+using Xunit;
+
+namespace AzureAISearch.ConformanceTests;
+
+public class AzureAISearchCollectionManagementTests(AzureAISearchFixture fixture)
+ : CollectionManagementTests(fixture), IClassFixture
+{
+ // Azure AI search only supports lowercase letters, digits or dashes.
+ public override string CollectionName => "collection-tests";
+}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Filter/AzureAISearchBasicFilterTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchFilterTests.cs
similarity index 66%
rename from dotnet/test/VectorData/AzureAISearch.ConformanceTests/Filter/AzureAISearchBasicFilterTests.cs
rename to dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchFilterTests.cs
index 3aed091e4d3d..206bb7cb41bb 100644
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Filter/AzureAISearchBasicFilterTests.cs
+++ b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/AzureAISearchFilterTests.cs
@@ -1,20 +1,20 @@
// Copyright (c) Microsoft. All rights reserved.
using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
+using VectorData.ConformanceTests;
using VectorData.ConformanceTests.Support;
using Xunit;
-namespace AzureAISearch.ConformanceTests.Filter;
+namespace AzureAISearch.ConformanceTests;
-public class AzureAISearchBasicFilterTests(AzureAISearchBasicFilterTests.Fixture fixture)
- : BasicFilterTests(fixture), IClassFixture
+public class AzureAISearchFilterTests(AzureAISearchFilterTests.Fixture fixture)
+ : FilterTests(fixture), IClassFixture
{
// Azure AI Search only supports search.in() over strings
public override Task Contains_over_inline_int_array()
=> Assert.ThrowsAsync(() => base.Contains_over_inline_int_array());
- public new class Fixture : BasicFilterTests.Fixture
+ public new class Fixture : FilterTests.Fixture
{
public override TestStore TestStore => AzureAISearchTestStore.Instance;
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchBatchConformanceTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchBatchConformanceTests.cs
deleted file mode 100644
index 023336d44d78..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchBatchConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace AzureAISearch.ConformanceTests.CRUD;
-
-public class AzureAISearchBatchConformanceTests(AzureAISearchSimpleModelFixture fixture)
- : BatchConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchDynamicDataModelConformanceTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchDynamicDataModelConformanceTests.cs
deleted file mode 100644
index 3c753339e833..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchDynamicDataModelConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace AzureAISearch.ConformanceTests.CRUD;
-
-public class AzureAISearchDynamicDataModelConformanceTests(AzureAISearchDynamicDataModelFixture fixture)
- : DynamicDataModelConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchNoDataConformanceTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchNoDataConformanceTests.cs
deleted file mode 100644
index 48259b4d3270..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchNoDataConformanceTests.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace AzureAISearch.ConformanceTests.CRUD;
-
-public class AzureAISearchNoDataConformanceTests(AzureAISearchNoDataConformanceTests.Fixture fixture)
- : NoDataConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoDataConformanceTests.Fixture
- {
- public override string CollectionName => "nodata-" + AzureAISearchTestEnvironment.TestIndexPostfix;
-
- public override TestStore TestStore => AzureAISearchTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchNoVectorConformanceTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchNoVectorConformanceTests.cs
deleted file mode 100644
index c69223545fdb..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchNoVectorConformanceTests.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace AzureAISearch.ConformanceTests.CRUD;
-
-public class AzureAISearchNoVectorConformanceTests(AzureAISearchNoVectorConformanceTests.Fixture fixture)
- : NoVectorConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoVectorConformanceTests.Fixture
- {
- public override string CollectionName => "novector-" + AzureAISearchTestEnvironment.TestIndexPostfix;
-
- public override TestStore TestStore => AzureAISearchTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchRecordConformanceTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchRecordConformanceTests.cs
deleted file mode 100644
index d68c20da2618..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchRecordConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace AzureAISearch.ConformanceTests.CRUD;
-
-public class AzureAISearchRecordConformanceTests(AzureAISearchSimpleModelFixture fixture)
- : RecordConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Collections/AzureAISearchCollectionConformanceTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Collections/AzureAISearchCollectionConformanceTests.cs
deleted file mode 100644
index cc06d28533f7..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Collections/AzureAISearchCollectionConformanceTests.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.Collections;
-using Xunit;
-
-namespace AzureAISearch.ConformanceTests.Collections;
-
-public class AzureAISearchCollectionConformanceTests(AzureAISearchFixture fixture)
- : CollectionConformanceTests(fixture), IClassFixture
-{
- // Azure AI search only supports lowercase letters, digits or dashes.
- public override string CollectionName => "collection-tests";
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Filter/AzureAISearchBasicQueryTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Filter/AzureAISearchBasicQueryTests.cs
deleted file mode 100644
index 6ef3288fca13..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Filter/AzureAISearchBasicQueryTests.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using AzureAISearch.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace AzureAISearch.ConformanceTests.Filter;
-
-public class AzureAISearchBasicQueryTests(AzureAISearchBasicQueryTests.Fixture fixture)
- : BasicQueryTests(fixture), IClassFixture
-{
- // Azure AI Search only supports search.in() over strings
- public override Task Contains_over_inline_int_array()
- => Assert.ThrowsAsync(() => base.Contains_over_inline_int_array());
-
- public new class Fixture : BasicQueryTests.QueryFixture
- {
- public override TestStore TestStore => AzureAISearchTestStore.Instance;
-
- // Azure AI search only supports lowercase letters, digits or dashes.
- public override string CollectionName => "query-tests" + AzureAISearchTestEnvironment.TestIndexPostfix;
- }
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchAllSupportedTypesTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchAllSupportedTypesTests.cs
similarity index 100%
rename from dotnet/test/VectorData/AzureAISearch.ConformanceTests/CRUD/AzureAISearchAllSupportedTypesTests.cs
rename to dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchAllSupportedTypesTests.cs
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchBasicModelTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchBasicModelTests.cs
new file mode 100644
index 000000000000..772d2cb40047
--- /dev/null
+++ b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchBasicModelTests.cs
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using AzureAISearch.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace AzureAISearch.ConformanceTests.ModelTests;
+
+public class AzureAISearchBasicModelTests(AzureAISearchBasicModelTests.Fixture fixture)
+ : BasicModelTests(fixture), IClassFixture
+{
+ public new class Fixture : BasicModelTests.Fixture
+ {
+ public override string CollectionName => "basic-" + AzureAISearchTestEnvironment.TestIndexPostfix;
+
+ public override TestStore TestStore => AzureAISearchTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchDynamicModelTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchDynamicModelTests.cs
new file mode 100644
index 000000000000..e89ab37442d6
--- /dev/null
+++ b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchDynamicModelTests.cs
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using AzureAISearch.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace AzureAISearch.ConformanceTests.ModelTests;
+
+public class AzureAISearchDynamicModelTests(AzureAISearchDynamicModelTests.Fixture fixture)
+ : DynamicModelTests(fixture), IClassFixture
+{
+ public new class Fixture : DynamicModelTests.Fixture
+ {
+ public override string CollectionName => "dynamic-" + AzureAISearchTestEnvironment.TestIndexPostfix;
+
+ public override TestStore TestStore => AzureAISearchTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchNoDataModelTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchNoDataModelTests.cs
new file mode 100644
index 000000000000..87b0acac8939
--- /dev/null
+++ b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchNoDataModelTests.cs
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using AzureAISearch.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace AzureAISearch.ConformanceTests.ModelTests;
+
+public class AzureAISearchNoDataModelTests(AzureAISearchNoDataModelTests.Fixture fixture)
+ : NoDataModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoDataModelTests.Fixture
+ {
+ public override string CollectionName => "nodata-" + AzureAISearchTestEnvironment.TestIndexPostfix;
+
+ public override TestStore TestStore => AzureAISearchTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchNoVectorModelTests.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchNoVectorModelTests.cs
new file mode 100644
index 000000000000..d61c2ddfac37
--- /dev/null
+++ b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/ModelTests/AzureAISearchNoVectorModelTests.cs
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using AzureAISearch.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace AzureAISearch.ConformanceTests.ModelTests;
+
+public class AzureAISearchNoVectorModelTests(AzureAISearchNoVectorModelTests.Fixture fixture)
+ : NoVectorModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoVectorModelTests.Fixture
+ {
+ public override string CollectionName => "novector-" + AzureAISearchTestEnvironment.TestIndexPostfix;
+
+ public override TestStore TestStore => AzureAISearchTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Support/AzureAISearchDynamicDataModelFixture.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Support/AzureAISearchDynamicDataModelFixture.cs
deleted file mode 100644
index b3494c0dc0a0..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Support/AzureAISearchDynamicDataModelFixture.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using VectorData.ConformanceTests.Support;
-
-namespace AzureAISearch.ConformanceTests.Support;
-
-public class AzureAISearchDynamicDataModelFixture : DynamicDataModelFixture
-{
- public override string CollectionName => "dynamicdatamodel-" + AzureAISearchTestEnvironment.TestIndexPostfix;
-
- public override TestStore TestStore => AzureAISearchTestStore.Instance;
-}
diff --git a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Support/AzureAISearchSimpleModelFixture.cs b/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Support/AzureAISearchSimpleModelFixture.cs
deleted file mode 100644
index 510d537e4cec..000000000000
--- a/dotnet/test/VectorData/AzureAISearch.ConformanceTests/Support/AzureAISearchSimpleModelFixture.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using VectorData.ConformanceTests.Support;
-
-namespace AzureAISearch.ConformanceTests.Support;
-
-public class AzureAISearchSimpleModelFixture : SimpleModelFixture
-{
- public override string CollectionName => "simplemodel-" + AzureAISearchTestEnvironment.TestIndexPostfix;
-
- public override TestStore TestStore => AzureAISearchTestStore.Instance;
-}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoBatchConformanceTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoBatchConformanceTests.cs
deleted file mode 100644
index 802f7be230a0..000000000000
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoBatchConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosMongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace CosmosMongoDB.ConformanceTests.CRUD;
-
-public class CosmosMongoBatchConformanceTests(CosmosMongoSimpleModelFixture fixture)
- : BatchConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoNoDataConformanceTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoNoDataConformanceTests.cs
deleted file mode 100644
index bd4b2fecdc38..000000000000
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoNoDataConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosMongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace CosmosMongoDB.ConformanceTests.CRUD;
-
-public class CosmosMongoNoDataConformanceTests(CosmosMongoNoDataConformanceTests.Fixture fixture)
- : NoDataConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoDataConformanceTests.Fixture
- {
- public override TestStore TestStore => CosmosMongoTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoNoVectorConformanceTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoNoVectorConformanceTests.cs
deleted file mode 100644
index 68fd4f28a1e4..000000000000
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoNoVectorConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosMongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace CosmosMongoDB.ConformanceTests.CRUD;
-
-public class CosmosMongoNoVectorConformanceTests(CosmosMongoNoVectorConformanceTests.Fixture fixture)
- : NoVectorConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoVectorConformanceTests.Fixture
- {
- public override TestStore TestStore => CosmosMongoTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoRecordConformanceTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoRecordConformanceTests.cs
deleted file mode 100644
index 45a5e52db360..000000000000
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CRUD/CosmosMongoRecordConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosMongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace CosmosMongoDB.ConformanceTests.CRUD;
-
-public class CosmosMongoRecordConformanceTests(CosmosMongoSimpleModelFixture fixture)
- : RecordConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Collections/CosmosMongoCollectionConformanceTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Collections/CosmosMongoCollectionConformanceTests.cs
deleted file mode 100644
index 50276278328c..000000000000
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Collections/CosmosMongoCollectionConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosMongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.Collections;
-using Xunit;
-
-namespace CosmosMongoDB.ConformanceTests.Collections;
-
-public class CosmosMongoCollectionConformanceTests(CosmosMongoFixture fixture)
- : CollectionConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoCollectionManagementTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoCollectionManagementTests.cs
new file mode 100644
index 000000000000..ea8f6ff1582a
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoCollectionManagementTests.cs
@@ -0,0 +1,12 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosMongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests;
+using Xunit;
+
+namespace CosmosMongoDB.ConformanceTests;
+
+public class CosmosMongoCollectionManagementTests(CosmosMongoFixture fixture)
+ : CollectionManagementTests(fixture), IClassFixture
+{
+}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Filter/CosmosMongoBasicFilterTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoFilterTests.cs
similarity index 89%
rename from dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Filter/CosmosMongoBasicFilterTests.cs
rename to dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoFilterTests.cs
index 80c263453e80..520f79ba0d0b 100644
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Filter/CosmosMongoBasicFilterTests.cs
+++ b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoFilterTests.cs
@@ -1,15 +1,15 @@
// Copyright (c) Microsoft. All rights reserved.
using CosmosMongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
+using VectorData.ConformanceTests;
using VectorData.ConformanceTests.Support;
using VectorData.ConformanceTests.Xunit;
using Xunit;
-namespace CosmosMongoDB.ConformanceTests.Filter;
+namespace CosmosMongoDB.ConformanceTests;
-public class CosmosMongoBasicFilterTests(CosmosMongoBasicFilterTests.Fixture fixture)
- : BasicFilterTests(fixture), IClassFixture
+public class CosmosMongoFilterTests(CosmosMongoFilterTests.Fixture fixture)
+ : FilterTests(fixture), IClassFixture
{
// Specialized MongoDB syntax for NOT over Contains ($nin)
[ConditionalFact]
@@ -65,7 +65,7 @@ public override Task Legacy_AnyTagEqualTo_array()
public override Task Legacy_AnyTagEqualTo_List()
=> Assert.ThrowsAsync(() => base.Legacy_AnyTagEqualTo_List());
- public new class Fixture : BasicFilterTests.Fixture
+ public new class Fixture : FilterTests.Fixture
{
public override TestStore TestStore => CosmosMongoTestStore.Instance;
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoTestSuiteImplementationTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoTestSuiteImplementationTests.cs
index 97ca7d89ee89..086512e47bd2 100644
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoTestSuiteImplementationTests.cs
+++ b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/CosmosMongoTestSuiteImplementationTests.cs
@@ -1,8 +1,8 @@
// Copyright (c) Microsoft. All rights reserved.
using VectorData.ConformanceTests;
-using VectorData.ConformanceTests.CRUD;
using VectorData.ConformanceTests.HybridSearch;
+using VectorData.ConformanceTests.ModelTests;
using VectorData.ConformanceTests.VectorSearch;
namespace CosmosMongoDB.ConformanceTests;
@@ -13,7 +13,7 @@ public class CosmosMongoTestSuiteImplementationTests : TestSuiteImplementationTe
[
typeof(VectorSearchDistanceFunctionComplianceTests<>),
typeof(VectorSearchWithFilterConformanceTests<>),
- typeof(DynamicDataModelConformanceTests<>),
+ typeof(DynamicModelTests<>),
// Hybrid search not supported
typeof(KeywordVectorizedHybridSearchComplianceTests<>),
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Filter/CosmosMongoBasicQueryTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Filter/CosmosMongoBasicQueryTests.cs
deleted file mode 100644
index 01fcff7552cf..000000000000
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Filter/CosmosMongoBasicQueryTests.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosMongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
-using VectorData.ConformanceTests.Support;
-using VectorData.ConformanceTests.Xunit;
-using Xunit;
-
-namespace CosmosMongoDB.ConformanceTests.Filter;
-
-public class CosmosMongoBasicQueryTests(CosmosMongoBasicQueryTests.Fixture fixture)
- : BasicQueryTests(fixture), IClassFixture
-{
- // Specialized MongoDB syntax for NOT over Contains ($nin)
- [ConditionalFact]
- public virtual Task Not_over_Contains()
- => this.TestFilterAsync(
- r => !new[] { 8, 10 }.Contains(r.Int),
- r => !new[] { 8, 10 }.Contains((int)r["Int"]!));
-
- // MongoDB currently doesn't support null checking ({ "Foo" : null }) in vector search pre-filters
- public override Task Equal_with_null_reference_type()
- => Assert.ThrowsAsync(() => base.Equal_with_null_reference_type());
-
- public override Task Equal_with_null_captured()
- => Assert.ThrowsAsync(() => base.Equal_with_null_captured());
-
- public override Task NotEqual_with_null_reference_type()
- => Assert.ThrowsAsync(() => base.NotEqual_with_null_reference_type());
-
- public override Task NotEqual_with_null_captured()
- => Assert.ThrowsAsync(() => base.NotEqual_with_null_captured());
-
- public override Task Equal_int_property_with_null_nullable_int()
- => Assert.ThrowsAsync(() => base.Equal_int_property_with_null_nullable_int());
-
- // MongoDB currently doesn't support NOT in vector search pre-filters
- // (https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-stage/#atlas-vector-search-pre-filter)
- public override Task Not_over_And()
- => Assert.ThrowsAsync(() => base.Not_over_And());
-
- public override Task Not_over_Or()
- => Assert.ThrowsAsync(() => base.Not_over_Or());
-
- public override Task Contains_over_field_string_array()
- => Assert.ThrowsAsync(() => base.Contains_over_field_string_array());
-
- public override Task Contains_over_field_string_List()
- => Assert.ThrowsAsync(() => base.Contains_over_field_string_List());
-
- public new class Fixture : BasicQueryTests.QueryFixture
- {
- public override TestStore TestStore => CosmosMongoTestStore.Instance;
-
- protected override string IndexKind => Microsoft.Extensions.VectorData.IndexKind.IvfFlat;
- protected override string DistanceFunction => Microsoft.Extensions.VectorData.DistanceFunction.CosineDistance;
- }
-}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoBasicModelTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoBasicModelTests.cs
new file mode 100644
index 000000000000..0ea82a0a8cc8
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoBasicModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosMongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosMongoDB.ConformanceTests.ModelTests;
+
+public class CosmosMongoBasicModelTests(CosmosMongoBasicModelTests.Fixture fixture)
+ : BasicModelTests(fixture), IClassFixture
+{
+ public new class Fixture : BasicModelTests.Fixture
+ {
+ public override TestStore TestStore => CosmosMongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoNoDataModelTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoNoDataModelTests.cs
new file mode 100644
index 000000000000..9e486c7717ee
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoNoDataModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosMongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosMongoDB.ConformanceTests.ModelTests;
+
+public class CosmosMongoNoDataModelTests(CosmosMongoNoDataModelTests.Fixture fixture)
+ : NoDataModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoDataModelTests.Fixture
+ {
+ public override TestStore TestStore => CosmosMongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoNoVectorModelTests.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoNoVectorModelTests.cs
new file mode 100644
index 000000000000..1736512c9802
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/ModelTests/CosmosMongoNoVectorModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosMongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosMongoDB.ConformanceTests.ModelTests;
+
+public class CosmosMongoNoVectorModelTests(CosmosMongoNoVectorModelTests.Fixture fixture)
+ : NoVectorModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoVectorModelTests.Fixture
+ {
+ public override TestStore TestStore => CosmosMongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Support/CosmosMongoSimpleModelFixture.cs b/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Support/CosmosMongoSimpleModelFixture.cs
deleted file mode 100644
index 426528b78f3c..000000000000
--- a/dotnet/test/VectorData/CosmosMongoDB.ConformanceTests/Support/CosmosMongoSimpleModelFixture.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using VectorData.ConformanceTests.Support;
-
-namespace CosmosMongoDB.ConformanceTests.Support;
-
-public class CosmosMongoSimpleModelFixture : SimpleModelFixture
-{
- public override TestStore TestStore => CosmosMongoTestStore.Instance;
-}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CRUD/CosmosNoSqlNoDataConformanceTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CRUD/CosmosNoSqlNoDataConformanceTests.cs
deleted file mode 100644
index 277acb33f7c8..000000000000
--- a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CRUD/CosmosNoSqlNoDataConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosNoSql.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace CosmosNoSql.ConformanceTests.CRUD;
-
-public class CosmosNoSqlNoDataConformanceTests(CosmosNoSqlNoDataConformanceTests.Fixture fixture)
- : NoDataConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoDataConformanceTests.Fixture
- {
- public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CRUD/CosmosNoSqlNoVectorConformanceTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CRUD/CosmosNoSqlNoVectorConformanceTests.cs
deleted file mode 100644
index 65ed7d73ae58..000000000000
--- a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CRUD/CosmosNoSqlNoVectorConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosNoSql.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace CosmosNoSql.ConformanceTests.CRUD;
-
-public class CosmosNoSqlNoVectorConformanceTests(CosmosNoSqlNoVectorConformanceTests.Fixture fixture)
- : NoVectorConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoVectorConformanceTests.Fixture
- {
- public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Collections/CosmosNoSqlCollectionConformanceTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Collections/CosmosNoSqlCollectionConformanceTests.cs
deleted file mode 100644
index 2985553f3708..000000000000
--- a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Collections/CosmosNoSqlCollectionConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosNoSql.ConformanceTests.Support;
-using VectorData.ConformanceTests.Collections;
-using Xunit;
-
-namespace CosmosNoSql.ConformanceTests.Collections;
-
-public class CosmosNoSqlCollectionConformanceTests(CosmosNoSqlFixture fixture)
- : CollectionConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlCollectionManagementTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlCollectionManagementTests.cs
new file mode 100644
index 000000000000..1d59fe378e75
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlCollectionManagementTests.cs
@@ -0,0 +1,12 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosNoSql.ConformanceTests.Support;
+using VectorData.ConformanceTests;
+using Xunit;
+
+namespace CosmosNoSql.ConformanceTests;
+
+public class CosmosNoSqlCollectionManagementTests(CosmosNoSqlFixture fixture)
+ : CollectionManagementTests(fixture), IClassFixture
+{
+}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlFilterTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlFilterTests.cs
new file mode 100644
index 000000000000..62665e1acc99
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlFilterTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosNoSql.ConformanceTests.Support;
+using VectorData.ConformanceTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosNoSql.ConformanceTests;
+
+public class CosmosNoSqlFilterTests(CosmosNoSqlFilterTests.Fixture fixture)
+ : FilterTests(fixture), IClassFixture
+{
+ public new class Fixture : FilterTests.Fixture
+ {
+ public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlTestSuiteImplementationTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlTestSuiteImplementationTests.cs
index fd0819e9a66f..94b2b8b65bb1 100644
--- a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlTestSuiteImplementationTests.cs
+++ b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/CosmosNoSqlTestSuiteImplementationTests.cs
@@ -1,7 +1,6 @@
// Copyright (c) Microsoft. All rights reserved.
using VectorData.ConformanceTests;
-using VectorData.ConformanceTests.CRUD;
using VectorData.ConformanceTests.VectorSearch;
namespace CosmosNoSql.ConformanceTests;
@@ -11,8 +10,6 @@ public class CosmosNoSqlTestSuiteImplementationTests : TestSuiteImplementationTe
protected override ICollection IgnoredTestBases { get; } =
[
typeof(VectorSearchDistanceFunctionComplianceTests<>),
- typeof(VectorSearchWithFilterConformanceTests<>),
- typeof(DynamicDataModelConformanceTests<>),
- typeof(BatchConformanceTests<>)
+ typeof(VectorSearchWithFilterConformanceTests<>)
];
}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Filter/CosmosNoSqlBasicFilterTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Filter/CosmosNoSqlBasicFilterTests.cs
deleted file mode 100644
index 62a4dee7e83c..000000000000
--- a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Filter/CosmosNoSqlBasicFilterTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosNoSql.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace CosmosNoSql.ConformanceTests.Filter;
-
-public class CosmosNoSqlBasicFilterTests(CosmosNoSqlBasicFilterTests.Fixture fixture)
- : BasicFilterTests(fixture), IClassFixture
-{
- public new class Fixture : BasicFilterTests.Fixture
- {
- public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Filter/CosmosNoSqlBasicQueryTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Filter/CosmosNoSqlBasicQueryTests.cs
deleted file mode 100644
index 42a95f6182bb..000000000000
--- a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/Filter/CosmosNoSqlBasicQueryTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using CosmosNoSql.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace CosmosNoSql.ConformanceTests.Filter;
-
-public class CosmosNoSqlBasicQueryTests(CosmosNoSqlBasicQueryTests.Fixture fixture)
- : BasicQueryTests(fixture), IClassFixture
-{
- public new class Fixture : BasicQueryTests.QueryFixture
- {
- public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlBasicModelTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlBasicModelTests.cs
new file mode 100644
index 000000000000..728745c99f34
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlBasicModelTests.cs
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosNoSql.ConformanceTests.Support;
+using Microsoft.Azure.Cosmos;
+using Microsoft.Extensions.VectorData;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosNoSql.ConformanceTests.ModelTests;
+
+public class CosmosNoSqlBasicModelTests(CosmosNoSqlBasicModelTests.Fixture fixture)
+ : BasicModelTests(fixture), IClassFixture
+{
+ public override async Task GetAsync_with_filter_and_multiple_OrderBys()
+ {
+ // CosmosException: The order by query does not have a corresponding composite index that it can be served from.
+ var exception = await Assert.ThrowsAsync(base.GetAsync_with_filter_and_multiple_OrderBys);
+ Assert.IsType(exception.InnerException);
+ }
+
+ public new class Fixture : BasicModelTests.Fixture
+ {
+ public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlDynamicModelTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlDynamicModelTests.cs
new file mode 100644
index 000000000000..8bfadf413ad3
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlDynamicModelTests.cs
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosNoSql.ConformanceTests.Support;
+using Microsoft.Azure.Cosmos;
+using Microsoft.Extensions.VectorData;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosNoSql.ConformanceTests.ModelTests;
+
+public class CosmosNoSqlDynamicModelTests(CosmosNoSqlDynamicModelTests.Fixture fixture)
+ : DynamicModelTests(fixture), IClassFixture
+{
+ public override async Task GetAsync_with_filter_and_multiple_OrderBys()
+ {
+ // CosmosException: The order by query does not have a corresponding composite index that it can be served from.
+ var exception = await Assert.ThrowsAsync(base.GetAsync_with_filter_and_multiple_OrderBys);
+ Assert.IsType(exception.InnerException);
+ }
+
+ public new class Fixture : DynamicModelTests.Fixture
+ {
+ public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlNoDataModelTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlNoDataModelTests.cs
new file mode 100644
index 000000000000..6d87a7bfe6dd
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlNoDataModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosNoSql.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosNoSql.ConformanceTests.ModelTests;
+
+public class CosmosNoSqlNoDataModelTests(CosmosNoSqlNoDataModelTests.Fixture fixture)
+ : NoDataModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoDataModelTests.Fixture
+ {
+ public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlNoVectorConformanceTests.cs b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlNoVectorConformanceTests.cs
new file mode 100644
index 000000000000..450d4c2aca5e
--- /dev/null
+++ b/dotnet/test/VectorData/CosmosNoSql.ConformanceTests/ModelTests/CosmosNoSqlNoVectorConformanceTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using CosmosNoSql.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace CosmosNoSql.ConformanceTests.ModelTests;
+
+public class CosmosNoSqlNoVectorModelTests(CosmosNoSqlNoVectorModelTests.Fixture fixture)
+ : NoVectorModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoVectorModelTests.Fixture
+ {
+ public override TestStore TestStore => CosmosNoSqlTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryBatchConformanceTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryBatchConformanceTests.cs
deleted file mode 100644
index be534a42368c..000000000000
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryBatchConformanceTests.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace InMemory.ConformanceTests.CRUD;
-
-public class InMemoryBatchConformanceTests(InMemorySimpleModelFixture fixture)
- : BatchConformanceTests(fixture), IClassFixture
-{
- // InMemory always returns the vectors (IncludeVectors = false isn't respected)
- public override async Task GetBatchAsync_WithoutVectors()
- {
- var expectedRecords = fixture.TestData.Take(2); // the last two records can get deleted by other tests
- var ids = expectedRecords.Select(record => record.Id);
-
- var received = await fixture.Collection.GetAsync(ids, new() { IncludeVectors = false }).ToArrayAsync();
-
- foreach (var record in expectedRecords)
- {
- record.AssertEqual(this.GetRecord(received, record.Id), includeVectors: true, fixture.TestStore.VectorsComparable);
- }
- }
-}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryDynamicRecordConformanceTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryDynamicRecordConformanceTests.cs
deleted file mode 100644
index 4bbf2e2278a4..000000000000
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryDynamicRecordConformanceTests.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace InMemory.ConformanceTests.CRUD;
-
-public class InMemoryDynamicRecordConformanceTests(InMemoryDynamicDataModelFixture fixture)
- : DynamicDataModelConformanceTests(fixture), IClassFixture
-{
- // InMemory always returns the vectors (IncludeVectors = false isn't respected)
- public override async Task GetAsync_WithoutVectors()
- {
- var expectedRecord = fixture.TestData[0];
-
- var received = await fixture.Collection.GetAsync(
- (int)expectedRecord[DynamicDataModelFixture.KeyPropertyName]!,
- new() { IncludeVectors = false });
-
- AssertEquivalent(expectedRecord, received, includeVectors: true, fixture.TestStore.VectorsComparable);
- }
-}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryNoDataConformanceTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryNoDataConformanceTests.cs
deleted file mode 100644
index 5696ce87f534..000000000000
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryNoDataConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace InMemory.ConformanceTests.CRUD;
-
-public class InMemoryNoDataConformanceTests(InMemoryNoDataConformanceTests.Fixture fixture)
- : NoDataConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoDataConformanceTests.Fixture
- {
- public override TestStore TestStore => InMemoryTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryNoVectorConformanceTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryNoVectorConformanceTests.cs
deleted file mode 100644
index a16a0f884c30..000000000000
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryNoVectorConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace InMemory.ConformanceTests.CRUD;
-
-public class InMemoryNoVectorConformanceTests(InMemoryNoVectorConformanceTests.Fixture fixture)
- : NoVectorConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoVectorConformanceTests.Fixture
- {
- public override TestStore TestStore => InMemoryTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryRecordConformanceTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryRecordConformanceTests.cs
deleted file mode 100644
index 3756f68ee156..000000000000
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/CRUD/InMemoryRecordConformanceTests.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace InMemory.ConformanceTests.CRUD;
-
-public class InMemoryRecordConformanceTests(InMemorySimpleModelFixture fixture)
- : RecordConformanceTests(fixture), IClassFixture
-{
- // InMemory always returns the vectors (IncludeVectors = false isn't respected)
- public override async Task GetAsync_WithoutVectors()
- {
- var expectedRecord = fixture.TestData[0];
- var received = await fixture.Collection.GetAsync(expectedRecord.Id, new() { IncludeVectors = false });
-
- expectedRecord.AssertEqual(received, includeVectors: true, fixture.TestStore.VectorsComparable);
- }
-}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/Collections/InMemoryCollectionConformanceTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/Collections/InMemoryCollectionConformanceTests.cs
deleted file mode 100644
index d6b098c5a689..000000000000
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/Collections/InMemoryCollectionConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.Collections;
-using Xunit;
-
-namespace InMemory.ConformanceTests.Collections;
-
-public class InMemoryCollectionConformanceTests(InMemoryFixture fixture)
- : CollectionConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/Filter/InMemoryBasicFilterTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/Filter/InMemoryBasicFilterTests.cs
deleted file mode 100644
index 43b17e623cfd..000000000000
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/Filter/InMemoryBasicFilterTests.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace InMemory.ConformanceTests.Filter;
-
-public class InMemoryBasicFilterTests(InMemoryBasicFilterTests.Fixture fixture)
- : BasicFilterTests(fixture), IClassFixture
-{
- public new class Fixture : BasicFilterTests.Fixture
- {
- public override TestStore TestStore => InMemoryTestStore.Instance;
-
- // BaseFilterTests attempts to create two InMemoryVectorStoreRecordCollection with different .NET types:
- // 1. One for strongly-typed mapping (TRecord=FilterRecord)
- // 2. One for dynamic mapping (TRecord=Dictionary)
- // Unfortunately, InMemoryVectorStore does not allow mapping the same collection name to different types;
- // at the same time, it simply evaluates all filtering via .NET AsQueryable(), so actual test coverage
- // isn't very important here. So we disable the dynamic tests.
- public override bool TestDynamic => false;
- }
-}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/InMemoryCollectionManagementTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/InMemoryCollectionManagementTests.cs
new file mode 100644
index 000000000000..d70e4d7340ff
--- /dev/null
+++ b/dotnet/test/VectorData/InMemory.ConformanceTests/InMemoryCollectionManagementTests.cs
@@ -0,0 +1,12 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using InMemory.ConformanceTests.Support;
+using VectorData.ConformanceTests;
+using Xunit;
+
+namespace InMemory.ConformanceTests;
+
+public class InMemoryCollectionManagementTests(InMemoryFixture fixture)
+ : CollectionManagementTests(fixture), IClassFixture
+{
+}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/Filter/InMemoryBasicQueryTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/InMemoryFilterTests.cs
similarity index 73%
rename from dotnet/test/VectorData/InMemory.ConformanceTests/Filter/InMemoryBasicQueryTests.cs
rename to dotnet/test/VectorData/InMemory.ConformanceTests/InMemoryFilterTests.cs
index ad536e8648a6..0b73fa5665a9 100644
--- a/dotnet/test/VectorData/InMemory.ConformanceTests/Filter/InMemoryBasicQueryTests.cs
+++ b/dotnet/test/VectorData/InMemory.ConformanceTests/InMemoryFilterTests.cs
@@ -1,16 +1,16 @@
// Copyright (c) Microsoft. All rights reserved.
using InMemory.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
+using VectorData.ConformanceTests;
using VectorData.ConformanceTests.Support;
using Xunit;
-namespace InMemory.ConformanceTests.Filter;
+namespace InMemory.ConformanceTests;
-public class InMemoryBasicQueryTests(InMemoryBasicQueryTests.Fixture fixture)
- : BasicQueryTests(fixture), IClassFixture
+public class InMemoryFilterTests(InMemoryFilterTests.Fixture fixture)
+ : FilterTests(fixture), IClassFixture
{
- public new class Fixture : BasicQueryTests.QueryFixture
+ public new class Fixture : FilterTests.Fixture
{
public override TestStore TestStore => InMemoryTestStore.Instance;
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryBasicModelTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryBasicModelTests.cs
new file mode 100644
index 000000000000..cc30b26c1c72
--- /dev/null
+++ b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryBasicModelTests.cs
@@ -0,0 +1,76 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using InMemory.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace InMemory.ConformanceTests.ModelTests;
+
+public class InMemoryBasicModelTests(InMemoryBasicModelTests.Fixture fixture)
+ : BasicModelTests(fixture), IClassFixture
+{
+ public override async Task GetAsync_single_record(bool includeVectors)
+ {
+ if (includeVectors)
+ {
+ await base.GetAsync_single_record(includeVectors);
+ return;
+ }
+
+ // InMemory always returns the vectors (IncludeVectors = false isn't respected)
+ var expectedRecord = fixture.TestData[0];
+ var received = await fixture.Collection.GetAsync(expectedRecord.Key, new() { IncludeVectors = false });
+
+ expectedRecord.AssertEqual(received, includeVectors: true, fixture.TestStore.VectorsComparable);
+ }
+
+ public override async Task GetAsync_multiple_records(bool includeVectors)
+ {
+ if (includeVectors)
+ {
+ await base.GetAsync_multiple_records(includeVectors);
+ return;
+ }
+
+ // InMemory always returns the vectors (IncludeVectors = false isn't respected)
+ var expectedRecords = fixture.TestData.Take(2); // the last two records can get deleted by other tests
+ var ids = expectedRecords.Select(record => record.Key);
+
+ var received = await fixture.Collection.GetAsync(ids, new() { IncludeVectors = false }).ToArrayAsync();
+
+ foreach (var record in expectedRecords)
+ {
+ record.AssertEqual(
+ received.Single(r => r.Key.Equals(record.Key)),
+ includeVectors: true,
+ fixture.TestStore.VectorsComparable);
+ }
+ }
+
+ public override async Task GetAsync_with_filter(bool includeVectors)
+ {
+ if (includeVectors)
+ {
+ await base.GetAsync_with_filter(includeVectors);
+ return;
+ }
+
+ // InMemory always returns the vectors (IncludeVectors = false isn't respected)
+ var expectedRecord = fixture.TestData[0];
+
+ var results = await this.Collection.GetAsync(
+ r => r.Number == 1,
+ top: 2,
+ new() { IncludeVectors = includeVectors })
+ .ToListAsync();
+
+ var receivedRecord = Assert.Single(results);
+ expectedRecord.AssertEqual(receivedRecord, includeVectors: true, fixture.TestStore.VectorsComparable);
+ }
+
+ public new class Fixture : BasicModelTests.Fixture
+ {
+ public override TestStore TestStore => InMemoryTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryDynamicModelTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryDynamicModelTests.cs
new file mode 100644
index 000000000000..7f2c7d073e22
--- /dev/null
+++ b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryDynamicModelTests.cs
@@ -0,0 +1,55 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using InMemory.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace InMemory.ConformanceTests.ModelTests;
+
+public class InMemoryDynamicModelTests(InMemoryDynamicModelTests.Fixture fixture)
+ : DynamicModelTests(fixture), IClassFixture
+{
+ public override async Task GetAsync_single_record(bool includeVectors)
+ {
+ if (includeVectors)
+ {
+ await base.GetAsync_single_record(includeVectors);
+ return;
+ }
+
+ // InMemory always returns the vectors (IncludeVectors = false isn't respected)
+ var expectedRecord = fixture.TestData[0];
+ var received = await fixture.Collection.GetAsync(
+ (int)expectedRecord[DynamicDataModelFixture.KeyPropertyName]!,
+ new() { IncludeVectors = false });
+
+ AssertEquivalent(expectedRecord, received, includeVectors: true, fixture.TestStore.VectorsComparable);
+ }
+
+ public override async Task GetAsync_with_filter(bool includeVectors)
+ {
+ if (includeVectors)
+ {
+ await base.GetAsync_with_filter(includeVectors);
+ return;
+ }
+
+ // InMemory always returns the vectors (IncludeVectors = false isn't respected)
+ var expectedRecord = fixture.TestData[0];
+
+ var results = await fixture.Collection.GetAsync(
+ r => (int)r[IntegerPropertyName]! == 1,
+ top: 2,
+ new() { IncludeVectors = includeVectors })
+ .ToListAsync();
+
+ var receivedRecord = Assert.Single(results);
+ AssertEquivalent(expectedRecord, receivedRecord, includeVectors: true, fixture.TestStore.VectorsComparable);
+ }
+
+ public new class Fixture : DynamicModelTests.Fixture
+ {
+ public override TestStore TestStore => InMemoryTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryNoDataModelTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryNoDataModelTests.cs
new file mode 100644
index 000000000000..77a7dd254e78
--- /dev/null
+++ b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryNoDataModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using InMemory.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace InMemory.ConformanceTests.ModelTests;
+
+public class InMemoryNoDataModelTests(InMemoryNoDataModelTests.Fixture fixture)
+ : NoDataModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoDataModelTests.Fixture
+ {
+ public override TestStore TestStore => InMemoryTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryNoVectorModelTests.cs b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryNoVectorModelTests.cs
new file mode 100644
index 000000000000..fe9b1b4a6d87
--- /dev/null
+++ b/dotnet/test/VectorData/InMemory.ConformanceTests/ModelTests/InMemoryNoVectorModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using InMemory.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace InMemory.ConformanceTests.ModelTests;
+
+public class InMemoryNoVectorModelTests(InMemoryNoVectorModelTests.Fixture fixture)
+ : NoVectorModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoVectorModelTests.Fixture
+ {
+ public override TestStore TestStore => InMemoryTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoBatchConformanceTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoBatchConformanceTests.cs
deleted file mode 100644
index 307a79479f6a..000000000000
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoBatchConformanceTests.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using MongoDB.Bson;
-using MongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace MongoDB.ConformanceTests.CRUD;
-
-public class MongoBatchConformanceTests_String(MongoSimpleModelFixture fixture)
- : BatchConformanceTests(fixture), IClassFixture>
-{
-}
-
-public class MongoBatchConformanceTests_Guid(MongoSimpleModelFixture fixture)
- : BatchConformanceTests(fixture), IClassFixture>
-{
-}
-
-public class MongoBatchConformanceTests_ObjectId(MongoSimpleModelFixture fixture)
- : BatchConformanceTests(fixture), IClassFixture>
-{
-}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoNoDataConformanceTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoNoDataConformanceTests.cs
deleted file mode 100644
index ee3ad6a5e526..000000000000
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoNoDataConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using MongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace MongoDB.ConformanceTests.CRUD;
-
-public class MongoNoDataConformanceTests(MongoNoDataConformanceTests.Fixture fixture)
- : NoDataConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoDataConformanceTests.Fixture
- {
- public override TestStore TestStore => MongoTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoNoVectorConformanceTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoNoVectorConformanceTests.cs
deleted file mode 100644
index 9f01003d3311..000000000000
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoNoVectorConformanceTests.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using MongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using VectorData.ConformanceTests.Support;
-using Xunit;
-
-namespace MongoDB.ConformanceTests.CRUD;
-
-public class MongoNoVectorConformanceTests(MongoNoVectorConformanceTests.Fixture fixture)
- : NoVectorConformanceTests(fixture), IClassFixture
-{
- public new class Fixture : NoVectorConformanceTests.Fixture
- {
- public override TestStore TestStore => MongoTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoRecordConformanceTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoRecordConformanceTests.cs
deleted file mode 100644
index 171676cceb46..000000000000
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/CRUD/MongoRecordConformanceTests.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using MongoDB.Bson;
-using MongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.CRUD;
-using Xunit;
-
-namespace MongoDB.ConformanceTests.CRUD;
-
-public class MongoRecordConformanceTests_String(MongoSimpleModelFixture fixture)
- : RecordConformanceTests(fixture), IClassFixture>
-{
-}
-
-public class MongoRecordConformanceTests_Guid(MongoSimpleModelFixture fixture)
- : RecordConformanceTests(fixture), IClassFixture>
-{
-}
-
-public class MongoRecordConformanceTests_ObjectId(MongoSimpleModelFixture fixture)
- : RecordConformanceTests(fixture), IClassFixture>
-{
-}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/Collections/MongoCollectionConformanceTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/Collections/MongoCollectionConformanceTests.cs
deleted file mode 100644
index 70bc53d5b4a8..000000000000
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/Collections/MongoCollectionConformanceTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using MongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.Collections;
-using Xunit;
-
-namespace MongoDB.ConformanceTests.Collections;
-
-public class MongoCollectionConformanceTests(MongoFixture fixture)
- : CollectionConformanceTests(fixture), IClassFixture
-{
-}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/Filter/MongoBasicFilterTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/Filter/MongoBasicFilterTests.cs
deleted file mode 100644
index 6e6cca078895..000000000000
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/Filter/MongoBasicFilterTests.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using MongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
-using VectorData.ConformanceTests.Support;
-using VectorData.ConformanceTests.Xunit;
-using Xunit;
-
-namespace MongoDB.ConformanceTests.Filter;
-
-public class MongoBasicFilterTests(MongoBasicFilterTests.Fixture fixture)
- : BasicFilterTests(fixture), IClassFixture
-{
- // Specialized MongoDB syntax for NOT over Contains ($nin)
- [ConditionalFact]
- public virtual Task Not_over_Contains()
- => this.TestFilterAsync(
- r => !new[] { 8, 10 }.Contains(r.Int),
- r => !new[] { 8, 10 }.Contains((int)r["Int"]!));
-
- #region Null checking
-
- // MongoDB currently doesn't support null checking ({ "Foo" : null }) in vector search pre-filters
- public override Task Equal_with_null_reference_type()
- => Assert.ThrowsAsync(() => base.Equal_with_null_reference_type());
-
- public override Task Equal_with_null_captured()
- => Assert.ThrowsAsync(() => base.Equal_with_null_captured());
-
- public override Task NotEqual_with_null_reference_type()
- => Assert.ThrowsAsync(() => base.NotEqual_with_null_reference_type());
-
- public override Task NotEqual_with_null_captured()
- => Assert.ThrowsAsync(() => base.NotEqual_with_null_captured());
-
- public override Task Equal_int_property_with_null_nullable_int()
- => Assert.ThrowsAsync(() => base.Equal_int_property_with_null_nullable_int());
-
- #endregion
-
- #region Not
-
- // MongoDB currently doesn't support NOT in vector search pre-filters
- // (https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-stage/#atlas-vector-search-pre-filter)
- public override Task Not_over_And()
- => Assert.ThrowsAsync(() => base.Not_over_And());
-
- public override Task Not_over_Or()
- => Assert.ThrowsAsync(() => base.Not_over_Or());
-
- #endregion
-
- public override Task Contains_over_field_string_array()
- => Assert.ThrowsAsync(() => base.Contains_over_field_string_array());
-
- public override Task Contains_over_field_string_List()
- => Assert.ThrowsAsync(() => base.Contains_over_field_string_List());
-
- // AnyTagEqualTo not (currently) supported on SQLite
- [Obsolete("Legacy filter support")]
- public override Task Legacy_AnyTagEqualTo_array()
- => Assert.ThrowsAsync(() => base.Legacy_AnyTagEqualTo_array());
-
- [Obsolete("Legacy filter support")]
- public override Task Legacy_AnyTagEqualTo_List()
- => Assert.ThrowsAsync(() => base.Legacy_AnyTagEqualTo_List());
-
- public new class Fixture : BasicFilterTests.Fixture
- {
- public override TestStore TestStore => MongoTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/Filter/MongoBasicQueryTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/Filter/MongoBasicQueryTests.cs
deleted file mode 100644
index ab52db34f11e..000000000000
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/Filter/MongoBasicQueryTests.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) Microsoft. All rights reserved.
-
-using MongoDB.ConformanceTests.Support;
-using VectorData.ConformanceTests.Filter;
-using VectorData.ConformanceTests.Support;
-using VectorData.ConformanceTests.Xunit;
-using Xunit;
-
-namespace MongoDB.ConformanceTests.Filter;
-
-public class MongoBasicQueryTests(MongoBasicQueryTests.Fixture fixture)
- : BasicQueryTests(fixture), IClassFixture
-{
- // Specialized MongoDB syntax for NOT over Contains ($nin)
- [ConditionalFact]
- public virtual Task Not_over_Contains()
- => this.TestFilterAsync(
- r => !new[] { 8, 10 }.Contains(r.Int),
- r => !new[] { 8, 10 }.Contains((int)r["Int"]!));
-
- // MongoDB currently doesn't support null checking ({ "Foo" : null }) in vector search pre-filters
- public override Task Equal_with_null_reference_type()
- => Assert.ThrowsAsync(() => base.Equal_with_null_reference_type());
-
- public override Task Equal_with_null_captured()
- => Assert.ThrowsAsync(() => base.Equal_with_null_captured());
-
- public override Task NotEqual_with_null_reference_type()
- => Assert.ThrowsAsync(() => base.NotEqual_with_null_reference_type());
-
- public override Task NotEqual_with_null_captured()
- => Assert.ThrowsAsync(() => base.NotEqual_with_null_captured());
-
- public override Task Equal_int_property_with_null_nullable_int()
- => Assert.ThrowsAsync(() => base.Equal_int_property_with_null_nullable_int());
-
- // MongoDB currently doesn't support NOT in vector search pre-filters
- // (https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-stage/#atlas-vector-search-pre-filter)
- public override Task Not_over_And()
- => Assert.ThrowsAsync(() => base.Not_over_And());
-
- public override Task Not_over_Or()
- => Assert.ThrowsAsync(() => base.Not_over_Or());
-
- public override Task Contains_over_field_string_array()
- => Assert.ThrowsAsync(() => base.Contains_over_field_string_array());
-
- public override Task Contains_over_field_string_List()
- => Assert.ThrowsAsync(() => base.Contains_over_field_string_List());
-
- public new class Fixture : BasicQueryTests.QueryFixture
- {
- public override TestStore TestStore => MongoTestStore.Instance;
- }
-}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoBasicModelTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoBasicModelTests.cs
new file mode 100644
index 000000000000..474987586a08
--- /dev/null
+++ b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoBasicModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using MongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace MongoDB.ConformanceTests.ModelTests;
+
+public class MongoBasicModelTests(MongoBasicModelTests.Fixture fixture)
+ : BasicModelTests(fixture), IClassFixture
+{
+ public new class Fixture : BasicModelTests.Fixture
+ {
+ public override TestStore TestStore => MongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoDynamicModelTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoDynamicModelTests.cs
new file mode 100644
index 000000000000..6253b5e680fd
--- /dev/null
+++ b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoDynamicModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using MongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace MongoDB.ConformanceTests.ModelTests;
+
+public class MongoDynamicModelTests(MongoDynamicModelTests.Fixture fixture)
+ : DynamicModelTests(fixture), IClassFixture
+{
+ public new class Fixture : DynamicModelTests.Fixture
+ {
+ public override TestStore TestStore => MongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoNoDataModelTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoNoDataModelTests.cs
new file mode 100644
index 000000000000..13f2c57c65f7
--- /dev/null
+++ b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoNoDataModelTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using MongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace MongoDB.ConformanceTests.ModelTests;
+
+public class MongoNoDataModelTests(MongoNoDataModelTests.Fixture fixture)
+ : NoDataModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoDataModelTests.Fixture
+ {
+ public override TestStore TestStore => MongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoNoVectorConformanceTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoNoVectorConformanceTests.cs
new file mode 100644
index 000000000000..8b8654c5621a
--- /dev/null
+++ b/dotnet/test/VectorData/MongoDB.ConformanceTests/ModelTests/MongoNoVectorConformanceTests.cs
@@ -0,0 +1,17 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using MongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests.ModelTests;
+using VectorData.ConformanceTests.Support;
+using Xunit;
+
+namespace MongoDB.ConformanceTests.ModelTests;
+
+public class MongoNoVectorModelTests(MongoNoVectorModelTests.Fixture fixture)
+ : NoVectorModelTests(fixture), IClassFixture
+{
+ public new class Fixture : NoVectorModelTests.Fixture
+ {
+ public override TestStore TestStore => MongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoCollectionManagementTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoCollectionManagementTests.cs
new file mode 100644
index 000000000000..e118f8fedb59
--- /dev/null
+++ b/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoCollectionManagementTests.cs
@@ -0,0 +1,12 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using MongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests;
+using Xunit;
+
+namespace MongoDB.ConformanceTests;
+
+public class MongoCollectionManagementTests(MongoFixture fixture)
+ : CollectionManagementTests(fixture), IClassFixture
+{
+}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoFilterTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoFilterTests.cs
new file mode 100644
index 000000000000..d102528334f0
--- /dev/null
+++ b/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoFilterTests.cs
@@ -0,0 +1,86 @@
+// Copyright (c) Microsoft. All rights reserved.
+
+using MongoDB.ConformanceTests.Support;
+using VectorData.ConformanceTests;
+using VectorData.ConformanceTests.Support;
+using VectorData.ConformanceTests.Xunit;
+using Xunit;
+
+namespace MongoDB.ConformanceTests;
+
+public class MongoFilterTests(MongoFilterTests.Fixture fixture)
+ : FilterTests(fixture), IClassFixture
+{
+ // Specialized MongoDB syntax for NOT over Contains ($nin)
+ [ConditionalFact]
+ public virtual Task Not_over_Contains()
+ => this.TestFilterAsync(
+ r => !new[] { 8, 10 }.Contains(r.Int),
+ r => !new[] { 8, 10 }.Contains((int)r["Int"]!));
+
+ #region Null checking
+
+ // MongoDB currently doesn't support null checking ({ "Foo" : null }) in vector search pre-filters
+ public override Task Equal_with_null_reference_type()
+ => Assert.ThrowsAsync(base.Equal_with_null_reference_type);
+
+ public override Task Equal_with_null_captured()
+ => Assert.ThrowsAsync(base.Equal_with_null_captured);
+
+ public override Task NotEqual_with_null_reference_type()
+ => Assert.ThrowsAsync(base.NotEqual_with_null_reference_type);
+
+ public override Task NotEqual_with_null_captured()
+ => Assert.ThrowsAsync(base.NotEqual_with_null_captured);
+
+ public override Task Equal_int_property_with_null_nullable_int()
+ => Assert.ThrowsAsync(base.Equal_int_property_with_null_nullable_int);
+
+ #endregion
+
+ #region Not
+
+ // MongoDB currently doesn't support NOT in vector search pre-filters
+ // (https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-stage/#atlas-vector-search-pre-filter)
+ public override Task Not_over_And()
+ => Assert.ThrowsAsync(base.Not_over_And);
+
+ public override Task Not_over_Or()
+ => Assert.ThrowsAsync(base.Not_over_Or);
+
+ #endregion
+
+ public override Task Contains_over_field_string_array()
+ => Assert.ThrowsAsync(base.Contains_over_field_string_array);
+
+ public override Task Contains_over_field_string_List()
+ => Assert.ThrowsAsync(base.Contains_over_field_string_List);
+
+ public override Task Contains_with_Enumerable_Contains()
+ => Assert.ThrowsAsync(base.Contains_with_Enumerable_Contains);
+
+#if !NETFRAMEWORK
+ public override Task Contains_with_MemoryExtensions_Contains()
+ => Assert.ThrowsAsync(base.Contains_with_MemoryExtensions_Contains);
+#endif
+
+#if NET10_0_OR_GREATER
+ [ConditionalFact]
+ public virtual Task Contains_with_MemoryExtensions_Contains_with_null_comparer()
+ => Assert.ThrowsAsync(base.Contains_with_MemoryExtensions_Contains_with_null_comparer);
+#endif
+
+ // AnyTagEqualTo not (currently) supported on SQLite
+ [Obsolete("Legacy filter support")]
+ public override Task Legacy_AnyTagEqualTo_array()
+ => Assert.ThrowsAsync(base.Legacy_AnyTagEqualTo_array);
+
+ [Obsolete("Legacy filter support")]
+ public override Task Legacy_AnyTagEqualTo_List()
+ => Assert.ThrowsAsync(base.Legacy_AnyTagEqualTo_List);
+
+ public new class Fixture : FilterTests.Fixture
+ {
+ public override TestStore TestStore => MongoTestStore.Instance;
+ }
+}
diff --git a/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoTestSuiteImplementationTests.cs b/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoTestSuiteImplementationTests.cs
index 8ed44371b6ed..a5e577d88e0e 100644
--- a/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoTestSuiteImplementationTests.cs
+++ b/dotnet/test/VectorData/MongoDB.ConformanceTests/MongoTestSuiteImplementationTests.cs
@@ -1,7 +1,6 @@
// Copyright (c) Microsoft. All rights reserved.
using VectorData.ConformanceTests;
-using VectorData.ConformanceTests.CRUD;
using VectorData.ConformanceTests.VectorSearch;
namespace MongoDB.ConformanceTests;
@@ -11,7 +10,6 @@ public class MongoTestSuiteImplementationTests : TestSuiteImplementationTests
protected override ICollection