/**
* Copyright 2010 JBoss Inc
*
* 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 org.drools.time;
import junit.framework.TestCase;
/**
* Test class for the time distance calculation algorithm
*/
public class TemporalDistanceTest extends TestCase {
public static final long MIN = Long.MIN_VALUE;
public static final long MAX = Long.MAX_VALUE;
public void testTemporalDistance() {
Interval[][] matrix = new Interval[][] {
{ new Interval(0,0), new Interval(-2,2), new Interval(-3, 4), new Interval(MIN, MAX), new Interval(MIN, MAX) },
{ new Interval(-2,2), new Interval(0,0), new Interval(MIN, MAX), new Interval(1,2), new Interval(MIN, MAX) },
{ new Interval(-4,3), new Interval(MIN,MAX), new Interval(0, 0), new Interval(2, 3), new Interval(MIN, MAX) },
{ new Interval(MIN,MAX), new Interval(-2,-1), new Interval(-3, -2), new Interval(0, 0), new Interval(-2, -1) },
{ new Interval(MIN,MAX), new Interval(MIN,MAX), new Interval(MIN,MAX), new Interval(1, 2), new Interval(0,0) }
};
Interval[][] expected = new Interval[][] {
{ new Interval(0,0), new Interval(-2,2), new Interval(-3, 2), new Interval(-1, 4), new Interval(-3, 3) },
{ new Interval(-2,2), new Interval(0,0), new Interval(-2, 0), new Interval(1,2), new Interval(-1, 1) },
{ new Interval(-2,3), new Interval(0,2), new Interval(0, 0), new Interval(2, 3), new Interval(0,2) },
{ new Interval(-4,1), new Interval(-2,-1), new Interval(-3, -2), new Interval(0, 0), new Interval(-2, -1) },
{ new Interval(-3,3), new Interval(-1,1), new Interval(-2,0), new Interval(1, 2), new Interval(0,0) }
};
Interval[][] result = TimeUtils.calculateTemporalDistance( matrix );
assertEqualsMatrix( expected, result );
}
public void testTemporalDistance2() {
Interval[][] matrix = new Interval[][] {
{ new Interval(0,0), new Interval(5,10), new Interval(65, MAX), new Interval(30,40), new Interval(50,55) },
{ new Interval(-10,-5), new Interval(0,0), new Interval(60, MAX), new Interval(20,35), new Interval(40,50) },
{ new Interval(MIN,-65), new Interval(MIN,-60), new Interval(0, 0), new Interval(MIN, -25), new Interval(MIN, -10) },
{ new Interval(-40,-30), new Interval(-35,-20), new Interval(25, MAX), new Interval(0, 0), new Interval(15,20) },
{ new Interval(-55,-50), new Interval(-50,-40), new Interval(10,MAX), new Interval(-20,-15), new Interval(0,0) }
};
Interval[][] expected = new Interval[][] {
{ new Interval(0,0), new Interval(5,10), new Interval(65, MAX), new Interval(30,40), new Interval(50,55) },
{ new Interval(-10,-5), new Interval(0,0), new Interval(60, MAX), new Interval(20,35), new Interval(40,50) },
{ new Interval(MIN,-65), new Interval(MIN,-60), new Interval(0, 0), new Interval(MIN, -25), new Interval(MIN, -10) },
{ new Interval(-40,-30), new Interval(-35,-20), new Interval(25, MAX), new Interval(0, 0), new Interval(15,20) },
{ new Interval(-55,-50), new Interval(-50,-40), new Interval(10,MAX), new Interval(-20,-15), new Interval(0,0) }
};
Interval[][] result = TimeUtils.calculateTemporalDistance( matrix );
assertEqualsMatrix( expected, result );
}
public void assertEqualsMatrix( Interval[][] expected, Interval[][] matrix ) {
for( int i = 0; i < matrix.length; i++ ) {
for( int j = 0; j < matrix[i].length; j++ ) {
assertEquals( "Wrong value at ("+i+", "+j, expected[i][j], matrix[i][j] );
}
}
}
public void printMatrix( Interval[][] matrix ) {
System.out.println("------------------------------------------------------------------");
for( int i = 0; i < matrix.length; i++ ) {
System.out.print("| ");
for( int j = 0; j < matrix[i].length; j++ ) {
System.out.print( matrix[i][j] + " ");
}
System.out.println("|");
}
System.out.println("------------------------------------------------------------------");
}
}