package com.datascience.core.base;
import com.datascience.datastoring.datamodels.kv.KVData;
import com.datascience.datastoring.datamodels.memory.InMemoryData;
import com.datascience.datastoring.datamodels.memory.InMemoryNominalData;
import com.datascience.datastoring.adapters.kv.DefaultSafeKVStorage;
import com.datascience.datastoring.adapters.kv.MemoryKVStorage;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.*;
import static org.junit.Assert.*;
/**
* @Author: konrad
*/
@RunWith(Parameterized.class)
public class IDataTest {
private static Logger logger = Logger.getLogger(IDataTest.class);
public interface DataCreator{
IData<String> create();
}
final static DataCreator[] DATA_CREATORS = new DataCreator[]{
new DataCreator(){
@Override
public IData<String> create(){
return new InMemoryData<String>();
}
},
new DataCreator(){
@Override
public IData<String> create(){
InMemoryNominalData data = new InMemoryNominalData();
data.initialize(Arrays.asList(new String[]{"cat1", "cat2"}), null, null);
return data;
}
},
new DataCreator(){
@Override
public IData<String> create(){
return new KVData<String>(
new DefaultSafeKVStorage<Collection<AssignedLabel<String>>>(
new MemoryKVStorage<Collection<AssignedLabel<String>>>(), logger, ""),
new DefaultSafeKVStorage<Collection<AssignedLabel<String>>>(
new MemoryKVStorage<Collection<AssignedLabel<String>>>(), logger, ""),
new DefaultSafeKVStorage<Collection<LObject<String>>>(
new MemoryKVStorage<Collection<LObject<String>>>("", new LinkedList<LObject<String>>()), logger, ""),
new DefaultSafeKVStorage<Collection<LObject<String>>>(
new MemoryKVStorage<Collection<LObject<String>>>("", new LinkedList<LObject<String>>()), logger, ""),
new DefaultSafeKVStorage<Collection<LObject<String>>>(
new MemoryKVStorage<Collection<LObject<String>>>("", new LinkedList<LObject<String>>()), logger, ""),
new DefaultSafeKVStorage<Collection<Worker>>(
new MemoryKVStorage<Collection<Worker>>("", new LinkedList<Worker>()), logger, ""));
}
}
};
public DataCreator dataCreator;
public IData<String> data;
public IDataTest(DataCreator dataCreator){
this.dataCreator = dataCreator;
}
@Parameterized.Parameters
public static Collection<Object[]> instancesToTest() {
Collection<Object[]> ret = new LinkedList<Object[]>();
for (DataCreator dc : DATA_CREATORS)
ret.add(new Object[]{dc});
return ret;
}
@Before
public void initialize(){
data = dataCreator.create();
}
/**
* Testing whether Data properly overrides assigns
*/
@Test
public void testAddAssigns(){
Worker w1 = data.getOrCreateWorker("Worker1");
LObject<String> object = data.getOrCreateObject("Object1");
String label1 = "cat1";
AssignedLabel<String> al1 = new AssignedLabel<String>(w1, object, label1);
data.addAssign(al1);
assertEquals(label1, data.getWorkerAssigns(w1).iterator().next().getLabel());
assertEquals(label1, data.getAssigns().iterator().next().getLabel());
assertEquals(label1, data.getAssignsForObject(object).iterator().next().getLabel());
String label2 = "cat2";
AssignedLabel<String> al2 = new AssignedLabel<String>(w1, object, label2);
data.addAssign(al2);
assertEquals(label2, data.getWorkerAssigns(w1).iterator().next().getLabel());
assertEquals(label2, data.getAssigns().iterator().next().getLabel());
assertEquals(label2, data.getAssignsForObject(object).iterator().next().getLabel());
assertEquals(1, data.getWorkerAssigns(w1).size());
}
/**
* Testing whether Data properly overrides golds
*/
@Test
public void testAddGold(){
LObject<String> object1 = data.getOrCreateObject("Object1");
LObject<String> object2 = data.getOrCreateObject("Object1");
String label = "cat1";
object2.setGoldLabel(label);
data.addObject(object1);
data.addObject(object2);
assertEquals(1, data.getObjects().size());
assertEquals(1, data.getGoldObjects().size());
assertTrue(data.getGoldObject("Object1").isGold());
assertEquals(label, data.getObject("Object1").getGoldLabel());
}
/**
* Testing whether Data properly overrides evaluation data
*/
@Test
public void testAddEvaluation(){
LObject<String> object1 = data.getOrCreateObject("Object1");
LObject<String> object2 = data.getOrCreateObject("Object1");
String label = "cat1";
object2.setEvaluationLabel(label);
data.addObject(object1);
data.addObject(object2);
assertEquals(1, data.getObjects().size());
assertEquals(1, data.getEvaluationObjects().size());
assertTrue(data.getObject("Object1").isEvaluation());
assertEquals(label, data.getObject("Object1").getEvaluationLabel());
}
@Test
public void testHasAssigns(){
Worker w1 = data.getOrCreateWorker("Worker1");
LObject<String> object1 = data.getOrCreateObject("Object1");
assertFalse(data.hasAssign(object1, w1));
AssignedLabel<String> al1 = new AssignedLabel<String>(w1, object1, "cat1");
data.addAssign(al1);
assertTrue(data.hasAssign(object1, w1));
}
@Test
public void testAddWorker(){
Worker w1 = data.getOrCreateWorker("Worker1");
data.addWorker(w1);
assertNull(data.getWorker("Worker2"));
assertNotNull(data.getWorker("Worker1"));
Worker w2 = new Worker("Worker2");
data.addWorker(w2);
assertNotNull(data.getWorker("Worker2"));
}
@Test
public void testAddObject(){
LObject<String> object1 = data.getOrCreateObject("Object1");
data.addObject(object1);
assertNull(data.getObject("Object2"));
assertNotNull(data.getObject("Object1"));
LObject<String> o2 = new LObject<String>("Object2");
data.addObject(o2);
assertNotNull(data.getObject("Object2"));
}
@Test
public void testMarkingObjectsAsGold(){
LObject<String> object1 = data.getOrCreateObject("Object1");
data.addObject(object1);
assertFalse(object1.isGold());
assertEquals(0, data.getGoldObjects().size());
data.markObjectAsGold(object1, "cat1");
assertTrue(object1.isGold());
assertEquals(1, data.getGoldObjects().size());
assertEquals(object1, data.getGoldObject("Object1"));
}
}