From 3911dc89b7e2de3bef3afa1464dfb3bf6863d72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Thu, 19 Sep 2019 10:48:12 +0200 Subject: [PATCH] [poincare/normcdf2] Fix shallowReduce (mu and var indexes were wrong) --- poincare/include/poincare/norm_cdf2.h | 2 ++ poincare/include/poincare/normal_distribution_function.h | 7 +++++++ poincare/src/normal_distribution_function.cpp | 4 ++-- poincare/test/simplification.cpp | 3 +++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/poincare/include/poincare/norm_cdf2.h b/poincare/include/poincare/norm_cdf2.h index cb02dc4b0..08167c0bd 100644 --- a/poincare/include/poincare/norm_cdf2.h +++ b/poincare/include/poincare/norm_cdf2.h @@ -22,6 +22,8 @@ public: Type type() const override { return Type::NormCDF2; } Sign sign(Context * context) const override { return Sign::Positive; } Expression setSign(Sign s, ReductionContext reductionContext) override; + int muIndex() const override { return 2; } + int varIndex() const override { return 3; } private: // Layout diff --git a/poincare/include/poincare/normal_distribution_function.h b/poincare/include/poincare/normal_distribution_function.h index 746a29f5a..e2cb7b800 100644 --- a/poincare/include/poincare/normal_distribution_function.h +++ b/poincare/include/poincare/normal_distribution_function.h @@ -8,6 +8,9 @@ namespace Poincare { // NormalDistributionFunctions are NormCDF, NormCDF2, InvNorm and NormPDF class NormalDistributionFunctionNode : public ExpressionNode { +public: + virtual int muIndex() const { return 1; } + virtual int varIndex() const { return 2; } private: // Simplication Expression shallowReduce(ReductionContext reductionContext) override; @@ -19,6 +22,10 @@ class NormalDistributionFunction : public Expression { public: NormalDistributionFunction(const NormalDistributionFunctionNode * n) : Expression(n) {} Expression shallowReduce(Context * context, bool * stopReduction = nullptr); +private: + int muIndex() const { return node()->muIndex(); } + int varIndex() const { return node()->varIndex(); } + NormalDistributionFunctionNode * node() const { return static_cast(Expression::node()); } }; } diff --git a/poincare/src/normal_distribution_function.cpp b/poincare/src/normal_distribution_function.cpp index 53acdd596..e0bfb96e5 100644 --- a/poincare/src/normal_distribution_function.cpp +++ b/poincare/src/normal_distribution_function.cpp @@ -19,8 +19,8 @@ Expression NormalDistributionFunction::shallowReduce(Context * context, bool * s } } - Expression mu = childAtIndex(1); - Expression var = childAtIndex(2); + Expression mu = childAtIndex(muIndex()); + Expression var = childAtIndex(varIndex()); // Check mu and var bool muAndVarOK = false; diff --git a/poincare/test/simplification.cpp b/poincare/test/simplification.cpp index 3095a4a99..21ac81800 100644 --- a/poincare/test/simplification.cpp +++ b/poincare/test/simplification.cpp @@ -1082,4 +1082,7 @@ QUIZ_CASE(poincare_probability) { assert_parsed_expression_simplify_to("invnorm(3/4,2,random())", "invnorm(3/4,2,random())"); // random can be 0 assert_parsed_expression_simplify_to("invnorm(0.5,2,0)", Undefined::Name()); assert_parsed_expression_simplify_to("invnorm(0.5,2,-1)", Undefined::Name()); + assert_parsed_expression_simplify_to("normcdf(2,0,1)", "normcdf(2,0,1)"); + assert_parsed_expression_simplify_to("normcdf2(1,2,0,1)", "normcdf2(1,2,0,1)"); + assert_parsed_expression_simplify_to("normpdf(2,0,1)", "normpdf(2,0,1)"); }