import org.cowboycoders.turbotrainers.bushido.brake.BrakeModel;
import org.cowboycoders.turbotrainers.bushido.brake.SpeedResistancePowerMapper;
import org.cowboycoders.turbotrainers.bushido.brake.TargetSlopeModel;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
*
*/
/**
* @author doug
*
* Basic test of polynomial speed-resistance map using some known values
*/
public class SpeedResistancePowerMapperTest {
//Container for brake data
private BrakeModel dataModel = new TargetSlopeModel();
private SpeedResistancePowerMapper speedResistancePowerMapper = new SpeedResistancePowerMapper();
/**
* Test method for
* {@link org.cowboycoders.turbotrainers.bushido.brake.SpeedResistanceMapper#getBrakeResistanceFromPolynomialFit()}.
*/
@Test
public void testGetBrakeResistanceFromPolynomialFit() {
this.speedResistancePowerMapper.start(dataModel);
double resistance;
//Big Mig is back and he's doing a time trial; we expect a very hard resistance (500)
dataModel.setPower(600);
dataModel.setVirtualSpeed(45);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(500, resistance, 10);
//Big Mig is powering up a hill. Should be even harder to force the wheel speed down (750)
dataModel.setPower(600);
dataModel.setVirtualSpeed(25);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(750, resistance, 10);
//Big Mig is descending. Should be easier than the time trail to get wheel speed up (322)
dataModel.setPower(600);
dataModel.setVirtualSpeed(65);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(322, resistance, 10);
//Sir Chris Hoy. Should be at the upper limit (1000)
dataModel.setPower(2483);
dataModel.setVirtualSpeed(65);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(1000, resistance, 10);
//A feeble effort. Should be at the lower limit (250)
dataModel.setPower(50);
dataModel.setVirtualSpeed(10);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(250, resistance, 10);
//Chris Hoy going backwards on a fixie. Should be at the upper limit (1000)
dataModel.setPower(2483);
dataModel.setVirtualSpeed(-10);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(1000, resistance, 10);
//Pre-ride faffing. The lowest limit.
dataModel.setPower(0);
dataModel.setVirtualSpeed(0);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(250, resistance, 10);
//Going slowly up a very steep hill - should default to lower limit
dataModel.setPower(200);
dataModel.setVirtualSpeed(8);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(250, resistance, 10);
//Going fast up a hill - should be hard but
//FIXME Is this off the surface fit? It is very hard.
dataModel.setPower(350);
dataModel.setVirtualSpeed(8);
resistance = speedResistancePowerMapper.getBrakeResistanceFromSurfaceFit();
assertEquals(1000, resistance, 10);
}
}