#pragma once
#include "./test_framework.hpp"

namespace lsp::test
{
    // LSPAny 测试类
    class LSPAnyTests
    {
    public:
        static void registerTests(TestRunner& runner);

    private:
        // 构造函数测试
        static TestResult testDefaultConstructor();
        static TestResult testDecimalConstructor();
        static TestResult testBooleanConstructor();
        static TestResult testStringConstructor();
        static TestResult testCStringConstructor();
        static TestResult testNullptrConstructor();
        static TestResult testLSPObjectConstructor();
        static TestResult testLSPArrayConstructor();

        // 拷贝和移动测试
        static TestResult testCopyConstructor();
        static TestResult testMoveConstructor();
        static TestResult testCopyAssignment();
        static TestResult testMoveAssignment();

        // 赋值操作符测试
        static TestResult testIntegerAssignment();
        static TestResult testUIntegerAssignment();
        static TestResult testDecimalAssignment();
        static TestResult testBooleanAssignment();
        static TestResult testStringAssignment();
        static TestResult testNullptrAssignment();
        static TestResult testLSPObjectAssignment();
        static TestResult testLSPArrayAssignment();

        // 类型检查测试
        static TestResult testIsMethod();
        static TestResult testGetMethod();

        // 访问者模式测试
        static TestResult testVisitMethod();

        // 整数模板测试
        static TestResult testIntegerTemplateSignedTypes();
        static TestResult testIntegerTemplateUnsignedTypes();
        static TestResult testIntegerTemplateBoundaries();

        // 复杂场景测试
        static TestResult testNestedLSPObject();
        static TestResult testNestedLSPArray();
        static TestResult testMixedNesting();
        static TestResult testTypeConversion();

        // 边界情况测试
        static TestResult testFloatPrecision();
        static TestResult testLargeNumbers();
        static TestResult testEmptyContainers();
    };
}
