/*
* #%L
* org.gitools.analysis
* %%
* Copyright (C) 2013 - 2014 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.analysis;
import junit.framework.Assert;
import org.gitools.api.matrix.*;
public class AssertMatrix {
public static double DEFAULT_DELTA = 0.5e-5;
protected AssertMatrix() {
}
static public void assertEquals(IMatrix m1, IMatrix m2) {
assertEquals(m1, m2, DEFAULT_DELTA);
}
static public void assertEquals(IMatrix m1, IMatrix m2, double delta) {
for (MatrixDimensionKey key : m1.getDimensionKeys()) {
assertEquals(m1.getDimension(key), m2.getDimension(key));
}
Assert.assertEquals(m1.getLayers().size(), m2.getLayers().size());
for (IMatrixLayer l1 : m1.getLayers()) {
assertEquals(l1.getId(), m1, m2, delta);
}
}
static public void assertEquals(String layerId, IMatrix m1, IMatrix m2) {
assertEquals(layerId, m1, m2, DEFAULT_DELTA);
}
static public void assertEquals(String layerId, IMatrix m1, IMatrix m2, double delta) {
IMatrixLayer l1 = m1.getLayers().get(layerId);
IMatrixLayer l2 = m2.getLayers().get(l1.getId());
assertEquals(l1, l2);
IMatrixPosition p1 = m1.newPosition();
IMatrixPosition p2 = m2.newPosition();
for (MatrixDimensionKey key : m1.getDimensionKeys()) {
IMatrixDimension d1 = m1.getDimension(key);
IMatrixDimension d2 = m2.getDimension(key);
for (String id : m1.getDimension(key)) {
p1.set(d1, id);
p2.set(d2, id);
Object v1 = m1.get(l1, p1);
Object v2 = m2.get(l2, p2);
assertSimilar("layer: " + l1.getId() + " pos:" + p1.toString(), v1, v2, delta);
}
}
}
static public void assertSimilar(String message, Object v1, Object v2, double delta) {
if (v1 == null && v2 == null) {
return;
}
if (v1 == null) {
Assert.failNotEquals(message, v1, v2);
}
if (v2 == null) {
Assert.failNotEquals(message, v1, v2);
}
if (v1 instanceof Double) {
Assert.assertEquals(message, ((Double) v1).doubleValue(), ((Double) v2).doubleValue(), delta);
return;
}
Assert.assertEquals(message, v1, v2);
}
static public void assertEquals(IMatrixDimension d1, IMatrixDimension d2) {
Assert.assertEquals("Dimension '" + d1.getId() + "' size", d1.size(), d2.size());
for (String id : d1) {
Assert.assertTrue(d2.contains(id));
}
}
static public void assertEquals(IMatrixLayer l1, IMatrixLayer l2) {
Assert.assertEquals(l1.getId(), l2.getId());
Assert.assertEquals(l1.getName(), l2.getName());
Assert.assertEquals(l1.getDescription(), l2.getDescription());
Assert.assertEquals(l1.getValueClass(), l2.getValueClass());
Assert.assertEquals(l1.getTranslator(), l2.getTranslator());
Assert.assertEquals(l1.getSortDirection(), l2.getSortDirection());
Assert.assertEquals(l1.getAggregator(), l2.getAggregator());
}
}