#include #include "common.h" #include #include #include #define N 10 TEST_CASE("Cluster") { int a_[N], b_[N], c_[N], d_[N], e_[N], f_[N], g_[N]; auto a = pfor::Operand(a_); auto b = pfor::Operand(b_); auto c = pfor::Operand(c_); auto d = pfor::Operand(d_); auto e = pfor::Operand(e_); auto f = pfor::Operand(f_); auto g = pfor::Operand(g_); using UE0 = decltype(a+b); using UE1 = decltype(d = b+c); using UE2 = decltype(e = g); using UE3 = decltype(b = a); using UE4 = decltype(f = f+f); using UE5 = decltype(g = f); using UE6 = decltype(c = d); using UE7 = decltype(g = b); using E0 = std::decay_t; using E1 = std::decay_t; using E2 = std::decay_t; using E3 = std::decay_t; using E4 = std::decay_t; using E5 = std::decay_t; using E6 = std::decay_t; using S0 = pfor::Pack; using S1 = pfor::Pack; using S2 = pfor::Pack; using S3 = pfor::Pack; using S4 = pfor::Pack; using S5 = pfor::Pack; SECTION("SplitComma") { TEST(REQUIRE, is_same_v, S0>); TEST(REQUIRE, is_same_v, S1>); TEST(REQUIRE, is_same_v, S2>); TEST(REQUIRE, is_same_v, S3>); TEST(REQUIRE, is_same_v, S4>); TEST(REQUIRE, is_same_v, S5>); } SECTION("ReadList") { using R0 = pfor::Pack; using R1 = pfor::Pack; using R2 = pfor::Pack; using R3 = pfor::Pack; using R4 = pfor::Pack; using R5 = pfor::Pack; TEST(REQUIRE, is_same_v>, R0>); TEST(REQUIRE, is_same_v>, R1>); TEST(REQUIRE, is_same_v>, R2>); TEST(REQUIRE, is_same_v>, R3>); TEST(REQUIRE, is_same_v>, R4>); TEST(REQUIRE, is_same_v>, R5>); } SECTION("WriteList") { using W0 = pfor::Pack<>; using W1 = pfor::Pack; using W2 = pfor::Pack; using W3 = pfor::Pack; using W4 = pfor::Pack; using W5 = pfor::Pack; TEST(REQUIRE, is_same_v>, W0>); TEST(REQUIRE, is_same_v>, W1>); TEST(REQUIRE, is_same_v>, W2>); TEST(REQUIRE, is_same_v>, W3>); TEST(REQUIRE, is_same_v>, W4>); TEST(REQUIRE, is_same_v>, W5>); } SECTION("ComparatorUIntToType") { TEST(REQUIRE, pfor::ComparatorUIntToType, pfor::UIntToType<1>>::value); TEST(REQUIRE_FALSE, pfor::ComparatorUIntToType, pfor::UIntToType<0>>::value); TEST(REQUIRE_FALSE, pfor::ComparatorUIntToType, pfor::UIntToType<0>>::value); } SECTION("ComparatorUIntPack") { TEST(REQUIRE_FALSE, pfor::ComparatorUIntPack, UIntsToPack<>>::value); TEST(REQUIRE_FALSE, pfor::ComparatorUIntPack, UIntsToPack<>>::value); TEST(REQUIRE_FALSE, pfor::ComparatorUIntPack, UIntsToPack<>>::value); TEST(REQUIRE_FALSE, pfor::ComparatorUIntPack, UIntsToPack<0>>::value); TEST(REQUIRE_FALSE, pfor::ComparatorUIntPack, UIntsToPack<0, 1, 2>>::value); TEST(REQUIRE_FALSE, pfor::ComparatorUIntPack, UIntsToPack<0, 1, 2>>::value); TEST(REQUIRE, pfor::ComparatorUIntPack, UIntsToPack<1>>::value); TEST(REQUIRE, pfor::ComparatorUIntPack, UIntsToPack<1>>::value); TEST(REQUIRE, pfor::ComparatorUIntPack, UIntsToPack<1>>::value); TEST(REQUIRE, pfor::ComparatorUIntPack, UIntsToPack<1, 3>>::value); TEST(REQUIRE, pfor::ComparatorUIntPack, UIntsToPack<1, 3>>::value); } SECTION("ComparatorExpressionInfo") { using C0 = pfor::Pack, UIntsToPack<>, UIntsToPack<>>; using C1 = pfor::Pack, UIntsToPack<>, UIntsToPack<>>; using C2 = pfor::Pack, UIntsToPack<>, UIntsToPack<>>; TEST(REQUIRE_FALSE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE_FALSE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE_FALSE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE_FALSE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE_FALSE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE_FALSE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE, pfor::ComparatorExpressionInfo::value); TEST(REQUIRE, pfor::ComparatorExpressionInfo::value); } SECTION("ComparatorWritePack") { using WP0 = pfor::Pack, UIntsToPack<>, UIntsToPack<>>; using WP1 = pfor::Pack, UIntsToPack<0>, UIntsToPack<>>; using WP2 = pfor::Pack, UIntsToPack<1>, UIntsToPack<>>; using WP3 = pfor::Pack, UIntsToPack<0, 1, 2>, UIntsToPack<>>; using WP4 = pfor::Pack, UIntsToPack<0, 2>, UIntsToPack<>>; TEST(REQUIRE_FALSE, pfor::ComparatorWritePack::value); TEST(REQUIRE_FALSE, pfor::ComparatorWritePack::value); TEST(REQUIRE_FALSE, pfor::ComparatorWritePack::value); TEST(REQUIRE_FALSE, pfor::ComparatorWritePack::value); TEST(REQUIRE_FALSE, pfor::ComparatorWritePack::value); TEST(REQUIRE_FALSE, pfor::ComparatorWritePack::value); TEST(REQUIRE, pfor::ComparatorWritePack::value); TEST(REQUIRE, pfor::ComparatorWritePack::value); TEST(REQUIRE, pfor::ComparatorWritePack::value); TEST(REQUIRE, pfor::ComparatorWritePack::value); TEST(REQUIRE, pfor::ComparatorWritePack::value); TEST(REQUIRE, pfor::ComparatorWritePack::value); } SECTION("ExpressionInfo") { using EI0 = pfor::Pack, pfor::Pack<>, pfor::Pack>>; using EI1 = pfor::Pack, pfor::Pack, pfor::Pack>>; using EI2 = pfor::Pack< pfor::Pack, pfor::Pack, pfor::Pack>, pfor::Pack, pfor::Pack, pfor::Pack> >; using EI3 = pfor::Pack< pfor::Pack, pfor::Pack, pfor::Pack>, pfor::Pack, pfor::Pack, pfor::Pack>, pfor::Pack, pfor::Pack, pfor::Pack> >; TEST(REQUIRE, is_same_v, EI0>); TEST(REQUIRE, is_same_v, EI1>); TEST(REQUIRE, is_same_v, EI2>); TEST(REQUIRE, is_same_v, EI3>); } SECTION("Clusters") { using C0 = pfor::Pack<>; using C1 = pfor::expr::ExpressionInfo; using C2 = pfor::expr::ExpressionInfo; using C3 = pfor::expr::ExpressionInfo; using C4 = pfor::expr::ExpressionInfo; using C5 = pfor::expr::ExpressionInfo; using CC0 = pfor::Pack<>; using CC1 = pfor::Pack; using CC2 = pfor::Pack; using CC3 = pfor::Pack; using CC4 = pfor::Pack; using CC5 = pfor::Pack; using I0 = pfor::Pack, pfor::Pack<>, pfor::Pack<>>; using I1 = pfor::Pack, pfor::Pack, pfor::Pack>; using I2 = pfor::Pack, pfor::Pack, pfor::Pack>; using I3 = pfor::Pack, pfor::Pack, pfor::Pack>; using CC0I1 = pfor::Pack>; using CC0I2 = pfor::Pack>; using CC1I1 = pfor::Pack>; using CC1I2 = pfor::Pack>; using CC2I1 = pfor::Pack>; using CC2I2 = pfor::Pack>; using F0 = UIntsToPack<>; using F1 = UIntsToPack<0>; using F2 = UIntsToPack<0, 1>; using F3 = UIntsToPack<0, 1, 2>; using F4 = UIntsToPack<0, 1, 2>; using F5 = UIntsToPack<0, 1, 2, 3>; using CF0 = pfor::Pack<>; using CF1 = pfor::Pack; using CF2 = pfor::Pack; using CF3 = pfor::Pack; using CF4 = pfor::Pack; using CF5 = pfor::Pack; using CF1I1 = pfor::Pack, UIntsToPack<1>>; // using CE0 = pfor::Pack<>; // using CE1 = UIntsToPack<0>; // using CE2 = UIntsToPack<0, 1>; // using CE3 = UIntsToPack<0, 1, 2>; // using CE4 = UIntsToPack<0, 1, 2>; // using CE5 = UIntsToPack<0, 1, 2, 3>; // using CCE0 = pfor::Pack<>; // using CCE1 = pfor::Pack; // using CCE2 = pfor::Pack; // using CCE3 = pfor::Pack; // using CCE4 = pfor::Pack; // using CCE5 = pfor::Pack; SECTION("ClusterDepends") { TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE_FALSE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); TEST(REQUIRE, pfor::ClusterDepends::value); } SECTION("ClustersInsert") { TEST(REQUIRE, is_same_v, CC0I1>); TEST(REQUIRE, is_same_v, CC0I2>); TEST(REQUIRE, is_same_v, CC1I1>); TEST(REQUIRE, is_same_v, CC1I2>); TEST(REQUIRE, is_same_v, CC2I1>); TEST(REQUIRE, is_same_v, CC2I2>); } SECTION("ClusterExpressionIds") { TEST(REQUIRE, is_same_v, F0>); TEST(REQUIRE, is_same_v, F1>); TEST(REQUIRE, is_same_v, F2>); TEST(REQUIRE, is_same_v, F3>); TEST(REQUIRE, is_same_v, F4>); TEST(REQUIRE, is_same_v, F5>); } SECTION("ClustersExpressionIds") { TEST(REQUIRE, is_same_v, CF0>); TEST(REQUIRE, is_same_v, CF1>); TEST(REQUIRE, is_same_v, CF2>); TEST(REQUIRE, is_same_v, CF3>); TEST(REQUIRE, is_same_v, CF4>); TEST(REQUIRE, is_same_v, CF5>); TEST(REQUIRE, is_same_v, CF1I1>); } // SECTION("ClusterExpression") { // TEST(REQUIRE, is_same_v, CE0>); // TEST(REQUIRE, is_same_v, CE1>); // TEST(REQUIRE, is_same_v, CE2>); // TEST(REQUIRE, is_same_v, CE3>); // TEST(REQUIRE, is_same_v, CE4>); // TEST(REQUIRE, is_same_v, CE5>); // } // // SECTION("ClustersExpression") { // using CCE1I1 = pfor::Pack, UIntsToPack<1>>; // // TEST(REQUIRE, is_same_v, CCE0>); // TEST(REQUIRE, is_same_v, CCE1>); // TEST(REQUIRE, is_same_v, CCE2>); // TEST(REQUIRE, is_same_v, CCE3>); // TEST(REQUIRE, is_same_v, CCE4>); // TEST(REQUIRE, is_same_v, CCE5>); // // TEST(REQUIRE, is_same_v, CCE1I1>); // } SECTION("ClustersGen") { using CG0 = pfor::Pack>; using CG1 = pfor::Pack>; using CG2 = pfor::Pack, UIntsToPack<1>>; using CG3 = pfor::Pack, UIntsToPack<1>>; using CG4 = pfor::Pack, UIntsToPack<2>>; using CG5 = pfor::Pack, UIntsToPack<1>, UIntsToPack<2>>; using CG6 = pfor::Pack, UIntsToPack<2>, UIntsToPack<4>>; TEST(REQUIRE, is_same_v::type, CG0>); TEST(REQUIRE, is_same_v::type, CG1>); TEST(REQUIRE, is_same_v::type, CG2>); TEST(REQUIRE, is_same_v::type, CG3>); TEST(REQUIRE, is_same_v::type, CG4>); TEST(REQUIRE, is_same_v::type, CG5>); TEST(REQUIRE, is_same_v::type, CG6>); } } }