cdac10ba创建于 2025年8月15日历史提交
#include <gtest/gtest.h>
#include "basictypes/Long.h"
#include "basictypes/String.h"
#include "core/operators/test_utils/Mocks.h"

using namespace std;

TEST(LongTest, ValueConstructor) {
    Long longObj(12345);
    EXPECT_EQ(longObj.getValue(), 12345);
}

TEST(LongTest, Destructor) {
    Long* longObj = new Long(12345);
    delete longObj;
}

TEST(LongTest, GetValue) {
    Long longObj(12345);
    EXPECT_EQ(longObj.getValue(), 12345);
}

TEST(LongTest, SetValue) {
    Long longObj;
    longObj.setValue(54321);
    EXPECT_EQ(longObj.getValue(), 54321);
}

TEST(LongTest, HashCode) {
    Long longObj(12345);
    int hash = longObj.hashCode();
    EXPECT_EQ(hash, static_cast<int>(12345 ^ (static_cast<uint64_t>(12345) >> 32)));
}

TEST(LongTest, Equals_SameValue) {
    Long longObj1(12345);
    Long longObj2(12345);

    EXPECT_TRUE(longObj1.equals(&longObj2));
}

TEST(LongTest, Equals_DifferentValue) {
    Long longObj1(12345);
    Long longObj2(54321);

    EXPECT_FALSE(longObj1.equals(&longObj2));
}

TEST(LongTest, Equals_DifferentType) {
    Long longObj(12345);
    MockLongObject obj(12345);

    EXPECT_TRUE(longObj.equals(&obj));
}

TEST(LongTest, ToString) {
    Long longObj(12345);
    EXPECT_EQ(longObj.toString(), "12345");
}

TEST(LongTest, Clone) {
    Long longObj(12345);
    Object* cloned = longObj.clone();
    Long* clonedLong = dynamic_cast<Long*>(cloned);

    EXPECT_NE(cloned, &longObj);
    EXPECT_EQ(clonedLong->getValue(), longObj.getValue());

    delete clonedLong;
}

TEST(LongTest, ValueOf_String) {
    std::string s = "12345";
    String str(s);
    Long* longObj = Long::valueOf(&str);
    EXPECT_EQ(longObj->getValue(), 12345);

    delete longObj;
}

TEST(LongTest, ValueOf_String_Invalid) {
    String str("abcde");
    EXPECT_THROW(Long::valueOf(&str), std::out_of_range);
}

TEST(LongTest, ValueOf_Int64) {
    Long* longObj = Long::valueOf(12345);
    EXPECT_EQ(longObj->getValue(), 12345);

    delete longObj;
}