Skip to content

Commit 0769682

Browse files
Tests for finding minimal string rotation
1 parent b1ca0d5 commit 0769682

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.jwetherell.algorithms.strings.test;
2+
3+
import com.jwetherell.algorithms.strings.Rotation;
4+
import org.junit.Test;
5+
6+
import static org.junit.Assert.*;
7+
8+
public class StringRotation {
9+
10+
private String reverse(String text) {
11+
return new StringBuilder(text).reverse().toString();
12+
}
13+
14+
@Test
15+
public void minimalRotationTest() {
16+
assertEquals("",
17+
Rotation.getLexicographicallyMinimalRotation(""));
18+
19+
assertEquals("a",
20+
Rotation.getLexicographicallyMinimalRotation("a"));
21+
22+
assertEquals("abcdefgh",
23+
Rotation.getLexicographicallyMinimalRotation("abcdefgh"));
24+
25+
assertEquals("abcdefgh",
26+
Rotation.getLexicographicallyMinimalRotation("bcdefgha"));
27+
28+
assertEquals("abbbbbbb",
29+
Rotation.getLexicographicallyMinimalRotation("bbbbbabb"));
30+
31+
32+
StringBuilder builder = new StringBuilder();
33+
for(char c = 'Z'; c > 'A'; c--) {
34+
for(int i = 0; i<4000; i++)
35+
builder.append(c);
36+
for(char c2 = c; c2 <= 'Z'; c2++)
37+
builder.append(c2);
38+
}
39+
String str = builder.toString();
40+
41+
assertEquals('A'+str+str,
42+
Rotation.getLexicographicallyMinimalRotation(str + 'A' + str));
43+
44+
assertEquals('A'+str+reverse(str)+str,
45+
Rotation.getLexicographicallyMinimalRotation(reverse(str) + str + 'A' + str));
46+
}
47+
48+
@Test
49+
public void maximalRotationTest() {
50+
assertEquals("",
51+
Rotation.getLexicographicallyMaximalRotation(""));
52+
53+
assertEquals("a",
54+
Rotation.getLexicographicallyMaximalRotation("a"));
55+
56+
assertEquals("habcdefg",
57+
Rotation.getLexicographicallyMaximalRotation("abcdefgh"));
58+
59+
assertEquals("habcdefg",
60+
Rotation.getLexicographicallyMaximalRotation("habcdefg"));
61+
62+
assertEquals("cbbbbbbb",
63+
Rotation.getLexicographicallyMaximalRotation("bbbbbcbb"));
64+
65+
StringBuilder builder = new StringBuilder();
66+
for(char c = 'A'; c < 'Z'; c++) {
67+
for(int i = 0; i<4000; i++)
68+
builder.append(c);
69+
for(char c2 = c; c2 >='A'; c2--)
70+
builder.append(c2);
71+
}
72+
String str = builder.toString();
73+
74+
assertEquals('Z'+str+str,
75+
Rotation.getLexicographicallyMaximalRotation(str + 'Z' + str));
76+
77+
assertEquals('Z'+str+reverse(str)+str,
78+
Rotation.getLexicographicallyMaximalRotation(reverse(str) + str + 'Z' + str));
79+
}
80+
}

0 commit comments

Comments
 (0)