package quickml.supervised.crossValidation.lossfunctions.rankingLossFunctions;
import com.beust.jcommander.internal.Lists;
import com.beust.jcommander.internal.Maps;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import quickml.supervised.rankingModels.ItemToOutcomeMap;
import quickml.supervised.rankingModels.LabelPredictionWeightForRanking;
import quickml.supervised.rankingModels.RankingPrediction;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import static org.junit.Assert.*;
/**
* Created by alexanderhawk on 8/13/15.
*/
public class NDCGTest {
ItemToOutcomeMap itemToOutcomeMap;
RankingPrediction rankingPrediction;
@Before
public void setUp() {
HashMap<Serializable, Double> itemToOutcomes = new HashMap<>();
itemToOutcomes.put("c", 1.0); //has loss 1/2
itemToOutcomes.put("a", 2.0); //has loss 3
itemToOutcomeMap = new ItemToOutcomeMap(itemToOutcomes);
ArrayList<Serializable> rankedList = new ArrayList<Serializable>();
rankedList.add("a");
rankedList.add("b");
rankedList.add("c");
rankedList.add("d");
rankingPrediction = new RankingPrediction(rankedList);
}
@Test
public void testDcg() throws Exception {
double dcg = NDCG.dcg(new LabelPredictionWeightForRanking(itemToOutcomeMap, rankingPrediction), 8);
Assert.assertEquals(dcg, 3.50, 1E-5);
}
@Test
public void testIdcg() throws Exception {
double idcg = NDCG.idcg(new LabelPredictionWeightForRanking(itemToOutcomeMap, rankingPrediction), 8);
Assert.assertEquals(idcg, 3.6309297535714573, 1E-5);
}
}