Open alexey-malov opened 5 years ago
/*set possible speed just for current gear*/
REQUIRE(true == car.SetGear(1));
REQUIRE(true == car.SetSpeed(19));
REQUIRE(false == car.SetGear(1));
REQUIRE(false == car.SetGear(2));
/*set impossible speed for current gear*/
REQUIRE(false == car.SetSpeed(31));
/*set impossible gear for current speed*/
REQUIRE(false == car.SetGear(2));
/*set speed to increase gear*/
REQUIRE(true == car.SetSpeed(20));
REQUIRE(true == car.SetGear(2));
/*set possible speed just for current gear*/
REQUIRE(true == car.SetSpeed(31));
/*reach max speed*/
REQUIRE(true == car.SetSpeed(50));
REQUIRE(true == car.SetGear(5));
REQUIRE(true == car.SetSpeed(150));
REQUIRE(false == car.SetSpeed(155));
/*decrease gear*/
REQUIRE(false == car.SetGear(4));
REQUIRE(true == car.SetSpeed(90));
REQUIRE(true == car.SetGear(4));
/*set negative speed*/
REQUIRE(false == car.SetSpeed(-100));
void ExpectOperationSuccess(SomeObj & obj, const function<bool(SomeObj & obj)> & op, int expectedProperty1, const string & expectedProperty2, ...)
{
BOOST_REQUIRE(op(obj)); // ожидаем, что операция вернет true (успех)
// Сравниваем состояние свойства объект с ожидаемым
BOOST_CHECK_EQUAL(obj.GetProperty1(), expectedProperty1);
BOOST_CHECK_EQUAL(obj.GetProperty2(), expectedProperty2);
...
}
void ExpectOperationFailure(const SomeObj & obj, const function<bool(SomeObj & obj)> & op);
{
auto clone(obj); // сделали клон объекта
BOOST_REQUIRE(!op(clone)); // ожидаем, что операция завершится неуспешно (передаем клон)
// проверяем, что после выполнения операции состояние клона не отличается от оригинала
// (операция в случае неудачи оставляет объект в состоянии, в котором он пребывал до операции)
BOOST_CHECK_EQUAL(clone.GetProperty1(), obj.GetProperty1());
BOOST_CHECK_EQUAL(clone.GetProperty2(), obj.GetProperty2());
...
}
Info
Engine state:ON, Gear:0, Speed:10, Direction:FORWARD
SetSpeed 9
Info
Engine state:ON, Gear:0, Speed:9, Direction:BACK
bool Car::GearCorrespondsToSpeed(const int gear) const
{
GearSpeed speedInterval = transmission.find(gear)->second;
return speedInterval.minSpeed == speedInterval.maxSpeed || Between(m_speed, speedInterval.minSpeed, speedInterval.maxSpeed);
}
[x] При движении задом должно быть запрещено включать переднюю (любую) передачу (что на нейтрали, что на задней передаче)
[x] Для этой ситуации должны быть написаны тесты
std::string EngineStateToString(const EngineState state) const;
std::string DirectionToString(const Direction direction) const;
enum EngineState
{
ON,
OFF
};
enum Direction
{
FORWARD,
BACK,
NONE
};
Engine state:ON, Gear:0, Speed:0, Direction:NONE
EngineOff
Failed to turn on engine. Engine is already active
Сценарий: Смена направления движения возможна только при полной остановке
Дано: автомобиль движущийся задом на нейтральной скорости
Когда: пытаемся включить переднюю передачу
Тогда: автомобиль сообщает об ошибке