Repository: mesos Updated Branches: refs/heads/master 64862a70c -> acb94b203
Created a Result(Try&) constructor for Result<T>. Try<T> doesn't have a default constructor and so it's not possible to have a Try<T> class member variable unless we initialize it with Error(). With this patch, we can instead have a Result<T> class member variable which is initialized to None() and can be assigned a Try<T> type. Review: https://reviews.apache.org/r/26955 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/acb94b20 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/acb94b20 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/acb94b20 Branch: refs/heads/master Commit: acb94b203581f1c0e1adcac7b5dc39d6eb880586 Parents: 64862a7 Author: Kapil Arya <[email protected]> Authored: Mon Oct 20 16:32:46 2014 -0700 Committer: Niklas Q. Nielsen <[email protected]> Committed: Mon Oct 20 16:32:46 2014 -0700 ---------------------------------------------------------------------- 3rdparty/libprocess/3rdparty/Makefile.am | 1 + 3rdparty/libprocess/3rdparty/stout/Makefile.am | 1 + .../3rdparty/stout/include/stout/result.hpp | 14 +++--- .../3rdparty/stout/tests/result_tests.cpp | 47 ++++++++++++++++++++ 4 files changed, 58 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/acb94b20/3rdparty/libprocess/3rdparty/Makefile.am ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/3rdparty/Makefile.am b/3rdparty/libprocess/3rdparty/Makefile.am index 256df0b..895ac6b 100644 --- a/3rdparty/libprocess/3rdparty/Makefile.am +++ b/3rdparty/libprocess/3rdparty/Makefile.am @@ -167,6 +167,7 @@ stout_tests_SOURCES = \ $(STOUT)/tests/protobuf_tests.pb.cc \ $(STOUT)/tests/protobuf_tests.pb.h \ $(STOUT)/tests/protobuf_tests.proto \ + $(STOUT)/tests/result_tests.cpp \ $(STOUT)/tests/os/sendfile_tests.cpp \ $(STOUT)/tests/os/signals_tests.cpp \ $(STOUT)/tests/set_tests.cpp \ http://git-wip-us.apache.org/repos/asf/mesos/blob/acb94b20/3rdparty/libprocess/3rdparty/stout/Makefile.am ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/3rdparty/stout/Makefile.am b/3rdparty/libprocess/3rdparty/stout/Makefile.am index 125b3fa..16cab5a 100644 --- a/3rdparty/libprocess/3rdparty/stout/Makefile.am +++ b/3rdparty/libprocess/3rdparty/stout/Makefile.am @@ -39,6 +39,7 @@ EXTRA_DIST = \ tests/protobuf_tests.pb.cc \ tests/protobuf_tests.pb.h \ tests/protobuf_tests.proto \ + tests/result_tests.cpp \ tests/set_tests.cpp \ tests/some_tests.cpp \ tests/strings_tests.cpp \ http://git-wip-us.apache.org/repos/asf/mesos/blob/acb94b20/3rdparty/libprocess/3rdparty/stout/include/stout/result.hpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/result.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/result.hpp index 631f126..96b0f36 100644 --- a/3rdparty/libprocess/3rdparty/stout/include/stout/result.hpp +++ b/3rdparty/libprocess/3rdparty/stout/include/stout/result.hpp @@ -24,6 +24,7 @@ #include <stout/none.hpp> #include <stout/option.hpp> #include <stout/some.hpp> +#include <stout/try.hpp> template <typename T> class Result @@ -69,11 +70,14 @@ public: : state(ERROR), t(NULL), message(error.message) {} Result(const Result<T>& that) - { - state = that.state; - t = (that.t == NULL ? NULL : new T(*that.t)); - message = that.message; - } + : state(that.state), + t(that.t == NULL ? NULL : new T(*that.t)), + message(that.message) {} + + Result(const Try<T>& _try) + : state(_try.isSome() ? SOME : ERROR), + t(_try.isSome() ? new T(_try.get()) : NULL), + message(_try.isSome() ? "" : _try.error()) {} ~Result() { http://git-wip-us.apache.org/repos/asf/mesos/blob/acb94b20/3rdparty/libprocess/3rdparty/stout/tests/result_tests.cpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/3rdparty/stout/tests/result_tests.cpp b/3rdparty/libprocess/3rdparty/stout/tests/result_tests.cpp new file mode 100644 index 0000000..0a38106 --- /dev/null +++ b/3rdparty/libprocess/3rdparty/stout/tests/result_tests.cpp @@ -0,0 +1,47 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <gmock/gmock.h> + +#include <stout/error.hpp> +#include <stout/gtest.hpp> +#include <stout/result.hpp> +#include <stout/try.hpp> + +// Verify Try to Result conversion. +TEST(ResultTest, TryToResultConversion) +{ + // Test with implicit Result(Try&) contructor. + Try<int> foo = 5; + Result<int> bar = foo; + EXPECT_SOME(bar); + EXPECT_EQ(bar.get(), foo.get()); + + // Test with explicit constructor. + Result<int> result = None(); + result = Result<int>(foo); + EXPECT_SOME(result); + EXPECT_EQ(result.get(), foo.get()); + + // Test Try with error state. + Try<int> tryError(Error("Invalid Try")); + Result<int> resultError = tryError; + EXPECT_ERROR(resultError); + EXPECT_EQ(tryError.error(), resultError.error()); + + // Test Try with error state with explicit constructor. + result = Result<int>(tryError); + EXPECT_ERROR(result); + EXPECT_EQ(result.error(), tryError.error()); +}
