diff options
author | Johannes Stoelp <johannes.stoelp@gmail.com> | 2023-07-02 22:33:19 +0200 |
---|---|---|
committer | Johannes Stoelp <johannes.stoelp@gmail.com> | 2023-07-02 22:33:19 +0200 |
commit | d9743696562fc85643e016d778ee994f0b9296db (patch) | |
tree | 4cf08da0eb8569e227a412a6da45d1c476ffff78 /test/option.cc | |
download | cpp-utils-d9743696562fc85643e016d778ee994f0b9296db.tar.gz cpp-utils-d9743696562fc85643e016d778ee994f0b9296db.zip |
add initial state of bitfield and option
Diffstat (limited to 'test/option.cc')
-rw-r--r-- | test/option.cc | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/test/option.cc b/test/option.cc new file mode 100644 index 0000000..8697089 --- /dev/null +++ b/test/option.cc @@ -0,0 +1,89 @@ +#include <option.h> +#include <cstdlib> +#include <cstdio> + +struct Checker { + static unsigned cnt; + + Checker() { + ++cnt; + } + Checker(const Checker&) { + ++cnt; + } + Checker(Checker&&) { + ++cnt; + } + ~Checker() { + --cnt; + } +}; + +unsigned Checker::cnt = 0; + +int main() { + using option::option; + + auto check_cnt = [](unsigned expect) { + if (expect != Checker::cnt) { + std::printf("Checker: expect=%u cnt=%u\n", expect, Checker::cnt); + std::abort(); + } + + }; + + { + option<int> o1; + option<int> o2{::option::none{}}; + + assert(!o1.has_value()); + assert(!o2.has_value()); + } + + // Assume we start test with cnt=0. + check_cnt(0); + + { + option<Checker> o1(Checker{}); + // copy construct + option<Checker> o2 = o1; + // move construct + option<Checker> o3 = o1.take(); + + assert(!o1.has_value()); + assert(o2.has_value()); + assert(o3.has_value()); + + // move option + option<Checker> o4 = std::move(o2); + + assert(!o2.has_value()); + assert(o4.has_value()); + + // take reference to inner + auto x = o3.value(); + // take ownership of inner + auto y = o4.take(); + + assert(!o1.has_value()); + assert(!o2.has_value()); + assert(o3.has_value()); + assert(!o4.has_value()); + } + + // Expect to finish test with cnt=0. + check_cnt(0); + + { + option<Checker> o1; + assert(!o1.has_value()); + + o1.emplace(); + assert(o1.has_value()); + } + + // Expect to finish test with cnt=0. + check_cnt(0); + + return 0; +} |