package gdsc.smlm.search;
/*-----------------------------------------------------------------------------
* GDSC SMLM Software
*
* Copyright (C) 2016 Alex Herbert
* Genome Damage and Stability Centre
* University of Sussex, UK
*
* 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.
*---------------------------------------------------------------------------*/
import org.junit.Assert;
import org.junit.Test;
public class SearchSpaceTest
{
@Test
public void canEnumerateSearchSpace()
{
SearchDimension d1 = new SearchDimension(0, 10, 1, 1);
SearchDimension d2 = new SearchDimension(0, 10, 0.5, 2, 2.5, 7.5);
double[][] ss = SearchSpace.createSearchSpace(createDimensions(d1, d2));
Assert.assertEquals(d1.getMaxLength() * d2.getMaxLength(), ss.length);
//for (double[] p : ss)
// System.out.println(java.util.Arrays.toString(p));
}
@Test
public void canEnumerateRefineSpace()
{
SearchDimension d1 = new SearchDimension(0, 10, 2, 10);
SearchDimension d2 = new SearchDimension(0, 10, 1, 10);
double[][] ss = SearchSpace.createRefineSpace(createDimensions(d1, d2), new double[]{ 0, 5 });
//for (double[] p : ss)
// System.out.println(java.util.Arrays.toString(p));
Assert.assertEquals(2 + 3, ss.length);
ss = SearchSpace.createRefineSpace(createDimensions(d1, d2), new double[]{ 4, 5 });
//for (double[] p : ss)
// System.out.println(java.util.Arrays.toString(p));
Assert.assertEquals(3 + 3, ss.length);
ss = SearchSpace.createRefineSpace(createDimensions(d1, d2), new double[]{ 10, 5 });
//for (double[] p : ss)
// System.out.println(java.util.Arrays.toString(p));
Assert.assertEquals(2 + 3, ss.length);
}
@Test
public void canMoveCentre()
{
SearchDimension d1 = new SearchDimension(0, 10, 0, 1, 2.5, 7.5);
double[] v1 = d1.values();
Assert.assertTrue(d1.isAtBounds(0));
Assert.assertTrue(d1.isAtBounds(v1[0]));
Assert.assertTrue(d1.isAtBounds(v1[v1.length - 1]));
Assert.assertFalse(d1.isAtBounds(5));
d1.setCentre(0);
Assert.assertTrue(d1.isAtBounds(0));
Assert.assertTrue(d1.isAtBounds(5));
double[] v2 = d1.values();
//System.out.println(java.util.Arrays.toString(v1));
//System.out.println(java.util.Arrays.toString(v2));
Assert.assertTrue(v1.length > v2.length);
}
@Test
public void canReduceSearchSpace()
{
SearchDimension d1 = new SearchDimension(0, 10, 0, 1);
d1.setCentre(0);
double[] v1 = d1.values();
d1.reduce();
double[] v2 = d1.values();
//System.out.println(java.util.Arrays.toString(v1));
//System.out.println(java.util.Arrays.toString(v2));
for (int i = 0; i < v1.length; i++)
Assert.assertEquals(v1[i] * d1.getReduceFactor(), v2[i], 0);
}
@Test
public void canPadRange()
{
SearchDimension d1 = new SearchDimension(0, 10, 0, 1, 2.5, 7.5);
d1.setPad(false);
double[] v1 = d1.values();
Assert.assertTrue(d1.isAtBounds(0));
d1.setCentre(0);
Assert.assertTrue(d1.isAtBounds(0));
double[] v2 = d1.values();
//System.out.println(java.util.Arrays.toString(v1));
//System.out.println(java.util.Arrays.toString(v2));
Assert.assertTrue(v1.length > v2.length);
d1.setCentre(10);
v2 = d1.values();
//System.out.println(java.util.Arrays.toString(v2));
Assert.assertTrue(v1.length > v2.length);
d1.setPad(true);
double[] v3 = d1.values();
//System.out.println(java.util.Arrays.toString(v3));
Assert.assertTrue(v1.length == v3.length);
d1.setCentre(0);
v3 = d1.values();
//System.out.println(java.util.Arrays.toString(v3));
Assert.assertTrue(v1.length == v3.length);
}
private static SearchDimension[] createDimensions(SearchDimension... d)
{
return d;
}
}