@@ -503,6 +503,47 @@ TEST_F(RegisterPrimOpsTest, TestETViewEmpty) {
503503 getOpsFn (" executorch_prim::et_view.default" )(context, bad_stack), " " );
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" )(context, stack);
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" )(context, stack);
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