|
From: Nat P. <np...@us...> - 2002-08-14 13:56:27
|
Update of /cvsroot/mockobjects/no-stone-unturned/src/nostone/random
In directory usw-pr-cvs1:/tmp/cvs-serv8595/src/nostone/random
Added Files:
DefaultWeatherRandom.java MockRandom.java
MockWeatherRandom.java Weather.java WeatherRandom.java
WeatherRandomTest.java WeatherTest.java
Log Message:
Source code examples for random chapter.
--- NEW FILE: DefaultWeatherRandom.java ---
package nostone.random;
import java.util.Random;
public class DefaultWeatherRandom
implements WeatherRandom
{
static final double CHANCE_OF_RAIN = 0.2;
static final double MIN_TEMPERATURE = 20;
static final double MAX_TEMPERATURE = 30;
static final double TEMPERATURE_RANGE = (MAX_TEMPERATURE-MIN_TEMPERATURE);
private Random _rng;
public DefaultWeatherRandom( Random rng ) {
_rng = rng;
}
public boolean nextIsRaining() {
return _rng.nextDouble() < CHANCE_OF_RAIN;
}
public double nextTemperature() {
return MIN_TEMPERATURE + _rng.nextDouble() * TEMPERATURE_RANGE;
}
}
--- NEW FILE: MockRandom.java ---
package nostone.random;
import java.util.Random;
public class MockRandom
extends Random
{
private double nextDouble = 0.0;
public void setNextDouble( double d ) {
nextDouble = d;
}
public double nextDouble() {
return nextDouble;
}
}
--- NEW FILE: MockWeatherRandom.java ---
package nostone.random;
import com.mockobjects.ExpectationCounter;
public class MockWeatherRandom
implements WeatherRandom
{
private ExpectationCounter nextIsRainingCounter =
new ExpectationCounter("nextIsRaining");
private boolean nextIsRainingResult = false;
private ExpectationCounter nextTemperatureCounter =
new ExpectationCounter("nextTemperature");
private double nextTemperatureResult = 0.0;
public void setupNextIsRaining( boolean result ) {
nextIsRainingCounter.setExpected(1);
nextIsRainingResult = result;
}
public boolean nextIsRaining() {
nextIsRainingCounter.inc();
return nextIsRainingResult;
}
public void setupNextTemperature( double result ) {
nextTemperatureCounter.setExpected(1);
nextTemperatureResult = result;
}
public double nextTemperature() {
nextTemperatureCounter.inc();
return nextTemperatureResult;
}
}
--- NEW FILE: Weather.java ---
package nostone.random;
import java.util.Random;
public class Weather
{
private WeatherRandom random;
private boolean isRaining = false;
private double temperature = 0.0;
public Weather( WeatherRandom random ) {
this.random= random;
}
public boolean isRaining() {
return isRaining;
}
public double getTemperature() {
return temperature;
}
public void randomize() {
temperature = random.nextTemperature();
isRaining = random.nextIsRaining();
if( isRaining ) temperature *= 0.5;
}
}
--- NEW FILE: WeatherRandom.java ---
package nostone.random;
public interface WeatherRandom
{
boolean nextIsRaining();
double nextTemperature();
}
--- NEW FILE: WeatherRandomTest.java ---
package nostone.random;
import junit.framework.TestCase;
public class WeatherRandomTest extends TestCase {
public WeatherRandomTest(String test) {
super(test);
}
public void testNextIsRaining() {
MockRandom random = new MockRandom();
WeatherRandom weather_random = new DefaultWeatherRandom(random);
random.setNextDouble( 0.0 );
assertTrue( "is raining", weather_random.nextIsRaining() );
random.setNextDouble( DefaultWeatherRandom.CHANCE_OF_RAIN );
assertTrue( "is not raining", !weather_random.nextIsRaining() );
random.setNextDouble( 1.0 );
assertTrue( "is not raining", !weather_random.nextIsRaining() );
}
public void testNextTemperature() {
MockRandom random = new MockRandom();
WeatherRandom weather_random = new DefaultWeatherRandom(random);
random.setNextDouble( 0.0 );
assertEquals( "should be min temperature",
DefaultWeatherRandom.MIN_TEMPERATURE,
weather_random.nextTemperature(), 0.0 );
random.setNextDouble( 0.5 );
assertEquals( "should be average temperature",
0.5*(DefaultWeatherRandom.MIN_TEMPERATURE +
DefaultWeatherRandom.MAX_TEMPERATURE),
weather_random.nextTemperature(), 0.0 );
random.setNextDouble( 1.0 );
assertEquals( "should be max temperature",
DefaultWeatherRandom.MAX_TEMPERATURE,
weather_random.nextTemperature(), 0.0 );
}
}
--- NEW FILE: WeatherTest.java ---
package nostone.random;
import junit.framework.TestCase;
public class WeatherTest
extends TestCase
{
public WeatherTest( String test ) {
super(test);
}
public void testRandomRaining() {
MockWeatherRandom random;
Weather weather;
random = new MockWeatherRandom();
random.setupNextIsRaining(true);
weather = new Weather( random );
weather.randomize();
assertTrue( "is raining", weather.isRaining() );
random = new MockWeatherRandom();
random.setupNextIsRaining(false);
weather = new Weather( random );
weather.randomize();
assertTrue( "is not raining", !weather.isRaining() );
}
public void testRandomTemperatureSunny() {
final double TEMPERATURE = 20;
MockWeatherRandom random = new MockWeatherRandom();
random.setupNextIsRaining( false );
random.setupNextTemperature( TEMPERATURE );
Weather weather = new Weather( random );
weather.randomize();
assertEquals( "temperature",
TEMPERATURE, weather.getTemperature(), 0.0 );
}
public void testRandomTemperatureRaining() {
final double TEMPERATURE = 20;
MockWeatherRandom random = new MockWeatherRandom();
random.setupNextIsRaining( true );
random.setupNextTemperature( TEMPERATURE );
Weather weather = new Weather( random );
weather.randomize();
assertEquals( "temperature",
TEMPERATURE/2.0, weather.getTemperature(), 0.0 );
}
}
|