#include "fda.h" #include using namespace std::literals; namespace C = wg_containers; void c_test_func() { { C::falldown_array arr; arr.set(1, false, 0); arr.set(4, true, 2); arr.set(2, false, 1); arr.set(6, false, 3); arr.set(9, true, 4); arr.set(12, true, 5); // std::copy(arr.begin(), arr.end(), std::ostream_iterator(std::cout, ", ")); std::cout<<'\n'< val) { return '[' + std::to_string(val.val) + ',' + (val.variadic ? "T"s : "F"s) + ']'; }, [](C::backref_t b) { return "b " + std::to_string(-b.dist_var); }}, *begin) << ' '; } } std::cout << '\n' << std::flush; std::cerr << "[4] == " << arr[4] << '\n'; std::cout << "info(4) == " << arr.info(4) << '\n'; std::cerr << "[11] == " << arr[11] << '\n'; std::cout << "info(11) == " << arr.info(11) << '\n'; std::cerr << "[16] == " << arr[16] << '\n'; std::cout << "info(16) == " << arr.info(16) << '\n'; assert(arr[4] == 2); assert(arr[11] == 4); assert(arr[16] == 5); try { std::cerr << "[3] == " << arr[3] << '\n'; } catch (const std::out_of_range&) { std::cerr << "illegal lookup\n"; } catch (...) { assert(false); } std::cout << "info(3) == " << arr.info(3) << '\n'; try { std::cerr << "[7] == " << arr[7] << '\n'; } catch (const std::out_of_range&) { std::cerr << "illegal lookup\n"; } catch (...) { assert(false); } std::cout << "info(7) == " << arr.info(7) << '\n'; } { C::falldown_array arr; arr.set(1, false, 0); arr.set(4, true, 2); arr.set(2, false, 1); arr.set(6, false, 3); arr.set(10, false, 6); arr.set(9, true, 4); arr.set(12, true, 5); // std::copy(arr.begin(), arr.end(), std::ostream_iterator(std::cout)); { auto begin = arr.cbegin().get(); const auto end = arr.cend().get(); for (int idx = 0; begin != end; ++begin) { std::cout << idx++ << ": " << std::visit( kblib::visitor{ [](C::tombstone_t /*unused*/) { return "X"s; }, [](C::el_impl val) { return '[' + std::to_string(val.val) + ',' + (val.variadic ? "T"s : "F"s) + ']'; }, [](C::backref_t b) { return "b " + std::to_string(-b.dist_var); }}, *begin) << ' '; } } std::cout << '\n' << std::flush; std::cerr << "[4] == " << arr[4] << '\n'; std::cout << "info(4) == " << arr.info(4) << '\n'; std::cerr << "[11] == " << arr[11] << '\n'; std::cout << "info(11) == " << arr.info(11) << '\n'; std::cerr << "[16] == " << arr[16] << '\n'; std::cout << "info(16) == " << arr.info(16) << '\n'; try { std::cerr << "[3] == " << arr[3] << '\n'; } catch (const std::out_of_range&) { std::cerr << "illegal lookup\n"; } catch (...) { assert(false); } std::cout << "info(3) == " << arr.info(3) << '\n'; std::cerr << "[7] == " << arr[7] << '\n'; std::cout << "info(7) == " << arr.info(7) << '\n'; assert(arr[4] == 2); assert(arr[11] == 4); assert(arr[16] == 5); assert(arr[7] == 2); } }