diff --git a/exercise/01/color.cpp b/exercise/01/color.cpp new file mode 100644 index 0000000..377741a --- /dev/null +++ b/exercise/01/color.cpp @@ -0,0 +1,66 @@ +#include "stdafx.h" +#include "color.h" + +color::color() +{ + r = 0; + g = 0; + b = 0; +} + +color::color(double red, double green, double blue) +{ + set_red(red); + set_green(green); + set_blue(blue); +} + +double color::get_red() const +{ + return r; +} + +double color::get_green() const +{ + return g; +} + +double color::get_blue() const +{ + return b; +} + +double clamp(double color_channel) +{ + return std::clamp(color_channel, 0.0, 1.0); +} + +void color::set_red(double red) +{ + r = clamp(red); +} + +void color::set_green(double green) +{ + g = clamp(green); +} + +void color::set_blue(double blue) +{ + b = clamp(blue); +} + +COLORREF color::get_color_ref() const +{ + return RGB(r * 255, g * 255, b * 255); +} + +double color::get_luminance() const +{ + return 0.2126*r + 0.7152*g + 0.0722*b; +} + +bool color::operator==(const color& other) const +{ + return r == other.r && g == other.g && b == other.b; +} \ No newline at end of file diff --git a/exercise/01/color.h b/exercise/01/color.h new file mode 100644 index 0000000..dccb2ee --- /dev/null +++ b/exercise/01/color.h @@ -0,0 +1,21 @@ +#pragma once + +class color +{ +private: + double r; + double g; + double b; +public: + color(); + color(double red, double green, double blue); + double get_red() const; + double get_green() const; + double get_blue() const; + void set_red(double red); + void set_green(double green); + void set_blue(double blue); + COLORREF get_color_ref() const; + double get_luminance() const; + bool operator==(const color& other) const; +}; diff --git a/exercise/01/color_test.sln b/exercise/01/color_test.sln new file mode 100644 index 0000000..61cfaaa --- /dev/null +++ b/exercise/01/color_test.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2050 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "color_test", "color_test.vcxproj", "{F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Debug|x64.ActiveCfg = Debug|x64 + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Debug|x64.Build.0 = Debug|x64 + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Debug|x86.ActiveCfg = Debug|Win32 + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Debug|x86.Build.0 = Debug|Win32 + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Release|x64.ActiveCfg = Release|x64 + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Release|x64.Build.0 = Release|x64 + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Release|x86.ActiveCfg = Release|Win32 + {F6408CAA-4C86-4D98-8D13-9AF4DF77D23B}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {B6F18144-76F1-4C62-AEFC-5AF50AEDF509} + EndGlobalSection +EndGlobal diff --git a/exercise/01/stdafx.h b/exercise/01/stdafx.h index 6027cdf..e96c844 100644 --- a/exercise/01/stdafx.h +++ b/exercise/01/stdafx.h @@ -2,3 +2,5 @@ #include #include "CppUnitTest.h" +#include +#include diff --git a/exercise/02/array.cpp b/exercise/02/array.cpp index 9247ffd..3d04176 100644 --- a/exercise/02/array.cpp +++ b/exercise/02/array.cpp @@ -1 +1,82 @@ +#include #include "array.h" + +array::array() +{ + p = nullptr; + n = 0; +} + +array::array(int size, double value) +{ + p = new double[size]; + for (int i = 0; i < size; ++i) + { + p[i] = value; + } + n = size; +} + +void array::copy_impl(const array& other) +{ + p = new double[other.n]; + for (int i = 0; i < other.n; i++) + { + p[i] = other.p[i]; + } + n = other.n; +} + +array::array(const array& other) +{ + if (this != &other) + { + copy_impl(other); + } +} + +array::array(array&& other) +{ + p = other.p; + n = other.n; + + other.p = nullptr; + other.n = 0; +} + +array::~array() +{ + delete[] p; + p = nullptr; + n = 0; +} + +int array::size() const +{ + return n; +} + + +void check_index_range(int index, int min, int max) +{ + if (index < min || index > max) + { + throw std::out_of_range("index is out of range"); + } +} + +double array::at(int index) const +{ + check_index_range(index, 0, n - 1); + return p[index]; +} + +array& array::operator=(const array& other) +{ + if (this != &other) + { + delete[] p; + copy_impl(other); + } + return *this; +} diff --git a/exercise/02/array.h b/exercise/02/array.h index 20489df..93862f7 100644 --- a/exercise/02/array.h +++ b/exercise/02/array.h @@ -1,7 +1,17 @@ // do not use standard container as member or base class class array { +private: double* p; int n; + void copy_impl(const array& other); public: + array(); + array(int size, double value); + array(const array& other); + array(array&& other); + ~array(); + int size() const; + double at(int index) const; + array& operator=(const array& other); }; diff --git a/exercise/02/array.sln b/exercise/02/array.sln new file mode 100644 index 0000000..60e06f1 --- /dev/null +++ b/exercise/02/array.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2050 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "array", "array.vcxproj", "{BB15329E-10D8-4740-94BC-64C50BA4EE12}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BB15329E-10D8-4740-94BC-64C50BA4EE12}.Debug|x86.ActiveCfg = Debug|Win32 + {BB15329E-10D8-4740-94BC-64C50BA4EE12}.Debug|x86.Build.0 = Debug|Win32 + {BB15329E-10D8-4740-94BC-64C50BA4EE12}.Release|x86.ActiveCfg = Release|Win32 + {BB15329E-10D8-4740-94BC-64C50BA4EE12}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4D6C71D3-37D1-47DA-A548-AF3841B529BC} + EndGlobalSection +EndGlobal diff --git a/exercise/02/test.cpp b/exercise/02/test.cpp index 1adae67..afe9366 100644 --- a/exercise/02/test.cpp +++ b/exercise/02/test.cpp @@ -12,73 +12,73 @@ TEST_CLASS(test_array) TEST_METHOD(array_default_constructor) { - /* + array a; Assert::AreEqual(0, a.size()); - */ + } TEST_METHOD(array_constructor) { - /* + array a(size, value); Assert::AreEqual(size, a.size()); for(int i=0; i(func); - */ + } TEST_METHOD(array_index_invalid_negative) { - /* + array a(size, value); auto func = [a]() { a.at(-2); }; Assert::ExpectException(func); - */ + } TEST_METHOD(array_assignment) { - /* + array a(size, value); array b; b = a; Assert::AreEqual(size, b.size()); for (int i = 0; i < b.size(); ++i) Assert::AreEqual(value, b.at(i)); - */ + } TEST_METHOD(array_copy_constructor) { - /* + array a(size, value); array b(a); Assert::AreEqual(size, b.size()); for (int i = 0; i < b.size(); ++i) Assert::AreEqual(value, b.at(i)); - */ + } TEST_METHOD(array_move_constructor) { - /* + array a(size, value); array b = std::move(a); Assert::AreEqual(0, a.size()); Assert::AreEqual(size, b.size()); for (int i = 0; i < b.size(); ++i) Assert::AreEqual(value, b.at(i)); - */ + } }; diff --git a/exercise/03/operators.sln b/exercise/03/operators.sln new file mode 100644 index 0000000..bc81141 --- /dev/null +++ b/exercise/03/operators.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2050 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "operators", "operators.vcxproj", "{86A75A8D-048F-4B18-A466-A62C44E92490}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {86A75A8D-048F-4B18-A466-A62C44E92490}.Debug|x86.ActiveCfg = Debug|Win32 + {86A75A8D-048F-4B18-A466-A62C44E92490}.Debug|x86.Build.0 = Debug|Win32 + {86A75A8D-048F-4B18-A466-A62C44E92490}.Release|x86.ActiveCfg = Release|Win32 + {86A75A8D-048F-4B18-A466-A62C44E92490}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4EC4BD2E-8BEF-4E10-935E-C5B239BA91E6} + EndGlobalSection +EndGlobal diff --git a/exercise/03/point.cpp b/exercise/03/point.cpp index 5c7c45f..6d62804 100644 --- a/exercise/03/point.cpp +++ b/exercise/03/point.cpp @@ -1,2 +1,28 @@ #include "point.h" +point::point() +{ + x = 0; + y = 0; +} + +point::point(int x, int y) +{ + this->x = x; + this->y = y; +} + +bool point::operator==(const point& other) const +{ + return x == other.x && y == other.y; +} + +bool point::operator!=(const point& other) const +{ + return !(*this == other); +} + +bool point::operator<(const point& other) const +{ + return x < other.x || y < other.y; +} \ No newline at end of file diff --git a/exercise/03/point.h b/exercise/03/point.h index e69de29..51273a0 100644 --- a/exercise/03/point.h +++ b/exercise/03/point.h @@ -0,0 +1,13 @@ + +class point +{ +private: + int x; + int y; +public: + point(); + point(int x, int y); + bool operator==(const point& other) const; + bool operator!=(const point& other) const; + bool operator<(const point& other) const; +}; \ No newline at end of file diff --git a/exercise/03/test.cpp b/exercise/03/test.cpp index d8e6669..b40cf5d 100644 --- a/exercise/03/test.cpp +++ b/exercise/03/test.cpp @@ -9,30 +9,30 @@ TEST_CLASS(test_1_operators) TEST_METHOD(point_default_constructor) { - /* + Assert::IsTrue(point(0, 0) == point()); - */ + } TEST_METHOD(points_equal) { - /* + Assert::IsTrue(point(1, 2) == point(1, 2)); Assert::IsTrue(point(-12, -34) == point(-12, -34)); - */ + } TEST_METHOD(points_not_equal) { - /* + Assert::IsTrue(point(1, 2) != point(2, 1)); Assert::IsTrue(point(-1, -2) != point(1, 2)); - */ + } TEST_METHOD(points_sorted_by_first_coordinate_then_second) { - /* + Assert::IsTrue(point(1, 2) < point(1, 3)); Assert::IsTrue(point(1, 2) < point(2, 2)); Assert::IsFalse(point(1, 2) < point(1, 2)); - */ + } };