Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
* develop:
  Release a beta version for testing new Query Candidates.
  Adding more helper functions to Candidates class.
  Making sure we accept that candidates can be null due to ProtoBuf initialization.
  Adding a new IQueryInterface that will strictly implement method that are required by the query engine.
  Implementing a more efficient query, specifically handling the use-case when we have very large queries with very long matches.
  Nested if makes more sense here.
  • Loading branch information
AddictedCS committed Feb 23, 2024
2 parents d291f34 + 300acae commit 0aae7ee
Show file tree
Hide file tree
Showing 17 changed files with 198 additions and 358 deletions.
4 changes: 2 additions & 2 deletions src/SoundFingerprinting.Tests/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("4cac962e-ebc5-4006-a1e0-7ffb3e2483c2")]
[assembly: AssemblyVersion("9.3.0.100")]
[assembly: AssemblyInformationalVersion("9.3.0.100")]
[assembly: AssemblyVersion("9.4.0.100")]
[assembly: AssemblyInformationalVersion("9.4.0.100")]
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
Expand All @@ -14,9 +13,9 @@
using SoundFingerprinting.Command;
using SoundFingerprinting.Configuration;
using SoundFingerprinting.Content;
using SoundFingerprinting.DAO.Data;
using SoundFingerprinting.Data;
using SoundFingerprinting.InMemory;
using SoundFingerprinting.LCS;
using SoundFingerprinting.Media;
using SoundFingerprinting.Query;

Expand Down Expand Up @@ -88,11 +87,11 @@ public async Task ShouldQueryUsingAudioVideoHashes()

var avTrack = new AVTrack(new AudioTrack(TestUtilities.GenerateRandomAudioSamples(30 * 5512)), new VideoTrack(TestUtilities.GenerateRandomFrames(30 * 30)));
mediaService.Setup(_ => _.ReadAVTrackFromFile("test.mp4", It.IsAny<AVTrackReadConfiguration>(), 0, 0, MediaType.Audio | MediaType.Video)).Returns(avTrack);
modelService.Setup(_ => _.Query(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>())).Callback(
modelService.Setup(_ => _.QueryEfficiently(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>())).Callback(
(Hashes hashes, QueryConfiguration configuration) =>
{
Assert.AreEqual(30, hashes.DurationInSeconds, 0.001);
}).Returns(Enumerable.Empty<SubFingerprintData>());
}).Returns(new Candidates());

var avQueryResult = await QueryCommandBuilder.Instance
.BuildQueryCommand()
Expand All @@ -102,7 +101,7 @@ public async Task ShouldQueryUsingAudioVideoHashes()

Assert.IsFalse(avQueryResult.ContainsMatches);

modelService.Verify(_ => _.Query(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>()), Times.Exactly(2));
modelService.Verify(_ => _.QueryEfficiently(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>()), Times.Exactly(2));
}

[Test]
Expand Down
108 changes: 0 additions & 108 deletions src/SoundFingerprinting.Tests/Unit/LCS/GroupedQueryResultsTest.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ namespace SoundFingerprinting.Tests.Unit.Query
using SoundFingerprinting.Command;
using SoundFingerprinting.Configuration;
using SoundFingerprinting.Content;
using SoundFingerprinting.DAO.Data;
using SoundFingerprinting.Data;
using SoundFingerprinting.InMemory;
using SoundFingerprinting.LCS;
using SoundFingerprinting.Media;
using SoundFingerprinting.Query;
using SoundFingerprinting.Strides;
Expand Down Expand Up @@ -524,7 +524,7 @@ public async Task ShouldContinueQueryingEvenWhenAnErrorOccurs()
backoffPolicy.Setup(p => p.Success());

var modelService = new Mock<IModelService>(MockBehavior.Strict);
modelService.Setup(s => s.Query(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>())).Returns(Enumerable.Empty<SubFingerprintData>());
modelService.Setup(s => s.QueryEfficiently(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>())).Returns(new Candidates());

var queryLength = await QueryCommandBuilder.Instance
.BuildRealtimeQueryCommand()
Expand Down Expand Up @@ -553,7 +553,7 @@ public async Task ShouldContinueQueryingEvenWhenAnErrorOccurs()
Assert.AreEqual(totalExceptions - 1, restored);
Assert.AreEqual(totalQueries * length, queryLength);

modelService.Verify(s => s.Query(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>()), Times.Exactly(totalQueries));
modelService.Verify(s => s.QueryEfficiently(It.IsAny<Hashes>(), It.IsAny<QueryConfiguration>()), Times.Exactly(totalQueries));
backoffPolicy.Verify(b => b.Failure(), Times.Exactly(totalExceptions));
backoffPolicy.Verify(b => b.RemainingDelay, Times.Exactly(totalExceptions));
backoffPolicy.Verify(b => b.Success(), Times.Exactly(totalExceptions - 1));
Expand Down Expand Up @@ -951,14 +951,14 @@ public FaultyQueryService(int faultyCounts, IQueryFingerprintService goodOne)
this.goodOne = goodOne;
}

public QueryResult Query(Hashes queryFingerprints, QueryConfiguration configuration, IModelService modelService)
public QueryResult Query(Hashes queryFingerprints, QueryConfiguration configuration, IQueryService queryService)
{
if (faultyCounts-- > 0)
{
throw new IOException("I/O exception");
}

return goodOne.Query(queryFingerprints, configuration, modelService);
return goodOne.Query(queryFingerprints, configuration, queryService);
}
}
}
Expand Down
145 changes: 0 additions & 145 deletions src/SoundFingerprinting.Tests/Unit/QueryFingerprintServiceTest.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,6 @@ public QueryPathReconstructionStrategyType QueryPathReconstructionStrategy
/// Before v8.16.2 hamming similarity was used to measure how similar query/track pairs are.
/// Since hamming similarity is not a good similarity metric (specifically when applied to hashed min-hashes), scoring algorithm was reduced to sub-fingerprints counting (since score is 1 for all pairs <see cref="SubFingerprintCountScoreAlgorithm"/>).
/// </remarks>
internal IScoreAlgorithm ScoreAlgorithm { get; private set; } = null!;
public IScoreAlgorithm ScoreAlgorithm { get; private set; } = null!;
}
}
Loading

0 comments on commit 0aae7ee

Please sign in to comment.