package org.github.bcolyn.jmediahash.index.mvp;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.github.bcolyn.jmediahash.index.distances.Distance;
import org.github.bcolyn.jmediahash.index.distances.LongHammingDistance;
import org.github.bcolyn.jmediahash.index.dummy.DummyHashIndex;
import org.junit.Assert;
import org.junit.Test;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import static org.github.bcolyn.jmediahash.index.Util.range;
public class MVPTreeStressTest {
private Distance<Long> d = new LongHammingDistance();
private Random rnd = new Random();
@Test
public void stressTest() {
Logger logger = Logger.getLogger(getClass().getPackage().getName());
Level oldlvl = logger.getLevel();
logger.setLevel(Level.WARN);
long start = System.currentTimeMillis();
int i = 0;
while (System.currentTimeMillis() - start < 1000) {
runRandomDataSet();
i++;
}
logger.setLevel(oldlvl);
logger.info("Completed " + i + " iterations");
}
private void runRandomDataSet() {
MVPTree<Long> tree = new MVPTree<Long>();
DummyHashIndex<Long> dummy = new DummyHashIndex<Long>();
long query = rnd.nextLong() % 275;
double query_radius = Math.random() * 3;
tree.init(d);
dummy.init(d);
List<Long> data = range(0, 255);
Collections.shuffle(data);
tree.addAll(data);
dummy.addAll(data);
List<Long> expected = dummy.findSimilar(query, query_radius);
Collections.sort(expected);
List<Long> actual = tree.findSimilar(query, query_radius);
Collections.sort(actual);
Assert.assertEquals(expected, actual);
}
}