Skip to content

Commit 44259f6

Browse files
authored
Merge pull request #34 from Mitron57/Mitron57-patch-1
Mitron57 patch 1
2 parents ac538df + 6c0d85f commit 44259f6

File tree

7 files changed

+151
-115
lines changed

7 files changed

+151
-115
lines changed

cpp/CMakeLists.txt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
cmake_minimum_required (VERSION 3.19)
2+
3+
project (Platform.Setters)
4+
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
5+
conan_basic_setup(TARGETS)
6+
7+
add_library(${PROJECT_NAME}.Library INTERFACE)
8+
target_include_directories(${PROJECT_NAME}.Library INTERFACE ${PROJECT_NAME})
9+
target_link_libraries(${PROJECT_NAME}.Library INTERFACE CONAN_PKG::platform.interfaces)
10+
11+
if((DEFINED LINKS_PLATFORM_TESTS) AND (${LINKS_PLATFORM_TESTS}))
12+
add_executable (${PROJECT_NAME}.Tests ${PROJECT_NAME}.Tests/SetterTests.cpp)
13+
set_target_properties(${PROJECT_NAME}.Tests PROPERTIES CXX_STANDARD 20)
14+
target_link_libraries(${PROJECT_NAME}.Tests PUBLIC CONAN_PKG::gtest)
15+
target_link_libraries(${PROJECT_NAME}.Tests PUBLIC ${PROJECT_NAME}.Library)
16+
endif()
Lines changed: 47 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,47 @@
1-
namespace Platform::Setters::Tests
2-
{
3-
TEST_CLASS(SetterTests)
4-
{
5-
public: TEST_METHOD(ParameterlessConstructedSetterTest)
6-
{
7-
Setter<std::int32_t> setter = Setter<std::int32_t>();
8-
Assert::AreEqual(0, setter.Result);
9-
}
10-
11-
public: TEST_METHOD(ConstructedWithDefaultValueSetterTest)
12-
{
13-
Setter<std::int32_t> setter = Setter<std::int32_t>(9);
14-
Assert::AreEqual(9, setter.Result);
15-
}
16-
17-
public: TEST_METHOD(MethodsWithBooleanReturnTypeTest)
18-
{
19-
Setter<std::int32_t> setter = Setter<std::int32_t>();
20-
Assert::IsTrue(setter.SetAndReturnTrue(1));
21-
Assert::AreEqual(1, setter.Result);
22-
Assert::IsFalse(setter.SetAndReturnFalse(2));
23-
Assert::AreEqual(2, setter.Result);
24-
Assert::IsTrue(setter.SetFirstAndReturnTrue(std::int32_t[] { 3 }));
25-
Assert::AreEqual(3, setter.Result);
26-
Assert::IsFalse(setter.SetFirstAndReturnFalse(std::int32_t[] { 4 }));
27-
Assert::AreEqual(4, setter.Result);
28-
}
29-
30-
public: TEST_METHOD(MethodsWithIntegerReturnTypeTest)
31-
{
32-
Setter<std::int32_t, std::int32_t> setter = Setter<std::int32_t, std::int32_t>(1, 0);
33-
Assert::AreEqual(1, setter.SetAndReturnTrue(1));
34-
Assert::AreEqual(1, setter.Result);
35-
Assert::AreEqual(0, setter.SetAndReturnFalse(2));
36-
Assert::AreEqual(2, setter.Result);
37-
Assert::AreEqual(1, setter.SetFirstAndReturnTrue(std::int32_t[] { 3 }));
38-
Assert::AreEqual(3, setter.Result);
39-
Assert::AreEqual(0, setter.SetFirstAndReturnFalse(std::int32_t[] { 4 }));
40-
Assert::AreEqual(4, setter.Result);
41-
}
42-
};
43-
}
1+
#include <gtest/gtest.h>
2+
#include <Platform.Setters.h>
3+
4+
namespace Platform::Setters::Tests
5+
{
6+
TEST(SettersTests, ParameterlessConstructedSetterTest)
7+
{
8+
auto setter = Setter<std::int32_t>();
9+
ASSERT_EQ(0, setter.Result());
10+
}
11+
12+
TEST(SettersTests, ConstructedWithDefaultValueSetterTest)
13+
{
14+
auto setter = Setter<std::int32_t>(9);
15+
ASSERT_EQ(9, setter.Result());
16+
}
17+
18+
TEST(SettersTests, MethodsWithBooleanReturnTypeTest)
19+
{
20+
auto setter = Setter<std::int32_t>();
21+
ASSERT_TRUE(setter.SetAndReturnTrue(1));
22+
ASSERT_EQ(1, setter.Result());
23+
ASSERT_FALSE(setter.SetAndReturnFalse(2));
24+
ASSERT_EQ(2, setter.Result());
25+
auto array3 = std::to_array<std::int32_t>({3});
26+
ASSERT_TRUE(setter.SetFirstAndReturnTrue(array3));
27+
ASSERT_EQ(3, setter.Result());
28+
auto array4 = std::to_array<std::int32_t>({4});
29+
ASSERT_FALSE(setter.SetFirstAndReturnFalse(array4));
30+
ASSERT_EQ(4, setter.Result());
31+
}
32+
33+
TEST(SettersTests, MethodsWithIntegerReturnTypeTest)
34+
{
35+
auto setter = Setter<std::int32_t, std::int32_t>(1, 0);
36+
ASSERT_EQ(1, setter.SetAndReturnTrue(1));
37+
ASSERT_EQ(1, setter.Result());
38+
ASSERT_EQ(0, setter.SetAndReturnFalse(2));
39+
ASSERT_EQ(2, setter.Result());
40+
auto array3 = std::to_array<std::int32_t>({3});
41+
ASSERT_EQ(1, setter.SetFirstAndReturnTrue(array3));
42+
ASSERT_EQ(3, setter.Result());
43+
auto array4 = std::to_array<std::int32_t>({4});
44+
ASSERT_EQ(0, setter.SetFirstAndReturnFalse(array4));
45+
ASSERT_EQ(4, setter.Result());
46+
}
47+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#pragma once
2+
3+
#include <Platform.Interfaces.h>
4+
5+
#include "SetterBase.h"
6+
#include "Setter[TResult].h"
7+
#include "Setter[TResult, TDecision].h"

cpp/Platform.Setters/SetterBase.h

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1-
namespace Platform::Setters
2-
{
3-
template <typename ...> class SetterBase;
4-
template <typename TResult> class SetterBase<TResult> : public ISetter<TResult>
5-
{
6-
protected: TResult _result = 0;
7-
8-
public: TResult Result() { return _result; }
9-
10-
protected: SetterBase() { }
11-
12-
protected: SetterBase(TResult defaultValue) { _result = defaultValue; }
13-
14-
public: void Set(TResult value) { _result = value; }
15-
};
16-
}
1+
namespace Platform::Setters
2+
{
3+
template <typename ...> class SetterBase;
4+
template <typename TResult> class SetterBase<TResult>
5+
{
6+
static_assert(std::default_initializable<TResult>);
7+
8+
protected: TResult _result {};
9+
10+
public: TResult Result() { return _result; }
11+
12+
protected: SetterBase() = default;
13+
14+
protected: explicit SetterBase(TResult defaultValue) { _result = defaultValue; }
15+
16+
public: void Set(TResult value) { _result = value; }
17+
18+
public: ~SetterBase() requires Interfaces::ISetter<decltype(*this), TResult> = default;
19+
};
20+
}
Lines changed: 45 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,45 @@
1-
namespace Platform::Setters
2-
{
3-
template <typename ...> class Setter;
4-
template <typename TResult, typename TDecision> class Setter<TResult, TDecision> : public SetterBase<TResult>
5-
{
6-
private: TDecision _trueValue = 0;
7-
private: TDecision _falseValue = 0;
8-
9-
public: Setter(TDecision trueValue, TDecision falseValue, TResult defaultValue)
10-
: SetterBase(defaultValue)
11-
{
12-
_trueValue = trueValue;
13-
_falseValue = falseValue;
14-
}
15-
16-
public: Setter(TDecision trueValue, TDecision falseValue) : this(trueValue, falseValue, 0) { }
17-
18-
public: Setter(TResult defaultValue) : SetterBase(defaultValue) { }
19-
20-
public: Setter() { }
21-
22-
public: TDecision SetAndReturnTrue(TResult value)
23-
{
24-
_result = value;
25-
return _trueValue;
26-
}
27-
28-
public: TDecision SetAndReturnFalse(TResult value)
29-
{
30-
_result = value;
31-
return _falseValue;
32-
}
33-
34-
public: TDecision SetFirstAndReturnTrue(IList<TResult> &list)
35-
{
36-
_result = list[0];
37-
return _trueValue;
38-
}
39-
40-
public: TDecision SetFirstAndReturnFalse(IList<TResult> &list)
41-
{
42-
_result = list[0];
43-
return _falseValue;
44-
}
45-
};
46-
}
1+
namespace Platform::Setters
2+
{
3+
template <typename ...> class Setter;
4+
template <typename TResult, typename TDecision> class Setter<TResult, TDecision> : public SetterBase<TResult>
5+
{
6+
using base = SetterBase<TResult>;
7+
private: TDecision _trueValue {};
8+
private: TDecision _falseValue {};
9+
10+
public: Setter(TDecision trueValue, TDecision falseValue, TResult defaultValue)
11+
: _trueValue(trueValue), _falseValue(falseValue), base(defaultValue)
12+
{
13+
}
14+
15+
public: Setter(TDecision trueValue, TDecision falseValue) : Setter(trueValue, falseValue, {}) { }
16+
17+
public: explicit Setter(TResult defaultValue) : base(defaultValue) { }
18+
19+
public: Setter() = default;
20+
21+
public: TDecision SetAndReturnTrue(TResult value)
22+
{
23+
base::_result = value;
24+
return _trueValue;
25+
}
26+
27+
public: TDecision SetAndReturnFalse(TResult value)
28+
{
29+
base::_result = value;
30+
return _falseValue;
31+
}
32+
33+
public: TDecision SetFirstAndReturnTrue(Interfaces::IArray<TResult> auto&& list)
34+
{
35+
base::_result = list[0];
36+
return _trueValue;
37+
}
38+
39+
public: TDecision SetFirstAndReturnFalse(Interfaces::IArray<TResult> auto&& list)
40+
{
41+
base::_result = list[0];
42+
return _falseValue;
43+
}
44+
};
45+
}
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
namespace Platform::Setters
2-
{
3-
template <typename ...> class Setter;
4-
template <typename TResult> class Setter<TResult> : public Setter<TResult, bool>
5-
{
6-
public: Setter(TResult defaultValue) : Setter<TResult, bool>(true, false, defaultValue) { }
7-
8-
public: Setter() : Setter<TResult, bool>(true, false) { }
9-
};
10-
}
1+
namespace Platform::Setters
2+
{
3+
template <typename ...> class Setter;
4+
template <typename TResult> class Setter<TResult> : public Setter<TResult, bool>
5+
{
6+
public: explicit Setter(TResult defaultValue) : Setter<TResult, bool>(true, false, defaultValue) { }
7+
8+
public: Setter() : Setter<TResult, bool>(true, false) { }
9+
};
10+
}

cpp/conanfile.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[requires]
2+
gtest/cci.20210126
3+
platform.interfaces/0.1.3
4+
5+
[generators]
6+
cmake

0 commit comments

Comments
 (0)