Caffe2 - C++ API
A deep learning, cross platform ML framework
wrapdim_test.cpp
1 #include <gtest/gtest.h>
2 
3 #include <ATen/ATen.h>
4 
5 using namespace at;
6 void TestSimpleCase(Type& T) {
7  auto a = randn({2, 3, 4, 5}, T);
8  ASSERT_TRUE(a.prod(-4).equal(a.prod(0)));
9  ASSERT_TRUE(a.prod(3).equal(a.prod(-1)));
10 }
11 
12 void TestExpressionSpecification(Type& T) {
13  auto a = randn({2, 3, 4, 5}, T);
14  ASSERT_TRUE(a.unsqueeze(-5).equal(a.unsqueeze(0)));
15  ASSERT_TRUE(a.unsqueeze(4).equal(a.unsqueeze(-1)));
16 
17  // can unsqueeze scalar
18  auto b = randn(1, T);
19  b.unsafeGetTensorImpl()->maybe_zero_dim(true);
20  ASSERT_TRUE(b.unsqueeze(0).equal(b.unsqueeze(-1)));
21 }
22 
23 void TestEmptyTensor(Type& T) {
24  auto a = randn(0, T);
25  ASSERT_TRUE(a.prod(0).equal(at::ones({}, T)));
26 }
27 
28 void TestScalarVs1Dim1Size(Type& T) {
29  auto a = randn(1, T);
30  ASSERT_TRUE(a.prod(0).equal(a.prod(-1)));
31  a.unsafeGetTensorImpl()->maybe_zero_dim(true);
32  ASSERT_EQ(a.dim(), 0);
33  ASSERT_TRUE(a.prod(0).equal(a.prod(-1)));
34 }
35 
36 TEST(TestWrapdim, TestWrapdim) {
37  manual_seed(123);
38  Type& T = CPU(kFloat);
39 
40  TestSimpleCase(T);
41  TestEmptyTensor(T);
42  TestScalarVs1Dim1Size(T);
43  TestExpressionSpecification(T);
44 }
Flush-To-Zero and Denormals-Are-Zero mode.