/*
 * Copyright 2021 Daniel R. Carvalho
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met: redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer;
 * redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution;
 * neither the name of the copyright holders nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include <gtest/gtest.h>

#include <cstdint>
#include <string>

#include "sim/serialize_handlers.hh"

using namespace gem5;

TEST(SerializeTest, ParseParamInt8)
{
    ParseParam<int8_t> parser;
    int8_t value(0);

    // Zero
    EXPECT_TRUE(parser.parse("0", value));
    EXPECT_EQ(0, value);

    // Booleans
    EXPECT_FALSE(parser.parse("true", value));
    EXPECT_FALSE(parser.parse("false", value));

    // 8-bit values
    EXPECT_FALSE(parser.parse("255", value));
    EXPECT_TRUE(parser.parse("-128", value));
    EXPECT_EQ(-128, value);

    // 16-bit values
    EXPECT_FALSE(parser.parse("1000", value));
    EXPECT_FALSE(parser.parse("-1000", value));

    // 32-bit values
    EXPECT_FALSE(parser.parse("2147483648", value));
    EXPECT_FALSE(parser.parse("-1073741824", value));

    // Doubles (scientific numbers should not be converted to integers
    // correctly)
    EXPECT_FALSE(parser.parse("123456.789", value));
    EXPECT_FALSE(parser.parse("-123456.789", value));
    EXPECT_FALSE(parser.parse("9.87654e+06", value));

    // Characters
    EXPECT_TRUE(parser.parse("69", value));
    EXPECT_EQ(69, value);
    EXPECT_TRUE(parser.parse("97", value));
    EXPECT_EQ(97, value);

    // Strings
    EXPECT_FALSE(parser.parse("Test", value));
}

TEST(SerializeTest, ParseParamUint32)
{
    ParseParam<uint32_t> parser;
    uint32_t value(0);

    // Zero
    EXPECT_TRUE(parser.parse("0", value));
    EXPECT_EQ(0, value);

    // Booleans
    EXPECT_FALSE(parser.parse("true", value));
    EXPECT_FALSE(parser.parse("false", value));

    // 8-bit values
    EXPECT_TRUE(parser.parse("255", value));
    EXPECT_EQ(255, value);
    EXPECT_FALSE(parser.parse("-128", value));

    // 16-bit values
    EXPECT_TRUE(parser.parse("1000", value));
    EXPECT_EQ(1000, value);
    EXPECT_FALSE(parser.parse("-1000", value));

    // 32-bit values
    EXPECT_TRUE(parser.parse("2147483648", value));
    EXPECT_EQ(2147483648, value);
    EXPECT_FALSE(parser.parse("-1073741824", value));

    // Doubles (scientific numbers should not be converted to integers
    // correctly)
    EXPECT_TRUE(parser.parse("123456.789", value));
    EXPECT_EQ(123456, value);
    EXPECT_FALSE(parser.parse("-123456.789", value));
    EXPECT_FALSE(parser.parse("9.87654e+06", value));

    // Characters
    EXPECT_TRUE(parser.parse("69", value));
    EXPECT_EQ(69, value);
    EXPECT_TRUE(parser.parse("97", value));
    EXPECT_EQ(97, value);

    // Strings
    EXPECT_FALSE(parser.parse("Test", value));
}

TEST(SerializeTest, ParseParamDouble)
{
    ParseParam<double> parser;
    double value(0.0);

    // Zero
    EXPECT_TRUE(parser.parse("0", value));
    EXPECT_EQ(0.0, value);

    // Booleans
    EXPECT_FALSE(parser.parse("true", value));
    EXPECT_FALSE(parser.parse("false", value));

    // 8-bit values
    EXPECT_TRUE(parser.parse("255", value));
    EXPECT_EQ(255.0, value);
    EXPECT_TRUE(parser.parse("-128", value));
    EXPECT_EQ(-128.0, value);

    // 16-bit values
    EXPECT_TRUE(parser.parse("1000", value));
    EXPECT_EQ(1000.0, value);
    EXPECT_TRUE(parser.parse("-1000", value));
    EXPECT_EQ(-1000.0, value);

    // 32-bit values
    EXPECT_TRUE(parser.parse("2147483648", value));
    EXPECT_EQ(2147483648.0, value);
    EXPECT_TRUE(parser.parse("-1073741824", value));
    EXPECT_EQ(-1073741824.0, value);

    // Doubles
    EXPECT_TRUE(parser.parse("123456.789", value));
    EXPECT_EQ(123456.789, value);
    EXPECT_TRUE(parser.parse("-123456.789", value));
    EXPECT_EQ(-123456.789, value);
    EXPECT_TRUE(parser.parse("9.87654e+06", value));
    EXPECT_EQ(9.87654e+06, value);

    // Characters
    EXPECT_TRUE(parser.parse("69", value));
    EXPECT_EQ(69.0, value);
    EXPECT_TRUE(parser.parse("97", value));
    EXPECT_EQ(97.0, value);

    // Strings
    EXPECT_FALSE(parser.parse("Test", value));
}

TEST(SerializeTest, ParseParamBool)
{
    ParseParam<bool> parser;
    bool value(false);

    // Zero
    EXPECT_FALSE(parser.parse("0", value));

    // Booleans
    EXPECT_TRUE(parser.parse("true", value));
    EXPECT_EQ(true, value);
    EXPECT_TRUE(parser.parse("false", value));
    EXPECT_EQ(false, value);

    // 8-bit values
    EXPECT_FALSE(parser.parse("255", value));
    EXPECT_FALSE(parser.parse("-128", value));

    // 16-bit values
    EXPECT_FALSE(parser.parse("1000", value));
    EXPECT_FALSE(parser.parse("-1000", value));

    // 32-bit values
    EXPECT_FALSE(parser.parse("2147483648", value));
    EXPECT_FALSE(parser.parse("-1073741824", value));

    // Doubles
    EXPECT_FALSE(parser.parse("123456.789", value));
    EXPECT_FALSE(parser.parse("-123456.789", value));
    EXPECT_FALSE(parser.parse("9.87654e+06", value));

    // Characters
    EXPECT_FALSE(parser.parse("69", value));
    EXPECT_FALSE(parser.parse("97", value));

    // Strings
    EXPECT_FALSE(parser.parse("Test", value));
}

/** Characters are parsed as integers. */
TEST(SerializeTest, ParseParamChar)
{
    ParseParam<char> parser;
    char value;

    // Zero
    EXPECT_TRUE(parser.parse("48", value));
    EXPECT_EQ('0', value);

    // Booleans
    EXPECT_FALSE(parser.parse("true", value));
    EXPECT_FALSE(parser.parse("false", value));

    // 8-bit values
     if constexpr (std::is_signed_v<char>) {
        EXPECT_FALSE(parser.parse("255", value));
        EXPECT_TRUE(parser.parse("-128", value));
        EXPECT_EQ(char(-128), value);
    } else {
        EXPECT_FALSE(parser.parse("256", value));
        EXPECT_TRUE(parser.parse("255", value));
        EXPECT_EQ(char(255), value);
    }

    // 16-bit values
    EXPECT_FALSE(parser.parse("1000", value));
    EXPECT_FALSE(parser.parse("-1000", value));

    // 32-bit values
    EXPECT_FALSE(parser.parse("2147483648", value));
    EXPECT_FALSE(parser.parse("-1073741824", value));

    // Doubles
    EXPECT_FALSE(parser.parse("123456.789", value));
    EXPECT_FALSE(parser.parse("-123456.789", value));
    EXPECT_FALSE(parser.parse("9.87654e+06", value));

    // Characters
    EXPECT_TRUE(parser.parse("69", value));
    EXPECT_EQ('E', value);
    EXPECT_TRUE(parser.parse("97", value));
    EXPECT_EQ('a', value);

    // Strings
    EXPECT_FALSE(parser.parse("Test", value));
}

