58 lines
1.4 KiB
C++
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>);
|
|
}
|
|
}
|