Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6d58bbc

Browse files
Fix of reported issues (#133)
* fixed typo in javadoc * added tests for size change HashTableTest
1 parent 070b3b9 commit 6d58bbc

File tree

2 files changed

+51
-23
lines changed
  • 1-0-java-basics/1-3-1-crazy-generics/src/main/java/com/bobocode/basics
  • 2-0-data-structures-and-algorithms/2-2-7-hash-table/src/test/java/com/bobocode/cs

2 files changed

+51
-23
lines changed

‎1-0-java-basics/1-3-1-crazy-generics/src/main/java/com/bobocode/basics/CrazyGenerics.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public Object getMax() {
9292
}
9393

9494
/**
95-
* {@link StrictProcessor} defines a contact of a processor that can process only objects that are {@link Serializable}
95+
* {@link StrictProcessor} defines a contract of a processor that can process only objects that are {@link Serializable}
9696
* and {@link Comparable}.
9797
*
9898
* @param <T> – the type of objects that can be processed

‎2-0-data-structures-and-algorithms/2-2-7-hash-table/src/test/java/com/bobocode/cs/HashTableTest.java‎

Lines changed: 50 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.bobocode.cs;
22

3-
import lombok.SneakyThrows;
4-
import org.junit.jupiter.api.ClassOrderer.OrderAnnotation;
5-
import org.junit.jupiter.api.*;
6-
import org.mockito.Mockito;
3+
import static java.lang.reflect.Modifier.isStatic;
4+
import static org.assertj.core.api.Assertions.assertThat;
5+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
6+
import static org.junit.jupiter.api.Assertions.assertEquals;
7+
import static org.junit.jupiter.api.Assertions.assertFalse;
8+
import static org.junit.jupiter.api.Assertions.assertNull;
9+
import static org.junit.jupiter.api.Assertions.assertTrue;
710

811
import java.lang.reflect.Field;
912
import java.util.Arrays;
@@ -12,12 +15,15 @@
1215
import java.util.concurrent.ThreadLocalRandom;
1316
import java.util.stream.Collectors;
1417
import java.util.stream.Stream;
15-
16-
import static java.lang.reflect.Modifier.isStatic;
17-
import static org.assertj.core.api.Assertions.assertThat;
18-
import static org.assertj.core.api.Assertions.assertThatThrownBy;
19-
import static org.junit.jupiter.api.Assertions.*;
20-
import static org.mockito.Mockito.*;
18+
import lombok.SneakyThrows;
19+
import org.junit.jupiter.api.ClassOrderer.OrderAnnotation;
20+
import org.junit.jupiter.api.DisplayName;
21+
import org.junit.jupiter.api.MethodOrderer;
22+
import org.junit.jupiter.api.Nested;
23+
import org.junit.jupiter.api.Order;
24+
import org.junit.jupiter.api.Test;
25+
import org.junit.jupiter.api.TestClassOrder;
26+
import org.junit.jupiter.api.TestMethodOrder;
2127

2228
/**
2329
* A Reflection-based step by step test for a {@link HashTable} class. PLEASE NOTE that Reflection API should not be used
@@ -28,6 +34,7 @@
2834
@TestClassOrder(OrderAnnotation.class)
2935
@DisplayName("HashTable Test")
3036
class HashTableTest {
37+
3138
private HashTable<String, Integer> hashTable = new HashTable<>();
3239

3340
@Nested
@@ -126,6 +133,7 @@ void nodeConstructorAcceptKeyValue() {
126133
@DisplayName("2. HashTable fields Test")
127134
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
128135
class HashTableFieldsTest {
136+
129137
@Test
130138
@Order(1)
131139
@DisplayName("HastTable has a field 'table' which is an array of nodes")
@@ -155,6 +163,7 @@ void sizeFieldExists() {
155163
@DisplayName("3. HashTable constructors Test")
156164
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
157165
class HashTableConstructorsTest {
166+
158167
@Test
159168
@Order(1)
160169
@SneakyThrows
@@ -198,6 +207,7 @@ void constructorWithTableCapacityWhenArgumentIsNegative() {
198207
@DisplayName("4. Hash Function Test")
199208
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
200209
class HashFunctionTest {
210+
201211
@Test
202212
@Order(1)
203213
@DisplayName("calculateIndex returns the same value for the same key")
@@ -221,8 +231,8 @@ void calculateIndexReturnDifferentValuesWheKeysAreDifferent() {
221231

222232
assertThat(indexSet)
223233
.hasSizeGreaterThan(1);
224-
}
225-
234+
}
235+
226236
@Test
227237
@Order(3)
228238
@DisplayName("calculateIndex returns values in array bounds")
@@ -235,7 +245,7 @@ void calculateIndexReturnIndexInArrayBounds() {
235245
var indexes = keys.stream()
236246
.map(key -> HashTable.calculateIndex(key, arrayCapacity))
237247
.toList();
238-
248+
239249
assertThat(indexes)
240250
.isNotEmpty()
241251
.allMatch(i -> i >= 0 && i < arrayCapacity);
@@ -262,19 +272,20 @@ class HashTableMethodsTest {
262272
@Test
263273
@SneakyThrows
264274
@Order(1)
265-
@DisplayName("put creates new entry and returns null when the table is empty")
275+
@DisplayName("put creates new entry and returns null when the table is empty, should increase the table size")
266276
void putWhenTableIsEmpty() {
267277
var previousValue = hashTable.put("madmax", 833);
268278

269279
var keyValueExists = checkKeyValueExists("madmax", 833);
270280

271281
assertNull(previousValue);
272282
assertTrue(keyValueExists);
283+
assertEquals(1, getSize());
273284
}
274285

275286
@Test
276287
@Order(2)
277-
@DisplayName("put elements adds entry to to the same bucket when the hash code is the same")
288+
@DisplayName("put elements adds entry to the same bucket and increases table size when the hash code is the same")
278289
@SneakyThrows
279290
void putTwoElementsWithTheSameHashCode() {
280291
var table = getInternalTable(hashTable);
@@ -290,11 +301,13 @@ void putTwoElementsWithTheSameHashCode() {
290301
assertTrue(containsKeyValueA);
291302
assertTrue(containsKeyValueB);
292303
assertThat(bucketIndexA).isEqualTo(bucketIndexB);
304+
assertEquals(2, getSize());
293305
}
294306

295307
@Test
296308
@Order(3)
297-
@DisplayName("put element updates the value and returns the previous one when key is the same")
309+
@DisplayName(
310+
"put element updates the value and returns the previous one when key is the same, should not increase table size")
298311
void putElementWithTheSameKey() {
299312
hashTable.put("madmax", 833);
300313
System.out.println(hashTable);
@@ -305,6 +318,7 @@ void putElementWithTheSameKey() {
305318

306319
assertThat(previousValue).isEqualTo(833);
307320
assertTrue(containsNewValueByKey);
321+
assertEquals(1, getSize());
308322
}
309323

310324
@Test
@@ -430,14 +444,15 @@ void isEmptyWhenThereIsNoElements() {
430444

431445
@Test
432446
@Order(13)
433-
@DisplayName("remove deletes the entry and returns a value")
447+
@DisplayName("remove deletes the entry, decreases table size and returns a value")
434448
void remove() {
435449
addToTable("madmax", 833);
436-
450+
setSize(1);
437451
var result = hashTable.remove("madmax");
438452

439453
assertThat(result).isEqualTo(833);
440454
assertFalse(checkKeyValueExists("madmaxx", 833));
455+
assertEquals(0, getSize());
441456
}
442457

443458
@Test
@@ -451,34 +466,40 @@ void removeWhenKeyDoesNotExists() {
451466

452467
@Test
453468
@Order(15)
454-
@DisplayName("remove deletes the element when it's in the middle of the list")
469+
@DisplayName("remove deletes the element when it's in the middle of the list and decreases the size of table")
455470
void removeFromTheMiddleOfTheList() {
456471
addToTable("AaAa", 843);
457472
addToTable("BBBB", 434);
458473
addToTable("AaBB", 587);
459474

475+
var size = 3;
476+
setSize(size);
460477
var removedValue = hashTable.remove("BBBB");
461478

462479
assertTrue(checkKeyValueExists("AaAa", 843));
463480
assertFalse(checkKeyExists("BBBB"));
464481
assertTrue(checkKeyValueExists("AaBB", 587));
465482
assertThat(removedValue).isEqualTo(434);
466-
}
467-
483+
assertEquals(size - 1, getSize());
484+
}
485+
468486
@Test
469487
@Order(16)
470-
@DisplayName("remove deletes the element when it's in the end of the list")
488+
@DisplayName("remove deletes the element when it's in the end of the list and decreases the size of table")
471489
void removeFromTheEndOfTheList() {
472490
addToTable("AaAa", 843);
473491
addToTable("BBBB", 434);
474492
addToTable("AaBB", 587);
493+
var size = 3;
494+
setSize(size);
475495

476496
var removedValue = hashTable.remove("AaBB");
477497

478498
assertTrue(checkKeyValueExists("AaAa", 843));
479499
assertTrue(checkKeyValueExists("BBBB", 434));
480500
assertFalse(checkKeyExists("AaBB"));
481501
assertThat(removedValue).isEqualTo(587);
502+
assertEquals(2, getSize());
482503
}
483504
}
484505

@@ -585,6 +606,13 @@ private void setSize(int size) {
585606
sizeField.set(hashTable, size);
586607
}
587608

609+
@SneakyThrows
610+
private int getSize() {
611+
var sizeField = HashTable.class.getDeclaredField("size");
612+
sizeField.setAccessible(true);
613+
return sizeField.getInt(hashTable);
614+
}
615+
588616
private String tableToString(Object[] table) {
589617
StringBuilder result = new StringBuilder();
590618
var n = table.length;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /