From 574112031a7494b705641a62396a272390a09845 Mon Sep 17 00:00:00 2001 From: Ljudevit Bracko Date: Wed, 14 Nov 2018 17:16:35 +0100 Subject: [PATCH] Exercise 01 --- exercise/01/animal.cpp | 53 ++++++++++ exercise/01/animal.h | 57 +++++++++++ exercise/01/animals.vcxproj | 188 ++++++++++++++++++------------------ exercise/01/test.cpp | 12 ++- 4 files changed, 211 insertions(+), 99 deletions(-) create mode 100644 exercise/01/animal.cpp create mode 100644 exercise/01/animal.h diff --git a/exercise/01/animal.cpp b/exercise/01/animal.cpp new file mode 100644 index 0000000..fe367f3 --- /dev/null +++ b/exercise/01/animal.cpp @@ -0,0 +1,53 @@ +#include "animal.h" + +//---------------- Insects + +unsigned int insect::legs() const { + return 6U; +} + +std::wstring cockroach::species() const { + return L"cockroach"; +} + +//---------------- Birds + +unsigned bird::legs() const { + return 2U; +} + +std::wstring sparrow::species() const { + return L"sparrow"; +} + +//---------------- Spiders + +unsigned spider::legs() const { + return 8U; +} + +std::wstring tarantula::species() const { + return L"tarantula"; +} + +//---------------- leg_counter + +unsigned leg_counter::legs() const { + return legs_; +} + +std::wstring leg_counter::add_animal(const std::unique_ptr& concrete_animal) { + legs_ += concrete_animal->legs(); + return concrete_animal->species(); +} + +//---------------- animal_factory + +std::unique_ptr animal_factory(int of_type) { + switch (of_type) { + case 1: return std::make_unique(); + case 2: return std::make_unique (); + case 3: return std::make_unique (); + default: throw std::invalid_argument("Unknown animal type"); + } +} \ No newline at end of file diff --git a/exercise/01/animal.h b/exercise/01/animal.h new file mode 100644 index 0000000..4c8892e --- /dev/null +++ b/exercise/01/animal.h @@ -0,0 +1,57 @@ +#pragma once +#include +#include + +class animal { +public: + virtual std::wstring species() const = 0; + virtual unsigned int legs() const = 0; + virtual ~animal() = default; +}; + +//---------------- Insects + +class insect : public animal { + unsigned legs() const override; +}; + +class cockroach : public insect { +public: + std::wstring species() const override; +}; + +//---------------- Birds + +class bird : public animal { +public: + unsigned legs() const override; +}; + +class sparrow : public bird { +public: + std::wstring species() const override; +}; + +//---------------- Spiders + +class spider : public animal { +public: + unsigned legs() const override; +}; + +class tarantula : public spider { +public: + std::wstring species() const override; +}; + +//---------------- leg_counter + +class leg_counter { + unsigned int legs_ = 0; +public: + unsigned int legs() const; + std::wstring add_animal(const std::unique_ptr& concrete_animal); +}; + +//---------------- animal_factory +std::unique_ptr animal_factory(int of_type); \ No newline at end of file diff --git a/exercise/01/animals.vcxproj b/exercise/01/animals.vcxproj index 0c14cbf..b155a4b 100644 --- a/exercise/01/animals.vcxproj +++ b/exercise/01/animals.vcxproj @@ -1,95 +1,95 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {BB15329E-10D8-4740-94BC-64C50BA4EE12} - Win32Proj - array - 10.0.17134.0 - - - - DynamicLibrary - true - v141 - Unicode - false - - - DynamicLibrary - false - v141 - true - Unicode - false - - - - - - - - - - - - - true - - - true - - - - NotUsing - Level3 - Disabled - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;%(PreprocessorDefinitions) - true - - - Windows - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Level3 - NotUsing - MaxSpeed - true - true - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;%(PreprocessorDefinitions) - true - - - Windows - true - true - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + + {BB15329E-10D8-4740-94BC-64C50BA4EE12} + Win32Proj + array + 10.0.17134.0 + + + + DynamicLibrary + true + v141 + Unicode + false + + + DynamicLibrary + false + v141 + true + Unicode + false + + + + + + + + + + + + + true + + + true + + + + NotUsing + Level3 + Disabled + ..\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) + + + + + Level3 + NotUsing + MaxSpeed + true + true + ..\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) + + + + + + + + + + + + \ No newline at end of file diff --git a/exercise/01/test.cpp b/exercise/01/test.cpp index f7f2c1f..3e3c34d 100644 --- a/exercise/01/test.cpp +++ b/exercise/01/test.cpp @@ -14,7 +14,8 @@ TEST_CLASS(test_animal_hierarchy) Assert::AreEqual(L"cockroach", a.species().c_str()); Assert::AreEqual(6u, a.legs()); } - TEST_METHOD(concrete_bird) + + TEST_METHOD(concrete_bird) { sparrow s; bird& b = s; @@ -23,16 +24,16 @@ TEST_CLASS(test_animal_hierarchy) Assert::AreEqual(2u, a.legs()); } - TEST_METHOD(concrete_spider) + TEST_METHOD(concrete_spider) { tarantula t; - spider& s = t; + spider& s = t; animal& a = t; Assert::AreEqual(L"tarantula", a.species().c_str()); Assert::AreEqual(8u, a.legs()); } - TEST_METHOD(legg_counter_different_animals) + TEST_METHOD(legg_counter_different_animals) { leg_counter lc; Assert::AreEqual(L"cockroach", lc.add_animal(animal_factory(1)).c_str()); @@ -40,7 +41,8 @@ TEST_CLASS(test_animal_hierarchy) Assert::AreEqual(L"tarantula", lc.add_animal(animal_factory(3)).c_str()); Assert::AreEqual(16u, lc.legs()); } - TEST_METHOD(legg_counter_same_animal) + + TEST_METHOD(legg_counter_same_animal) { leg_counter lc; lc.add_animal(animal_factory(2));