forked from Manuel/meeting-assistant
48 lines
1.5 KiB
C#
48 lines
1.5 KiB
C#
using MeetingAssistant.Speakers;
|
|
|
|
namespace MeetingAssistant.Tests;
|
|
|
|
public sealed class SpeakerIdentityMergerTests
|
|
{
|
|
[Fact]
|
|
public void MergeIntoRetainsNewestDistinctVoiceVectorsUpToConfiguredLimit()
|
|
{
|
|
var now = DateTimeOffset.UtcNow;
|
|
var target = new SpeakerIdentity
|
|
{
|
|
CanonicalName = "Chris",
|
|
VoiceVectors =
|
|
[
|
|
Vector("oldest", 1, now.AddMinutes(-4)),
|
|
Vector("duplicate", 2, now.AddMinutes(-3))
|
|
]
|
|
};
|
|
var source = new SpeakerIdentity
|
|
{
|
|
VoiceVectors =
|
|
[
|
|
Vector("duplicate", 2, now.AddMinutes(-2)),
|
|
Vector("newer", 3, now.AddMinutes(-1)),
|
|
Vector("newest", 4, now)
|
|
]
|
|
};
|
|
|
|
SpeakerIdentityMerger.MergeInto(target, source, maxSnippets: 3, maxVoiceVectors: 3);
|
|
|
|
Assert.Equal(["duplicate", "newer", "newest"], target.VoiceVectors.Select(vector => vector.Fingerprint).Order());
|
|
Assert.All(target.VoiceVectors, vector => Assert.Same(target, vector.SpeakerIdentity));
|
|
}
|
|
|
|
private static SpeakerVoiceVector Vector(string fingerprint, byte value, DateTimeOffset createdAt)
|
|
{
|
|
return new SpeakerVoiceVector
|
|
{
|
|
ModelId = "model",
|
|
Dimensions = 256,
|
|
VectorBytes = Enumerable.Repeat(value, 256 * sizeof(float)).ToArray(),
|
|
Fingerprint = fingerprint,
|
|
CreatedAt = createdAt
|
|
};
|
|
}
|
|
}
|