Class StructuredStoreContractTests
Shared behavior contract every IStructuredStore backend must satisfy
identically: insert, upsert-if-better (both directions, including the equal-is-not-better
rule), query filtering/distinct-collapsing/multi-field ordering/pagination, comparison +
distinct counting, delete-by-query, trim-beyond (including the folded write-path trim), and
health checks. Concrete subclasses provide a fresh store instance per test via
CreateStoreAsync().
Inheritance
StructuredStoreContractTests
Assembly: Tests.dll
Syntax
public abstract class StructuredStoreContractTests
Constructors
StructuredStoreContractTests()
Declaration
protected StructuredStoreContractTests()
Fields
NoCancellation
Declaration
protected static readonly CancellationToken NoCancellation
Field Value
PartitionField
Declaration
protected const string PartitionField = "group_key"
Field Value
PlayerField
Declaration
protected const string PlayerField = "player"
Field Value
ScoreField
Declaration
protected const string ScoreField = "score"
Field Value
Table
Declaration
protected static readonly StoreTable Table
Field Value
TicksField
Declaration
protected const string TicksField = "ticks"
Field Value
Methods
CountAsync_DistinctBy_CollapsesToDistinctGroups()
Declaration
public Task CountAsync_DistinctBy_CollapsesToDistinctGroups()
Returns
CountAsync_WithComparisonFilter_CountsOnlyStrictlyBetterRecords()
Declaration
public Task CountAsync_WithComparisonFilter_CountsOnlyStrictlyBetterRecords()
Returns
CreateStoreAsync()
Declaration
protected abstract Task<IStructuredStore> CreateStoreAsync()
Returns
DeleteByQueryAsync_RemovesOnlyMatchingRecords()
Declaration
public Task DeleteByQueryAsync_RemovesOnlyMatchingRecords()
Returns
DistinctByPlayer()
Declaration
protected static IReadOnlyList<string> DistinctByPlayer()
Returns
GroupScope()
Declaration
protected static IReadOnlyList<FieldFilter> GroupScope()
Returns
HealthCheckAsync_ReturnsTrue()
Declaration
public Task HealthCheckAsync_ReturnsTrue()
Returns
Declaration
public Task InsertAsync_FoldedTrim_BoundsStoredCountImmediately()
Returns
InsertAsync_MultipleRecords_QueryOrdersByDescendingScore()
Declaration
public Task InsertAsync_MultipleRecords_QueryOrdersByDescendingScore()
Returns
KeyFields()
Declaration
protected static IReadOnlyList<string> KeyFields()
Returns
Ordering(StructuredSortDirection)
Declaration
protected static IReadOnlyList<OrderField> Ordering(StructuredSortDirection scoreDirection)
Parameters
Returns
QueryAsync_DistinctBy_CollapsesToFirstRecordPerGroupUnderOrdering()
Declaration
public Task QueryAsync_DistinctBy_CollapsesToFirstRecordPerGroupUnderOrdering()
Returns
QueryAsync_EqualNullFilter_MatchesOnlyNullValuedRecords()
Declaration
public Task QueryAsync_EqualNullFilter_MatchesOnlyNullValuedRecords()
Returns
QueryAsync_GreaterThanNullFilter_MatchesOnlyNonNullRecords()
Declaration
public Task QueryAsync_GreaterThanNullFilter_MatchesOnlyNonNullRecords()
Returns
QueryAsync_LessThanConcreteValueFilter_IncludesNullValuedRecords()
Declaration
public Task QueryAsync_LessThanConcreteValueFilter_IncludesNullValuedRecords()
Returns
QueryAsync_LessThanNullFilter_MatchesNothing()
Declaration
public Task QueryAsync_LessThanNullFilter_MatchesNothing()
Returns
QueryAsync_NoFilterMatch_ReturnsEmpty()
Declaration
public Task QueryAsync_NoFilterMatch_ReturnsEmpty()
Returns
QueryAsync_OffsetAndLimit_Paginate()
Declaration
public Task QueryAsync_OffsetAndLimit_Paginate()
Returns
QueryAsync_TiedScores_BreakTiesByTicksThenPlayerOrdinal()
Declaration
public Task QueryAsync_TiedScores_BreakTiesByTicksThenPlayerOrdinal()
Returns
QueryWindowAroundAsync_RadiusLargerThanScope_ReturnsFullScope()
Declaration
public Task QueryWindowAroundAsync_RadiusLargerThanScope_ReturnsFullScope()
Returns
QueryWindowAroundAsync_TargetAbsent_ReturnsEmpty()
Declaration
public Task QueryWindowAroundAsync_TargetAbsent_ReturnsEmpty()
Returns
QueryWindowAroundAsync_TargetInMiddle_ReturnsCenteredWindow()
Declaration
public Task QueryWindowAroundAsync_TargetInMiddle_ReturnsCenteredWindow()
Returns
QueryWindowAroundAsync_TargetNearTop_ClampsWindowStart()
Declaration
public Task QueryWindowAroundAsync_TargetNearTop_ClampsWindowStart()
Returns
Record(string, double, long)
Declaration
protected static StructuredRecord Record(string player, double score, long ticks = 0)
Parameters
Returns
RecordWithNullScore(string, long)
A record whose score is explicitly Null — for the null-semantics contract cases (relational subclasses declare the score field nullable).
Declaration
protected static StructuredRecord RecordWithNullScore(string player, long ticks = 0)
Parameters
Returns
SetUpStoreAsync()
Declaration
public Task SetUpStoreAsync()
Returns
TrimBeyondAsync_KeepsOnlyTheBestWithinScope()
Declaration
public Task TrimBeyondAsync_KeepsOnlyTheBestWithinScope()
Returns
UpsertIfBetterAsync_Ascending_LowerValueReplacesExisting()
Declaration
public Task UpsertIfBetterAsync_Ascending_LowerValueReplacesExisting()
Returns
UpsertIfBetterAsync_Descending_BetterValueReplacesExisting()
Declaration
public Task UpsertIfBetterAsync_Descending_BetterValueReplacesExisting()
Returns
UpsertIfBetterAsync_Descending_WorseValueDoesNotReplaceExisting()
Declaration
public Task UpsertIfBetterAsync_Descending_WorseValueDoesNotReplaceExisting()
Returns
UpsertIfBetterAsync_EqualValue_DoesNotReplaceExisting()
Declaration
public Task UpsertIfBetterAsync_EqualValue_DoesNotReplaceExisting()
Returns
UpsertIfBetterAsync_ExistingNullComparisonValue_AscendingCandidateLoses()
Declaration
public Task UpsertIfBetterAsync_ExistingNullComparisonValue_AscendingCandidateLoses()
Returns
UpsertIfBetterAsync_ExistingNullComparisonValue_DescendingCandidateWins()
Declaration
public Task UpsertIfBetterAsync_ExistingNullComparisonValue_DescendingCandidateWins()
Returns
UpsertIfBetterAsync_NoExistingRecord_Inserts()
Declaration
public Task UpsertIfBetterAsync_NoExistingRecord_Inserts()
Returns