diff --git a/eval/eval/BUILD b/eval/eval/BUILD index 256390459..ddbdd0729 100644 --- a/eval/eval/BUILD +++ b/eval/eval/BUILD @@ -176,9 +176,6 @@ cc_library( cc_library( name = "const_value_step", - srcs = [ - "const_value_step.cc", - ], hdrs = [ "const_value_step.h", ], @@ -186,11 +183,7 @@ cc_library( ":compiler_constant_step", ":direct_expression_step", ":evaluator_core", - "//common:allocator", - "//common:constant", "//common:value", - "//internal:status_macros", - "//runtime/internal:convert_constant", "@com_google_absl//absl/status:statusor", ], ) @@ -610,36 +603,6 @@ cc_test( ], ) -cc_test( - name = "const_value_step_test", - size = "small", - srcs = [ - "const_value_step_test.cc", - ], - deps = [ - ":cel_expression_flat_impl", - ":const_value_step", - ":evaluator_core", - "//base:data", - "//common:constant", - "//common:expr", - "//eval/internal:errors", - "//eval/public:activation", - "//eval/public:cel_value", - "//eval/public/testing:matchers", - "//internal:status_macros", - "//internal:testing", - "//runtime:runtime_options", - "//runtime/internal:runtime_env", - "//runtime/internal:runtime_env_testing", - "@com_google_absl//absl/base:nullability", - "@com_google_absl//absl/status", - "@com_google_absl//absl/status:statusor", - "@com_google_absl//absl/time", - "@com_google_protobuf//:protobuf", - ], -) - cc_test( name = "container_access_step_test", size = "small", diff --git a/eval/eval/const_value_step.cc b/eval/eval/const_value_step.cc deleted file mode 100644 index edba29437..000000000 --- a/eval/eval/const_value_step.cc +++ /dev/null @@ -1,47 +0,0 @@ -#include "eval/eval/const_value_step.h" - -#include -#include -#include - -#include "absl/status/statusor.h" -#include "common/allocator.h" -#include "common/constant.h" -#include "common/value.h" -#include "eval/eval/compiler_constant_step.h" -#include "eval/eval/direct_expression_step.h" -#include "eval/eval/evaluator_core.h" -#include "internal/status_macros.h" -#include "runtime/internal/convert_constant.h" - -namespace google::api::expr::runtime { - -namespace { - -using ::cel::Constant; -using ::cel::runtime_internal::ConvertConstant; - -} // namespace - -std::unique_ptr CreateConstValueDirectStep( - cel::Value value, int64_t id) { - return std::make_unique(std::move(value), id); -} - -absl::StatusOr> CreateConstValueStep( - cel::Value value, int64_t expr_id, bool comes_from_ast) { - return std::make_unique(std::move(value), expr_id, - comes_from_ast); -} - -absl::StatusOr> CreateConstValueStep( - const Constant& value, int64_t expr_id, cel::Allocator<> allocator, - bool comes_from_ast) { - CEL_ASSIGN_OR_RETURN(cel::Value converted_value, - ConvertConstant(value, allocator)); - - return std::make_unique(std::move(converted_value), - expr_id, comes_from_ast); -} - -} // namespace google::api::expr::runtime diff --git a/eval/eval/const_value_step.h b/eval/eval/const_value_step.h index 2664b8fac..c3cf6a424 100644 --- a/eval/eval/const_value_step.h +++ b/eval/eval/const_value_step.h @@ -3,29 +3,28 @@ #include #include +#include #include "absl/status/statusor.h" -#include "common/allocator.h" -#include "common/constant.h" #include "common/value.h" +#include "eval/eval/compiler_constant_step.h" #include "eval/eval/direct_expression_step.h" #include "eval/eval/evaluator_core.h" namespace google::api::expr::runtime { -std::unique_ptr CreateConstValueDirectStep( - cel::Value value, int64_t expr_id = -1); - -// Factory method for Constant Value expression step. -absl::StatusOr> CreateConstValueStep( - cel::Value value, int64_t expr_id, bool comes_from_ast = true); +// Factory method for Constant AST node expression recursive step. +inline std::unique_ptr CreateConstValueDirectStep( + cel::Value value, int64_t id = -1) { + return std::make_unique(std::move(value), id); +} // Factory method for Constant AST node expression step. -// Copies the Constant Expr node to avoid lifecycle dependency on source -// expression. -absl::StatusOr> CreateConstValueStep( - const cel::Constant&, int64_t expr_id, cel::Allocator<> allocator, - bool comes_from_ast = true); +inline absl::StatusOr> CreateConstValueStep( + cel::Value value, int64_t expr_id, bool comes_from_ast = true) { + return std::make_unique(std::move(value), expr_id, + comes_from_ast); +} } // namespace google::api::expr::runtime diff --git a/eval/eval/const_value_step_test.cc b/eval/eval/const_value_step_test.cc deleted file mode 100644 index 3aa19e8a1..000000000 --- a/eval/eval/const_value_step_test.cc +++ /dev/null @@ -1,222 +0,0 @@ -#include "eval/eval/const_value_step.h" - -#include -#include - -#include "absl/base/nullability.h" -#include "absl/status/status.h" -#include "absl/status/statusor.h" -#include "absl/time/time.h" -#include "base/type_provider.h" -#include "common/constant.h" -#include "common/expr.h" -#include "eval/eval/cel_expression_flat_impl.h" -#include "eval/eval/evaluator_core.h" -#include "eval/internal/errors.h" -#include "eval/public/activation.h" -#include "eval/public/cel_value.h" -#include "eval/public/testing/matchers.h" -#include "internal/status_macros.h" -#include "internal/testing.h" -#include "runtime/internal/runtime_env.h" -#include "runtime/internal/runtime_env_testing.h" -#include "runtime/runtime_options.h" -#include "google/protobuf/arena.h" - -namespace google::api::expr::runtime { - -namespace { - -using ::absl_testing::StatusIs; -using ::cel::Constant; -using ::cel::Expr; -using ::cel::TypeProvider; -using ::cel::runtime_internal::NewTestingRuntimeEnv; -using ::cel::runtime_internal::RuntimeEnv; -using ::testing::Eq; -using ::testing::HasSubstr; - -absl::StatusOr RunConstantExpression( - const absl_nonnull std::shared_ptr& env, const Expr* expr, - const Constant& const_expr, google::protobuf::Arena* arena) { - CEL_ASSIGN_OR_RETURN(auto step, - CreateConstValueStep(const_expr, expr->id(), arena)); - - google::api::expr::runtime::ExecutionPath path; - path.push_back(std::move(step)); - - CelExpressionFlatImpl impl( - env, FlatExpression(std::move(path), /*comprehension_slot_count=*/0, - env->type_registry.GetComposedTypeProvider(), - cel::RuntimeOptions{})); - - google::api::expr::runtime::Activation activation; - - return impl.Evaluate(activation, arena); -} - -class ConstValueStepTest : public ::testing::Test { - public: - ConstValueStepTest() : env_(NewTestingRuntimeEnv()) {} - - protected: - absl_nonnull std::shared_ptr env_; - google::protobuf::Arena arena_; -}; - -TEST_F(ConstValueStepTest, TestEvaluationConstInt64) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_int64_value(1); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - ASSERT_TRUE(value.IsInt64()); - EXPECT_THAT(value.Int64OrDie(), Eq(1)); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstUint64) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_uint64_value(1); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - ASSERT_TRUE(value.IsUint64()); - EXPECT_THAT(value.Uint64OrDie(), Eq(1)); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstBool) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_bool_value(true); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - ASSERT_TRUE(value.IsBool()); - EXPECT_THAT(value.BoolOrDie(), Eq(true)); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstNull) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_null_value(nullptr); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - EXPECT_TRUE(value.IsNull()); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstString) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_string_value("test"); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - ASSERT_TRUE(value.IsString()); - EXPECT_THAT(value.StringOrDie().value(), Eq("test")); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstDouble) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_double_value(1.0); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - ASSERT_TRUE(value.IsDouble()); - EXPECT_THAT(value.DoubleOrDie(), testing::DoubleEq(1.0)); -} - -// Test Bytes constant -// For now, bytes are equivalent to string. -TEST_F(ConstValueStepTest, TestEvaluationConstBytes) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_bytes_value("test"); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - ASSERT_TRUE(value.IsBytes()); - EXPECT_THAT(value.BytesOrDie().value(), Eq("test")); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstDuration) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_duration_value(absl::Seconds(5) + absl::Nanoseconds(2000)); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - EXPECT_THAT(value, - test::IsCelDuration(absl::Seconds(5) + absl::Nanoseconds(2000))); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstDurationOutOfRange) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_duration_value(cel::runtime_internal::kDurationHigh); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - EXPECT_THAT(value, - test::IsCelError(StatusIs(absl::StatusCode::kInvalidArgument, - HasSubstr("out of range")))); -} - -TEST_F(ConstValueStepTest, TestEvaluationConstTimestamp) { - Expr expr; - auto& const_expr = expr.mutable_const_expr(); - const_expr.set_time_value(absl::FromUnixSeconds(3600) + - absl::Nanoseconds(1000)); - - auto status = RunConstantExpression(env_, &expr, const_expr, &arena_); - - ASSERT_OK(status); - - auto value = status.value(); - - EXPECT_THAT(value, test::IsCelTimestamp(absl::FromUnixSeconds(3600) + - absl::Nanoseconds(1000))); -} - -} // namespace - -} // namespace google::api::expr::runtime