TEST(SerializeTest, ParseParamString)
{
    ParseParam<std::string> parser;
    std::string value("");

    // Zero
    EXPECT_TRUE(parser.parse("0", value));
    EXPECT_EQ("0", value);

    // Booleans
    EXPECT_TRUE(parser.parse("true", value));
    EXPECT_EQ("true", value);
    EXPECT_TRUE(parser.parse("false", value));
    EXPECT_EQ("false", value);

    // 8-bit values
    EXPECT_TRUE(parser.parse("255", value));
    EXPECT_EQ("255", value);
    EXPECT_TRUE(parser.parse("-128", value));
    EXPECT_EQ("-128", value);

    // 16-bit values
    EXPECT_TRUE(parser.parse("1000", value));
    EXPECT_EQ("1000", value);
    EXPECT_TRUE(parser.parse("-1000", value));
    EXPECT_EQ("-1000", value);

    // 32-bit values
    EXPECT_TRUE(parser.parse("2147483648", value));
    EXPECT_EQ("2147483648", value);
    EXPECT_TRUE(parser.parse("-1073741824", value));
    EXPECT_EQ("-1073741824", value);

    // Doubles
    EXPECT_TRUE(parser.parse("123456.789", value));
    EXPECT_EQ("123456.789", value);
    EXPECT_TRUE(parser.parse("-123456.789", value));
    EXPECT_EQ("-123456.789", value);
    EXPECT_TRUE(parser.parse("9.87654e+06", value));
    EXPECT_EQ("9.87654e+06", value);

    // Characters
    EXPECT_TRUE(parser.parse("69", value));
    EXPECT_EQ("69", value);
    EXPECT_TRUE(parser.parse("97", value));
    EXPECT_EQ("97", value);

    // Strings
    EXPECT_TRUE(parser.parse("Test", value));
    EXPECT_EQ("Test", value);
}

