Skip to content

Commit 2053cfa

Browse files
MeanSquaredErrorVesselin Atanasov
and
Vesselin Atanasov
authored
Fix division remainder operator (%) (#272)
* Fix compatibility with Jinja for the % operator. * Rename enum value DivReminder -> DivRemainder * Add test for the remainder operator % --------- Co-authored-by: Vesselin Atanasov <[email protected]>
1 parent 86dfb93 commit 2053cfa

5 files changed

+8
-6
lines changed

src/expression_evaluator.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ InternalValue BinaryExpression::Evaluate(RenderContext& context)
127127
case jinja2::BinaryExpression::Minus:
128128
case jinja2::BinaryExpression::Mul:
129129
case jinja2::BinaryExpression::Div:
130-
case jinja2::BinaryExpression::DivReminder:
130+
case jinja2::BinaryExpression::DivRemainder:
131131
case jinja2::BinaryExpression::DivInteger:
132132
case jinja2::BinaryExpression::Pow:
133133
result = Apply2<visitors::BinaryMathOperation>(leftVal, rightVal, m_oper);

src/expression_evaluator.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ class BinaryExpression : public Expression
452452
Minus,
453453
Mul,
454454
Div,
455-
DivReminder,
455+
DivRemainder,
456456
DivInteger,
457457
Pow,
458458
StringConcat

src/expression_parser.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ ExpressionParser::ParseResult<ExpressionEvaluatorPtr<Expression>> ExpressionPars
242242
operation = BinaryExpression::DivInteger;
243243
break;
244244
case '%':
245-
operation = BinaryExpression::DivReminder;
245+
operation = BinaryExpression::DivRemainder;
246246
break;
247247
default:
248248
lexer.ReturnToken();

src/value_visitors.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -552,8 +552,8 @@ struct BinaryMathOperation : BaseVisitor<>
552552
case jinja2::BinaryExpression::Div:
553553
result = left / right;
554554
break;
555-
case jinja2::BinaryExpression::DivReminder:
556-
result = std::remainder(left, right);
555+
case jinja2::BinaryExpression::DivRemainder:
556+
result = std::fmod(left, right);
557557
break;
558558
case jinja2::BinaryExpression::DivInteger:
559559
{
@@ -607,7 +607,7 @@ struct BinaryMathOperation : BaseVisitor<>
607607
result = left / right;
608608
break;
609609
case jinja2::BinaryExpression::Div:
610-
case jinja2::BinaryExpression::DivReminder:
610+
case jinja2::BinaryExpression::DivRemainder:
611611
case jinja2::BinaryExpression::Pow:
612612
result = this->operator ()(static_cast<double>(left), static_cast<double>(right));
613613
break;

test/expressions_test.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ R"(
2020
{{ 7 / 3}}
2121
{{ 7 // 3 }}
2222
{{ 7 % intValue }}
23+
{{ 11 % 7 }}
2324
{{ 3 ** 4 }}
2425
{{ 10 ** -2 }}
2526
{{ 10/10 + 2*5 }}
@@ -48,6 +49,7 @@ R"(
4849
2.3333333
4950
2
5051
1
52+
4
5153
81
5254
0.01
5355
11

0 commit comments

Comments
 (0)