1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
// This file is part of CAF, the C++ Actor Framework. See the file LICENSE in
// the main distribution directory for license terms and copyright or visit
// https://github.com/actor-framework/actor-framework/blob/master/LICENSE.
#define CAF_SUITE optional
#include "caf/optional.hpp"
#include "core-test.hpp"
using namespace caf;
namespace {
struct qwertz {
qwertz(int x, int y) : x_(x), y_(y) {
// nop
}
int x_;
int y_;
};
bool operator==(const qwertz& lhs, const qwertz& rhs) {
return lhs.x_ == rhs.x_ && lhs.y_ == rhs.y_;
}
} // namespace
CAF_TEST(empty) {
optional<int> x;
optional<int> y;
CHECK(x == y);
CHECK(!(x != y));
}
CAF_TEST(equality) {
optional<int> x = 42;
optional<int> y = 7;
CHECK(x != y);
CHECK(!(x == y));
}
CAF_TEST(ordering) {
optional<int> x = 42;
optional<int> y = 7;
CHECK(x > y);
CHECK(x >= y);
CHECK(y < x);
CHECK(y <= x);
CHECK(!(y > x));
CHECK(!(y >= x));
CHECK(!(x < y));
CHECK(!(x <= y));
CHECK(x < 4711);
CHECK(4711 > x);
CHECK(4711 >= x);
CHECK(!(x > 4711));
CHECK(!(x >= 4711));
CHECK(!(4211 < x));
CHECK(!(4211 <= x));
}
CAF_TEST(custom_type_none) {
optional<qwertz> x;
CHECK(x == none);
}
CAF_TEST(custom_type_engaged) {
qwertz obj{1, 2};
optional<qwertz> x = obj;
CHECK(x != none);
CHECK(obj == x);
CHECK(x == obj);
CHECK(obj == *x);
CHECK(*x == obj);
}
|