#include "test.h"
#include <panda/optional.h>

TEST_CASE("optional", "[optional]") {
    optional<int> def;
    CHECK_FALSE(def);

    optional<int> ini = 1;
    CHECK(ini);
    CHECK(ini.value() == 1);

    auto x2 = [](int v) { return double(v*2);};

    CHECK(def.and_then(x2) == 0);
    CHECK(ini.and_then(x2) == 2);

    optional<double> od = def.transform(x2);
    CHECK_FALSE(od);
    optional<double> oi = ini.transform(x2);
    CHECK(oi);
    CHECK(oi == 2);

    CHECK(def.or_else([]{return 4;}) == 4);
    CHECK(ini.or_else([]{return 4;}) == 1);
}