#include <array>
#include <string>
#include <gtest/gtest.h>
#include "data_types.hpp"

using namespace std::string_literals;
using namespace phosphor::dbus::monitoring;

using Index = std::map<std::tuple<size_t, size_t, size_t>, size_t>;

#include "propertywatchgentest.hpp"

auto expectedStorageCount = 16;

const std::array<Index, 4> expectedIndicies =
{
    {
        {
            {Index::key_type{0, 0, 0}, 0},
            {Index::key_type{0, 1, 0}, 1},
            {Index::key_type{1, 0, 0}, 2},
            {Index::key_type{1, 1, 0}, 3},
            {Index::key_type{2, 0, 0}, 4},
            {Index::key_type{2, 1, 0}, 5},
            {Index::key_type{3, 0, 0}, 6},
            {Index::key_type{3, 1, 0}, 7},
        },
        {
            {Index::key_type{2, 2, 1}, 8},
            {Index::key_type{2, 2, 2}, 9},
            {Index::key_type{3, 2, 1}, 10},
            {Index::key_type{3, 2, 2}, 11},
            {Index::key_type{4, 2, 1}, 12},
            {Index::key_type{4, 2, 2}, 13},
            {Index::key_type{5, 2, 1}, 14},
            {Index::key_type{5, 2, 2}, 15},
        },
        {
            {Index::key_type{3, 0, 0}, 6},
        },
        {
            {Index::key_type{3, 2, 2}, 11},
            {Index::key_type{5, 2, 2}, 15},
        },
    }
};

const std::array<std::tuple<std::string, size_t>, 4> expectedWatches =
{
    {
        std::tuple<std::string, size_t>{"std::string"s, 0},
        std::tuple<std::string, size_t>{"uint32_t"s, 1},
        std::tuple<std::string, size_t>{"int32_t"s, 2},
        std::tuple<std::string, size_t>{"std::string"s, 3},
    }
};

TEST(PropertyWatchGenTest, storageCount)
{
    ASSERT_EQ(expectedStorageCount, storageCount);
}

TEST(PropertyWatchGenTest, IndiciesSameSize)
{
    ASSERT_EQ(sizeof(expectedIndicies), sizeof(indicies));
}

TEST(PropertyWatchGenTest, WatchesSameSize)
{
    ASSERT_EQ(sizeof(expectedWatches), sizeof(watches));
}

TEST(PropertyWatchGenTest, WatchesSameContent)
{
    size_t i;
    for (i = 0; i < expectedWatches.size(); ++i)
    {
        ASSERT_EQ(watches[i],
                  expectedWatches[i]);
    }
}

TEST(PropertyWatchGenTest, IndiciesSameContent)
{
    size_t i;
    for (i = 0; i < expectedIndicies.size(); ++i)
    {
        ASSERT_EQ(indicies[i],
                  expectedIndicies[i]);
    }
}
