test_tuple_permute_array.cppΒΆ

// Copyright 2017, 2019, 2022 by Mark Melton
//

#include <gtest/gtest.h>
#include "core/tuple/permute_array.h"
#include "core/mp/list.h"
#include "core/mp/constants.h"

using namespace core;

TEST(TuplePermuteArray, NtoN)
{
    using S = mp::list<mp_a,mp_b,mp_c>;
    using T = mp::list<mp_b,mp_c,mp_a>;
    auto arr = std::array<size_t,3>{{ 1, 2, 3 }};
    auto new_arr = tp::permute_array<S,T>(arr);
    EXPECT_EQ(new_arr[0], arr[1]);
    EXPECT_EQ(new_arr[1], arr[2]);
    EXPECT_EQ(new_arr[2], arr[0]);
}

TEST(TuplePermuteArray, NtoM)
{
    using S = mp::list<mp_a,mp_b,mp_c>;
    using T = mp::list<mp_b,mp_a,mp_a>;
    auto arr = std::array<size_t,3>{{ 1, 2, 3 }};
    auto new_arr = tp::permute_array<S,T>(arr);
    EXPECT_EQ(new_arr[0], arr[1]);
    EXPECT_EQ(new_arr[1], arr[0]);
    EXPECT_EQ(new_arr[2], arr[0]);
}

int main(int argc, char *argv[])
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}