tmp/tests/tree.cpp

58 lines
1.4 KiB
C++

#include "catch_tmp.h"
#include <tree.h>
using namespace tmp;
struct A {};
struct B {};
struct C {};
struct D {};
struct E {};
struct F {};
struct G {};
struct H {};
struct I {};
using T0 = Tree<>;
using T1 = Tree<A>;
using T2 = Tree<A, Tree<B>, Tree<C>>;
using T3 = Tree<A, Tree<B, Tree<C>, Tree<D>, Tree<E>>, Tree<F, Tree<G>>>;
using T4 = Tree<A,
Tree<B, Tree<C, Tree<D>, Tree<E>>>,
Tree<F, Tree<G, Tree<H>>>,
Tree<I>
>;
TEST_CASE("NLR") {
using P0 = Pack<>;
using P1 = Pack<TreeRoot<A, TreeNodeType::Leaf>>;
using P2 = Pack<TreeRoot<A>, TreeLeaf<1, B>, TreeLeaf<1, C>>;
using P3 = Pack<
TreeRoot<A>,
TreeBranch<1, B>, TreeLeaf<2, C>, TreeLeaf<2, D>, TreeLeaf<2, E>,
TreeBranch<1, F>, TreeLeaf<2, G>
>;
using P4 = Pack<
TreeRoot<A>,
TreeBranch<1, B>, TreeBranch<2, C>, TreeLeaf<3, D>, TreeLeaf<3, E>,
TreeBranch<1, F>, TreeBranch<2, G>, TreeLeaf<3, H>,
TreeLeaf<1, I>
>;
SECTION("PackFromTree") {
REQUIRE_SAME(P0, PackFromTreeNLR<T0>);
REQUIRE_SAME(P1, PackFromTreeNLR<T1>);
REQUIRE_SAME(P2, PackFromTreeNLR<T2>);
REQUIRE_SAME(P3, PackFromTreeNLR<T3>);
REQUIRE_SAME(P4, PackFromTreeNLR<T4>);
}
SECTION("TreeFromPack") {
REQUIRE_SAME(T0, TreeFromPackNLR<P0>);
REQUIRE_SAME(T1, TreeFromPackNLR<P1>);
REQUIRE_SAME(T2, TreeFromPackNLR<P2>);
REQUIRE_SAME(T3, TreeFromPackNLR<P3>);
REQUIRE_SAME(T4, TreeFromPackNLR<P4>);
}
}