#include "helpers.hpp"
#include "utils/transform.hpp"

#include <set>
#include <vector>

#include <gmock/gmock.h>

using namespace testing;

TEST(TestTransform, transformsVector)
{
    std::vector<int> input = {1, 2, 3};
    std::vector<std::string> output =
        utils::transform(input, [](int v) { return std::to_string(v); });
    EXPECT_TRUE(utils::detail::has_member_reserve<decltype(input)>);
    EXPECT_TRUE(utils::detail::has_member_reserve<decltype(output)>);
    ASSERT_THAT(output, ElementsAre("1", "2", "3"));
}

TEST(TestTransform, transformsSet)
{
    std::set<int> input = {1, 2, 3};
    std::set<std::string> output =
        utils::transform(input, [](int v) { return std::to_string(v); });
    EXPECT_FALSE(utils::detail::has_member_reserve<decltype(input)>);
    EXPECT_FALSE(utils::detail::has_member_reserve<decltype(output)>);
    ASSERT_THAT(output, ElementsAre("1", "2", "3"));
}

TEST(TestTransform, transformsArrayToVector)
{
    std::array<int, 3> input = {1, 2, 3};
    std::vector<std::string> output = utils::transform<std::vector>(
        input, [](int v) { return std::to_string(v); });
    EXPECT_FALSE(utils::detail::has_member_reserve<decltype(input)>);
    EXPECT_TRUE(utils::detail::has_member_reserve<decltype(output)>);
    ASSERT_THAT(output, ElementsAre("1", "2", "3"));
}
