committed by
chris
6 changed files with 419 additions and 0 deletions
@ -0,0 +1,7 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<classpath> |
|||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> |
|||
<classpathentry kind="src" path="src"/> |
|||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/> |
|||
<classpathentry kind="output" path="bin"/> |
|||
</classpath> |
@ -0,0 +1,17 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<projectDescription> |
|||
<name>SimpleArrayMap</name> |
|||
<comment></comment> |
|||
<projects> |
|||
</projects> |
|||
<buildSpec> |
|||
<buildCommand> |
|||
<name>org.eclipse.jdt.core.javabuilder</name> |
|||
<arguments> |
|||
</arguments> |
|||
</buildCommand> |
|||
</buildSpec> |
|||
<natures> |
|||
<nature>org.eclipse.jdt.core.javanature</nature> |
|||
</natures> |
|||
</projectDescription> |
@ -0,0 +1,107 @@ |
|||
package solution; |
|||
|
|||
import java.util.function.Consumer; |
|||
|
|||
import testat.ISimpleMap; |
|||
|
|||
public class SimpleArrayMap<K, V> implements ISimpleMap<K, V> { |
|||
|
|||
private int size; |
|||
private K[] keys; |
|||
private V[] values; |
|||
|
|||
public SimpleArrayMap(int maxSize) { |
|||
size = 0; |
|||
keys = (K[]) new Object[maxSize]; |
|||
values = (V[]) new Object[maxSize]; |
|||
} |
|||
|
|||
@Override |
|||
public V put(K k, V v) { |
|||
|
|||
if (k == null || v == null) { |
|||
return null; |
|||
} |
|||
for (int i = 0; i < values.length; i++) { |
|||
if (k.equals(keys[i])) { // found
|
|||
V result = values[i]; |
|||
values[i] = v; |
|||
return result; |
|||
} |
|||
} |
|||
for (int i = 0; i < values.length; i++) { |
|||
if (keys[i] == null) { // empty
|
|||
keys[i] = k; |
|||
values[i] = v; |
|||
size++; |
|||
return null; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public V get(K k) { |
|||
if (k == null) { |
|||
return null; |
|||
} |
|||
for (int i = 0; i < values.length; i++) { |
|||
if (k.equals(keys[i])) { // found
|
|||
return values[i]; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public V remove(K k) { |
|||
if (k == null) { |
|||
return null; |
|||
} |
|||
for (int i = 0; i < values.length; i++) { |
|||
if (k.equals(keys[i])) { // found
|
|||
V v = values[i]; |
|||
size--; |
|||
keys[i] = null; |
|||
values[i] = null; |
|||
return v; |
|||
} |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public boolean contains(V v) { |
|||
if (v == null) { |
|||
return false; |
|||
} |
|||
int counter = 0; |
|||
for (int i = 0; i < values.length; i++) { |
|||
if (v.equals(values[i])) { |
|||
return true; |
|||
} |
|||
if (values[i] != null) { |
|||
counter++; |
|||
} |
|||
if (counter == size) { |
|||
return false; |
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
@Override |
|||
public void forEach(Consumer<? super V> consumer) { |
|||
for (int i = 0; i < values.length; i++) { |
|||
if (keys[i] != null) { // found
|
|||
consumer.accept(values[i]); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public int size() { |
|||
return size; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
package solution; |
|||
|
|||
import testat.ASimpleMapTest; |
|||
import testat.ISimpleMap; |
|||
|
|||
public class SimpleArrayMapTest extends ASimpleMapTest { |
|||
|
|||
@Override |
|||
protected ISimpleMap<String, String> getInstance() { |
|||
return new SimpleArrayMap<>(5); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,242 @@ |
|||
package testat; |
|||
|
|||
import static org.junit.Assert.assertEquals; |
|||
|
|||
import java.util.function.Consumer; |
|||
|
|||
import org.junit.jupiter.api.BeforeAll; |
|||
import org.junit.jupiter.api.BeforeEach; |
|||
import org.junit.jupiter.api.Test; |
|||
|
|||
public abstract class ASimpleMapTest { |
|||
|
|||
ISimpleMap<String, String> map; |
|||
|
|||
protected abstract ISimpleMap<String, String> getInstance(); |
|||
|
|||
private int counter = 0; |
|||
private String result; |
|||
|
|||
Consumer<String> action = s -> { |
|||
counter++; |
|||
result = result + s; |
|||
}; |
|||
|
|||
@BeforeAll |
|||
static void setUpBeforeClass() throws Exception { |
|||
} |
|||
|
|||
@BeforeEach |
|||
void setUp() throws Exception { |
|||
map = getInstance(); |
|||
} |
|||
|
|||
@Test |
|||
void testadd1() { |
|||
String actual = map.put("1", "Hallo"); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testadd2a() { |
|||
String actual = map.put(null, "xxx"); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testadd2b() { |
|||
String actual = map.put("1", null); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testadd3() { |
|||
add3(); |
|||
String actual = map.put("1", "Hallo"); |
|||
assertEquals("Eins", actual); |
|||
} |
|||
|
|||
@Test |
|||
void testadd4() { |
|||
add3(); |
|||
map.put("4", "Vier"); |
|||
map.put("5", "Fünf"); |
|||
map.remove("3"); |
|||
map.put("6", "Sechs"); |
|||
|
|||
String actual = map.get("1"); |
|||
assertEquals("Eins", actual); |
|||
actual = map.get("2"); |
|||
assertEquals("Zwei", actual); |
|||
actual = map.get("4"); |
|||
assertEquals("Vier", actual); |
|||
actual = map.get("5"); |
|||
assertEquals("Fünf", actual); |
|||
actual = map.get("6"); |
|||
assertEquals("Sechs", actual); |
|||
} |
|||
|
|||
@Test |
|||
void testget1() { |
|||
String actual = map.get(null); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testget2() { |
|||
String actual = map.get("1"); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testget3() { |
|||
add3(); |
|||
String actual = map.get("1"); |
|||
assertEquals("Eins", actual); |
|||
actual = map.get("2"); |
|||
assertEquals("Zwei", actual); |
|||
actual = map.get("3"); |
|||
assertEquals("Drei", actual); |
|||
} |
|||
|
|||
@Test |
|||
void testremove1() { |
|||
String actual = map.remove(null); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testremove2() { |
|||
String actual = map.remove("1"); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testremove3() { |
|||
add3(); |
|||
String actual = map.remove(null); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testremove4() { |
|||
add3(); |
|||
String actual = map.remove("9"); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testremove5() { |
|||
add3(); |
|||
String actual = map.remove("1"); |
|||
assertEquals("Eins", actual); |
|||
actual = map.get("1"); |
|||
assertEquals(null, actual); |
|||
actual = map.remove("2"); |
|||
assertEquals("Zwei", actual); |
|||
actual = map.get("2"); |
|||
assertEquals(null, actual); |
|||
actual = map.remove("3"); |
|||
assertEquals("Drei", actual); |
|||
actual = map.get("3"); |
|||
assertEquals(null, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testcontains1() { |
|||
Boolean actual = map.contains(null); |
|||
assertEquals(false, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testcontains2() { |
|||
Boolean actual = map.contains("1"); |
|||
assertEquals(false, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testcontains3() { |
|||
add3(); |
|||
Boolean actual = map.contains("Eins"); |
|||
assertEquals(true, actual); |
|||
actual = map.contains("Zwei"); |
|||
assertEquals(true, actual); |
|||
actual = map.contains("Drei"); |
|||
assertEquals(true, actual); |
|||
actual = map.contains("xxx"); |
|||
assertEquals(false, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testsize1() { |
|||
int actual = map.size(); |
|||
assertEquals(0, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testsize2() { |
|||
add3(); |
|||
int actual = map.size(); |
|||
assertEquals(3, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testAddSize1() { |
|||
add3(); |
|||
add3(); |
|||
int actual = map.size(); |
|||
assertEquals(3, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testRemoveSize1() { |
|||
add3(); |
|||
map.remove("2"); |
|||
int actual = map.size(); |
|||
assertEquals(2, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testRemoveContains1() { |
|||
add3(); |
|||
map.remove("2"); |
|||
Boolean actual = map.contains("Eins"); |
|||
assertEquals(true, actual); |
|||
actual = map.contains("Zwei"); |
|||
assertEquals(false, actual); |
|||
actual = map.contains("Drei"); |
|||
assertEquals(true, actual); |
|||
actual = map.contains("xxx"); |
|||
assertEquals(false, actual); |
|||
} |
|||
|
|||
@Test |
|||
void testForAll1() { |
|||
map.forEach(null); |
|||
assertEquals(true, true); |
|||
} |
|||
|
|||
@Test |
|||
void testForAll2() { |
|||
map.forEach(action); |
|||
assertEquals(true, true); |
|||
} |
|||
|
|||
@Test |
|||
void testForAll3() { |
|||
add3(); |
|||
counter = 0; |
|||
result = new String(""); |
|||
map.forEach(action); |
|||
assertEquals(3, counter); |
|||
assertEquals(true, result.contains("Eins")); |
|||
assertEquals(true, result.contains("Zwei")); |
|||
assertEquals(true, result.contains("Drei")); |
|||
} |
|||
|
|||
protected void add3() { |
|||
map.put("1", "Eins"); |
|||
map.put("2", "Zwei"); |
|||
map.put("3", "Drei"); |
|||
} |
|||
} |
@ -0,0 +1,33 @@ |
|||
package testat; |
|||
|
|||
import java.util.function.Consumer; |
|||
|
|||
public interface ISimpleMap<K, V> { |
|||
|
|||
// speichert zu den Schlüssel k den Wert v, sofern beide nicht null sind (in
|
|||
// diesem Fall wird null zurück gegeben) .
|
|||
// Falls zu k bereits ein Wert w vorhanden ist, wird dieser durch v ersetzt. Der
|
|||
// alte
|
|||
// Wert w wird zurückgegebn. Falls zu k noch kein Wert gespeichert war, wird
|
|||
// null zurückgegeben
|
|||
V put(K k, V v); |
|||
|
|||
// Liefert den zum Schlüssel k gespeicherten Wert. Liefert null, falls k ==
|
|||
// null oder falls zu k kein Wert gespeichert war
|
|||
V get(K k); |
|||
|
|||
// Entfernt den zum Schlüssel k gespeicherten Wert v und liefert v zurück.
|
|||
// Liefert null, falls k ==
|
|||
// null oder falls zu k kein Wert gespeichert war
|
|||
V remove(K k); |
|||
|
|||
// Liefert true, falls der Wert v in der Map gespeichert ist
|
|||
boolean contains(V v); |
|||
|
|||
// wendet die Methode consumer.accept(v) auf alle in der Map gespeicherten Werte
|
|||
// an
|
|||
void forEach(Consumer<? super V> consumer); |
|||
|
|||
int size(); // Anzahl an in der Map gespeicherten Werte
|
|||
|
|||
} |
Loading…
Reference in new issue