#include #include "matador/object/schema.hpp" struct node {}; using namespace matador; struct person { virtual ~person() = default; template < typename Operator > void process(Operator &op) {} }; struct student final : person {}; struct teacher final : person {}; TEST_CASE("Test empty prototype tree", "[schema_node][empty]") { const object::schema tree; REQUIRE( tree.empty() ); } TEST_CASE("Test add type to prototype tree", "[schema_node][add]") { object::schema tree; REQUIRE( tree.empty() ); auto res = tree.attach("person"); REQUIRE( res.is_ok() ); res = tree.attach("student"); REQUIRE( res.is_ok() ); res = tree.attach("teacher"); REQUIRE( res.is_ok() ); REQUIRE( !tree.empty() ); REQUIRE( tree.size() == 3 ); } TEST_CASE("Test next and previous of schema node", "[schema_node][next][previous]") { object::schema tree; REQUIRE( tree.empty() ); auto res = tree.attach("person"); REQUIRE( res.is_ok() ); REQUIRE( tree.size() == 1 ); auto it = tree.begin(); REQUIRE( it->name() == "person" ); REQUIRE( (--it)->name() == "person" ); REQUIRE( ++it == tree.end() ); }