package photato.helpers;
import photato.helpers.PartialStringIndex;
import java.util.Collection;
import org.junit.Assert;
import org.junit.Test;
public class PartialStringIndexTest {
private static class StringContainer {
public final String value;
public StringContainer(String value) {
this.value = value;
}
}
@Test
public void testContains() {
PartialStringIndex<Object> myMap = new PartialStringIndex<>();
StringContainer toti = new StringContainer("toti");
StringContainer tota = new StringContainer("tota");
StringContainer tata = new StringContainer("tata");
StringContainer toto = new StringContainer("toto");
StringContainer tototo = new StringContainer("tototo");
StringContainer tututo = new StringContainer("tututo");
StringContainer tututo2 = new StringContainer("tututo2");
StringContainer multiple = new StringContainer("****");
for (int i = 0; i < 2; i++) { // To check proper reinitialisation of the map
myMap.add("toti", toti);
myMap.add("tota", tota);
myMap.add("tata", tata);
myMap.add("toto", toto);
myMap.add("tototo", tototo);
myMap.add("tututo", tututo);
myMap.add("tututo", tututo2);
Collection<Object> res = myMap.findContains("to");
Assert.assertEquals(6, res.size());
Assert.assertTrue(res.contains(toti));
Assert.assertTrue(res.contains(tota));
Assert.assertTrue(res.contains(toto));
Assert.assertTrue(res.contains(tototo));
Assert.assertTrue(res.contains(tututo));
Assert.assertTrue(res.contains(tututo2));
res = myMap.findContains("toto");
Assert.assertEquals(2, res.size());
Assert.assertTrue(res.contains(toto));
Assert.assertTrue(res.contains(tototo));
res = myMap.findContains("ttoto");
Assert.assertEquals(0, res.size());
res = myMap.findContains("kkk");
Assert.assertEquals(0, res.size());
res = myMap.findContains("tututo");
Assert.assertEquals(2, res.size());
Assert.assertTrue(res.contains(tututo));
Assert.assertTrue(res.contains(tututo2));
res = myMap.findContains("tota");
Assert.assertEquals(1, res.size());
Assert.assertTrue(res.contains(tota));
myMap.remove(tututo2);
res = myMap.findContains("tututo");
Assert.assertEquals(1, res.size());
Assert.assertTrue(res.contains(tututo));
res = myMap.findContains("to");
Assert.assertTrue(res.contains(tututo));
Assert.assertFalse(res.contains(tututo2));
res = myMap.findContains("ot");
Assert.assertEquals(4, res.size());
myMap.remove(tututo);
Assert.assertEquals(0, myMap.findContains("tututo").size());
res = myMap.findContains("to");
Assert.assertFalse(res.contains(tututo));
Assert.assertFalse(res.contains(tututo2));
Assert.assertFalse(res.contains(tata));
res = myMap.values();
Assert.assertEquals(5, res.size());
Assert.assertEquals(5, myMap.size());
Assert.assertTrue(res.contains(toti));
Assert.assertTrue(res.contains(tota));
Assert.assertTrue(res.contains(tata));
Assert.assertTrue(res.contains(toto));
Assert.assertTrue(res.contains(tototo));
myMap.add("mult", multiple);
myMap.add("add", multiple);
Assert.assertEquals(1, myMap.findContains("mult").size());
Assert.assertEquals(1, myMap.findContains("add").size());
myMap.remove(multiple);
Assert.assertEquals(0, myMap.findContains("mult").size());
Assert.assertEquals(0, myMap.findContains("add").size());
myMap.clear();
Assert.assertEquals(0, myMap.values().size());
Assert.assertEquals(0, myMap.size());
res = myMap.findContains("to");
Assert.assertEquals(0, res.size());
}
}
@Test
public void testPrefix() {
PartialStringIndex<Object> myMap = new PartialStringIndex<>(true);
StringContainer toti = new StringContainer("toti");
StringContainer tota = new StringContainer("tota");
StringContainer tata = new StringContainer("tata");
StringContainer toto = new StringContainer("toto");
StringContainer tototo = new StringContainer("tototo");
StringContainer tututo = new StringContainer("tututo");
StringContainer tututo2 = new StringContainer("tututo2");
myMap.add("toti", toti);
myMap.add("tota", tota);
myMap.add("tata", tata);
myMap.add("toto", toto);
myMap.add("tototo", tototo);
myMap.add("tututo", tututo);
myMap.add("tututo", tututo2);
Collection<Object> res = myMap.findContains("to");
Assert.assertEquals(4, res.size());
Assert.assertTrue(res.contains(toti));
Assert.assertTrue(res.contains(tota));
Assert.assertTrue(res.contains(toto));
Assert.assertTrue(res.contains(tototo));
res = myMap.findContains("toto");
Assert.assertEquals(2, res.size());
Assert.assertTrue(res.contains(toto));
Assert.assertTrue(res.contains(tototo));
res = myMap.findContains("ttoto");
Assert.assertEquals(0, res.size());
res = myMap.findContains("kkk");
Assert.assertEquals(0, res.size());
}
}