/**
 * This program is free software, you can redistribute it and/or modify.
 * Copyright (c) 2026 Huawei Technologies Co., Ltd.
 * This file is a part of the CANN Open Software.
 * Licensed under CANN Open Software License Agreement Version 2.0 (the "License").
 * Please refer to the License for details. You may not use this file except in compliance with the License.
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
 * BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. See LICENSE in the root of
 * the software repository for the full text of the License.
 */

#ifndef OPTEST_JIT_MACROS_H
#define OPTEST_JIT_MACROS_H

#include <stdexcept>
#include <string>

/**
 * 通用校验宏:条件不满足则抛 std::runtime_error(前缀自动加 "JIT: ")
 */
#define JIT_CHECK(cond, msg)                                      \
    do {                                                          \
        if (!(cond)) {                                            \
            throw std::runtime_error("JIT: " + std::string(msg)); \
        }                                                         \
    } while (0)

/**
 * 抛异常宏(前缀自动加 "JIT: ")
 */
#define JIT_THROW(msg) throw std::runtime_error("JIT: " + std::string(msg))

/**
 * 条件成立则抛异常
 */
#define JIT_THROW_IF(cond, msg) \
    do {                        \
        if (cond) {             \
            JIT_THROW(msg);     \
        }                       \
    } while (0)

#endif // OPTEST_JIT_MACROS_H