forked from TheAlgorithms/Java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSentinelLinearSearchTest.java
More file actions
225 lines (202 loc) · 8.87 KB
/
SentinelLinearSearchTest.java
File metadata and controls
225 lines (202 loc) · 8.87 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
package com.thealgorithms.searches;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.Random;
import org.junit.jupiter.api.Test;
/**
* Unit tests for the SentinelLinearSearch class.
*/
class SentinelLinearSearchTest {
/**
* Test for finding an element present in the array.
*/
@Test
void testSentinelLinearSearchFound() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Integer key = 5; // Element to find
assertEquals(5, sentinelLinearSearch.find(array, key), "The index of the found element should be 5.");
}
/**
* Test for finding the first element in the array.
*/
@Test
void testSentinelLinearSearchFirstElement() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Integer key = 0; // First element
assertEquals(0, sentinelLinearSearch.find(array, key), "The index of the first element should be 0.");
}
/**
* Test for finding the last element in the array.
*/
@Test
void testSentinelLinearSearchLastElement() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Integer key = 10; // Last element
assertEquals(10, sentinelLinearSearch.find(array, key), "The index of the last element should be 10.");
}
/**
* Test for finding an element not present in the array.
*/
@Test
void testSentinelLinearSearchNotFound() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Integer key = -1; // Element not in the array
assertEquals(-1, sentinelLinearSearch.find(array, key), "The element should not be found in the array.");
}
/**
* Test for finding an element in an empty array.
*/
@Test
void testSentinelLinearSearchEmptyArray() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {}; // Empty array
Integer key = 1; // Key not present
assertEquals(-1, sentinelLinearSearch.find(array, key), "The element should not be found in an empty array.");
}
/**
* Test for finding an element in a single-element array when present.
*/
@Test
void testSentinelLinearSearchSingleElementFound() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {42}; // Single element array
Integer key = 42; // Element present
assertEquals(0, sentinelLinearSearch.find(array, key), "The element should be found at index 0.");
}
/**
* Test for finding an element in a single-element array when not present.
*/
@Test
void testSentinelLinearSearchSingleElementNotFound() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {42}; // Single element array
Integer key = 24; // Element not present
assertEquals(-1, sentinelLinearSearch.find(array, key), "The element should not be found in the array.");
}
/**
* Test for finding multiple occurrences of the same element in the array.
*/
@Test
void testSentinelLinearSearchMultipleOccurrences() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {1, 2, 3, 4, 5, 3, 6, 7, 3}; // 3 occurs multiple times
Integer key = 3; // Key to find
assertEquals(2, sentinelLinearSearch.find(array, key), "The index of the first occurrence of the element should be 2.");
}
/**
* Test for finding an element in a large array.
*/
@Test
void testSentinelLinearSearchLargeArray() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = new Integer[1000];
for (int i = 0; i < array.length; i++) {
array[i] = i; // Fill the array with integers 0 to 999
}
Integer key = 256; // Present in the array
assertEquals(256, sentinelLinearSearch.find(array, key), "The index of the found element should be 256.");
}
/**
* Test for finding an element in a large array when it is not present.
*/
@Test
void testSentinelLinearSearchLargeArrayNotFound() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = new Integer[1000];
for (int i = 0; i < array.length; i++) {
array[i] = i; // Fill the array with integers 0 to 999
}
Integer key = 1001; // Key not present
assertEquals(-1, sentinelLinearSearch.find(array, key), "The element should not be found in the array.");
}
/**
* Test for performance with random large array.
*/
@Test
void testSentinelLinearSearchRandomArray() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Random random = new Random();
Integer[] array = random.ints(0, 1000).distinct().limit(1000).boxed().toArray(Integer[] ::new);
Integer key = array[random.nextInt(array.length)]; // Key should be in the array
assertEquals(java.util.Arrays.asList(array).indexOf(key), sentinelLinearSearch.find(array, key), "The index of the found element should match.");
}
/**
* Test for handling null array.
*/
@Test
void testSentinelLinearSearchNullArray() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = null; // Null array
Integer key = 1; // Any key
assertThrows(IllegalArgumentException.class, () -> sentinelLinearSearch.find(array, key), "Should throw IllegalArgumentException for null array.");
}
/**
* Test for handling null key in array with null elements.
*/
@Test
void testSentinelLinearSearchNullKey() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {1, null, 3, 4, null}; // Array with null elements
Integer key = null; // Null key
assertEquals(1, sentinelLinearSearch.find(array, key), "The index of the first null element should be 1.");
}
/**
* Test for handling null key when not present in array.
*/
@Test
void testSentinelLinearSearchNullKeyNotFound() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {1, 2, 3, 4, 5}; // Array without null elements
Integer key = null; // Null key
assertEquals(-1, sentinelLinearSearch.find(array, key), "Null key should not be found in array without null elements.");
}
/**
* Test with String array to verify generic functionality.
*/
@Test
void testSentinelLinearSearchStringArray() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
String[] array = {"apple", "banana", "cherry", "date", "elderberry"};
String key = "cherry"; // Element to find
assertEquals(2, sentinelLinearSearch.find(array, key), "The index of 'cherry' should be 2.");
}
/**
* Test with String array when element not found.
*/
@Test
void testSentinelLinearSearchStringArrayNotFound() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
String[] array = {"apple", "banana", "cherry", "date", "elderberry"};
String key = "grape"; // Element not in array
assertEquals(-1, sentinelLinearSearch.find(array, key), "The element 'grape' should not be found in the array.");
}
/**
* Test that the original array is not modified after search.
*/
@Test
void testSentinelLinearSearchArrayIntegrity() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {1, 2, 3, 4, 5};
Integer[] originalArray = array.clone(); // Keep a copy of the original
Integer key = 3; // Element to find
sentinelLinearSearch.find(array, key);
// Verify array is unchanged
for (int i = 0; i < array.length; i++) {
assertEquals(originalArray[i], array[i], "Array should remain unchanged after search.");
}
}
/**
* Test edge case where the key is the same as the last element.
*/
@Test
void testSentinelLinearSearchKeyEqualsLastElement() {
SentinelLinearSearch sentinelLinearSearch = new SentinelLinearSearch();
Integer[] array = {1, 2, 3, 4, 5, 3}; // Last element is 3, and 3 also appears earlier
Integer key = 3; // Key equals last element
assertEquals(2, sentinelLinearSearch.find(array, key), "Should find the first occurrence at index 2, not the last.");
}
}