/*
 * SPDX-FileCopyrightText: 2024 Copyright contributors to the cppTango project
 *
 * SPDX-License-Identifier: LGPL-3.0-or-later
 */
#include "catch2_common.h"

namespace details
{
enum C_type
{
    ENUM_1,
    ENUM_2,
    ENUM_3
};

enum class scoped_enum : Tango::DevShort
{
    ENUM_1,
    ENUM_2,
    ENUM_3
};

enum class scoped_enum_int : unsigned int
{
    ENUM_1,
    ENUM_2,
    ENUM_3
};
} // namespace details

//
// Tests -------------------------------------------------------
//
SCENARIO("Static test tango_type_traits is_tango_base_type")
{
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevBoolean>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevUChar>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevShort>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevUShort>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevLong>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevULong>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevLong64>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevULong64>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevFloat>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevDouble>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevState>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevEncoded>);
    STATIC_REQUIRE(Tango::is_tango_base_type_v<Tango::DevString>);
}

SCENARIO("Static test tango_type_traits is_enum_compatible")
{
    STATIC_REQUIRE(Tango::is_enum_compatible_v<details::C_type>);
    STATIC_REQUIRE(Tango::is_enum_compatible_v<details::scoped_enum>);
    STATIC_REQUIRE_FALSE(Tango::is_enum_compatible_v<details::scoped_enum_int>);
}
