-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGameLogicTest.java
More file actions
127 lines (102 loc) · 5.15 KB
/
GameLogicTest.java
File metadata and controls
127 lines (102 loc) · 5.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.*;
import java.lang.reflect.Method;
public class GameLogicTest {
private GuessTheNumberServer server;
private Method findPrimeMethod;
private Method reverseDigitsMethod;
private Method transformGuessMethod;
public void setUp() throws Exception {
// Get access to private methods for testing
findPrimeMethod = GuessTheNumberServer.class.getDeclaredMethod("findLargestPrimeLessThan17");
findPrimeMethod.setAccessible(true);
reverseDigitsMethod = GuessTheNumberServer.class.getDeclaredMethod("reverseDigits", int.class);
reverseDigitsMethod.setAccessible(true);
transformGuessMethod = GuessTheNumberServer.class.getDeclaredMethod("transformGuess", int.class);
transformGuessMethod.setAccessible(true);
}
public void testPrimeNumberGeneration() throws Exception {
int[] validPrimes = {2, 3, 5, 7, 11, 13};
int result = (int) findPrimeMethod.invoke(null);
boolean isValidPrime = false;
for (int prime : validPrimes) {
if (result == prime) {
isValidPrime = true;
break;
}
}
assertTrue("Generated prime should be one of the valid primes less than 17", isValidPrime);
}
@Test
public void testReverseDigits() throws Exception {
// Test regular numbers
assertEquals(21, (int) reverseDigitsMethod.invoke(null, 12));
assertEquals(4321, (int) reverseDigitsMethod.invoke(null, 1234));
// Test single digit
assertEquals(5, (int) reverseDigitsMethod.invoke(null, 5));
// Test with zeros
assertEquals(1, (int) reverseDigitsMethod.invoke(null, 100));
assertEquals(21, (int) reverseDigitsMethod.invoke(null, 120));
}
@Test
public void testTransformGuess() throws Exception {
// Test even number (should reverse digits)
int evenResult = (int) transformGuessMethod.invoke(null, 42);
assertEquals(24, evenResult); // 42 -> 24 (reversed)
// Test number that gets doubled
int doubledResult = (int) transformGuessMethod.invoke(null, 20);
assertEquals(40, doubledResult); // 20 -> 02 (reversed) -> 2 -> 4 (doubled)
// Test number that gets halved
int halvedResult = (int) transformGuessMethod.invoke(null, 78);
assertEquals(43, halvedResult); // 78 -> 87 (reversed) -> 43 (halved since > 100)
}
@Test
public void testPrefixGeneration() {
GuessTheNumberServer server = new GuessTheNumberServer();
// Test even number in safe zone
String evenSafePrefix = server.generatePrefix(20);
assertTrue(evenSafePrefix.contains("20"));
assertTrue(evenSafePrefix.contains("safe zone"));
// Test odd number in uncertain range
String oddUncertainPrefix = server.generatePrefix(75);
assertTrue(oddUncertainPrefix.contains("75"));
assertTrue(oddUncertainPrefix.contains("uncertain range"));
// Test number in high risk zone
String highRiskPrefix = server.generatePrefix(200);
assertTrue(highRiskPrefix.contains("200"));
assertTrue(highRiskPrefix.contains("high-risk zone"));
// Test all possible format choices
boolean foundEvenOdd = false;
boolean foundSizeComparison = false;
boolean foundRandomFact = false;
// Run multiple times to cover all random cases
for (int i = 0; i < 50; i++) {
String prefix = server.generatePrefix(42);
if (prefix.contains("even")) foundEvenOdd = true;
if (prefix.contains("small number")) foundSizeComparison = true;
if (prefix.contains("special fact")) foundRandomFact = true;
if (foundEvenOdd && foundSizeComparison && foundRandomFact) break;
}
assertTrue("Should generate even/odd format", foundEvenOdd);
assertTrue("Should generate size comparison format", foundSizeComparison);
assertTrue("Should generate random fact format", foundRandomFact);
}
@Test
public void testPrefixZoneRanges() {
GuessTheNumberServer server = new GuessTheNumberServer();
// Test safe zone boundary
String safeLowerBound = server.generatePrefix(0);
String safeUpperBound = server.generatePrefix(50);
assertTrue(safeLowerBound.contains("safe zone"));
assertTrue(safeUpperBound.contains("safe zone"));
// Test uncertain range boundary
String uncertainLowerBound = server.generatePrefix(51);
String uncertainUpperBound = server.generatePrefix(150);
assertTrue(uncertainLowerBound.contains("uncertain range"));
assertTrue(uncertainUpperBound.contains("uncertain range"));
// Test high risk zone
String highRisk = server.generatePrefix(151);
assertTrue(highRisk.contains("high-risk zone"));
}
}