package com.limegroup.gnutella.downloader;
import java.util.Random;
import java.util.ArrayList;
import java.util.Iterator;
/** Returns pre-determined pseudorandom numbers. */
public class TestPredeterminedRandom extends Random {
/** Holds float values for nextFloat */
public Iterator /* of Float */floatIterator;
/** Holds int values for nextInt */
public Iterator /* of Integer */intIterator;
/** Holds long values for nextLong */
public Iterator /* of Long */longIterator;
/**
* Care must be taken not to attempt to take too many values out of
* floatIterator. This is just a test stub, so it's not a big deal that the
* method is very fragile.
*
* @return a float from floatIterator,
*/
public synchronized float nextFloat() {
Float ret = (Float) floatIterator.next();
return ret.floatValue();
}
/**
* Care must be taken not to attempt to take too many values out of
* floatIterator. This is just a test stub, so it's not a big deal that the
* method is very fragile.
*
* @return a float from floatIterator,
*/
public synchronized int nextInt() {
Integer ret = (Integer) intIterator.next();
return ret.intValue();
}
/**
* Care must be taken not to attempt to take too many values out of
* longIterator. This is just a test stub, so it's not a big deal that the
* method is very fragile.
*
* @return a long from longIterator
*/
public synchronized long nextLong() {
Long ret = (Long) longIterator.next();
return ret.longValue();
}
// /////// Mutators /////////////////////////
/**
* Sets the sequence of floats to be returned by nextFloat().
*/
public synchronized void setFloats(float[] floats) {
ArrayList /* of Float */floatList = new ArrayList();
for (int i = 0; i < floats.length; i++) {
// Check for conformity to the Random specification
if (floats[i] < 0.0f || floats[i] >= 1.0f) {
throw new IllegalArgumentException(
"Attempt to set float outside the legal "+
"range [0.0f 1.0f) :"+floats[i]);
}
floatList.add(new Float(floats[i]));
}
floatIterator = floatList.iterator();
}
/**
* Sets the sequence of floats to be returned by nextFloat() to be only one
* float.
*/
public void setFloat(float f) {
float[] fArray = new float[1];
fArray[0] = f;
setFloats(fArray);
}
/**
* Sets the sequence of ints to be returned by nextInt().
*/
public synchronized void setInts(int[] ints) {
ArrayList /* of Integer */intList = new ArrayList();
for (int i = 0; i < ints.length; i++)
intList.add(new Integer(ints[i]));
intIterator = intList.iterator();
}
/**
* Sets the sequence of ints to be returned by nextInt() to include only one
* int.
*/
public void setInt(int i) {
int[] iArray = new int[1];
iArray[0] = i;
setInts(iArray);
}
/**
* Sets the sequence of longs to be returned by nextLong().
*/
public synchronized void setLongs(long[] longs) {
ArrayList /* of Long */longList = new ArrayList();
for (int i = 0; i < longs.length; i++)
longList.add(new Long(longs[i]));
longIterator = longList.iterator();
}
/** Sets the sequence of longs to be returned by
* nextLong() to be a single long.
*/
public void setLong(long l) {
long[] lArray = new long[1];
lArray[0] = l;
setLongs(lArray);
}
}