@@ -506,3 +506,90 @@ TEST_F(TensorPtrMakerTest, CreateRandnTensorWithIntType) {
506506 EXPECT_EQ (val, 0 );
507507 }
508508}
509+
510+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithDefaultStartAndStep) {
511+ auto tensor = arange (5 );
512+
513+ EXPECT_EQ (tensor->dim (), 1 );
514+ EXPECT_EQ (tensor->size (0 ), 5 );
515+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
516+
517+ for (auto i = 0 ; i < tensor->numel (); ++i) {
518+ auto val = tensor->const_data_ptr <float >()[i];
519+ EXPECT_EQ (val, static_cast <float >(i));
520+ }
521+ }
522+
523+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithStartEndStep) {
524+ auto tensor = arange (2 , 10 , 2 );
525+
526+ EXPECT_EQ (tensor->dim (), 1 );
527+ EXPECT_EQ (tensor->size (0 ), 4 ); // (10-2)/2 = 4 elements
528+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
529+
530+ for (auto i = 0 ; i < tensor->numel (); ++i) {
531+ auto val = tensor->const_data_ptr <float >()[i];
532+ EXPECT_EQ (val, static_cast <float >(2 + i * 2 ));
533+ }
534+ }
535+
536+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithNegativeStep) {
537+ auto tensor = arange (5 , 0 , -1 );
538+
539+ EXPECT_EQ (tensor->dim (), 1 );
540+ EXPECT_EQ (tensor->size (0 ), 5 );
541+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
542+
543+ for (auto i = 0 ; i < tensor->numel (); ++i) {
544+ auto val = tensor->const_data_ptr <float >()[i];
545+ EXPECT_EQ (val, static_cast <float >(5 - i));
546+ }
547+ }
548+
549+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithIntType) {
550+ auto tensor = arange (0 , 5 , 1 , executorch::aten::ScalarType::Int);
551+
552+ EXPECT_EQ (tensor->dim (), 1 );
553+ EXPECT_EQ (tensor->size (0 ), 5 );
554+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Int);
555+
556+ for (auto i = 0 ; i < tensor->numel (); ++i) {
557+ auto val = tensor->const_data_ptr <int32_t >()[i];
558+ EXPECT_EQ (val, i);
559+ }
560+ }
561+
562+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithLongType) {
563+ auto tensor = arange (0 , 5 , 1 , executorch::aten::ScalarType::Long);
564+
565+ EXPECT_EQ (tensor->dim (), 1 );
566+ EXPECT_EQ (tensor->size (0 ), 5 );
567+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Long);
568+
569+ for (auto i = 0 ; i < tensor->numel (); ++i) {
570+ auto val = tensor->const_data_ptr <int64_t >()[i];
571+ EXPECT_EQ (val, static_cast <int64_t >(i));
572+ }
573+ }
574+
575+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithDoubleType) {
576+ auto tensor = arange (0.5 , 5.5 , 0.5 , executorch::aten::ScalarType::Double);
577+
578+ EXPECT_EQ (tensor->dim (), 1 );
579+ EXPECT_EQ (tensor->size (0 ), 10 ); // (5.5-0.5)/0.5 = 10 elements
580+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Double);
581+
582+ for (auto i = 0 ; i < tensor->numel (); ++i) {
583+ auto val = tensor->const_data_ptr <double >()[i];
584+ EXPECT_DOUBLE_EQ (val, 0.5 + i * 0.5 );
585+ }
586+ }
587+
588+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithEmptyRange) {
589+ // End < start with positive step should give empty tensor
590+ auto tensor = arange (5 , 0 , 1 );
591+
592+ EXPECT_EQ (tensor->dim (), 1 );
593+ EXPECT_EQ (tensor->size (0 ), 0 );
594+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
595+ }
0 commit comments