package de.timefinder.core.io.winqd;
import de.timefinder.algo.AlgorithmConditionIteration;
import de.timefinder.algo.SilentConsoleStatusBar;
import de.timefinder.algo.ncp.NoCollisionPrinciple;
import de.timefinder.algo.util.TimeFinder2Tester;
import de.timefinder.data.Event;
import de.timefinder.data.Location;
import de.timefinder.data.Person;
import de.timefinder.data.access.Dao;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
*/
public class ImportWinQDTest extends TimeFinder2Tester {
public static String GMG_FOLDER = "/home/peterk/Dokumente/timefinder/import-gmg-bt";
private ImportWinQD importer;
public ImportWinQDTest() {
}
@Before
@Override
public void setUp() {
super.setUp();
importer = new ImportWinQD(dataPool, settings, new File(GMG_FOLDER));
}
@Test
public void testDoWork() {
importer.setSemester(11);
importer.doWork();
assertTrue(settings.getMillisPerTimeslot() < 3600 * 1000);
assertTrue(settings.getTimeslotsPerDay() > 5);
assertEquals(5, settings.getNumberOfDays());
int seminare = 19;
assertEquals(33 + seminare, importer.getCourses().size());
assertEquals(153, importer.getStudentsNumber());
assertEquals(65, importer.getTeacherNumber());
assertEquals(153, importer.getCourse("D").getStudents().size());
assertEquals(7, importer.getCourse("D").getInstances().size());
assertEquals(153, importer.getCourse("M").getStudents().size());
assertEquals(7, importer.getCourse("M").getInstances().size());
}
@Test
public void testGetHours() {
assertEquals(Arrays.asList(2, 2, 1), ImportWinQD.getHours(5));
assertEquals(Arrays.asList(2, 2), ImportWinQD.getHours(4));
assertEquals(Arrays.asList(2, 1), ImportWinQD.getHours(3));
assertEquals(Arrays.asList(2), ImportWinQD.getHours(2));
assertEquals(Arrays.asList(1), ImportWinQD.getHours(1));
}
@Test
public void testGetPersonForInstances() {
List personList = new ArrayList();
for (int i = 0; i < 25; i++) {
personList.add(new Person("" + i));
}
List instances = createInstances(3);
ImportWinQD.splitPersons(personList, instances);
assertList(instances, Arrays.asList(9, 9, 7));
for (int i = 25; i < 29; i++) {
personList.add(new Person("" + i));
}
instances = createInstances(3);
ImportWinQD.splitPersons(personList, instances);
assertList(instances, Arrays.asList(10, 10, 9));
personList.add(new Person("29"));
instances = createInstances(3);
ImportWinQD.splitPersons(personList, instances);
assertList(instances, Arrays.asList(10, 10, 10));
}
List<WinQDCourseInstance> createInstances(int instances) {
List instancesList = new ArrayList();
for (int i = 0; i < 3; i++) {
instancesList.add(new WinQDCourseInstance("inst:" + i));
}
return instancesList;
}
@Test
public void testCreateDataFromImport() {
Person t1 = new Person("t1");
Person t2 = new Person("t2");
WinQDCourse course = new WinQDCourse();
course.setShortName("short");
course.setName("long");
// split 5 into 2+2+1
course.setHours(ImportWinQD.getHours(5));
assertEquals(3, course.getHours().size());
course.addInstance("inst1", t1);
course.addInstance("inst2", t2);
Person eckart = new Person("eckart");
Person frido = new Person("frido");
course.getStudents().add(eckart);
course.getStudents().add(frido);
importer.addStudent(eckart);
importer.addStudent(frido);
importer.addTeacher(t1);
importer.addTeacher(t2);
importer.addCourse(course);
importer.initSimpleDao();
importer.fillSimpleDataPool();
importer.addToDataPool();
Dao<Event> eventDao = importer.getDataPool().getDao(Event.class);
Dao<Person> personDao = importer.getDataPool().getDao(Person.class);
Dao<Location> locationDao = importer.getDataPool().getDao(Location.class);
assertTrue(locationDao.getAll().size() > 5);
// 3 appointments * 2 instances
assertEquals(6, eventDao.getAll().size());
assertEquals(4, personDao.getAll().size());
assertEquals(3, frido.getEvents().size());
}
@Test
public void testIndexOfNumber() {
assertEquals(2, ImportWinQD.indexOfNumber(1, "1m17"));
assertEquals(4, ImportWinQD.indexOfNumber(1, "1spo12"));
}
private void assertList(List<WinQDCourseInstance> res, List<Integer> asList) {
int index = 0;
for (WinQDCourseInstance instance : res) {
assertEquals("Students for " + instance.toString(), asList.get(index), instance.getStudents().size());
index++;
}
}
@Test
public void testRunAlgorithm() {
importer.setSemester(11);
importer.doWork();
NoCollisionPrinciple ncpInstance = new NoCollisionPrinciple();
ncpInstance.setRandom(new Random(181282L));
ncpInstance.setCondition(new AlgorithmConditionIteration(1000));
ncpInstance.setDataPoolSettings(settings);
ncpInstance.setStatusBar(new SilentConsoleStatusBar());
ncpInstance.setDataPool(dataPool);
ncpInstance.doWork();
}
}