//package org.styloot.hobo.test;
import org.junit.*;
import static org.junit.Assert.*;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.styloot.hobo.*;
import org.styloot.hobo.itemfinders.*;
import java.util.*;
@RunWith(Parameterized.class)
public class TestItemFindersBig {
private static Random random = new Random();
private static final int NUM_ITEMS=25000;
ItemFinder finder;
public TestItemFindersBig(ItemFinder finder) {
this.finder = finder;
}
private static String itemId(int i) {
return "id" + i;
}
private static int NUM_ODD_FEATURES = 500;
private static double ODD_FEATURE_PROBABILITY = 0.35;
private static Vector<Item> getItemList() {
Vector<Item> items = new Vector<Item>();
for (int i=0;i<NUM_ITEMS;i++) {
Vector<String> f = new Vector<String>();
f.add("foo");
if (i % 2 == 0)
f.add("bar");
if (i % 3 == 0)
f.add("baz");
if (random.nextDouble() < ODD_FEATURE_PROBABILITY)
f.add("odd-feature-" + random.nextInt(NUM_ODD_FEATURES));
items.add(new Item(itemId(i), "/baz", f, i, CIELabColor.CIELabFromRGB(0, i, 0), i % 5 + 1));
}
return items;
}
private static Vector<Item> iteratorToVector(Iterator<Item> iter) {
Vector<Item> result = new Vector<Item>();
while (iter.hasNext()) {
result.add(iter.next());
}
return result;
}
@Parameters public static Collection<Object[]> generateData() {
Vector<Item> items = getItemList();
return Arrays.asList(new Object[][] {
new Object[]{ new VectorItemFinder(items, "/baz") },
new Object[]{ new ShallowIndexItemFinder(items, "/baz") },
new Object[]{ new SubsetIndexItemFinder(items, "/baz") },
});
}
@Test public void testFindBaz() {
Vector<String> features = new Vector<String>();
features.add("baz"); //Nonexistent feature
Iterator<Item> iterator = finder.find( features, null, -1, 0, Integer.MAX_VALUE);
int itemsFound = 0;
while (iterator.hasNext()) {
Item item = iterator.next();
assertEquals(item.quality % 3, 0);
itemsFound += 1;
}
assertEquals(NUM_ITEMS/3+1, itemsFound);
}
}