From 37ca60ec2182c303348f38791bfa7b4cdeedcdcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 1 Mar 2017 10:23:05 +0100 Subject: [PATCH] [poincare] Add tests for inverse and determinant Change-Id: Id284b9796b1746f38728ea9ef6c4aff578c0e660 --- poincare/test/function.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/poincare/test/function.cpp b/poincare/test/function.cpp index 4971799f6..5dc3d5872 100644 --- a/poincare/test/function.cpp +++ b/poincare/test/function.cpp @@ -18,7 +18,7 @@ QUIZ_CASE(poincare_parse_function) { e = Expression::parse("int(x, 2, 3)"); assert(e->type() == Expression::Type::Integral); delete e; - + e = Expression::parse("log(2)"); assert(e->type() == Expression::Type::Logarithm); delete e; @@ -30,11 +30,19 @@ QUIZ_CASE(poincare_parse_function) { e = Expression::parse("root(2,3)"); assert(e->type() == Expression::Type::NthRoot); delete e; - + char text[5] = {Ion::Charset::Root, '(', '2', ')', 0}; e = Expression::parse(text); assert(e->type() == Expression::Type::SquareRoot); delete e; + + e = Expression::parse("det([[1,2,3][4,5,6][7,8,9]])"); + assert(e->type() == Expression::Type::Determinant); + delete e; + + e = Expression::parse("inverse([[1,2,3][4,5,6][7,8,9]])"); + assert(e->type() == Expression::Type::MatrixInverse); + delete e; } QUIZ_CASE(poincare_function_approximate) { @@ -63,6 +71,10 @@ QUIZ_CASE(poincare_function_approximate) { e = Expression::parse(text); assert(e->approximate(globalContext) == sqrtf(2.0f)); delete e; + + e = Expression::parse("det([[1,2,3][4,5,-6][7,8,9]])"); + assert(fabsf(e->approximate(globalContext)-(-72.0f)) <= 0.00001f); + delete e; } QUIZ_CASE(poincare_function_evaluate) { @@ -94,4 +106,18 @@ QUIZ_CASE(poincare_function_evaluate) { (((Complex *)e)->b()) <= 0.28485f + 0.00001f); delete a; delete e; + + a = Expression::parse("inverse([[1,2,3][4,5,-6][7,8,9]])"); + e = a->evaluate(globalContext); + assert(fabsf(e->operand(0)->approximate(globalContext)-(-31.0f/24.0f)) <= 0.00001f); + assert(fabsf(e->operand(1)->approximate(globalContext) -(-1.0f/12.0f)) <= 0.00001f); + assert(fabsf(e->operand(2)->approximate(globalContext) -(3.0f/8.0f)) <= 0.00001f); + assert(fabsf(e->operand(3)->approximate(globalContext) -(13.0f/12.0f)) <= 0.00001f); + assert(fabsf(e->operand(4)->approximate(globalContext) -(1.0f/6.0f)) <= 0.00001f); + assert(fabsf(e->operand(5)->approximate(globalContext) -(-1.0f/4.0f)) <= 0.00001f); + assert(fabsf(e->operand(6)->approximate(globalContext) -(1.0f/24.0f)) <= 0.00001f); + assert(fabsf(e->operand(7)->approximate(globalContext) -(-1.0f/12.0f)) <= 0.00001f); + assert(fabsf(e->operand(8)->approximate(globalContext) -(1.0f/24.0f)) <= 0.00001f); + delete a; + delete e; }