/*
* Copyright 2010 Research Studios Austria Forschungsgesellschaft mBH
*
* This file is part of easyrec.
*
* easyrec is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* easyrec is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with easyrec. If not, see <http://www.gnu.org/licenses/>.
*/
package org.easyrec.plugin.itemitem.impl;
import org.easyrec.model.core.ItemAssocVO;
import org.easyrec.plugin.itemitem.ItemItemService;
import org.easyrec.plugin.itemitem.store.dao.impl.ActionDAOMemoryImpl;
import org.easyrec.plugin.itemitem.test.helpers.ItemAssocServiceStub;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import java.util.Date;
import java.util.List;
import static org.easyrec.plugin.itemitem.test.matchers.IsCloseToItemAssocMatcher.closeToItemAssoc;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
/**
* Tests for {@link CosineSimilarityCalculationStrategy}. <p><b>Company: </b>
* SAT, Research Studios Austria</p> <p><b>Copyright: </b> (c) 2007</p> <p><b>last modified:</b><br/> $Author$<br/>
* $Date$<br/> $Revision$</p>
*
* @author Patrick Marschik
*/
public class CosineSimilarityCalculationStrategyTest extends AbstractySimilarityCalculationStrategyTest {
// ------------------------------ FIELDS ------------------------------
private CosineSimilarityCalculationStrategy strategy;
// -------------------------- OTHER METHODS --------------------------
@Before
public void before() {
actionDAO = new ActionDAOMemoryImpl(lemireRatings, 1);
itemAssocService = new ItemAssocServiceStub();
strategy = new CosineSimilarityCalculationStrategy(actionDAO, itemAssocService);
}
@Test
@Ignore
public void calculateSimilarity_isCorrect() {
Date now = new Date();
strategy.calculateSimilarity(1, 1, 1, ASSOC_TYPE, SOURCE_TYPE, VIEW_TYPE, now, null);
List<ItemAssocVO<Integer,Integer>> result = itemAssocService
.getItemAssocs();
double delta = 1.0e-6;
assertThat(result.size(), is(16));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(1, 2, 0.99831416987911700000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(2, 1, 0.99831416987911700000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(1, 3, 0.99861782933251000000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(3, 1, 0.99861782933251000000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(1, 4, 0.28341223388001400000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(4, 1, 0.28341223388001400000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(1, 5, 1.0, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(5, 1, 1.0, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(2, 3, 1.0, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(3, 2, 1.0, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(2, 4, 0.99388373467361900000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(4, 2, 0.99388373467361900000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(3, 4, 0.94868329805051400000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(4, 3, 0.94868329805051400000, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(4, 5, 1.0, now), delta)));
assertThat(result, hasItem(closeToItemAssoc(makeAssoc(5, 4, 1.0, now), delta)));
}
protected String getSourceInfo() { return ItemItemService.SOURCE_INFO_COSINE; }
@Test
public void getSourceInfo_isCorrect() {
assertThat(strategy.getSourceInfo(), is(ItemItemService.SOURCE_INFO_COSINE));
}
}