Skip to content

Commit 9e44b24

Browse files
otter606heuermh
authored andcommitted
fixes #1008
1 parent 940128b commit 9e44b24

2 files changed

Lines changed: 6 additions & 32 deletions

File tree

biojava-core/src/main/java/org/biojava/nbio/core/util/SequenceTools.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,16 @@ public class SequenceTools {
3535
* @param n The number of characters to permute by; can be positive or negative; values greater than the length of the array are acceptable
3636
*/
3737
public static String permuteCyclic(String string, int n) {
38-
// single letters are char[]; full names are Character[]
39-
Character[] permuted = new Character[string.length()];
40-
char[] c = string.toCharArray();
41-
Character[] charArray = new Character[c.length];
42-
for (int i = 0; i < c.length; i++) {
43-
charArray[i] = c[i];
44-
}
45-
permuteCyclic(charArray, permuted, n);
46-
char[] p = new char[permuted.length];
47-
for (int i = 0; i < p.length; i++) {
48-
p[i] = permuted[i];
49-
}
50-
return String.valueOf(p);
38+
return permuteCyclic2(string, n);
5139
}
5240

53-
/**
41+
/*
5442
* Improved implementation that is generally 10-100x faster, and fixes some edge-case bugs.
5543
* @param string The string to permute
5644
* @param n The number of characters to permute by; can be positive or negative; values greater than the length of the array are acceptable
5745
* @return
5846
*/
59-
public static String permuteCyclic2(String string, int n) {
47+
private static String permuteCyclic2(String string, int n) {
6048
String toMutate = string + string;
6149
n = n % string.length();
6250
if (n < 0) {

biojava-core/src/test/java/org/biojava/nbio/core/util/SequenceToolsTest.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,25 +57,11 @@ void permuteCycleIntMaxMin(String original, String expected) {
5757
@DisplayName("Edge case fixed")
5858
void permuteCycleIntMaxMin2(String original, String expected) {
5959
assertAll(
60-
()->assertEquals(expected, SequenceTools.permuteCyclic2(original, Integer.MAX_VALUE)),
61-
()->assertEquals(expected, SequenceTools.permuteCyclic2(original, Integer.MIN_VALUE))
60+
()->assertEquals(expected, SequenceTools.permuteCyclic(original, Integer.MAX_VALUE)),
61+
()->assertEquals(expected, SequenceTools.permuteCyclic(original, Integer.MIN_VALUE))
6262
);
6363
}
64-
65-
@Test
66-
void permuteCyclicPerformance() {
67-
String dna = randomDNA(10_000_000);
68-
long start = System.currentTimeMillis();
69-
String rotated = SequenceTools.permuteCyclic(dna, 5_000_000);
70-
long end = System.currentTimeMillis();
71-
System.err.println(end-start);
72-
73-
long start2 = System.currentTimeMillis();
74-
String rotated2 = SequenceTools.permuteCyclic2(dna, 5_000_000);
75-
long end2 = System.currentTimeMillis();
76-
System.err.println(end2-start2);
77-
assertTrue((end-start)/(end2-start2) > 5);
78-
}
64+
7965
}
8066

8167
@Nested

0 commit comments

Comments
 (0)