// SPDX-FileCopyrightText: The Eigen Authors
// SPDX-License-Identifier: MPL-2.0

// Compile- and host-time checks for the cuBLAS 64-bit dimension adapters.

#define EIGEN_USE_GPU
#include "main.h"
#include <unsupported/Eigen/GPU>

using namespace Eigen;

using CublasXgemmFloat = cublasStatus_t (*)(cublasHandle_t, cublasOperation_t, cublasOperation_t, int64_t, int64_t,
                                            int64_t, const float*, const float*, int64_t, const float*, int64_t,
                                            const float*, float*, int64_t);

static_assert(
    std::is_same<decltype(static_cast<CublasXgemmFloat>(&gpu::internal::cublasXgemm)), CublasXgemmFloat>::value,
    "cublasXgemm dimensions must remain 64-bit");

#if defined(CUBLAS_VERSION) && CUBLAS_VERSION >= 120000
static_assert(std::is_same<decltype(gpu::internal::to_blas_dim(int64_t{})), int64_t>::value,
              "cuBLAS 12 and newer must preserve 64-bit dimensions");
#else
static_assert(std::is_same<decltype(gpu::internal::to_blas_dim(int64_t{})), int>::value,
              "pre-12 cuBLAS must narrow dimensions to int");
#endif

void test_cublas_64bit_dimension_contract() {
  constexpr int64_t kLargeDim = int64_t{1} << 32;
  VERIFY_IS_EQUAL(gpu::internal::blas1_size(Index{1} << 16, Index{1} << 16), kLargeDim);

#if defined(CUBLAS_VERSION) && CUBLAS_VERSION >= 120000
  VERIFY_IS_EQUAL(gpu::internal::to_blas_dim(kLargeDim), kLargeDim);
#endif

  CublasXgemmFloat volatile gemm = static_cast<CublasXgemmFloat>(&gpu::internal::cublasXgemm);
  VERIFY(gemm != nullptr);
}

EIGEN_DECLARE_TEST(gpu_cublas_64bit) { CALL_SUBTEST(test_cublas_64bit_dimension_contract()); }
