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 ); } } |