#pragma once
#include "test_framework.hpp"

namespace lsp::test
{
    // Common 类型特征测试类
    class CommonTests
    {
    public:
        static void registerTests(TestRunner& runner);

    private:
        // ==================== is_lsp_basic_type 测试 ====================
        static TestResult testIsLSPBasicInteger();
        static TestResult testIsLSPBasicUInteger();
        static TestResult testIsLSPBasicBoolean();
        static TestResult testIsLSPBasicString();
        static TestResult testIsLSPBasicDecimal();
        static TestResult testIsLSPBasicNullptr();
        static TestResult testIsLSPBasicNegativeCases();

        // ==================== is_lsp_container_type 测试 ====================
        static TestResult testIsLSPContainerObject();
        static TestResult testIsLSPContainerArray();
        static TestResult testIsLSPContainerAny();
        static TestResult testIsLSPContainerNegativeCases();

        // ==================== is_user_struct 测试 ====================
        static TestResult testIsUserStructPositive();
        static TestResult testIsUserStructExcludeArithmetic();
        static TestResult testIsUserStructExcludeString();
        static TestResult testIsUserStructExcludeLSPTypes();
        static TestResult testIsUserStructExcludeVector();
        static TestResult testIsUserStructExcludeMap();
        static TestResult testIsUserStructExcludeOptional();
        static TestResult testIsUserStructExcludeVariant();
        static TestResult testIsUserStructExcludePointers();
    };
}
