Commit 4e95d084 authored by Dominik Charousset's avatar Dominik Charousset

Fix behavior of result<unit>, close #652

parent c607aee9
...@@ -155,6 +155,14 @@ public: ...@@ -155,6 +155,14 @@ public:
error err; error err;
}; };
template <>
struct result<unit_t> : result<void> {
using super = result<void>;
using super::super;
};
template <class T> template <class T>
struct is_result : std::false_type {}; struct is_result : std::false_type {};
......
/******************************************************************************
* ____ _ _____ *
* / ___| / \ | ___| C++ *
* | | / _ \ | |_ Actor *
* | |___ / ___ \| _| Framework *
* \____/_/ \_|_| *
* *
* Copyright 2011-2018 Dominik Charousset *
* *
* Distributed under the terms and conditions of the BSD 3-Clause License or *
* (at your option) under the terms and conditions of the Boost Software *
* License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. *
* *
* If you did not receive a copy of the license files, see *
* http://opensource.org/licenses/BSD-3-Clause and *
* http://www.boost.org/LICENSE_1_0.txt. *
******************************************************************************/
#define CAF_SUITE unit
#include "caf/test/unit_test.hpp"
#include "caf/actor_system.hpp"
#include "caf/actor_system_config.hpp"
#include "caf/atom.hpp"
#include "caf/event_based_actor.hpp"
#include "caf/scoped_actor.hpp"
#include "caf/unit.hpp"
using namespace caf;
using unit_res_atom = atom_constant<atom("unitRes")>;
using void_res_atom = atom_constant<atom("voidRes")>;
using unit_raw_atom = atom_constant<atom("unitRaw")>;
using void_raw_atom = atom_constant<atom("voidRaw")>;
behavior testee(event_based_actor*) {
return {
[] (unit_res_atom) -> result<unit_t> { return unit; },
[] (void_res_atom) -> result<void> { return {}; },
[] (unit_raw_atom) -> unit_t { return unit; },
[] (void_raw_atom) -> void { }
};
}
CAF_TEST(unit_results) {
actor_system_config cfg;
actor_system sys{cfg};
scoped_actor self{sys};
auto aut = sys.spawn(testee);
atom_value as[] = {unit_res_atom::value, void_res_atom::value,
unit_raw_atom::value, void_raw_atom::value};
for (auto a : as) {
self->request(aut, infinite, a).receive(
[&] {
CAF_MESSAGE("actor under test correctly replied to " << to_string(a));
},
[&] (const error&) {
CAF_FAIL("actor under test failed at input " << to_string(a));
}
);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment