Job terrain #12

Merged
erns6604 merged 16 commits from job_terrain into main 2025-10-28 11:21:35 +01:00
2 changed files with 61 additions and 0 deletions
Showing only changes of commit 39846e575c - Show all commits

View File

@ -0,0 +1,24 @@
package Shared;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
public class LootTable<T> {
private Random random = new Random();
private final List<T> items = new ArrayList<>();
public LootTable(Random random) {
this.random = random;
}
public void addEntry(T entry, int weight) {
items.add(entry);
}
public T roll() {
return items.getFirst();
}
}

View File

@ -0,0 +1,37 @@
import Shared.LootTable;
import org.junit.jupiter.api.Test;
import java.util.Random;
import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class LootTableTest {
LootTable<String> defaultLootTable() {
LootTable<String> lootTable = new LootTable<>();
lootTable.addEntry("Stone", 90);
lootTable.addEntry("Iron", 10);
return lootTable;
}
@Test
void returns_an_item_was_added() {
LootTable<String> loot = defaultLootTable();
String result = loot.roll();
assertThat(result, anyOf(equalTo("Stone"), equalTo("Iron")));
}
void respects_weight_when_rolling() {
var mockRandom = mock(Random.class);
when(mockRandom.nextInt(anyInt())).thenReturn(94);
LootTable<String> loot = new LootTable<>(mockRandom);
loot.addEntry("Stone", 90);
loot.addEntry("Iron", 10);
String result = loot.roll();
assertThat(result, equalTo("Iron"));
}
}