From 9d6b2e3cad1d962266c3521486caaa76de8d9e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Mon, 29 Jan 2018 12:24:06 +0100 Subject: [PATCH] [apps] Calculation: add a method to test if the exact output and the approximate output are equal --- apps/calculation/calculation.cpp | 10 ++++++++++ apps/calculation/calculation.h | 1 + 2 files changed, 11 insertions(+) diff --git a/apps/calculation/calculation.cpp b/apps/calculation/calculation.cpp index 53f7ac877..cfd7854ff 100644 --- a/apps/calculation/calculation.cpp +++ b/apps/calculation/calculation.cpp @@ -192,4 +192,14 @@ bool Calculation::shouldDisplayApproximateOutput(Context * context) { return input()->isApproximate(*context); } +bool Calculation::exactAndApproximateOutputsAreEqual(Poincare::Context * context) { + if (exactOutput(context)->type() != Expression::Type::Rational) { + return false; + } + Expression * approximateOutput = Expression::ParseAndSimplify(m_approximateOutputText, *context); + bool isEqual = approximateOutput->isIdenticalTo(exactOutput(context)); + delete approximateOutput; + return isEqual; +} + } diff --git a/apps/calculation/calculation.h b/apps/calculation/calculation.h index e926241b3..ce28f55d3 100644 --- a/apps/calculation/calculation.h +++ b/apps/calculation/calculation.h @@ -31,6 +31,7 @@ public: bool isEmpty(); void tidy(); bool shouldDisplayApproximateOutput(Poincare::Context * context); + bool exactAndApproximateOutputsAreEqual(Poincare::Context * context); constexpr static int k_printedExpressionSize = 2*::TextField::maxBufferSize(); private: /* Buffers holding text expressions have to be longer than the text written