Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 104 additions & 63 deletions test/TensorTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,18 @@
#include <gtest/gtest.h>
#include <torch/all.h>

#include <string>
#include <vector>

#include "../src/file_manager.h"

extern paddle_api_test::ThreadSafeParam g_custom_param;

namespace at {
namespace test {

using paddle_api_test::FileManerger;
using paddle_api_test::ThreadSafeParam;
class TensorTest : public ::testing::Test {
protected:
void SetUp() override {
Expand All @@ -24,152 +29,188 @@ class TensorTest : public ::testing::Test {
};

TEST_F(TensorTest, ConstructFromPaddleTensor) {
EXPECT_EQ(tensor.dim(), 3);
EXPECT_EQ(tensor.numel(), 24); // 2*3*4
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(tensor.dim()) << " ";
file << std::to_string(tensor.numel()) << " ";
file.saveFile();
}

// 测试 data_ptr
TEST_F(TensorTest, DataPtr) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
void* ptr = tensor.data_ptr();
EXPECT_NE(ptr, nullptr);

file << std::to_string(ptr != nullptr) << " ";
float* float_ptr = tensor.data_ptr<float>();
EXPECT_NE(float_ptr, nullptr);
file << std::to_string(float_ptr != nullptr) << " ";
file.saveFile();
}

// 测试 strides
TEST_F(TensorTest, Strides) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
c10::IntArrayRef strides = tensor.strides();
EXPECT_GT(strides.size(), 0U); // 使用无符号字面量
file << std::to_string(strides.size()) << " ";
file.saveFile();
}

// 测试 sizes
TEST_F(TensorTest, Sizes) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
c10::IntArrayRef sizes = tensor.sizes();
EXPECT_EQ(sizes.size(), 3U);
EXPECT_EQ(sizes[0], 2U);
EXPECT_EQ(sizes[1], 3U);
EXPECT_EQ(sizes[2], 4U);
file << std::to_string(sizes.size()) << " ";
file << std::to_string(sizes[0]) << " ";
file << std::to_string(sizes[1]) << " ";
file << std::to_string(sizes[2]) << " ";
file.saveFile();
}

// 测试 toType
TEST_F(TensorTest, ToType) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
Tensor double_tensor = tensor.toType(c10::ScalarType::Double);
EXPECT_EQ(double_tensor.dtype(), c10::ScalarType::Double);
file << std::to_string(static_cast<int>(double_tensor.scalar_type())) << " ";
file.saveFile();
}

// 测试 numel
TEST_F(TensorTest, Numel) {
// Tensor tensor(paddle_tensor_);

EXPECT_EQ(tensor.numel(), 24U); // 2*3*4
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(tensor.numel()) << " ";
file.saveFile();
}

// 测试 device
TEST_F(TensorTest, Device) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
c10::Device device = tensor.device();
EXPECT_EQ(device.type(), c10::DeviceType::CPU);
file << std::to_string(static_cast<int>(device.type())) << " ";
file.saveFile();
}

// 测试 get_device
TEST_F(TensorTest, GetDevice) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
c10::DeviceIndex device_idx = tensor.get_device();
EXPECT_GE(device_idx, -1);
file << std::to_string(device_idx) << " ";
file.saveFile();
}

// 测试 dim 和 ndimension
TEST_F(TensorTest, DimAndNdimension) {
// Tensor tensor(paddle_tensor_);

EXPECT_EQ(tensor.dim(), 3);
EXPECT_EQ(tensor.ndimension(), 3);
EXPECT_EQ(tensor.dim(), tensor.ndimension());
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(tensor.dim()) << " ";
file << std::to_string(tensor.ndimension()) << " ";
file.saveFile();
}

// 测试 contiguous
TEST_F(TensorTest, Contiguous) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
at::Tensor cont_tensor = tensor.contiguous();
EXPECT_TRUE(cont_tensor.is_contiguous());
file << std::to_string(cont_tensor.is_contiguous()) << " ";
file.saveFile();
}

// 测试 is_contiguous
TEST_F(TensorTest, IsContiguous) {
// Tensor tensor(paddle_tensor_);

EXPECT_TRUE(tensor.is_contiguous());
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(tensor.is_contiguous()) << " ";
file.saveFile();
}

// 测试 scalar_type
TEST_F(TensorTest, ScalarType) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
c10::ScalarType stype = tensor.scalar_type();
EXPECT_EQ(stype, c10::ScalarType::Float);
file << std::to_string(static_cast<int>(stype)) << " ";
file.saveFile();
}

// 测试 fill_
TEST_F(TensorTest, Fill) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
tensor.fill_(5.0);
float* data = tensor.data_ptr<float>();
EXPECT_FLOAT_EQ(data[0], 5.0f);
file << std::to_string(data[0]) << " ";
file.saveFile();
}

// 测试 zero_
TEST_F(TensorTest, Zero) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
tensor.zero_();
float* data = tensor.data_ptr<float>();
EXPECT_FLOAT_EQ(data[0], 0.0f);
file << std::to_string(data[0]) << " ";
file.saveFile();
}

// 测试 is_cpu
TEST_F(TensorTest, IsCpu) {
// Tensor tensor(paddle_tensor_);

EXPECT_TRUE(tensor.is_cpu());
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(tensor.is_cpu()) << " ";
file.saveFile();
}

