diff --git a/sdks/csharp/tests~/Tests.cs b/sdks/csharp/tests~/Tests.cs index 3adb4970cba..d86115aa838 100644 --- a/sdks/csharp/tests~/Tests.cs +++ b/sdks/csharp/tests~/Tests.cs @@ -128,4 +128,56 @@ public static void ListstreamWorks() } }); } + + public class BTreeIndexBaseColumnImplementsIComparableTest + { + + public sealed class UserHandle : RemoteTableHandle + { + protected override string RemoteTableName => "user"; + + public sealed class IdentityIndex : BTreeIndexBase + { + protected override SpacetimeDB.Identity GetKey(User row) => row.Identity; + + public IdentityIndex(UserHandle table) : base(table) { } + } + + public readonly IdentityIndex Identity; + + internal UserHandle(DbConnection conn) : base(conn) + { + Identity = new(this); + } + } + + [Fact] + public void Identity_ShouldImplementIComparable() + { + // Arrange + var identityType = typeof(SpacetimeDB.Identity); + + // Act + bool implementsIComparable = + typeof(IComparable<>).MakeGenericType(identityType).IsAssignableFrom(identityType); + + // Assert + Assert.True(implementsIComparable, $"{identityType} does not implement IComparable<{identityType}>"); + } + + [Fact] + public void IdentityIndex_ShouldInheritFrom_BTreeIndexBase() + { + // Arrange + var identityIndexType = typeof(UserHandle.IdentityIndex); + var expectedBaseType = typeof(RemoteTableHandle.BTreeIndexBase); + + // Act + bool isCorrectBaseType = expectedBaseType.IsAssignableFrom(identityIndexType.BaseType); + + // Assert + Assert.True(isCorrectBaseType, + "IdentityIndex does not correctly inherit from BTreeIndexBase"); + } + } } \ No newline at end of file