MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / math_macros

Function math_macros

extensions/math_ext_macros.cc:96–190  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

94} // namespace
95
96std::vector<Macro> math_macros() {
97 absl::StatusOr<Macro> least = Macro::ReceiverVarArg(
98 kLeast,
99 [](MacroExprFactory &factory, Expr &target,
100 absl::Span<Expr> arguments) -> absl::optional<Expr> {
101 if (!IsTargetNamespace(target)) {
102 return absl::nullopt;
103 }
104
105 switch (arguments.size()) {
106 case 0:
107 return factory.ReportErrorAt(
108 target, "math.least() requires at least one argument.");
109 case 1: {
110 if (!IsListLiteralWithValidArgs(arguments[0]) &&
111 !IsValidArgType(arguments[0])) {
112 return factory.ReportErrorAt(
113 arguments[0], "math.least() invalid single argument value.");
114 }
115
116 return factory.NewCall(kMathMin, arguments);
117 }
118 case 2: {
119 if (auto error =
120 CheckInvalidArgs(factory, "math.least()", arguments);
121 error) {
122 return std::move(*error);
123 }
124 return factory.NewCall(kMathMin, arguments);
125 }
126 default:
127 if (auto error =
128 CheckInvalidArgs(factory, "math.least()", arguments);
129 error) {
130 return std::move(*error);
131 }
132 std::vector<ListExprElement> elements;
133 elements.reserve(arguments.size());
134 for (auto &argument : arguments) {
135 elements.push_back(factory.NewListElement(std::move(argument)));
136 }
137 return factory.NewCall(kMathMin,
138 factory.NewList(std::move(elements)));
139 }
140 });
141 absl::StatusOr<Macro> greatest = Macro::ReceiverVarArg(
142 kGreatest,
143 [](MacroExprFactory &factory, Expr &target,
144 absl::Span<Expr> arguments) -> absl::optional<Expr> {
145 if (!IsTargetNamespace(target)) {
146 return absl::nullopt;
147 }
148
149 switch (arguments.size()) {
150 case 0: {
151 return factory.ReportErrorAt(
152 target, "math.greatest() requires at least one argument.");
153 }

Callers 3

AddMathExtensionMacrosFunction · 0.85
RegisterMathMacrosFunction · 0.85
TEST_PFunction · 0.85

Calls 9

IsValidArgTypeFunction · 0.85
CheckInvalidArgsFunction · 0.85
NewListElementMethod · 0.80
IsTargetNamespaceFunction · 0.70
sizeMethod · 0.45
ReportErrorAtMethod · 0.45
NewCallMethod · 0.45
NewListMethod · 0.45

Tested by 1

TEST_PFunction · 0.68