Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/cars-exception.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ jobs:
env:
path: build
steps:
- name: Install Catch2
run: |
sudo apt-get update
sudo apt-get install -y catch2
- name: Check out code
uses: actions/checkout@master
- name: Create build directory
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/cars-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ jobs:
env:
path: build
steps:
- name: Install Catch2
run: |
sudo apt-get update
sudo apt-get install -y catch2
- name: Check out code
uses: actions/checkout@master
- name: Create build directory
Expand All @@ -22,4 +26,4 @@ jobs:
run: |
chmod +x ../.github/workflows/check-tests.sh
../.github/workflows/check-tests.sh ../CMakeLists.txt
ctest -V
ctest -V
15 changes: 13 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.2)
cmake_minimum_required(VERSION 3.11.0)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(Cars)
Expand All @@ -13,8 +13,19 @@ set(SRC_LIST
PetrolCar.cpp
PetrolEngine.cpp
Car.cpp

)

find_package(Catch2)

add_executable(${PROJECT_NAME} ${SRC_LIST})
target_compile_options(${PROJECT_NAME} PUBLIC -Wall -Wpedantic -Wextra)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR})

enable_testing()
add_executable(${PROJECT_NAME}-ut test/Cars.ut.cpp )
target_compile_options(${PROJECT_NAME}-ut PRIVATE ${FLAGS})
target_compile_features(${PROJECT_NAME}-ut PRIVATE cxx_std_17)
#target_link_libraries(${PROJECT_NAME}-ut ${PROJECT_NAME}-lib Catch2::Catch2WithMain)
target_link_libraries(${PROJECT_NAME}-ut Catch2::Catch2WithMain)
add_test(NAME CarsHomeWorkTest COMMAND ${PROJECT_NAME}-ut)
20 changes: 15 additions & 5 deletions Car.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
#include "Car.hpp"
#include <iostream>

void Car::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
void Car::turnRight() { std::cout << __FUNCTION__ << std::endl; }
void Car::brake() { std::cout << __FUNCTION__ << std::endl; }
void Car::accelerate(int) { std::cout << __FUNCTION__ << std::endl; }
void Car::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
void Car::turnRight() { std::cout << __FUNCTION__ << std::endl; }
void Car::brake() { std::cout << __FUNCTION__ << std::endl; }
void Car::accelerate(int speed)
{

if (speed >=0 && speed < 301)
{

std::cout << __FUNCTION__ << std::endl;
}
else{
throw InvalidAccelerate("Acc out of allowed range 0-300 "+std::to_string(speed));
}
}
19 changes: 17 additions & 2 deletions Car.hpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
#pragma once
#include <iostream>
#include <stdexcept>

class Car
{
private:
/* data */
public:
Car(/* args */){};
virtual ~Car(){};
void turnLeft();
void turnRight();
void brake();
void accelerate(int speed);
virtual void refill() = 0;
virtual ~Car(){}
virtual void refill()=0;
};


class InvalidAccelerate: public std::logic_error
{
public:
InvalidAccelerate(const std::string& message):std::logic_error(message){};

// Override what() function

};
18 changes: 11 additions & 7 deletions ElectricCar.cpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
#include "ElectricCar.hpp"
#include <iostream>

ElectricCar::ElectricCar(ElectricEngine* engine)
ElectricCar::ElectricCar(ElectricEngine *engine)
: engine_(engine)
{
std::cout << __FUNCTION__ << std::endl;
}

ElectricCar::~ElectricCar() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::charge() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::changeEngine(ElectricEngine* ee) {
ElectricCar::~ElectricCar()
{
delete engine_;
engine_ = ee;
std::cout << __FUNCTION__ << std::endl;
}
void ElectricCar::refill() {
charge();

void ElectricCar::charge() { std::cout << __FUNCTION__ << std::endl; }
void ElectricCar::refill() { charge(); }
void ElectricCar::changeEngine(ElectricEngine *engine)
{
delete engine_;
engine_ = engine;
}
10 changes: 4 additions & 6 deletions ElectricCar.hpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
#pragma once
#include "Car.hpp"
#include "ElectricEngine.hpp"
#include "Car.hpp"

class ElectricCar : public virtual Car
class ElectricCar : virtual public Car
{
public:
ElectricCar(ElectricEngine* engine);
~ElectricCar();

void changeEngine(ElectricEngine* ee);
void charge();
void refill() override;

void changeEngine(ElectricEngine* engine);
private:
void charge();
ElectricEngine* engine_;
};
3 changes: 2 additions & 1 deletion ElectricEngine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ class ElectricEngine
{
public:
ElectricEngine(int power, int batteryCapacity);


private:
int power_; // in HP
int power_; // in HP
int batteryCapacity_; // in Ah
};
24 changes: 18 additions & 6 deletions HybridCar.cpp
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@

#include "HybridCar.hpp"
#include <iostream>

HybridCar::HybridCar(PetrolEngine* petrolEng, ElectricEngine* electricEng)
: ElectricCar(electricEng)
, PetrolCar(petrolEng)
HybridCar::HybridCar(PetrolEngine *petrolEng, ElectricEngine *electricEng)
: ElectricCar(electricEng), PetrolCar(petrolEng)

{
std::cout << __FUNCTION__ << std::endl;
}

HybridCar::~HybridCar() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::refill() {
HybridCar::~HybridCar()
{

std::cout << __FUNCTION__ << std::endl;
}
// void HybridCar::turnLeft() { std::cout << __FUNCTION__ << std::endl; }
// void HybridCar::turnRight() { std::cout << __FUNCTION__ << std::endl; }
// void HybridCar::brake() { std::cout << __FUNCTION__ << std::endl; }
// void HybridCar::accelerate(int) { std::cout << __FUNCTION__ << std::endl; }
// void HybridCar::charge() { std::cout << __FUNCTION__ << std::endl; }
// void HybridCar::refuel() { std::cout << __FUNCTION__ << std::endl; }
void HybridCar::refill()
{
ElectricCar::refill();
PetrolCar::refill();
}
}
14 changes: 12 additions & 2 deletions HybridCar.hpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
#pragma once
#include "ElectricCar.hpp"
#include "ElectricEngine.hpp"
#include "PetrolCar.hpp"
#include "PetrolEngine.hpp"
#include <iostream>
#include "ElectricCar.hpp"
#include "PetrolCar.hpp"


class HybridCar : public ElectricCar, public PetrolCar
{
public:
HybridCar(PetrolEngine* petrolEng, ElectricEngine* electricEng);
~HybridCar();
void refill() override;
// void turnLeft();
// void turnRight();
//void brake(){PetrolCar::brake();}
//void accelerate(int speed){ElectricCar::accelerate(speed);}
//void charge();
///oid refuel();

private:

};
Loading