From e266fa5e98a3a0f68d0a053994d125fa77ce8f47 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Wed, 23 May 2018 23:57:09 -0700 Subject: [PATCH] Add test cases --- src/cpp-utils/CMakeLists.txt | 1 - src/cpp-utils/value_type/ConfigBuilder.cpp | 1 - src/cpp-utils/value_type/ConfigBuilder.h | 61 -------------- test/cpp-utils/value_type/ValueTypeTest.cpp | 89 +++++++++++++++++++-- 4 files changed, 84 insertions(+), 68 deletions(-) delete mode 100644 src/cpp-utils/value_type/ConfigBuilder.cpp delete mode 100644 src/cpp-utils/value_type/ConfigBuilder.h diff --git a/src/cpp-utils/CMakeLists.txt b/src/cpp-utils/CMakeLists.txt index db4b168d..c1f388a1 100644 --- a/src/cpp-utils/CMakeLists.txt +++ b/src/cpp-utils/CMakeLists.txt @@ -48,7 +48,6 @@ set(SOURCES system/time.cpp system/diskspace.cpp value_type/ValueType.cpp - value_type/ConfigBuilder.cpp ) add_library(${PROJECT_NAME} STATIC ${SOURCES}) diff --git a/src/cpp-utils/value_type/ConfigBuilder.cpp b/src/cpp-utils/value_type/ConfigBuilder.cpp deleted file mode 100644 index d538c561..00000000 --- a/src/cpp-utils/value_type/ConfigBuilder.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "ConfigBuilder.h" diff --git a/src/cpp-utils/value_type/ConfigBuilder.h b/src/cpp-utils/value_type/ConfigBuilder.h deleted file mode 100644 index d14f358f..00000000 --- a/src/cpp-utils/value_type/ConfigBuilder.h +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once -#ifndef MESSMER_CPPUTILS_VALUETYPE_CONFIGBUILDER_H_ -#define MESSMER_CPPUTILS_VALUETYPE_CONFIGBUILDER_H_ - -namespace cpputils { - -template class ValueType; - -template -struct ValueTypeConfig final { -private: - /* - * Accessors for building the ValueType class - */ - friend class ValueType; - - using underlying_type = underlyingType; - static constexpr bool value_access_enabled() { return valueAccessEnabled; } - static constexpr bool explicit_value_constructor_enabled() { return explicitValueConstructorEnabled; } - static constexpr bool increment_and_decrement_enabled() { return incrementAndDecrementEnabled; } - - -public: - /* - * Setters for builder pattern - */ - constexpr ValueTypeConfig - enable_value_access() { - static_assert(!valueAccessEnabled, "Can't call enable_value_access() twice"); - return {}; - } - - constexpr ValueTypeConfig - enable_explicit_value_constructor() { - static_assert(!explicitValueConstructorEnabled, "Can't call enable_explicit_value_constructor() twice"); - return {}; - } - - constexpr ValueTypeConfig - enable_increment_and_decrement_operators() { - static_assert(!incrementAndDecrementEnabled, "Can't call enable_increment_and_decrement_operators twice"); - return {}; - }; - - using type = ValueType; - -private: - constexpr ValueTypeConfig() {/* not meant for instantiation*/} -}; - -/** - * Start building a value type. - * tag: Some unique type to make sure the resulting value type is unique - * underlyingType: The type of the underlying values - */ -template -inline constexpr ValueTypeConfig valueType() { return {}; } - -} - -#endif diff --git a/test/cpp-utils/value_type/ValueTypeTest.cpp b/test/cpp-utils/value_type/ValueTypeTest.cpp index 1191cb3a..29ee4e22 100644 --- a/test/cpp-utils/value_type/ValueTypeTest.cpp +++ b/test/cpp-utils/value_type/ValueTypeTest.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -29,6 +28,10 @@ DEFINE_HASH_FOR_VALUE_TYPE(MyOrderedIdValueType); DEFINE_HASH_FOR_VALUE_TYPE(MyQuantityValueType); namespace { +/** + * Tests for IdValueType + */ + template struct IdValueTypeTest_constexpr_test { static constexpr Type test_constructor = Type(5); @@ -121,11 +124,27 @@ TYPED_TEST(IdValueTypeTest, UnorderedSet) { - +/** + * Tests for OrderedIdValueType + */ template struct OrderedIdValueTypeTest_constexpr_test { - // TODO + static_assert(Type(3) < Type(4), ""); + static_assert(!(Type(4) < Type(3)), ""); + static_assert(!(Type(3) < Type(3)), ""); + + static_assert(Type(4) > Type(3), ""); + static_assert(!(Type(3) > Type(4)), ""); + static_assert(!(Type(3) > Type(3)), ""); + + static_assert(Type(3) <= Type(4), ""); + static_assert(!(Type(4) <= Type(3)), ""); + static_assert(Type(3) <= Type(3), ""); + + static_assert(Type(4) >= Type(3), ""); + static_assert(!(Type(3) >= Type(4)), ""); + static_assert(Type(3) >= Type(3), ""); static constexpr bool success = true; }; @@ -136,7 +155,65 @@ template class OrderedIdValueTypeTest : public testing::Test {}; using OrderedIdValueTypeTest_types = testing::Types; TYPED_TEST_CASE(OrderedIdValueTypeTest, OrderedIdValueTypeTest_types); -// TODO Test cases for OrderedIdValueTypeTest +TYPED_TEST(OrderedIdValueTypeTest, LessThan) { + TypeParam a(3); + TypeParam b(3); + TypeParam c(4); + EXPECT_FALSE(a < a); + EXPECT_FALSE(a < b); + EXPECT_TRUE(a < c); + EXPECT_FALSE(b < a); + EXPECT_FALSE(b < b); + EXPECT_TRUE(b < c); + EXPECT_FALSE(c < a); + EXPECT_FALSE(c < b); + EXPECT_FALSE(c < c); +} + +TYPED_TEST(OrderedIdValueTypeTest, GreaterThan) { + TypeParam a(3); + TypeParam b(3); + TypeParam c(4); + EXPECT_FALSE(a > a); + EXPECT_FALSE(a > b); + EXPECT_FALSE(a > c); + EXPECT_FALSE(b > a); + EXPECT_FALSE(b > b); + EXPECT_FALSE(b > c); + EXPECT_TRUE(c > a); + EXPECT_TRUE(c > b); + EXPECT_FALSE(c > c); +} + +TYPED_TEST(OrderedIdValueTypeTest, LessOrEqualThan) { + TypeParam a(3); + TypeParam b(3); + TypeParam c(4); + EXPECT_TRUE(a <= a); + EXPECT_TRUE(a <= b); + EXPECT_TRUE(a <= c); + EXPECT_TRUE(b <= a); + EXPECT_TRUE(b <= b); + EXPECT_TRUE(b <= c); + EXPECT_FALSE(c <= a); + EXPECT_FALSE(c <= b); + EXPECT_TRUE(c <= c); +} + +TYPED_TEST(OrderedIdValueTypeTest, GreaterOrEqualThan) { + TypeParam a(3); + TypeParam b(3); + TypeParam c(4); + EXPECT_TRUE(a >= a); + EXPECT_TRUE(a >= b); + EXPECT_FALSE(a >= c); + EXPECT_TRUE(b >= a); + EXPECT_TRUE(b >= b); + EXPECT_FALSE(b >= c); + EXPECT_TRUE(c >= a); + EXPECT_TRUE(c >= b); + EXPECT_TRUE(c >= c); +} TYPED_TEST(OrderedIdValueTypeTest, Set) { std::set set; @@ -151,7 +228,9 @@ TYPED_TEST(OrderedIdValueTypeTest, Set) { - +/** + * Tests for QuantityValueType + */ template struct QuantityValueTypeTest_constexpr_test {