/*
* This file is part of the TimeFinder project.
* Visit http://www.timefinder.de for more information.
* Copyright (c) 2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.timefinder.algo;
import de.timefinder.algo.util.TimeFinder2Tester;
import de.timefinder.data.algo.Assignment;
import de.timefinder.data.set.Raster;
import de.timefinder.data.set.RasterCollection;
import de.timefinder.data.set.RasterEnum;
import de.timefinder.algo.constraint.RasterConstraint;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
/**
* @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
*/
public class ConflictMatrixTest extends TimeFinder2Tester {
private ConflictMatrix matrix;
public ConflictMatrixTest() {
}
@Before
@Override
public void setUp() {
super.setUp();
settings.setTimeslotsPerDay(6);
settings.setNumberOfDays(2);
matrix = new ConflictMatrix(settings.getTimeslotsPerWeek(), settings.getTimeslotsPerDay());
}
@Test
public void testAdd() {
System.out.println("add");
final Assignment ev1 = newAssignment(0, 5);
RasterConstraint constr = newRasterConstraint();
constr.getRaster().set(8, RasterEnum.FORBIDDEN);
ev1.getEvent().putConstraint(constr);
final Assignment ev2 = newAssignment(10, 1);
matrix.initFromResources(newResources(Arrays.asList(ev1, ev2)));
matrix.add(ev1);
matrix.add(ev2);
// test if combinedRaster of ev2 works
Raster combinedRaster = matrix.getConflictingRaster(ev2);
assertEquals(5, combinedRaster.getNextFree(0, 1));
assertEquals(6, combinedRaster.getNextFree(0, 2));
assertEquals(7, combinedRaster.getNextFree(7, 2));
// test if remove works
matrix.remove(ev1);
assertSame(combinedRaster, matrix.getConflictingRaster(ev2));
assertEquals(0, combinedRaster.getNextFree(0, 1));
assertEquals(1, combinedRaster.getNextFree(1, 1));
// test if bitRaster is included and combinedRaster recognizes ev1
Raster combinedRasterEv1 = matrix.getConflictingRaster(ev1);
assertEquals(9, combinedRasterEv1.getNextFree(8, 1));
assertEquals(-1, combinedRasterEv1.getNextFree(7, 2));
}
@Test
public void testSpreadEventAndCompress() {
System.out.println("testSpreadEvent_Compres");
Assignment ev1 = newAssignment("1", 2, 1);
Assignment ev2 = newAssignment("2", 0, 1);
Assignment ev3 = newAssignment("3", 0, 1);
matrix.initFromResources(newResources(Arrays.asList(ev1, ev2, ev3)));
// *** spread events ***
// init raster1 (empty)
matrix.getConflictingRaster(ev1);
// init raster2 (ev1)
matrix.getConflictingRaster(ev2);
RasterCollection coll = matrix.getConflictingRaster(ev2);
assertEquals(0, coll.getNextFree(0, 1));
// init raster3 (ev1)
matrix.getConflictingRaster(ev3);
coll = matrix.getConflictingRaster(ev3);
assertEquals(0, coll.getNextFree(0, 1));
// *** compress ***
// update raster1 (ev3)
matrix.add(ev3);
coll = matrix.getConflictingRaster(ev1);
assertEquals(1, coll.getNextFree(0, 1));
coll = matrix.getConflictingRaster(ev3);
assertEquals(1, coll.getNextFree(1, 1));
// update raster3 (ev1)
matrix.add(ev1);
}
}