package org.wikibrain.core.dao;
import gnu.trove.set.TIntSet;
import gnu.trove.set.hash.TIntHashSet;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import static org.junit.Assert.*;
import org.wikibrain.core.dao.matrix.MatrixLocalLinkDao;
import org.wikibrain.core.dao.sql.LocalLinkSqlDao;
import org.wikibrain.core.dao.sql.TestDaoUtil;
import org.wikibrain.core.dao.sql.WpDataSource;
import org.wikibrain.core.lang.Language;
import org.wikibrain.core.model.LocalLink;
import java.io.File;
import java.io.IOException;
public class TestLocalLinkDao2 {
public static final int STARTING_ID = 1986751;
@Test
public void testLink() throws ClassNotFoundException, IOException, DaoException {
WpDataSource ds = TestDaoUtil.getWpDataSource();
File f = new File(".tmp/links");
FileUtils.deleteQuietly(f);
Language lang = Language.getByLangCode("simple");
LocalLinkSqlDao sqlDao = new LocalLinkSqlDao(ds);
MatrixLocalLinkDao matrixDao = new MatrixLocalLinkDao(sqlDao, f);
matrixDao.beginLoad();
for (int i = 1; i <= 200; i++) {
for (int j = i+1; j <= 200; j++) {
LocalLink link = new LocalLink(
lang,
"I am an anchor text",
i+ STARTING_ID,
j+ STARTING_ID,
true,
0,
true,
LocalLink.LocationType.FIRST_PARA
);
matrixDao.save(link);
}
}
matrixDao.endLoad();
for (int i = 1; i <= 200; i++) {
TIntSet ids = new TIntHashSet();
for (LocalLink link : sqlDao.getLinks(lang, i+ STARTING_ID, true)) {
ids.add(link.getDestId());
assert(link.isOutlink());
}
assertEquals(ids, rangeSet(i + 1 + STARTING_ID, 200 + STARTING_ID));
ids.clear();
for (LocalLink link : sqlDao.getLinks(lang, i+ STARTING_ID, false)) {
ids.add(link.getSourceId());
assert(!link.isOutlink());
}
assertEquals(ids, rangeSet(1 + STARTING_ID, i + STARTING_ID - 1));
}
}
/**
* returns a set containing the numbers in a range (inclusive)
* @param from
* @param to
* @return
*/
private TIntSet rangeSet(int from, int to) {
TIntSet set = new TIntHashSet();
for (int i = from; i <= to; i++) {
set.add(i);
}
return set;
}
}