package net.sf.freecol.util.test; import java.util.ArrayList; import java.util.List; import java.util.Random; public class MockPseudoRandom extends Random { int pos; private List<Integer> setNumberList; private boolean cycleNumbers; private Random random; private final float scale = 1.0f / (float) Integer.MAX_VALUE; public MockPseudoRandom(){ this(new ArrayList<Integer>(),false); } public MockPseudoRandom(List<Integer> setNumbers,boolean toCycle){ pos = 0; setNumberList = setNumbers; cycleNumbers = toCycle; random = null; } public void setNextNumbers(List<Integer> setNumbers,boolean toCycle){ pos = 0; setNumberList = setNumbers; cycleNumbers = toCycle; } private int getNext() { if (pos < setNumberList.size()) { int number = setNumberList.get(pos); pos++; return number; } if (cycleNumbers && !setNumberList.isEmpty()) { int number = setNumberList.get(0); pos = 1; return number; } if (random == null) { random = new Random(0); } return -1; } public int nextInt(int n) { int number = getNext(); if (number < 0 || number >= n) { System.err.println("MockPseudoRandom out of range: " + number); return random.nextInt(n); } return number; } public float nextFloat() { int number = getNext(); return (number < 0) ? random.nextFloat() : number * scale; } }