Skip to content
Open
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
88 changes: 88 additions & 0 deletions exercise/01/color.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#include "stdafx.h"
#include "color.h"

color::color()
{
red = 0;
green = 0;
blue = 0;
}

color::color(const double red, const double green, const double blue)
{
set_red(red);
set_green(green);
set_blue(blue);
}

COLORREF color::get_color_ref() const
{
return (RGB(red * 255, green * 255, blue * 255));
}

double color::get_luminance() const
{
return 0.2126 * red + 0.7152 * green + 0.0722 * blue;
}


double color::get_red() const
{
return red;
}

double color::get_green() const
{
return green;
}

double color::get_blue() const
{
return blue;
}


void color::set_red(const double red)
{
this->red = get_valid_value(red);
}

void color::set_green(const double green)
{
this->green = get_valid_value(green);
}

void color::set_blue(const double blue)
{
this->blue = get_valid_value(blue);
}

double color::get_valid_value(const double value) const
{
if (value > 1)
{
return 1;
}

if (value < 0)
{
return 0;
}

return value;
}


bool operator==(const color& lhs, const color& rhs)
{
return lhs.get_red() == rhs.get_red()
&& lhs.get_green() == rhs.get_green()
&& lhs.get_blue() == rhs.get_blue();
}

bool operator!=(const color& lhs, const color& rhs)
{
return !(lhs.get_red() == rhs.get_red()
&& lhs.get_green() == rhs.get_green()
&& lhs.get_blue() == rhs.get_blue());
}
27 changes: 27 additions & 0 deletions exercise/01/color.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once
#include <windows.h>

class color
{
public:
color();
color(double, double, double);
~color() = default;
COLORREF get_color_ref() const;
double get_luminance() const;
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);
private:
double red;
double green;
double blue;
double get_valid_value(double value) const;
};

bool operator==(const color& lhs, const color& rhs);
bool operator!=(const color& lhs, const color& rhs);

31 changes: 31 additions & 0 deletions exercise/01/color_test.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2036
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 = {3223AE33-DEE3-41B0-A0F3-4E608BD3CE78}
EndGlobalSection
EndGlobal
6 changes: 3 additions & 3 deletions exercise/01/color_test.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Source Files\source">
<UniqueIdentifier>{3f0b361d-e959-4712-bd7f-b211a50b8b89}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\test">
<UniqueIdentifier>{a5701a66-1845-4643-b359-7bc01a47fe2d}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\precompiled">
<UniqueIdentifier>{ec9c9ba0-fde3-42a6-ad15-1d2221ab37fb}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\source">
<UniqueIdentifier>{72c35eb3-28cb-4cc5-89c7-97c6912d0a04}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="color_test.cpp">
Expand Down
66 changes: 66 additions & 0 deletions exercise/02/array.cpp
Original file line number Diff line number Diff line change
@@ -1 +1,67 @@
#include "array.h"
#include <stdexcept>

array::array()
{
n = 0;
p = nullptr;
}


array::array(const int size, const double value) : n(size), p(new double[n])
{
for (int i = 0; i < size; i++)
{
p[i] = value;
}
}


array::array(const array& obj) : n(0), p(nullptr)
{
*this = obj;
}


array::array(array&& obj) : n(obj.n), p(obj.p)
{
obj.n = 0;
obj.p = nullptr;
}

int array::size() const
{
return n;
}

double array::at(const int i) const
{
if (i > n || i < 0)
{
throw std::out_of_range("Array index out of range");
}

return p[i];
}

array& array::operator=(const array& obj)
{
if (this == &obj) return *this;
delete[] p;

n = obj.n;
p = new double[obj.n];

for (int i = 0; i < n; i++)
{
p[i] = obj.p[i];
}

return *this;
}

array::~array()
{
delete[] p;
p = nullptr;
}
11 changes: 10 additions & 1 deletion exercise/02/array.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
// do not use standard container as member or base class
class array
{
double* p;
int n;
double* p;
public:
array();
array(int size, double value);
array(const array& obj);
array(array&& obj);
array& operator=(const array& obj);
~array();
int size() const;
double at(int i) const;
};

25 changes: 25 additions & 0 deletions exercise/02/array.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2036
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 = {B655C418-5CF9-4743-824D-DF7A50AC49A7}
EndGlobalSection
EndGlobal
14 changes: 0 additions & 14 deletions exercise/02/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,73 +12,59 @@ 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<a.size(); ++i)
Assert::AreEqual(value, a.at(i));
*/
}

TEST_METHOD(array_index_invalid_large)
{
/*
array a(size, value);
auto func = [a]() { a.at(100); };
Assert::ExpectException<std::out_of_range>(func);
*/
}

TEST_METHOD(array_index_invalid_negative)
{
/*
array a(size, value);
auto func = [a]() { a.at(-2); };
Assert::ExpectException<std::out_of_range>(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));
*/
}

};
19 changes: 19 additions & 0 deletions exercise/03/point.cpp
Original file line number Diff line number Diff line change
@@ -1,2 +1,21 @@
#include "point.h"

bool point::operator==(const point& other) const
{
return this->x == other.x && this->y == other.y;
}

bool point::operator!=(const point& other) const
{
return !(*this == other);
}

bool point::operator<(const point& other) const
{
if (x == other.x)
{
return y < other.y;
}

return x < other.x;
}
14 changes: 14 additions & 0 deletions exercise/03/point.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#pragma once

class point
{
public:
point() = default;
point(int x, int y) : x(x), y(y) {};
bool operator==(const point&) const;
bool operator!=(const point&) const;
bool operator<(const point&) const;
private:
int x;
int y;
};
Loading