diff --git a/feature/matcher/src/main/java/com/simprints/matcher/usecases/MatchResultSet.kt b/feature/matcher/src/main/java/com/simprints/matcher/usecases/MatchResultSet.kt index 123e72d9a1..d91c869eb4 100644 --- a/feature/matcher/src/main/java/com/simprints/matcher/usecases/MatchResultSet.kt +++ b/feature/matcher/src/main/java/com/simprints/matcher/usecases/MatchResultSet.kt @@ -8,10 +8,9 @@ internal class MatchResultSet( ) { private var lowestConfidence: Float = 0f - private val treeSet = TreeSet { o1: T, o2: T -> - // Reverse order for descending sort - -1 * o1.confidence.compareTo(o2.confidence) - } + private val treeSet = TreeSet( + compareByDescending { it.confidence }.thenByDescending { it.subjectId }, + ) fun add(element: T): MatchResultSet { if (lowestConfidence > element.confidence) { diff --git a/feature/matcher/src/test/java/com/simprints/matcher/usecases/MatchResultSetTest.kt b/feature/matcher/src/test/java/com/simprints/matcher/usecases/MatchResultSetTest.kt index 8206e38c0e..96ed8951ce 100644 --- a/feature/matcher/src/test/java/com/simprints/matcher/usecases/MatchResultSetTest.kt +++ b/feature/matcher/src/test/java/com/simprints/matcher/usecases/MatchResultSetTest.kt @@ -46,4 +46,23 @@ class MatchResultSetTest { ), ) } + + // On equal confidence scores sort by id + @Test + fun `Stores results sorted descending by confidence and id`() { + val set = MatchResultSet(3) + + set.add(FingerprintMatchResult.Item("4", 0.4f)) + set.add(FingerprintMatchResult.Item("1", 0.4f)) + set.add(FingerprintMatchResult.Item("3", 0.3f)) + set.add(FingerprintMatchResult.Item("2", 0.3f)) + + assertThat(set.toList()).isEqualTo( + listOf( + FingerprintMatchResult.Item("4", 0.4f), + FingerprintMatchResult.Item("1", 0.4f), + FingerprintMatchResult.Item("3", 0.3f), + ), + ) + } }