@@ -482,3 +482,90 @@ TEST_F(TensorPtrMakerTest, CreateRandnTensorWithIntType) {
482482 EXPECT_EQ (val, 0 );
483483 }
484484}
485+
486+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithDefaultStartAndStep) {
487+ auto tensor = arange (5 );
488+
489+ EXPECT_EQ (tensor->dim (), 1 );
490+ EXPECT_EQ (tensor->size (0 ), 5 );
491+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
492+
493+ for (auto i = 0 ; i < tensor->numel (); ++i) {
494+ auto val = tensor->const_data_ptr <float >()[i];
495+ EXPECT_EQ (val, static_cast <float >(i));
496+ }
497+ }
498+
499+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithStartEndStep) {
500+ auto tensor = arange (2 , 10 , 2 );
501+
502+ EXPECT_EQ (tensor->dim (), 1 );
503+ EXPECT_EQ (tensor->size (0 ), 4 ); // (10-2)/2 = 4 elements
504+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
505+
506+ for (auto i = 0 ; i < tensor->numel (); ++i) {
507+ auto val = tensor->const_data_ptr <float >()[i];
508+ EXPECT_EQ (val, static_cast <float >(2 + i * 2 ));
509+ }
510+ }
511+
512+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithNegativeStep) {
513+ auto tensor = arange (5 , 0 , -1 );
514+
515+ EXPECT_EQ (tensor->dim (), 1 );
516+ EXPECT_EQ (tensor->size (0 ), 5 );
517+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
518+
519+ for (auto i = 0 ; i < tensor->numel (); ++i) {
520+ auto val = tensor->const_data_ptr <float >()[i];
521+ EXPECT_EQ (val, static_cast <float >(5 - i));
522+ }
523+ }
524+
525+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithIntType) {
526+ auto tensor = arange (0 , 5 , 1 , executorch::aten::ScalarType::Int);
527+
528+ EXPECT_EQ (tensor->dim (), 1 );
529+ EXPECT_EQ (tensor->size (0 ), 5 );
530+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Int);
531+
532+ for (auto i = 0 ; i < tensor->numel (); ++i) {
533+ auto val = tensor->const_data_ptr <int32_t >()[i];
534+ EXPECT_EQ (val, i);
535+ }
536+ }
537+
538+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithLongType) {
539+ auto tensor = arange (0 , 5 , 1 , executorch::aten::ScalarType::Long);
540+
541+ EXPECT_EQ (tensor->dim (), 1 );
542+ EXPECT_EQ (tensor->size (0 ), 5 );
543+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Long);
544+
545+ for (auto i = 0 ; i < tensor->numel (); ++i) {
546+ auto val = tensor->const_data_ptr <int64_t >()[i];
547+ EXPECT_EQ (val, static_cast <int64_t >(i));
548+ }
549+ }
550+
551+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithDoubleType) {
552+ auto tensor = arange (0.5 , 5.5 , 0.5 , executorch::aten::ScalarType::Double);
553+
554+ EXPECT_EQ (tensor->dim (), 1 );
555+ EXPECT_EQ (tensor->size (0 ), 10 ); // (5.5-0.5)/0.5 = 10 elements
556+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Double);
557+
558+ for (auto i = 0 ; i < tensor->numel (); ++i) {
559+ auto val = tensor->const_data_ptr <double >()[i];
560+ EXPECT_DOUBLE_EQ (val, 0.5 + i * 0.5 );
561+ }
562+ }
563+
564+ TEST_F (TensorPtrMakerTest, CreateArangeTensorWithEmptyRange) {
565+ // End < start with positive step should give empty tensor
566+ auto tensor = arange (5 , 0 , 1 );
567+
568+ EXPECT_EQ (tensor->dim (), 1 );
569+ EXPECT_EQ (tensor->size (0 ), 0 );
570+ EXPECT_EQ (tensor->scalar_type (), executorch::aten::ScalarType::Float);
571+ }
0 commit comments