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
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ set(COMMAND_TO_RUN
include_directories(${Python3_INCLUDE_DIRS})
link_directories("${Python3_LIBRARY_DIRS}")

set(COMMON_INCLUDES ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src)
set(COMMON_INCLUDES ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/src)

enable_testing()
include_directories(${COMMON_INCLUDES})
Expand Down
19 changes: 18 additions & 1 deletion src/file_manager.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "../src/file_manager.h"
#include "src/file_manager.h"

#include <filesystem>
#include <iostream>
Expand Down Expand Up @@ -26,6 +26,23 @@ void FileManerger::createFile() {
}
}

void FileManerger::openAppend() {
std::unique_lock<std::shared_mutex> lock(mutex_);

std::error_code ec;
if (!std::filesystem::create_directories(basic_path_, ec) && ec) {
throw std::runtime_error("Failed to create directory: " + basic_path_ +
", error: " + ec.message());
}

std::string full_path = basic_path_ + file_name_;

file_stream_.open(full_path, std::ios::out | std::ios::app);
if (!file_stream_.is_open()) {
throw std::runtime_error("Failed to open file for append: " + full_path);
}
}

void FileManerger::writeString(const std::string& str) {
std::shared_lock<std::shared_mutex> lock(mutex_);
if (file_stream_.is_open()) {
Expand Down
1 change: 1 addition & 0 deletions src/file_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class FileManerger {

void setFileName(const std::string& value);
void createFile();
void openAppend();
void writeString(const std::string& str);
FileManerger& operator<<(const std::string& str);
void saveFile();
Expand Down
47 changes: 33 additions & 14 deletions test/ops/AbsTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,19 @@
#include <ATen/ops/zeros.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 AbsTest : public ::testing::Test {
protected:
void SetUp() override {
Expand All @@ -23,14 +31,23 @@ class AbsTest : public ::testing::Test {
at::Tensor test_tensor;
};

static void write_abs_result_to_file(FileManerger* file,
const at::Tensor& result) {
*file << std::to_string(result.dim()) << " ";
*file << std::to_string(result.numel()) << " ";
float* result_data = result.data_ptr<float>();
for (int64_t i = 0; i < result.numel(); ++i) {
*file << std::to_string(result_data[i]) << " ";
}
}

TEST_F(AbsTest, BasicAbs) {
at::Tensor result = at::abs(test_tensor);
EXPECT_EQ(result.sizes(), test_tensor.sizes());
float* result_data = result.data_ptr<float>();
EXPECT_FLOAT_EQ(result_data[0], 1.0f);
EXPECT_FLOAT_EQ(result_data[1], 2.0f);
EXPECT_FLOAT_EQ(result_data[2], 0.0f);
EXPECT_FLOAT_EQ(result_data[3], 3.5f);
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
write_abs_result_to_file(&file, result);
file.saveFile();
}

TEST_F(AbsTest, PositiveTensor) {
Expand All @@ -41,10 +58,11 @@ TEST_F(AbsTest, PositiveTensor) {
data[2] = 7.2f;

at::Tensor result = at::abs(positive_tensor);
float* result_data = result.data_ptr<float>();
EXPECT_FLOAT_EQ(result_data[0], 1.5f);
EXPECT_FLOAT_EQ(result_data[1], 3.0f);
EXPECT_FLOAT_EQ(result_data[2], 7.2f);
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.openAppend();
write_abs_result_to_file(&file, result);
file.saveFile();
}

TEST_F(AbsTest, NegativeTensor) {
Expand All @@ -55,10 +73,11 @@ TEST_F(AbsTest, NegativeTensor) {
data[2] = -7.2f;

at::Tensor result = at::abs(negative_tensor);
float* result_data = result.data_ptr<float>();
EXPECT_FLOAT_EQ(result_data[0], 1.5f);
EXPECT_FLOAT_EQ(result_data[1], 3.0f);
EXPECT_FLOAT_EQ(result_data[2], 7.2f);
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.openAppend();
write_abs_result_to_file(&file, result);
file.saveFile();
}

} // namespace test
Expand Down
65 changes: 44 additions & 21 deletions test/ops/ArangeTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,71 +3,94 @@
#include <ATen/ops/arange.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 ArangeTest : public ::testing::Test {
protected:
void SetUp() override {}
};

TEST_F(ArangeTest, BasicArangeWithEnd) {
at::Tensor result = at::arange(5, at::TensorOptions().dtype(at::kLong));
EXPECT_EQ(result.dim(), 1);
EXPECT_EQ(result.numel(), 5);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.numel()) << " ";
int64_t* data = result.data_ptr<int64_t>();
for (int64_t i = 0; i < 5; ++i) {
EXPECT_EQ(data[i], i);
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

TEST_F(ArangeTest, ArangeWithStartEnd) {
at::Tensor result = at::arange(2, 7, at::TensorOptions().dtype(at::kLong));
EXPECT_EQ(result.dim(), 1);
EXPECT_EQ(result.numel(), 5);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.numel()) << " ";
int64_t* data = result.data_ptr<int64_t>();
for (int64_t i = 0; i < 5; ++i) {
EXPECT_EQ(data[i], i + 2);
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

TEST_F(ArangeTest, ArangeWithStartEndStep) {
at::Tensor result =
at::arange(1, 10, 2, at::TensorOptions().dtype(at::kLong));
EXPECT_EQ(result.dim(), 1);
EXPECT_EQ(result.numel(), 5);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.numel()) << " ";
int64_t* data = result.data_ptr<int64_t>();
for (int64_t i = 0; i < 5; ++i) {
EXPECT_EQ(data[i], 1 + i * 2);
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

TEST_F(ArangeTest, ArangeWithOptions) {
at::Tensor result = at::arange(4, at::TensorOptions().dtype(at::kFloat));
EXPECT_EQ(result.dim(), 1);
EXPECT_EQ(result.numel(), 4);
EXPECT_EQ(result.dtype(), at::kFloat);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.numel()) << " ";
file << std::to_string(static_cast<int>(result.scalar_type())) << " ";
float* data = result.data_ptr<float>();
for (int64_t i = 0; i < 4; ++i) {
EXPECT_FLOAT_EQ(data[i], static_cast<float>(i));
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

TEST_F(ArangeTest, NegativeValues) {
at::Tensor result = at::arange(-3, 3, at::TensorOptions().dtype(at::kLong));
EXPECT_EQ(result.dim(), 1);
EXPECT_EQ(result.numel(), 6);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(result.dim()) << " ";
file << std::to_string(result.numel()) << " ";
int64_t* data = result.data_ptr<int64_t>();
for (int64_t i = 0; i < 6; ++i) {
EXPECT_EQ(data[i], i - 3);
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

} // namespace test
Expand Down
64 changes: 40 additions & 24 deletions test/ops/ConnectionOpsTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,19 @@
#include <ATen/ops/zeros.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 ConnectionOpsTest : public ::testing::Test {
protected:
void SetUp() override {
Expand All @@ -30,32 +38,35 @@ class ConnectionOpsTest : public ::testing::Test {
TEST_F(ConnectionOpsTest, CatDim0) {
std::vector<at::Tensor> tensors = {tensor1, tensor2};
at::Tensor result = at::cat(tensors, 0);

EXPECT_EQ(result.dim(), 2);
EXPECT_EQ(result.sizes()[0], 4); // 2+2
EXPECT_EQ(result.sizes()[1], 3);
EXPECT_EQ(result.numel(), 12);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
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.numel()) << " ";
float* data = result.data_ptr<float>();
for (int64_t i = 0; i < 12; ++i) {
EXPECT_FLOAT_EQ(data[i], static_cast<float>(i));
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

TEST_F(ConnectionOpsTest, CatDim1) {
std::vector<at::Tensor> tensors = {tensor1, tensor2};
at::Tensor result = at::cat(tensors, 1);

EXPECT_EQ(result.dim(), 2);
EXPECT_EQ(result.sizes()[0], 2);
EXPECT_EQ(result.sizes()[1], 6); // 3+3
EXPECT_EQ(result.numel(), 12);

auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
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.numel()) << " ";
float* data = result.data_ptr<float>();
float expected_values[12] = {0, 1, 2, 6, 7, 8, 3, 4, 5, 9, 10, 11};
for (int64_t i = 0; i < 12; ++i) {
EXPECT_FLOAT_EQ(data[i], expected_values[i]);
file << std::to_string(data[i]) << " ";
}
file.saveFile();
}

TEST_F(ConnectionOpsTest, CatThreeTensors) {
Expand All @@ -67,10 +78,13 @@ TEST_F(ConnectionOpsTest, CatThreeTensors) {

std::vector<at::Tensor> tensors = {tensor1, tensor2, tensor3};
at::Tensor result = at::cat(tensors, 0);

EXPECT_EQ(result.sizes()[0], 6); // 2+2+2
EXPECT_EQ(result.sizes()[1], 3);
EXPECT_EQ(result.numel(), 18);
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(result.sizes()[0]) << " ";
file << std::to_string(result.sizes()[1]) << " ";
file << std::to_string(result.numel()) << " ";
file.saveFile();
}

TEST_F(ConnectionOpsTest, CatWithDifferentTypes) {
Expand All @@ -79,11 +93,13 @@ TEST_F(ConnectionOpsTest, CatWithDifferentTypes) {

std::vector<at::Tensor> tensors = {int_tensor, float_tensor};
at::Tensor result = at::cat(tensors, 0);

// Tensors should be promoted to common type
EXPECT_EQ(result.dtype(), at::kInt);
EXPECT_EQ(result.sizes()[0], 2);
EXPECT_EQ(result.sizes()[1], 2);
auto file_name = g_custom_param.get();
FileManerger file(file_name);
file.createFile();
file << std::to_string(static_cast<int>(result.scalar_type())) << " ";
file << std::to_string(result.sizes()[0]) << " ";
file << std::to_string(result.sizes()[1]) << " ";
file.saveFile();
}

} // namespace test
Expand Down
Loading