Parcourir la source

[3587] Extended OptionalValue with equality and assignment operators.

Marcin Siodelski il y a 10 ans
Parent
commit
1da855a887
2 fichiers modifiés avec 57 ajouts et 0 suppressions
  1. 22 0
      src/lib/util/optional_value.h
  2. 35 0
      src/lib/util/tests/optional_value_unittest.cc

+ 22 - 0
src/lib/util/optional_value.h

@@ -91,6 +91,28 @@ public:
         return (specified_);
     }
 
+    /// @brief Specifies a new value value and marks it "specified".
+    ///
+    /// @param value New actual value.
+    void operator=(const T& value) {
+        specify(value);
+    }
+
+    /// @brief Equality operator.
+    ///
+    /// @param value Actual value to compare to.
+    bool operator==(const T& value) {
+        return (value_ == value);
+    }
+
+    /// @brief Inequality operator.
+    ///
+    /// @param value Actual value to compare to.
+    bool operator!=(const T& value) {
+        return (value_ != value);
+    }
+
+
 private:
     T value_;         ///< Encapsulated value.
     bool specified_;  ///< Flag which indicates if the value is specified.

+ 35 - 0
src/lib/util/tests/optional_value_unittest.cc

@@ -80,4 +80,39 @@ TEST(OptionalValueTest, specifyValue) {
     ASSERT_TRUE(value.isSpecified());
 }
 
+// This test checks if the assignment operator assignining an actual
+// value to the optional value works as expected.
+TEST(OptionalValueTest, assignValue) {
+    OptionalValue<int> value(10);
+    ASSERT_EQ(10, value.get());
+    ASSERT_FALSE(value.isSpecified());
+
+    // Set the new value and mark it "specified".
+    value = 111;
+    ASSERT_EQ(111, value.get());
+    ASSERT_TRUE(value.isSpecified());
+
+    // Specify another value. The value should be still "specified".
+    value = 1000;
+    ASSERT_EQ(1000, value.get());
+    ASSERT_TRUE(value.isSpecified());
+}
+
+// This test checks if the equality and inequality operators work
+// correctly for the optional value.
+TEST(OptionalValueTest, equalityOperators) {
+    OptionalValue<int> value(10);
+    ASSERT_EQ(10, value.get());
+    ASSERT_FALSE(value.isSpecified());
+
+    EXPECT_TRUE(value == 10);
+    EXPECT_FALSE(value != 10);
+
+    value = 123;
+    EXPECT_TRUE(value == 123);
+    EXPECT_FALSE(value != 123);
+}
+
+
+
 } // end of anonymous namespace