Clover icon

Coverage Report

  1. Project Clover database Thu Aug 13 2020 12:04:21 BST
  2. Package jalview.analysis.scoremodels

File PIDModelTest.java

 

Code metrics

0
73
4
1
190
98
4
0.05
18.25
4
1

Classes

Class Line # Actions
PIDModelTest 10 73 4
1.0100%
 

Contributing tests

This file is covered by 4 tests. .

Source view

1    package jalview.analysis.scoremodels;
2   
3    import static org.testng.Assert.assertEquals;
4   
5    import jalview.api.analysis.SimilarityParamsI;
6    import jalview.util.Comparison;
7   
8    import org.testng.annotations.Test;
9   
 
10    public class PIDModelTest
11    {
12    private static final double DELTA = 0.00001D;
13   
 
14  1 toggle @Test(groups = "Functional")
15    public void testGetPairwiseScore()
16    {
17  1 PIDModel sm = new PIDModel();
18  1 assertEquals(sm.getPairwiseScore('A', 'A'), 1f);
19  1 assertEquals(sm.getPairwiseScore('A', 'a'), 1f);
20  1 assertEquals(sm.getPairwiseScore('a', 'A'), 1f);
21  1 assertEquals(sm.getPairwiseScore('A', 'B'), 0f);
22  1 assertEquals(sm.getPairwiseScore('A', ' '), 0f);
23  1 assertEquals(sm.getPairwiseScore(' ', ' '), 0f);
24  1 assertEquals(sm.getPairwiseScore('.', '.'), 0f);
25  1 assertEquals(sm.getPairwiseScore('-', '-'), 0f);
26    }
27   
28    /**
29    * Regression test to verify that a (suitably configured) PIDModel computes
30    * the same percentage identities as the Comparison.PID method
31    */
 
32  1 toggle @Test(groups = "Functional")
33    public void testComputePID_matchesComparisonPID()
34    {
35  1 SimilarityParamsI params = new SimilarityParams(true, true, true, true);
36   
37    /*
38    * same length, no gaps
39    */
40  1 String s1 = "ARFNQDWSGI";
41  1 String s2 = "ARKNQDQSGI";
42   
43  1 new PIDModel();
44  1 double newScore = PIDModel.computePID(s1, s2, params);
45  1 double oldScore = Comparison.PID(s1, s2);
46  1 assertEquals(newScore, oldScore, DELTA);
47    // and verify PIDModel calculation is symmetric
48  1 assertEquals(newScore, PIDModel.computePID(s2, s1, params));
49   
50    /*
51    * same length, with gaps
52    */
53  1 s1 = "-RFNQDWSGI";
54  1 s2 = "ARKNQ-QSGI";
55  1 new PIDModel();
56  1 newScore = PIDModel.computePID(s1, s2, params);
57  1 oldScore = Comparison.PID(s1, s2);
58  1 assertEquals(newScore, oldScore, DELTA);
59  1 assertEquals(newScore, PIDModel.computePID(s2, s1, params));
60   
61    /*
62    * s2 longer than s1, with gaps
63    */
64  1 s1 = "ARK-";
65  1 s2 = "-RFNQ";
66  1 new PIDModel();
67  1 newScore = PIDModel.computePID(s1, s2, params);
68  1 oldScore = Comparison.PID(s1, s2);
69  1 assertEquals(newScore, oldScore, DELTA);
70  1 assertEquals(newScore, PIDModel.computePID(s2, s1, params));
71   
72    /*
73    * s1 longer than s2, with gaps
74    */
75  1 s1 = "-RFNQ";
76  1 s2 = "ARK-";
77  1 new PIDModel();
78  1 newScore = PIDModel.computePID(s1, s2, params);
79  1 oldScore = Comparison.PID(s1, s2);
80  1 assertEquals(newScore, oldScore, DELTA);
81  1 assertEquals(newScore, PIDModel.computePID(s2, s1, params));
82   
83    /*
84    * same but now also with gapped columns
85    */
86  1 s1 = "-R-F-NQ";
87  1 s2 = "AR-K--";
88  1 new PIDModel();
89  1 newScore = PIDModel.computePID(s1, s2, params);
90  1 oldScore = Comparison.PID(s1, s2);
91  1 assertEquals(newScore, oldScore, DELTA);
92  1 assertEquals(newScore, PIDModel.computePID(s2, s1, params));
93    }
94   
95    /**
96    * Tests for percentage identity variants where only the shorter length of two
97    * sequences is used
98    */
 
99  1 toggle @Test(groups = "Functional")
100    public void testComputePID_matchShortestSequence()
101    {
102  1 String s1 = "FR-K-S";
103  1 String s2 = "FS--L";
104   
105    /*
106    * match gap-gap and gap-char
107    * PID = 4/5 = 80%
108    */
109  1 SimilarityParamsI params = new SimilarityParams(true, true, true, true);
110  1 assertEquals(PIDModel.computePID(s1, s2, params), 80d);
111  1 assertEquals(PIDModel.computePID(s2, s1, params), 80d);
112   
113    /*
114    * match gap-char but not gap-gap
115    * PID = 3/4 = 75%
116    */
117  1 params = new SimilarityParams(false, true, true, true);
118  1 assertEquals(PIDModel.computePID(s1, s2, params), 75d);
119  1 assertEquals(PIDModel.computePID(s2, s1, params), 75d);
120   
121    /*
122    * include gaps but don't match them
123    * include gap-gap, counted as identity
124    * PID = 2/5 = 40%
125    */
126  1 params = new SimilarityParams(true, false, true, true);
127  1 assertEquals(PIDModel.computePID(s1, s2, params), 40d);
128  1 assertEquals(PIDModel.computePID(s2, s1, params), 40d);
129   
130    /*
131    * include gaps but don't match them
132    * exclude gap-gap
133    * PID = 1/4 = 25%
134    */
135  1 params = new SimilarityParams(false, false, true, true);
136  1 assertEquals(PIDModel.computePID(s1, s2, params), 25d);
137  1 assertEquals(PIDModel.computePID(s2, s1, params), 25d);
138    }
139   
140    /**
141    * Tests for percentage identity variants where the longer length of two
142    * sequences is used
143    */
 
144  1 toggle @Test(groups = "Functional")
145    public void testComputePID_matchLongestSequence()
146    {
147  1 String s1 = "FR-K-S";
148  1 String s2 = "FS--L";
149   
150    /*
151    * match gap-gap and gap-char
152    * shorter sequence treated as if with trailing gaps
153    * PID = 5/6 = 83.333...%
154    */
155  1 SimilarityParamsI params = new SimilarityParams(true, true, true, false);
156  1 assertEquals(PIDModel.computePID(s1, s2, params), 500d / 6);
157  1 assertEquals(PIDModel.computePID(s2, s1, params), 500d / 6);
158   
159    /*
160    * match gap-char but not gap-gap
161    * PID = 4/5 = 80%
162    */
163  1 params = new SimilarityParams(false, true, true, false);
164  1 assertEquals(PIDModel.computePID(s1, s2, params), 80d);
165  1 assertEquals(PIDModel.computePID(s2, s1, params), 80d);
166   
167    /*
168    * include gaps but don't match them
169    * include gap-gap, counted as identity
170    * PID = 2/6 = 33.333...%
171    */
172  1 params = new SimilarityParams(true, false, true, false);
173  1 assertEquals(PIDModel.computePID(s1, s2, params), 100d / 3);
174  1 assertEquals(PIDModel.computePID(s2, s1, params), 100d / 3);
175   
176    /*
177    * include gaps but don't match them
178    * exclude gap-gap
179    * PID = 1/5 = 25%
180    */
181  1 params = new SimilarityParams(false, false, true, false);
182  1 assertEquals(PIDModel.computePID(s1, s2, params), 20d);
183  1 assertEquals(PIDModel.computePID(s2, s1, params), 20d);
184   
185    /*
186    * no tests for matchGaps=true, includeGaps=false
187    * as it don't make sense
188    */
189    }
190    }