JAL-1350 cloned method and tested equivalence for using column selection to subdivide...
[jalview.git] / test / jalview / analysis / GroupingTest.java
1 package jalview.analysis;
2
3 import static org.junit.Assert.fail;
4 import jalview.datamodel.Alignment;
5 import jalview.datamodel.AlignmentI;
6 import jalview.datamodel.ColumnSelection;
7 import jalview.datamodel.Sequence;
8 import jalview.datamodel.SequenceGroup;
9 import jalview.datamodel.SequenceI;
10
11 import java.util.ArrayList;
12 import java.util.Arrays;
13
14 import org.junit.Assert;
15 import org.junit.Test;
16
17 public class GroupingTest
18 {
19   Sequence s1 = new Sequence("s1", "AAAADDDDEEEE");
20
21   Sequence s2 = new Sequence("s2", "AAAADDDDEEEE");
22
23   Sequence s3 = new Sequence("s3", "ACAADDEDEEEE");
24
25   Sequence s4 = new Sequence("s4", "AAAADDEDEEEE");
26
27   Sequence s5 = new Sequence("s5", "AAAADDEDTTEE");
28
29   SequenceGroup sg1 = new SequenceGroup(Arrays.asList(new SequenceI[]
30   { s1, s2 }), "Group1", null, false, false, false, 0, 5);
31
32   SequenceGroup sg2 = new SequenceGroup(Arrays.asList(new SequenceI[]
33   { s3, s4, s5 }), "Group2", null, false, false, false, 0, 5);
34
35   AlignmentI alignment = new Alignment(new SequenceI[]
36   { s1, s2, s3, s4, s5 });
37
38   int[] positions = new int[]
39   { 1, 7, 9 };
40
41   @Test
42   public void testMakeGroupsWithBoth()
43   {
44     ArrayList<String> str = new ArrayList<String>();
45     for (SequenceI s : alignment.getSequences())
46     {
47       StringBuilder sb = new StringBuilder();
48       for (int p : positions)
49       {
50         sb.append(s.getCharAt(p));
51       }
52       str.add(sb.toString());
53     }
54     SequenceGroup[] seqgroupsString = Grouping.makeGroupsFrom(
55             alignment.getSequencesArray(),
56             str.toArray(new String[str.size()]),
57             Arrays.asList(new SequenceGroup[]
58             { sg1, sg2 }));
59     ColumnSelection cs = new ColumnSelection();
60     for (int p : positions)
61     {
62       cs.addElement(p);
63     }
64     SequenceGroup[] seqgroupsColSel = Grouping.makeGroupsFromCols(
65             alignment.getSequencesArray(), cs,
66             Arrays.asList(new SequenceGroup[]
67             { sg1, sg2 }));
68     Assert.assertEquals(seqgroupsString.length, seqgroupsColSel.length);
69     for (int p = 0; p < seqgroupsString.length; p++)
70     {
71       Assert.assertEquals(seqgroupsString[p].getName(),
72               seqgroupsColSel[p].getName());
73       Assert.assertArrayEquals(
74               seqgroupsString[p].getSequencesInOrder(alignment),
75               seqgroupsColSel[p].getSequencesInOrder(alignment));
76       if (seqgroupsString[p].getSequences().contains(s2))
77       {
78         Assert.assertTrue(seqgroupsString[p].getSize() == 2);
79       }
80     }
81   }
82
83   @Test
84   public void testMakeGroupsFromCols()
85   {
86     fail("Not yet implemented"); // TODO
87   }
88
89 }