66 * LICENSE file in the root directory of this source tree. 
77 */  
88
9+ #include  < executorch/runtime/core/error.h> 
910#include  < executorch/runtime/core/exec_aten/exec_aten.h> 
11+ #include  < executorch/runtime/core/result.h> 
1012#include  < executorch/runtime/core/tensor_layout.h> 
1113
1214#include  < gtest/gtest.h> 
1315
1416using  namespace  ::testing; 
1517using  executorch::aten::ScalarType;
18+ using  executorch::runtime::Error;
19+ using  executorch::runtime::Result;
1620using  executorch::runtime::Span;
1721using  executorch::runtime::TensorLayout;
1822
1923TEST (TestTensorLayout, Ctor) {
20-   int32_t  sizes[2 ] = {1 , 2 };
21-   uint8_t  dim_order[2 ] = {0 , 1 };
24+   std::array<int32_t , 2 > sizes = {1 , 2 };
25+   std::array<uint8_t , 2 > dim_order = {0 , 1 };
26+   Span<const  int32_t > sizes_span = {sizes.data (), sizes.size ()};
27+   Span<const  uint8_t > dim_order_span = {dim_order.data (), dim_order.size ()};
2228
23-   Span<const  int32_t > sizes_span = {sizes, sizes + 2 };
24-   Span<const  uint8_t > dim_order_span = {dim_order, dim_order + 2 };
25- 
26-   TensorLayout layout =
27-       TensorLayout (ScalarType::Float, sizes_span, dim_order_span);
29+   Result<TensorLayout> layout_res =
30+       TensorLayout::create (sizes_span, dim_order_span, ScalarType::Float);
31+   EXPECT_TRUE (layout_res.ok ());
2832
33+   TensorLayout layout = layout_res.get ();
2934  EXPECT_EQ (layout.scalar_type (), ScalarType::Float);
3035
3136  EXPECT_EQ (layout.sizes ().size (), sizes_span.size ());
@@ -38,3 +43,36 @@ TEST(TestTensorLayout, Ctor) {
3843
3944  EXPECT_EQ (layout.nbytes (), 8 );
4045}
46+ 
47+ TEST (TestTensorLayout, Ctor_InvalidDimOrder) {
48+   std::array<int32_t , 1 > sizes = {2 };
49+   std::array<uint8_t , 1 > dim_order = {1 };
50+   Span<const  int32_t > sizes_span = {sizes.data (), sizes.size ()};
51+   Span<const  uint8_t > dim_order_span = {dim_order.data (), dim_order.size ()};
52+ 
53+   Result<TensorLayout> layout_res =
54+       TensorLayout::create (sizes_span, dim_order_span, ScalarType::Float);
55+   EXPECT_EQ (layout_res.error (), Error::InvalidArgument);
56+ }
57+ 
58+ TEST (TestTensorLayout, Ctor_InvalidSizes) {
59+   std::array<int32_t , 1 > sizes = {-1 };
60+   std::array<uint8_t , 1 > dim_order = {0 };
61+   Span<const  int32_t > sizes_span = {sizes.data (), sizes.size ()};
62+   Span<const  uint8_t > dim_order_span = {dim_order.data (), dim_order.size ()};
63+ 
64+   Result<TensorLayout> layout_res =
65+       TensorLayout::create (sizes_span, dim_order_span, ScalarType::Float);
66+   EXPECT_EQ (layout_res.error (), Error::InvalidArgument);
67+ }
68+ 
69+ TEST (TestTensorLayout, Ctor_SizesDimOrderMismatch) {
70+   std::array<int32_t , 1 > sizes = {2 };
71+   std::array<uint8_t , 2 > dim_order = {0 , 1 };
72+   Span<const  int32_t > sizes_span = {sizes.data (), sizes.size ()};
73+   Span<const  uint8_t > dim_order_span = {dim_order.data (), dim_order.size ()};
74+ 
75+   Result<TensorLayout> layout_res =
76+       TensorLayout::create (sizes_span, dim_order_span, ScalarType::Float);
77+   EXPECT_EQ (layout_res.error (), Error::InvalidArgument);
78+ }
0 commit comments