X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fanalysis%2FAnnotationSorterTest.java;h=9dd297256eab89b662058fe4aaf17f3d9916af42;hb=8f118c154e74caaef6bec19acd0466904ac424d4;hp=dfe55328532e5177d1a628d1748638564fc4b84d;hpb=3412b273e964fb1a9d22564b04a5f0c827ec2461;p=jalview.git diff --git a/test/jalview/analysis/AnnotationSorterTest.java b/test/jalview/analysis/AnnotationSorterTest.java index dfe5532..9dd2972 100644 --- a/test/jalview/analysis/AnnotationSorterTest.java +++ b/test/jalview/analysis/AnnotationSorterTest.java @@ -1,7 +1,33 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview 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. + * + * Jalview 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 Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.analysis; import static org.testng.AssertJUnit.assertEquals; +import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; + import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -9,12 +35,6 @@ import java.util.Random; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; -import jalview.datamodel.Alignment; -import jalview.datamodel.AlignmentAnnotation; -import jalview.datamodel.Sequence; -import jalview.datamodel.SequenceI; - public class AnnotationSorterTest { private static final int NUM_SEQS = 6; @@ -30,7 +50,7 @@ public class AnnotationSorterTest /* * Set up 6 sequences and 7 annotations. */ - @BeforeMethod + @BeforeMethod(alwaysRun = true) public void setUp() { al = buildAlignment(NUM_SEQS); @@ -84,15 +104,15 @@ public class AnnotationSorterTest * sequence ref * */ - @Test + @Test(groups = { "Functional" }) public void testSortBySequenceAndType_autocalcLast() { // @formatter:off anns[0].sequenceRef = al.getSequenceAt(1); anns[0].label = "label0"; anns[1].sequenceRef = al.getSequenceAt(3); anns[1].label = "structure"; anns[2].sequenceRef = al.getSequenceAt(3); anns[2].label = "iron"; - anns[3].sequenceRef = null; anns[3].label = "Quality"; - anns[4].sequenceRef = null; anns[4].label = "Consensus"; + anns[3].autoCalculated = true; anns[3].label = "Quality"; + anns[4].autoCalculated = true; anns[4].label = "Consensus"; anns[5].sequenceRef = al.getSequenceAt(0); anns[5].label = "label5"; anns[6].sequenceRef = al.getSequenceAt(3); anns[6].label = "IRP"; // @formatter:on @@ -104,29 +124,29 @@ public class AnnotationSorterTest assertEquals("iron", anns[2].label); // sequence 3 /iron assertEquals("IRP", anns[3].label); // sequence 3/IRP assertEquals("structure", anns[4].label); // sequence 3/structure - assertEquals("Quality", anns[5].label); // non-sequence annotations + assertEquals("Quality", anns[5].label); // autocalc annotations assertEquals("Consensus", anns[6].label); // retain ordering } /** * Variant with autocalculated annotations sorting to front */ - @Test + @Test(groups = { "Functional" }) public void testSortBySequenceAndType_autocalcFirst() { // @formatter:off anns[0].sequenceRef = al.getSequenceAt(1); anns[0].label = "label0"; anns[1].sequenceRef = al.getSequenceAt(3); anns[1].label = "structure"; anns[2].sequenceRef = al.getSequenceAt(3); anns[2].label = "iron"; - anns[3].sequenceRef = null; anns[3].label = "Quality"; - anns[4].sequenceRef = null; anns[4].label = "Consensus"; + anns[3].autoCalculated = true; anns[3].label = "Quality"; + anns[4].autoCalculated = true; anns[4].label = "Consensus"; anns[5].sequenceRef = al.getSequenceAt(0); anns[5].label = "label5"; anns[6].sequenceRef = al.getSequenceAt(3); anns[6].label = "IRP"; // @formatter:on AnnotationSorter testee = new AnnotationSorter(al, true); testee.sort(anns, SequenceAnnotationOrder.SEQUENCE_AND_LABEL); - assertEquals("Quality", anns[0].label); // non-sequence annotations + assertEquals("Quality", anns[0].label); // autocalc annotations assertEquals("Consensus", anns[1].label); // retain ordering assertEquals("label5", anns[2].label); // for sequence 0 assertEquals("label0", anns[3].label); // for sequence 1 @@ -147,15 +167,15 @@ public class AnnotationSorterTest * sequence ref * */ - @Test + @Test(groups = { "Functional" }) public void testSortByTypeAndSequence_autocalcLast() { // @formatter:off anns[0].sequenceRef = al.getSequenceAt(1); anns[0].label = "label0"; anns[1].sequenceRef = al.getSequenceAt(3); anns[1].label = "structure"; anns[2].sequenceRef = al.getSequenceAt(3); anns[2].label = "iron"; - anns[3].sequenceRef = null; anns[3].label = "Quality"; - anns[4].sequenceRef = null; anns[4].label = "Consensus"; + anns[3].autoCalculated = true; anns[3].label = "Quality"; + anns[4].autoCalculated = true; anns[4].label = "Consensus"; anns[5].sequenceRef = al.getSequenceAt(0); anns[5].label = "IRON"; anns[6].sequenceRef = al.getSequenceAt(2); anns[6].label = "Structure"; // @formatter:on @@ -167,29 +187,29 @@ public class AnnotationSorterTest assertEquals("label0", anns[2].label); // label0 / sequence 1 assertEquals("Structure", anns[3].label); // Structure / sequence 2 assertEquals("structure", anns[4].label); // structure / sequence 3 - assertEquals("Quality", anns[5].label); // non-sequence annotations + assertEquals("Quality", anns[5].label); // autocalc annotations assertEquals("Consensus", anns[6].label); // retain ordering } /** * Variant of test with autocalculated annotations sorted to front */ - @Test + @Test(groups = { "Functional" }) public void testSortByTypeAndSequence_autocalcFirst() { // @formatter:off anns[0].sequenceRef = al.getSequenceAt(1); anns[0].label = "label0"; anns[1].sequenceRef = al.getSequenceAt(3); anns[1].label = "structure"; anns[2].sequenceRef = al.getSequenceAt(3); anns[2].label = "iron"; - anns[3].sequenceRef = null; anns[3].label = "Quality"; - anns[4].sequenceRef = null; anns[4].label = "Consensus"; + anns[3].autoCalculated = true; anns[3].label = "Quality"; + anns[4].autoCalculated = true; anns[4].label = "Consensus"; anns[5].sequenceRef = al.getSequenceAt(0); anns[5].label = "IRON"; anns[6].sequenceRef = al.getSequenceAt(2); anns[6].label = "Structure"; // @formatter:on AnnotationSorter testee = new AnnotationSorter(al, true); testee.sort(anns, SequenceAnnotationOrder.LABEL_AND_SEQUENCE); - assertEquals("Quality", anns[0].label); // non-sequence annotations + assertEquals("Quality", anns[0].label); // autocalc annotations assertEquals("Consensus", anns[1].label); // retain ordering assertEquals("IRON", anns[2].label); // IRON / sequence 0 assertEquals("iron", anns[3].label); // iron / sequence 3 @@ -202,22 +222,22 @@ public class AnnotationSorterTest * Variant of test with autocalculated annotations sorted to front but * otherwise no change. */ - @Test + @Test(groups = { "Functional" }) public void testNoSort_autocalcFirst() { // @formatter:off anns[0].sequenceRef = al.getSequenceAt(1); anns[0].label = "label0"; anns[1].sequenceRef = al.getSequenceAt(3); anns[1].label = "structure"; anns[2].sequenceRef = al.getSequenceAt(3); anns[2].label = "iron"; - anns[3].sequenceRef = null; anns[3].label = "Quality"; - anns[4].sequenceRef = null; anns[4].label = "Consensus"; + anns[3].autoCalculated = true; anns[3].label = "Quality"; + anns[4].autoCalculated = true; anns[4].label = "Consensus"; anns[5].sequenceRef = al.getSequenceAt(0); anns[5].label = "IRON"; anns[6].sequenceRef = al.getSequenceAt(2); anns[6].label = "Structure"; // @formatter:on AnnotationSorter testee = new AnnotationSorter(al, true); testee.sort(anns, SequenceAnnotationOrder.NONE); - assertEquals("Quality", anns[0].label); // non-sequence annotations + assertEquals("Quality", anns[0].label); // autocalc annotations assertEquals("Consensus", anns[1].label); // retain ordering assertEquals("label0", anns[2].label); assertEquals("structure", anns[3].label); @@ -226,7 +246,7 @@ public class AnnotationSorterTest assertEquals("Structure", anns[6].label); } - @Test + @Test(groups = { "Functional" }) public void testSort_timingPresorted() { testTiming_presorted(50, 100); @@ -242,34 +262,34 @@ public class AnnotationSorterTest */ private void testTiming_presorted(final int numSeqs, final int numAnns) { - al = buildAlignment(numSeqs); - anns = buildAnnotations(numAnns); + Alignment alignment = buildAlignment(numSeqs); + AlignmentAnnotation[] annotations = buildAnnotations(numAnns); /* * Set the annotations presorted by label */ Random r = new Random(); - final SequenceI[] sequences = al.getSequencesArray(); - for (int i = 0; i < anns.length; i++) + final SequenceI[] sequences = alignment.getSequencesArray(); + for (int i = 0; i < annotations.length; i++) { SequenceI randomSequenceRef = sequences[r.nextInt(sequences.length)]; - anns[i].sequenceRef = randomSequenceRef; - anns[i].label = "label" + i; + annotations[i].sequenceRef = randomSequenceRef; + annotations[i].label = "label" + i; } long startTime = System.currentTimeMillis(); - AnnotationSorter testee = new AnnotationSorter(al, false); - testee.sort(anns, SequenceAnnotationOrder.LABEL_AND_SEQUENCE); + AnnotationSorter testee = new AnnotationSorter(alignment, false); + testee.sort(annotations, SequenceAnnotationOrder.LABEL_AND_SEQUENCE); long endTime = System.currentTimeMillis(); final long elapsed = endTime - startTime; System.out.println("Timing test for presorted " + numSeqs - + " sequences and " - + numAnns + " annotations took " + elapsed + "ms"); + + " sequences and " + numAnns + " annotations took " + elapsed + + "ms"); } /** * Timing tests for sorting randomly sorted annotations for various sizes. */ - @Test + @Test(groups = { "Functional" }) public void testSort_timingUnsorted() { testTiming_unsorted(50, 100); @@ -286,34 +306,34 @@ public class AnnotationSorterTest */ private void testTiming_unsorted(final int numSeqs, final int numAnns) { - al = buildAlignment(numSeqs); - anns = buildAnnotations(numAnns); + Alignment alignment = buildAlignment(numSeqs); + AlignmentAnnotation[] annotations = buildAnnotations(numAnns); /* * Set the annotations in random order with respect to the sequences */ Random r = new Random(); - final SequenceI[] sequences = al.getSequencesArray(); - for (int i = 0; i < anns.length; i++) + final SequenceI[] sequences = alignment.getSequencesArray(); + for (int i = 0; i < annotations.length; i++) { SequenceI randomSequenceRef = sequences[r.nextInt(sequences.length)]; - anns[i].sequenceRef = randomSequenceRef; - anns[i].label = "label" + i; + annotations[i].sequenceRef = randomSequenceRef; + annotations[i].label = "label" + i; } long startTime = System.currentTimeMillis(); - AnnotationSorter testee = new AnnotationSorter(al, false); - testee.sort(anns, SequenceAnnotationOrder.SEQUENCE_AND_LABEL); + AnnotationSorter testee = new AnnotationSorter(alignment, false); + testee.sort(annotations, SequenceAnnotationOrder.SEQUENCE_AND_LABEL); long endTime = System.currentTimeMillis(); final long elapsed = endTime - startTime; System.out.println("Timing test for unsorted " + numSeqs - + " sequences and " - + numAnns + " annotations took " + elapsed + "ms"); + + " sequences and " + numAnns + " annotations took " + elapsed + + "ms"); } /** * Timing test for sorting annotations with a limited range of types (labels). */ - @Test + @Test(groups = { "Functional" }) public void testSort_timingSemisorted() { testTiming_semiSorted(50, 100); @@ -336,35 +356,35 @@ public class AnnotationSorterTest */ private void testTiming_semiSorted(final int numSeqs, final int numAnns) { - al = buildAlignment(numSeqs); - anns = buildAnnotations(numAnns); + Alignment alignment = buildAlignment(numSeqs); + AlignmentAnnotation[] annotations = buildAnnotations(numAnns); - String[] labels = new String[] - { "label1", "label2", "label3", "label4", "label5", "label6" }; + String[] labels = new String[] { "label1", "label2", "label3", + "label4", "label5", "label6" }; /* * Set the annotations in sequence order with randomly assigned labels. */ Random r = new Random(); - final SequenceI[] sequences = al.getSequencesArray(); - for (int i = 0; i < anns.length; i++) + final SequenceI[] sequences = alignment.getSequencesArray(); + for (int i = 0; i < annotations.length; i++) { SequenceI sequenceRef = sequences[i % sequences.length]; - anns[i].sequenceRef = sequenceRef; - anns[i].label = labels[r.nextInt(labels.length)]; + annotations[i].sequenceRef = sequenceRef; + annotations[i].label = labels[r.nextInt(labels.length)]; } long startTime = System.currentTimeMillis(); - AnnotationSorter testee = new AnnotationSorter(al, false); - testee.sort(anns, SequenceAnnotationOrder.LABEL_AND_SEQUENCE); + AnnotationSorter testee = new AnnotationSorter(alignment, false); + testee.sort(annotations, SequenceAnnotationOrder.LABEL_AND_SEQUENCE); long endTime = System.currentTimeMillis(); long elapsed = endTime - startTime; System.out.println("Sort by label for semisorted " + numSeqs - + " sequences and " - + numAnns + " annotations took " + elapsed + "ms"); + + " sequences and " + numAnns + " annotations took " + elapsed + + "ms"); // now resort by sequence startTime = System.currentTimeMillis(); - testee.sort(anns, SequenceAnnotationOrder.SEQUENCE_AND_LABEL); + testee.sort(annotations, SequenceAnnotationOrder.SEQUENCE_AND_LABEL); endTime = System.currentTimeMillis(); elapsed = endTime - startTime; System.out.println("Resort by sequence for semisorted " + numSeqs @@ -373,7 +393,7 @@ public class AnnotationSorterTest // now resort by label startTime = System.currentTimeMillis(); - testee.sort(anns, SequenceAnnotationOrder.LABEL_AND_SEQUENCE); + testee.sort(annotations, SequenceAnnotationOrder.LABEL_AND_SEQUENCE); endTime = System.currentTimeMillis(); elapsed = endTime - startTime; System.out.println("Resort by label for semisorted " + numSeqs