From 86e138757358eb55a075acf8400e04c021bb0023 Mon Sep 17 00:00:00 2001 From: Le-soleile <3516093767@qq.com> Date: Tue, 20 Jan 2026 11:35:41 +0800 Subject: [PATCH 1/2] add var tests --- test/TensorTest.cpp | 80 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/test/TensorTest.cpp b/test/TensorTest.cpp index 5868349..06608c8 100644 --- a/test/TensorTest.cpp +++ b/test/TensorTest.cpp @@ -2,9 +2,22 @@ #include #include #include +#if !USE_PADDLE_API #include +#endif #include +#if USE_PADDLE_API +#include "paddle/phi/api/include/tensor.h" +#include "paddle/phi/common/place.h" +#include "paddle/phi/core/dense_tensor.h" +#include "paddle/phi/core/memory/malloc.h" +namespace phi { +inline std::ostream& operator<<(std::ostream& os, AllocationType type) { + return os << static_cast(type); +} +} // namespace phi +#endif namespace at { namespace test { @@ -170,5 +183,72 @@ TEST_F(TensorTest, Transpose) { EXPECT_EQ(transposed.sizes()[2], 2); } +// 测试 var(bool unbiased) +TEST_F(TensorTest, VarUnbiased) { + std::vector shape = {2, 3}; + at::Tensor test_tensor = at::ones(shape, at::kFloat); + // 设置一些不同的值以便计算方差 + test_tensor.data_ptr()[0] = 1.0f; + test_tensor.data_ptr()[1] = 2.0f; + test_tensor.data_ptr()[2] = 3.0f; + test_tensor.data_ptr()[3] = 4.0f; + test_tensor.data_ptr()[4] = 5.0f; + test_tensor.data_ptr()[5] = 6.0f; + + // 测试 unbiased=True (默认) + at::Tensor var_result = test_tensor.var(true); + EXPECT_TRUE(var_result.defined()); + EXPECT_EQ(var_result.dim(), 0); // 标量结果 + + // 测试 unbiased=False + at::Tensor var_result_biased = test_tensor.var(false); + EXPECT_TRUE(var_result_biased.defined()); + EXPECT_EQ(var_result_biased.dim(), 0); +} + +// 测试 var(OptionalIntArrayRef dim, bool unbiased, bool keepdim) +TEST_F(TensorTest, VarDim) { + std::vector shape = {2, 3}; + at::Tensor test_tensor = at::ones(shape, at::kFloat); + + for (int i = 0; i < 6; ++i) { + test_tensor.data_ptr()[i] = static_cast(i + 1); + } + + // 测试在维度 0 上计算方差 + at::Tensor var_result = test_tensor.var({0}, true, false); + EXPECT_TRUE(var_result.defined()); + EXPECT_EQ(var_result.dim(), 1); + EXPECT_EQ(var_result.size(0), 3); + + // 测试在维度 1 上计算方差,keepdim=true + at::Tensor var_result_keepdim = test_tensor.var({1}, true, true); + EXPECT_TRUE(var_result_keepdim.defined()); + EXPECT_EQ(var_result_keepdim.dim(), 2); + EXPECT_EQ(var_result_keepdim.size(0), 2); + EXPECT_EQ(var_result_keepdim.size(1), 1); +} + +// 测试 var(OptionalIntArrayRef dim, optional correction, bool keepdim) +TEST_F(TensorTest, VarCorrection) { + std::vector shape = {2, 3}; + at::Tensor test_tensor = at::ones(shape, at::kFloat); + for (int i = 0; i < 6; ++i) { + test_tensor.data_ptr()[i] = static_cast(i + 1); + } + + // 测试使用 correction=1.0 (Bessel's correction) + at::Tensor var_result = test_tensor.var({0}, at::Scalar(1.0), false); + EXPECT_TRUE(var_result.defined()); + EXPECT_EQ(var_result.dim(), 1); + EXPECT_EQ(var_result.size(0), 3); + + // 测试使用 correction=0.0 (population variance) + at::Tensor var_result_pop = test_tensor.var({0}, at::Scalar(0.0), false); + EXPECT_TRUE(var_result_pop.defined()); + EXPECT_EQ(var_result_pop.dim(), 1); + EXPECT_EQ(var_result_pop.size(0), 3); +} + } // namespace test } // namespace at From 64d2cb30288f7fda6fd038d54d178e46a0e7cf7d Mon Sep 17 00:00:00 2001 From: Le-soleile <3516093767@qq.com> Date: Mon, 2 Feb 2026 17:21:22 +0800 Subject: [PATCH 2/2] add var test --- test/TensorTest.cpp | 56 ++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/test/TensorTest.cpp b/test/TensorTest.cpp index e6ebbda..745bad8 100644 --- a/test/TensorTest.cpp +++ b/test/TensorTest.cpp @@ -228,69 +228,63 @@ TEST_F(TensorTest, Transpose) { // 测试 var(bool unbiased) TEST_F(TensorTest, VarUnbiased) { + auto file_name = g_custom_param.get(); + FileManerger file(file_name); + file.createFile(); std::vector shape = {2, 3}; at::Tensor test_tensor = at::ones(shape, at::kFloat); - // 设置一些不同的值以便计算方差 test_tensor.data_ptr()[0] = 1.0f; test_tensor.data_ptr()[1] = 2.0f; test_tensor.data_ptr()[2] = 3.0f; test_tensor.data_ptr()[3] = 4.0f; test_tensor.data_ptr()[4] = 5.0f; test_tensor.data_ptr()[5] = 6.0f; - - // 测试 unbiased=True (默认) at::Tensor var_result = test_tensor.var(true); - EXPECT_TRUE(var_result.defined()); - EXPECT_EQ(var_result.dim(), 0); // 标量结果 - - // 测试 unbiased=False + file << std::to_string(var_result.dim()) << " "; + file << std::to_string(var_result.data_ptr()[0]) << " "; at::Tensor var_result_biased = test_tensor.var(false); - EXPECT_TRUE(var_result_biased.defined()); - EXPECT_EQ(var_result_biased.dim(), 0); + file << std::to_string(var_result_biased.dim()) << " "; + file << std::to_string(var_result_biased.data_ptr()[0]) << " "; + file.saveFile(); } // 测试 var(OptionalIntArrayRef dim, bool unbiased, bool keepdim) TEST_F(TensorTest, VarDim) { + auto file_name = g_custom_param.get(); + FileManerger file(file_name); + file.createFile(); std::vector shape = {2, 3}; at::Tensor test_tensor = at::ones(shape, at::kFloat); - for (int i = 0; i < 6; ++i) { test_tensor.data_ptr()[i] = static_cast(i + 1); } - - // 测试在维度 0 上计算方差 at::Tensor var_result = test_tensor.var({0}, true, false); - EXPECT_TRUE(var_result.defined()); - EXPECT_EQ(var_result.dim(), 1); - EXPECT_EQ(var_result.size(0), 3); - - // 测试在维度 1 上计算方差,keepdim=true + file << std::to_string(var_result.dim()) << " "; + file << std::to_string(var_result.size(0)) << " "; at::Tensor var_result_keepdim = test_tensor.var({1}, true, true); - EXPECT_TRUE(var_result_keepdim.defined()); - EXPECT_EQ(var_result_keepdim.dim(), 2); - EXPECT_EQ(var_result_keepdim.size(0), 2); - EXPECT_EQ(var_result_keepdim.size(1), 1); + file << std::to_string(var_result_keepdim.dim()) << " "; + file << std::to_string(var_result_keepdim.size(0)) << " "; + file << std::to_string(var_result_keepdim.size(1)) << " "; + file.saveFile(); } // 测试 var(OptionalIntArrayRef dim, optional correction, bool keepdim) TEST_F(TensorTest, VarCorrection) { + auto file_name = g_custom_param.get(); + FileManerger file(file_name); + file.createFile(); std::vector shape = {2, 3}; at::Tensor test_tensor = at::ones(shape, at::kFloat); for (int i = 0; i < 6; ++i) { test_tensor.data_ptr()[i] = static_cast(i + 1); } - - // 测试使用 correction=1.0 (Bessel's correction) at::Tensor var_result = test_tensor.var({0}, at::Scalar(1.0), false); - EXPECT_TRUE(var_result.defined()); - EXPECT_EQ(var_result.dim(), 1); - EXPECT_EQ(var_result.size(0), 3); - - // 测试使用 correction=0.0 (population variance) + file << std::to_string(var_result.dim()) << " "; + file << std::to_string(var_result.size(0)) << " "; at::Tensor var_result_pop = test_tensor.var({0}, at::Scalar(0.0), false); - EXPECT_TRUE(var_result_pop.defined()); - EXPECT_EQ(var_result_pop.dim(), 1); - EXPECT_EQ(var_result_pop.size(0), 3); + file << std::to_string(var_result_pop.dim()) << " "; + file << std::to_string(var_result_pop.size(0)) << " "; + file.saveFile(); } } // namespace test