@@ -503,6 +503,47 @@ TEST_F(RegisterPrimOpsTest, TestETViewEmpty) {
503
503
getOpsFn (" executorch_prim::et_view.default" )(context, bad_stack), " " );
504
504
}
505
505
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
+
506
547
TEST_F (RegisterPrimOpsTest, TestTrunc) {
507
548
std::array<double , 10 > inputs = {
508
549
0.0 , 0.25 , 0.5 , 0.75 , 1.0 , 1.75 , -0.5 , -1.0 , -1.5 , 9.999999 };
0 commit comments