@@ -104,4 +104,56 @@ TEST(TestTensor, ZeroDimensionalTensor) {
104104 ASSERT_EQ (t.strides ().size (), 1 );
105105}
106106
107+ TEST (TestNumericTensor, ElementAccess) {
108+ std::vector<int64_t > shape = {3 , 4 };
109+
110+ std::vector<int64_t > values_i64 = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 };
111+ std::shared_ptr<Buffer> buffer_i64 (Buffer::Wrap (values_i64));
112+ NumericTensor<Int64Type> t_i64 (buffer_i64, shape);
113+
114+ ASSERT_EQ (1 , t_i64.Value ({0 , 0 }));
115+ ASSERT_EQ (5 , t_i64.Value ({1 , 0 }));
116+ ASSERT_EQ (6 , t_i64.Value ({1 , 1 }));
117+ ASSERT_EQ (11 , t_i64.Value ({2 , 2 }));
118+
119+ std::vector<float > values_f32 = {1 .1f , 2 .1f , 3 .1f , 4 .1f , 5 .1f , 6 .1f ,
120+ 7 .1f , 8 .1f , 9 .1f , 10 .1f , 11 .1f , 12 .1f };
121+ std::shared_ptr<Buffer> buffer_f32 (Buffer::Wrap (values_f32));
122+ NumericTensor<FloatType> t_f32 (buffer_f32, shape);
123+
124+ ASSERT_EQ (1 .1f , t_f32.Value ({0 , 0 }));
125+ ASSERT_EQ (5 .1f , t_f32.Value ({1 , 0 }));
126+ ASSERT_EQ (6 .1f , t_f32.Value ({1 , 1 }));
127+ ASSERT_EQ (11 .1f , t_f32.Value ({2 , 2 }));
128+ }
129+
130+ TEST (TestNumericTensor, ElementAccessWithStrides) {
131+ std::vector<int64_t > shape = {3 , 4 };
132+
133+ const int64_t i64_size = sizeof (int64_t );
134+ std::vector<int64_t > values_i64 = {1 , 2 , 3 , 4 , 0 , 0 , 5 , 6 , 7 ,
135+ 8 , 0 , 0 , 9 , 10 , 11 , 12 , 0 , 0 };
136+ std::vector<int64_t > strides_i64 = {i64_size * 6 , i64_size};
137+ std::shared_ptr<Buffer> buffer_i64 (Buffer::Wrap (values_i64));
138+ NumericTensor<Int64Type> t_i64 (buffer_i64, shape, strides_i64);
139+
140+ ASSERT_EQ (1 , t_i64.Value ({0 , 0 }));
141+ ASSERT_EQ (5 , t_i64.Value ({1 , 0 }));
142+ ASSERT_EQ (6 , t_i64.Value ({1 , 1 }));
143+ ASSERT_EQ (11 , t_i64.Value ({2 , 2 }));
144+
145+ const int64_t f32_size = sizeof (float );
146+ std::vector<float > values_f32 = {1 .1f , 2 .1f , 3 .1f , 4 .1f , 0 .0f , 0 .0f ,
147+ 5 .1f , 6 .1f , 7 .1f , 8 .1f , 0 .0f , 0 .0f ,
148+ 9 .1f , 10 .1f , 11 .1f , 12 .1f , 0 .0f , 0 .0f };
149+ std::vector<int64_t > strides_f32 = {f32_size * 6 , f32_size};
150+ std::shared_ptr<Buffer> buffer_f32 (Buffer::Wrap (values_f32));
151+ NumericTensor<FloatType> t_f32 (buffer_f32, shape, strides_f32);
152+
153+ ASSERT_EQ (1 .1f , t_f32.Value ({0 , 0 }));
154+ ASSERT_EQ (5 .1f , t_f32.Value ({1 , 0 }));
155+ ASSERT_EQ (6 .1f , t_f32.Value ({1 , 1 }));
156+ ASSERT_EQ (11 .1f , t_f32.Value ({2 , 2 }));
157+ }
158+
107159} // namespace arrow
0 commit comments