feat: add into method to Option and Result + macro try_unwrap
This commit is contained in:
@ -19,6 +19,10 @@ static Stat g_stat = {0,0};
|
||||
throw Error(ro::sfmt("ASSERT ERROR %s:%d: " fmt, __FILE__, __LINE__, ##__VA_ARGS__)); \
|
||||
}
|
||||
|
||||
class TestError: public Error {
|
||||
public:
|
||||
TestError(const char *s) : Error(s){};
|
||||
};
|
||||
|
||||
void test(const char* desc, const std::function<void()>& lambda)
|
||||
{
|
||||
@ -36,6 +40,13 @@ void test(const char* desc, const std::function<void()>& lambda)
|
||||
g_stat.total++;
|
||||
}
|
||||
|
||||
Result<int, Error> test_macro(const Result<int, Error> & target)
|
||||
{
|
||||
int a;
|
||||
try_unwrap(a,target);
|
||||
return a;
|
||||
}
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
test("Test Option", [](){
|
||||
@ -231,6 +242,20 @@ int main(int argc, char const *argv[])
|
||||
assert(x.zip(z).is_none(), "Unexpected value");
|
||||
|
||||
});
|
||||
|
||||
test("Option Into", [](){
|
||||
Option<int> x = 2;
|
||||
int y = 0;
|
||||
bool v = x.into(y);
|
||||
assert(v, "Return value shall be true");
|
||||
assert(y == 2, "Unexpected value");
|
||||
|
||||
x = None(int);
|
||||
v = x.into(y);
|
||||
y = 0;
|
||||
assert(v == false, "Return value shall not be true");
|
||||
assert(y == 0, "Unexpected value");
|
||||
});
|
||||
|
||||
test("Test Result", []{
|
||||
Result<string, Error> ret = ERR("Error");
|
||||
@ -263,6 +288,7 @@ int main(int argc, char const *argv[])
|
||||
catch(Error e)
|
||||
{
|
||||
assert(true, "%s", e.what());
|
||||
cout << e.what() << endl;
|
||||
}
|
||||
});
|
||||
|
||||
@ -396,5 +422,27 @@ int main(int argc, char const *argv[])
|
||||
});
|
||||
|
||||
|
||||
test("Result Into", [](){
|
||||
Result<int, Error> x = 2;
|
||||
int y = 0;
|
||||
bool v = x.into(y);
|
||||
assert(v, "Return value shall be true");
|
||||
assert(y == 2, "Unexpected value");
|
||||
|
||||
x = ERR("Error");
|
||||
v = x.into(y);
|
||||
y = 0;
|
||||
assert(v == false, "Return value shall not be true");
|
||||
assert(y == 0, "Unexpected value");
|
||||
});
|
||||
|
||||
test("try_unwrap", [](){
|
||||
Result<int, Error> x = test_macro(Result<int, Error>(10));
|
||||
assert(x == 10, "Unexpected value");
|
||||
|
||||
x = test_macro(Result<int, Error>(Error("Hello")));
|
||||
assert(x.is_err(), "Unexpected value");
|
||||
});
|
||||
|
||||
cout << "REPORT: " << g_stat.passed << " tests passed / " << g_stat.total << " tests." << endl;
|
||||
}
|
||||
|
Reference in New Issue
Block a user