// 测试 is_cuda (在 CPU tensor 上应该返回 false)
TEST_F(TensorTest, IsCuda) {
// Tensor tensor(paddle_tensor_);

EXPECT_FALSE(tensor.is_cuda());
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(tensor.is_cuda()) << " ";
file.saveFile();
}

// 测试 reshape
TEST_F(TensorTest, Reshape) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
at::Tensor reshaped = tensor.reshape({6, 4});
EXPECT_EQ(reshaped.sizes()[0], 6);
EXPECT_EQ(reshaped.sizes()[1], 4);
EXPECT_EQ(reshaped.numel(), 24);
file << std::to_string(reshaped.sizes()[0]) << " ";
file << std::to_string(reshaped.sizes()[1]) << " ";
file << std::to_string(reshaped.numel()) << " ";
file.saveFile();
}

// 测试 transpose
TEST_F(TensorTest, Transpose) {
// Tensor tensor(paddle_tensor_);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
at::Tensor transposed = tensor.transpose(0, 2);
EXPECT_EQ(transposed.sizes()[0], 4);
EXPECT_EQ(transposed.sizes()[2], 2);
file << std::to_string(transposed.sizes()[0]) << " ";
file << std::to_string(transposed.sizes()[2]) << " ";
file.saveFile();
}

} // namespace test
Expand Down
73 changes: 46 additions & 27 deletions test/ops/FromBlobTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,19 @@
#include <ATen/ops/from_blob.h>
#include <gtest/gtest.h>

#include <string>
#include <vector>

#include "../../src/file_manager.h"

extern paddle_api_test::ThreadSafeParam g_custom_param;

namespace at {
namespace test {

using paddle_api_test::FileManerger;
using paddle_api_test::ThreadSafeParam;

class FromBlobTest : public ::testing::Test {
protected:
void SetUp() override {
Expand All @@ -23,65 +31,76 @@ class FromBlobTest : public ::testing::Test {
};

TEST_F(FromBlobTest, FromBlobBasic) {
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
std::vector<int64_t> sizes = {2, 3};
at::Tensor result = at::from_blob(data_buffer, sizes);

EXPECT_EQ(result.dim(), 2);
EXPECT_EQ(result.sizes()[0], 2);
EXPECT_EQ(result.sizes()[1], 3);
EXPECT_EQ(result.data_ptr<float>(), data_buffer);

file << std::to_string(result.dim()) << " ";
file << std::to_string(result.sizes()[0]) << " ";
file << std::to_string(result.sizes()[1]) << " ";
file << std::to_string(result.data_ptr<float>() == data_buffer) << " ";
float* data = result.data_ptr<float>();
for (int i = 0; i < 6; ++i) {
EXPECT_FLOAT_EQ(data[i], static_cast<float>(i));
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

TEST_F(FromBlobTest, FromBlobWithOptions) {
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
std::vector<int64_t> sizes = {3, 2};
at::Tensor result =
at::from_blob(data_buffer, sizes, at::TensorOptions().dtype(at::kDouble));

EXPECT_EQ(result.dim(), 2);
EXPECT_EQ(result.sizes()[0], 3);
EXPECT_EQ(result.sizes()[1], 2);
EXPECT_EQ(result.dtype(), at::kDouble);
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.sizes()[0]) << " ";
file << std::to_string(result.sizes()[1]) << " ";
file << std::to_string(static_cast<int>(result.scalar_type())) << " ";
file.saveFile();
}

TEST_F(FromBlobTest, FromBlobWithStrides) {
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
std::vector<int64_t> sizes = {2, 3};
std::vector<int64_t> strides = {3, 1}; // Row-major
at::Tensor result = at::from_blob(data_buffer, sizes, strides);

EXPECT_EQ(result.dim(), 2);
EXPECT_EQ(result.strides()[0], 3);
EXPECT_EQ(result.strides()[1], 1);
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.strides()[0]) << " ";
file << std::to_string(result.strides()[1]) << " ";
file.saveFile();
}

TEST_F(FromBlobTest, FromBlob1D) {
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
std::vector<int64_t> sizes = {6};
at::Tensor result = at::from_blob(data_buffer, sizes);

EXPECT_EQ(result.dim(), 1);
EXPECT_EQ(result.numel(), 6);
EXPECT_EQ(result.data_ptr<float>(), data_buffer);
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.numel()) << " ";
file << std::to_string(result.data_ptr<float>() == data_buffer) << " ";
file.saveFile();
}

TEST_F(FromBlobTest, FromBlobDifferentDataTypes) {
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
int* int_data = new int[4]{1, 2, 3, 4};

std::vector<int64_t> sizes = {2, 2};
at::Tensor result =
at::from_blob(int_data, sizes, at::TensorOptions().dtype(at::kInt));

EXPECT_EQ(result.dtype(), at::kInt);
EXPECT_EQ(result.numel(), 4);

file << std::to_string(static_cast<int>(result.scalar_type())) << " ";
file << std::to_string(result.numel()) << " ";
int* data = result.data_ptr<int>();
for (int i = 0; i < 4; ++i) {
EXPECT_EQ(data[i], i + 1);
file << std::to_string(data[i]) << " ";
}

file.saveFile();
delete[] int_data;
}

Expand Down
Loading