TEST(SerializeTest, ShowParamInt8)
{
    ShowParam<int8_t> parser;
    std::stringstream ss;

    parser.show(ss, 0);
    EXPECT_EQ("0", ss.str());
    ss.str("");
    parser.show(ss, 127);
    EXPECT_EQ("127", ss.str());
    ss.str("");
    parser.show(ss, -128);
    EXPECT_EQ("-128", ss.str());
    ss.str("");
}

TEST(SerializeTest, ShowParamUint32)
{
    ShowParam<uint32_t> parser;
    std::stringstream ss;

    parser.show(ss, 0);
    EXPECT_EQ("0", ss.str());
    ss.str("");
    parser.show(ss, 255);
    EXPECT_EQ("255", ss.str());
    ss.str("");
    parser.show(ss, 1000);
    EXPECT_EQ("1000", ss.str());
    ss.str("");
    parser.show(ss, 2147483648);
    EXPECT_EQ("2147483648", ss.str());
    ss.str("");
    parser.show(ss, (double)123456.789);
    EXPECT_EQ("123456", ss.str());
    ss.str("");
    parser.show(ss, 9.87654e+06);
    EXPECT_EQ("9876540", ss.str());
    ss.str("");
}

/**
 * Test converting doubles to strings. Floating numbers are expected to
 * have 6-digit precision.
 */
TEST(SerializeTest, ShowParamDouble)
{
    ShowParam<double> parser;
    std::stringstream ss;

    parser.show(ss, 0);
    EXPECT_EQ("0", ss.str());
    ss.str("");
    parser.show(ss, 255);
    EXPECT_EQ("255", ss.str());
    ss.str("");
    parser.show(ss, -1000);
    EXPECT_EQ("-1000", ss.str());
    ss.str("");
    parser.show(ss, 123456.789);
    EXPECT_EQ("123457", ss.str());
    ss.str("");
    parser.show(ss, -123456.789);
    EXPECT_EQ("-123457", ss.str());
    ss.str("");
    parser.show(ss, 1234567.89);
    EXPECT_EQ("1.23457e+06", ss.str());
    ss.str("");
    parser.show(ss, -1234567.89);
    EXPECT_EQ("-1.23457e+06", ss.str());
    ss.str("");
    parser.show(ss, 9.87654e+06);
    EXPECT_EQ("9.87654e+06", ss.str());
    ss.str("");
}

TEST(SerializeTest, ShowParamBool)
{
    ShowParam<bool> parser;
    std::stringstream ss;

    parser.show(ss, true);
    EXPECT_EQ("true", ss.str());
    ss.str("");
    parser.show(ss, false);
    EXPECT_EQ("false", ss.str());
    ss.str("");
}

TEST(SerializeTest, ShowParamChar)
{
    ShowParam<char> parser;
    std::stringstream ss;

    parser.show(ss, 'E');
    EXPECT_EQ("69", ss.str()); // int('E')=69
    ss.str("");
    parser.show(ss, 'a');
    EXPECT_EQ("97", ss.str()); // int('a')=97
    ss.str("");
}

TEST(SerializeTest, ShowParamString)
{
    ShowParam<std::string> parser;
    std::stringstream ss;

    parser.show(ss, "test");
    EXPECT_EQ("test", ss.str());
    ss.str("");
    parser.show(ss, "tEsT");
    EXPECT_EQ("tEsT", ss.str());
    ss.str("");
}
