check.h 2.15 KB
Newer Older
PanZezhong's avatar
PanZezhong committed
1
2
#ifndef INFINIUTILS_CHECK_H
#define INFINIUTILS_CHECK_H
3
#include <iostream>
4
#include <tuple>
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#define CHECK_API_OR(API, EXPECT, ACTION)                                       \
    do {                                                                        \
        auto api_result_ = (API);                                               \
        if (api_result_ != (EXPECT)) {                                          \
            std::cerr << "Error Code " << api_result_ << " in `" << #API << "`" \
                      << " from " << __func__                                   \
                      << " at " << __FILE__ << ":" << __LINE__ << std::endl;    \
            { ACTION; }                                                         \
        }                                                                       \
    } while (0)

#define CHECK_INTERNAL(API, EXPECT) CHECK_API_OR(API, EXPECT, return INFINI_STATUS_INTERNAL_ERROR)

PanZezhong's avatar
PanZezhong committed
19
20
#define CHECK_STATUS(API) CHECK_API_OR(API, INFINI_STATUS_SUCCESS, return api_result_)

21
22
23
24
25
26
27
28
29
30
31
32
33
#define CHECK_DTYPE(DT, ...)                                 \
    do {                                                     \
        auto found_supported_dtype = false;                  \
        for (auto dt : {__VA_ARGS__}) {                      \
            if (dt == DT) {                                  \
                found_supported_dtype = true;                \
                break;                                       \
            }                                                \
        }                                                    \
        CHECK_API_OR(found_supported_dtype, true,            \
                     return INFINI_STATUS_BAD_TENSOR_DTYPE); \
    } while (0)

34
35
36
37
38
39
40
41
42
#define SAME_VEC(...)                                     \
    [&] {                                                 \
        auto &&_vec = std::forward_as_tuple(__VA_ARGS__); \
        const auto &_base = std::get<0>(_vec);            \
        return [&_base](auto &&...args) {                 \
            return ((args == _base) && ...);              \
        }(__VA_ARGS__);                                   \
    }()

PanZezhong's avatar
PanZezhong committed
43
#endif // INFINIUTILS_CHECK_H