/* * Copyright (C) 2016 RankSys http://ranksys.org * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package es.uam.eps.ir.ranksys.metrics.basic; import es.uam.eps.ir.ranksys.core.Recommendation; import es.uam.eps.ir.ranksys.core.preference.PreferenceData; import es.uam.eps.ir.ranksys.core.preference.SimplePreferenceData; import es.uam.eps.ir.ranksys.metrics.RecommendationMetric; import es.uam.eps.ir.ranksys.metrics.rel.BinaryRelevanceModel; import org.junit.Assert; import org.junit.Test; import org.ranksys.core.util.tuples.Tuples; import java.util.Arrays; import java.util.stream.Stream; import static org.jooq.lambda.tuple.Tuple.tuple; /** * Unit tests for AveragePrecision */ public class AveragePrecisionTest { private final PreferenceData<String, String> prefs = SimplePreferenceData.load(Stream.of( tuple("a", "A", 1.0), tuple("a", "B", 1.0), tuple("a", "C", 1.0), tuple("a", "D", 1.0), tuple("b", "A", 1.0) )); private final RecommendationMetric<String, String> ap = new AveragePrecision<>(5, new BinaryRelevanceModel<>(false, prefs, 1.0)); @Test public void testA() { Recommendation<String, String> recA = new Recommendation<>("a", Arrays.asList( Tuples.tuple("A", 9.0), Tuples.tuple("L", 8.0), Tuples.tuple("B", 7.0), Tuples.tuple("N", 6.0), Tuples.tuple("O", 5.0), Tuples.tuple("P", 4.0), Tuples.tuple("Q", 3.0), Tuples.tuple("L", 2.0), Tuples.tuple("C", 1.0), Tuples.tuple("R", 0.0) )); Assert.assertEquals(5.0 / 12.0, ap.evaluate(recA), 1e-12); } @Test public void testB() { Recommendation<String, String> recB = new Recommendation<>("b", Arrays.asList( Tuples.tuple("L", 8.0), Tuples.tuple("M", 7.0), Tuples.tuple("N", 6.0), Tuples.tuple("O", 5.0), Tuples.tuple("P", 4.0), Tuples.tuple("Q", 3.0), Tuples.tuple("B", 2.0), Tuples.tuple("C", 1.0), Tuples.tuple("R", 0.0) )); Assert.assertEquals(0.0, ap.evaluate(recB), 0.0); } @Test public void testC() { Recommendation<String, String> recC = new Recommendation<>("c", Arrays.asList( Tuples.tuple("A", 9.0), Tuples.tuple("L", 8.0), Tuples.tuple("M", 7.0), Tuples.tuple("N", 6.0), Tuples.tuple("O", 5.0), Tuples.tuple("P", 4.0), Tuples.tuple("Q", 3.0), Tuples.tuple("B", 2.0), Tuples.tuple("C", 1.0), Tuples.tuple("R", 0.0) )); Assert.assertEquals(0.0, ap.evaluate(recC), 0.0); } }