/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.nbio.alignment.routines; import org.biojava.nbio.alignment.routines.AlignerHelper.Anchor; import org.biojava.nbio.alignment.routines.AlignerHelper.Cut; import org.biojava.nbio.alignment.routines.AlignerHelper.Subproblem; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; /** * * @author Daniel Cameron * */ public class AlignerHelperTest { @Test public void getCuts_should_not_return_start_position_for_starting_anchor() { Cut[] cuts = AlignerHelper.getCuts(10, new Subproblem(5, 20, 10, 30), new int[] { 50, 50, 3 }, true); assertNotEquals(5, cuts[0].getQueryIndex()); } @Test public void getCuts_should_return_all_positions_when_cuts_exceeds_query_size() { Cut[] cuts = AlignerHelper.getCuts(10, new Subproblem(5, 20, 10, 30), new int[] { 50, 50, 3 }, false); assertEquals(5, cuts.length); assertEquals(5, cuts[0].getQueryIndex()); assertEquals(6, cuts[1].getQueryIndex()); assertEquals(7, cuts[2].getQueryIndex()); assertEquals(8, cuts[3].getQueryIndex()); assertEquals(9, cuts[4].getQueryIndex()); } @Test public void getCuts_should_return_spaced_cuts_when_query_interval_larger_than_cut_size() { Cut[] cuts = AlignerHelper.getCuts(3, new Subproblem(5, 20, 10, 30), new int[] { 50, 50, 3 }, false); assertEquals(3, cuts.length); assertEquals(5, cuts[0].getQueryIndex()); assertEquals(7, cuts[1].getQueryIndex()); assertEquals(9, cuts[2].getQueryIndex()); } @Test public void getSubproblems_should_return_score_indicies_of_alignment_subproblems() { List<Anchor> anchors = new ArrayList<Anchor>(); anchors.add(new Anchor(1, 2)); anchors.add(new Anchor(5, 5)); List<Subproblem> problems = AlignerHelper.Subproblem.getSubproblems(anchors, 10, 15); assertEquals(3, problems.size()); assertEquals(0, problems.get(0).getQueryStartIndex()); assertEquals(0, problems.get(0).getTargetStartIndex()); assertEquals(1, problems.get(0).getQueryEndIndex()); assertEquals(2, problems.get(0).getTargetEndIndex()); assertEquals(2, problems.get(1).getQueryStartIndex()); assertEquals(3, problems.get(1).getTargetStartIndex()); assertEquals(5, problems.get(1).getQueryEndIndex()); assertEquals(5, problems.get(1).getTargetEndIndex()); assertEquals(6, problems.get(2).getQueryStartIndex()); assertEquals(6, problems.get(2).getTargetStartIndex()); assertEquals(10, problems.get(2).getQueryEndIndex()); assertEquals(15, problems.get(2).getTargetEndIndex()); } @Test public void getSubproblems_should_allow_zero_anchors() { List<Anchor> anchors = new ArrayList<Anchor>(); List<Subproblem> problems = AlignerHelper.Subproblem.getSubproblems(anchors, 10, 15); assertEquals(1, problems.size()); assertEquals(0, problems.get(0).getQueryStartIndex()); assertEquals(0, problems.get(0).getTargetStartIndex()); assertEquals(10, problems.get(0).getQueryEndIndex()); assertEquals(15, problems.get(0).getTargetEndIndex()); assertEquals(false, problems.get(0).isStartAnchored()); } @Test public void getSubproblems_should_allow_start_and_end_anchors() { List<Anchor> anchors = new ArrayList<Anchor>(); anchors.add(new Anchor(0, 0)); anchors.add(new Anchor(9, 14)); List<Subproblem> problems = AlignerHelper.Subproblem.getSubproblems(anchors, 10, 15); assertEquals(3, problems.size()); assertEquals(0, problems.get(0).getQueryStartIndex()); assertEquals(0, problems.get(0).getTargetStartIndex()); assertEquals(0, problems.get(0).getQueryEndIndex()); assertEquals(0, problems.get(0).getTargetEndIndex()); assertEquals(false, problems.get(0).isStartAnchored()); assertEquals(1, problems.get(1).getQueryStartIndex()); assertEquals(1, problems.get(1).getTargetStartIndex()); assertEquals(9, problems.get(1).getQueryEndIndex()); assertEquals(14, problems.get(1).getTargetEndIndex()); assertEquals(true, problems.get(1).isStartAnchored()); assertEquals(10, problems.get(2).getQueryStartIndex()); assertEquals(15, problems.get(2).getTargetStartIndex()); assertEquals(10, problems.get(2).getQueryEndIndex()); assertEquals(15, problems.get(2).getTargetEndIndex()); assertEquals(true, problems.get(2).isStartAnchored()); } @Test public void getSubproblems_should_allow_adjacent_anchors() { List<Anchor> anchors = new ArrayList<Anchor>(); anchors.add(new Anchor(1, 1)); anchors.add(new Anchor(2, 3)); List<Subproblem> problems = AlignerHelper.Subproblem.getSubproblems(anchors, 10, 15); assertEquals(3, problems.size()); assertEquals(2, problems.get(1).getQueryStartIndex()); assertEquals(2, problems.get(1).getTargetStartIndex()); assertEquals(2, problems.get(1).getQueryEndIndex()); assertEquals(3, problems.get(1).getTargetEndIndex()); assertEquals(3, problems.get(2).getQueryStartIndex()); assertEquals(4, problems.get(2).getTargetStartIndex()); assertEquals(10, problems.get(2).getQueryEndIndex()); assertEquals(15, problems.get(2).getTargetEndIndex()); } @Test(expected=IllegalArgumentException.class) public void getSubproblems_should_not_allow_repeated_anchors() { List<Anchor> anchors = new ArrayList<Anchor>(); anchors.add(new Anchor(1, 1)); anchors.add(new Anchor(1, 2)); AlignerHelper.Subproblem.getSubproblems(anchors, 10, 15); } @Test(expected=IllegalArgumentException.class) public void getSubproblems_should_not_allow_unalignable_anchors() { List<Anchor> anchors = new ArrayList<Anchor>(); anchors.add(new Anchor(1, 2)); anchors.add(new Anchor(2, 1)); AlignerHelper.Subproblem.getSubproblems(anchors, 10, 15); } }