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