JAL-2526 first draft of findIndex/findPosition with SequenceCursor
[jalview.git] / test / jalview / datamodel / SequenceTest.java
index 4da11eb..e2e14b4 100644 (file)
@@ -226,23 +226,31 @@ public class SequenceTest
   {
     SequenceI sq = new Sequence("test", "ABCDEF");
     assertEquals(0, sq.findIndex(0));
+    PA.setValue(sq, "cursor", null);
     assertEquals(1, sq.findIndex(1));
+    PA.setValue(sq, "cursor", null);
     assertEquals(5, sq.findIndex(5));
+    PA.setValue(sq, "cursor", null);
     assertEquals(6, sq.findIndex(6));
+    PA.setValue(sq, "cursor", null);
     assertEquals(6, sq.findIndex(9));
 
     sq = new Sequence("test/8-13", "-A--B-C-D-E-F--");
     assertEquals(2, sq.findIndex(8));
+    PA.setValue(sq, "cursor", null);
     assertEquals(5, sq.findIndex(9));
+    PA.setValue(sq, "cursor", null);
     assertEquals(7, sq.findIndex(10));
 
     // before start returns 0
+    PA.setValue(sq, "cursor", null);
     assertEquals(0, sq.findIndex(0));
+    PA.setValue(sq, "cursor", null);
     assertEquals(0, sq.findIndex(-1));
 
     // beyond end returns last residue column
+    PA.setValue(sq, "cursor", null);
     assertEquals(13, sq.findIndex(99));
-
   }
 
   /**
@@ -1181,4 +1189,87 @@ public class SequenceTest
     range = sq.findPositions(3, 7); // DE
     assertEquals(new Range(11, 12), range);
   }
+
+  @Test(groups = { "Functional" })
+  public void testFindIndex_withCursor()
+  {
+    Sequence sq = new Sequence("test/8-13", "-A--BCD-EF--");
+
+    // find F given A
+    assertEquals(10, sq.findIndex(13, new SequenceCursor(sq, 8, 2, 0)));
+
+    // find A given F
+    assertEquals(2, sq.findIndex(8, new SequenceCursor(sq, 13, 10, 0)));
+
+    // find C given C
+    assertEquals(6, sq.findIndex(10, new SequenceCursor(sq, 10, 6, 0)));
+  }
+
+  @Test(groups = { "Functional" })
+  public void testFindPosition_withCursor()
+  {
+    Sequence sq = new Sequence("test/8-13", "-A--BCD-EF--");
+  
+    // find F pos given A
+    assertEquals(13, sq.findPosition(10, new SequenceCursor(sq, 8, 2, 0)));
+  
+    // find A pos given F
+    assertEquals(8, sq.findPosition(2, new SequenceCursor(sq, 13, 10, 0)));
+  
+    // find C pos given C
+    assertEquals(10, sq.findPosition(6, new SequenceCursor(sq, 10, 6, 0)));
+
+    // now the grey area - what residue position for a gapped column? JAL-2562
+
+    // find 'residue' for column 3 given cursor for D (so working left)
+    assertEquals(9, sq.findPosition(3, new SequenceCursor(sq, 11, 7, 0)));
+
+    // find 'residue' for column 8 given cursor for D (so working right)
+    assertEquals(12, sq.findPosition(8, new SequenceCursor(sq, 11, 7, 0)));
+
+    // find 'residue' for column 12 given cursor for B
+    assertEquals(14, sq.findPosition(12, new SequenceCursor(sq, 9, 5, 0)));
+  }
+
+  @Test
+  public void testFindPositions_withCursor()
+  {
+    Sequence sq = new Sequence("Seq", "ABC--DE-F", 8, 13);
+  
+    // find positions for columns 1-4 (BC--) given E cursor
+    Range range = sq.findPositions(1, 4, new SequenceCursor(sq, 12, 7, 0)); // BC
+    assertEquals(new Range(9, 10), range);
+
+    // repeat using B cursor
+    range = sq.findPositions(1, 4, new SequenceCursor(sq, 9, 2, 0)); // BC
+    assertEquals(new Range(9, 10), range);
+  
+    // find positions for columns 2-4 (C--) given A cursor
+    range = sq.findPositions(2, 4, new SequenceCursor(sq, 8, 1, 0)); // C
+    assertEquals(new Range(10, 10), range);
+  
+    // gapped region
+    assertNull(sq.findPositions(3, 4, new SequenceCursor(sq, 10, 3, 0)));
+    assertNull(sq.findPositions(3, 4, new SequenceCursor(sq, 12, 7, 0)));
+  
+    // find positions for columns 2-6 (C--DE) given B cursor
+    range = sq.findPositions(2, 6, new SequenceCursor(sq, 9, 2, 0)); // CDE
+    assertEquals(new Range(10, 12), range);
+
+    // repeat using C as cursor
+    range = sq.findPositions(2, 6, new SequenceCursor(sq, 10, 3, 0));
+    assertEquals(new Range(10, 12), range);
+
+    // repeat using D as cursor
+    range = sq.findPositions(2, 6, new SequenceCursor(sq, 11, 6, 0));
+    assertEquals(new Range(10, 12), range);
+
+    // repeat using E as cursor
+    range = sq.findPositions(2, 6, new SequenceCursor(sq, 12, 7, 0));
+    assertEquals(new Range(10, 12), range);
+
+    // repeat using F as cursor
+    range = sq.findPositions(2, 6, new SequenceCursor(sq, 13, 9, 0));
+    assertEquals(new Range(10, 12), range);
+  }
 }