Merge branch 'features/JAL-1152annotationSorting' into features/typed_annotations_calcId
[jalview.git] / test / jalview / analysis / AnnotationSorterTest.java
index ba2162d..239eb4c 100644 (file)
@@ -1,7 +1,6 @@
 package jalview.analysis;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
@@ -229,9 +228,19 @@ public class AnnotationSorterTest
   @Test
   public void testSort_timingPresorted()
   {
-    final long targetTime = 100; // ms
-    final int numSeqs = 10000;
-    final int numAnns = 20000;
+    testTiming_presorted(50, 100);
+    testTiming_presorted(500, 1000);
+    testTiming_presorted(5000, 10000);
+  }
+
+  /**
+   * Test timing to sort annotations already in the sort order.
+   * 
+   * @param numSeqs
+   * @param numAnns
+   */
+  private void testTiming_presorted(final int numSeqs, final int numAnns)
+  {
     al = buildAlignment(numSeqs);
     anns = buildAnnotations(numAnns);
 
@@ -254,18 +263,28 @@ public class AnnotationSorterTest
     System.out.println("Timing test for presorted " + numSeqs
             + " sequences and "
             + numAnns + " annotations took " + elapsed + "ms");
-    assertTrue("Sort took more than " + targetTime + "ms",
-            elapsed <= targetTime);
   }
 
   /**
-   * Timing test for sorting randomly sorted annotations
+   * Timing tests for sorting randomly sorted annotations for various sizes.
    */
   @Test
   public void testSort_timingUnsorted()
   {
-    final int numSeqs = 2000;
-    final int numAnns = 4000;
+    testTiming_unsorted(50, 100);
+    testTiming_unsorted(500, 1000);
+    testTiming_unsorted(5000, 10000);
+  }
+
+  /**
+   * Generate annotations randomly sorted with respect to sequences, and time
+   * sorting.
+   * 
+   * @param numSeqs
+   * @param numAnns
+   */
+  private void testTiming_unsorted(final int numSeqs, final int numAnns)
+  {
     al = buildAlignment(numSeqs);
     anns = buildAnnotations(numAnns);
 
@@ -296,8 +315,26 @@ public class AnnotationSorterTest
   @Test
   public void testSort_timingSemisorted()
   {
-    final int numSeqs = 2000;
-    final int numAnns = 4000;
+    testTiming_semiSorted(50, 100);
+    testTiming_semiSorted(500, 1000);
+    testTiming_semiSorted(5000, 10000);
+  }
+
+  /**
+   * Mimic 'semi-sorted' annotations:
+   * <ul>
+   * <li>set up in sequence order, with randomly assigned labels from a limited
+   * range</li>
+   * <li>sort by label and sequence order, report timing</li>
+   * <li>resort by sequence and label, report timing</li>
+   * <li>resort by label and sequence, report timing</li>
+   * </ul>
+   * 
+   * @param numSeqs
+   * @param numAnns
+   */
+  private void testTiming_semiSorted(final int numSeqs, final int numAnns)
+  {
     al = buildAlignment(numSeqs);
     anns = buildAnnotations(numAnns);
 
@@ -320,7 +357,7 @@ public class AnnotationSorterTest
     testee.sort(anns, SequenceAnnotationOrder.LABEL_AND_SEQUENCE);
     long endTime = System.currentTimeMillis();
     long elapsed = endTime - startTime;
-    System.out.println("Sort by type for semisorted " + numSeqs
+    System.out.println("Sort by label for semisorted " + numSeqs
             + " sequences and "
             + numAnns + " annotations took " + elapsed + "ms");
 
@@ -333,12 +370,12 @@ public class AnnotationSorterTest
             + " sequences and " + numAnns + " annotations took " + elapsed
             + "ms");
 
-    // now resort by type
+    // now resort by label
     startTime = System.currentTimeMillis();
     testee.sort(anns, SequenceAnnotationOrder.LABEL_AND_SEQUENCE);
     endTime = System.currentTimeMillis();
     elapsed = endTime - startTime;
-    System.out.println("Resort by type for semisorted " + numSeqs
+    System.out.println("Resort by label for semisorted " + numSeqs
             + " sequences and " + numAnns + " annotations took " + elapsed
             + "ms");
   }