// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details

#include "Fixture.h"

#include "doctest.h"
#include "Luau/Common.h"
#include "ScopedFlags.h"

using namespace Luau;

namespace
{
struct NegationFixture : Fixture
{
    TypeArena arena;
    ScopedFastFlag sff[2]{
        {"LuauNegatedStringSingletons", true},
        {"LuauSubtypeNormalizer", true},
    };

    NegationFixture()
    {
        registerHiddenTypes(*this, arena);
    }
};
} // namespace

TEST_SUITE_BEGIN("Negations");

TEST_CASE_FIXTURE(NegationFixture, "negated_string_is_a_subtype_of_string")
{
    CheckResult result = check(R"(
        function foo(arg: string) end
        local a: string & Not<"Hello">
        foo(a)
    )");

    LUAU_REQUIRE_NO_ERRORS(result);
}

TEST_CASE_FIXTURE(NegationFixture, "string_is_not_a_subtype_of_negated_string")
{
    CheckResult result = check(R"(
        function foo(arg: string & Not<"hello">) end
        local a: string
        foo(a)
    )");

    LUAU_REQUIRE_ERROR_COUNT(1, result);
}

TEST_SUITE_END();
