@@ -503,6 +503,47 @@ TEST_F(RegisterPrimOpsTest, TestETViewEmpty) {
503503      getOpsFn (" executorch_prim::et_view.default" " " 
504504}
505505
506+ TEST_F (RegisterPrimOpsTest, TestCeil) {
507+   std::array<double , 10 > inputs = {
508+       0.0 , 0.25 , 0.5 , 0.75 , 1.0 , 1.75 , -0.5 , -1.0 , -1.5 , 9.999999 };
509+   std::array<int64_t , 10 > expected = {0 , 1 , 1 , 1 , 1 , 2 , 0 , -1 , -1 , 10 };
510+ 
511+   for  (auto  i = 0 ; i < inputs.size (); i++) {
512+     EValue values[2 ];
513+     values[0 ] = EValue (inputs[i]);
514+     values[1 ] = EValue (0.0 );
515+ 
516+     EValue* stack[2 ];
517+     for  (size_t  j = 0 ; j < 2 ; j++) {
518+       stack[j] = &values[j];
519+     }
520+ 
521+     getOpsFn (" executorch_prim::ceil.Scalar" 
522+     EXPECT_EQ (stack[1 ]->toInt (), expected[i]);
523+   }
524+ }
525+ 
526+ TEST_F (RegisterPrimOpsTest, TestRound) {
527+   //  Note that Python uses round-to-even for halfway values.
528+   std::array<double , 10 > inputs = {
529+       0.0 , 0.25 , 0.5 , 0.75 , 1.0 , 1.5 , -0.5 , -1.0 , -1.5 , 9.999999 };
530+   std::array<int64_t , 10 > expected = {0 , 0 , 0 , 1 , 1 , 2 , 0 , -1 , -2 , 10 };
531+ 
532+   for  (auto  i = 0 ; i < inputs.size (); i++) {
533+     EValue values[2 ];
534+     values[0 ] = EValue (inputs[i]);
535+     values[1 ] = EValue (0.0 );
536+ 
537+     EValue* stack[2 ];
538+     for  (size_t  j = 0 ; j < 2 ; j++) {
539+       stack[j] = &values[j];
540+     }
541+ 
542+     getOpsFn (" executorch_prim::round.Scalar" 
543+     EXPECT_EQ (stack[1 ]->toInt (), expected[i]);
544+   }
545+ }
546+ 
506547TEST_F (RegisterPrimOpsTest, TestTrunc) {
507548  std::array<double , 10 > inputs = {
508549      0.0 , 0.25 , 0.5 , 0.75 , 1.0 , 1.75 , -0.5 , -1.0 , -1.5 , 9.999999 };
0 commit comments