Numworks Epsilon  1.4.1
Graphing Calculator Operating System
properties.cpp
Go to the documentation of this file.
1 #include <quiz.h>
2 #include <poincare.h>
3 #include <ion.h>
4 #include <assert.h>
5 #include "helper.h"
6 
7 using namespace Poincare;
8 
12 
13 void assert_parsed_expression_sign(const char * expression, Poincare::Expression::Sign sign) {
14  GlobalContext globalContext;
15  Expression * e = parse_expression(expression);
16  Expression::Simplify(&e, globalContext);
17  assert(e->sign() == sign);
18  delete e;
19 }
20 
21 QUIZ_CASE(poincare_sign) {
22  assert_parsed_expression_sign("abs(-cos(2))", Positive);
25  assert_parsed_expression_sign("2*(-3)*abs(-32)", Negative);
26  assert_parsed_expression_sign("2*(-3)*abs(-32)*cos(3)", Unknown);
35 }
36 
37 QUIZ_CASE(poincare_polynomial_degree) {
40  assert_parsed_expression_polynomial_degree("confidence(0.2,10)+1", -1);
42  assert_parsed_expression_polynomial_degree("diff(3*x+x,x)", -1);
45  assert_parsed_expression_polynomial_degree("int(2*x, 0, 1)", 0);
50  assert_parsed_expression_polynomial_degree("prediction(0.2,10)+1", -1);
53 }
54 
56  GlobalContext globalContext;
57  Expression * e = parse_expression(expression);
58  Expression::Simplify(&e, globalContext, angleUnit);
59  if (std::isnan(range)) {
60  assert(std::isnan(e->characteristicXRange(globalContext, angleUnit)));
61  } else {
62  assert(std::fabs(e->characteristicXRange(globalContext, angleUnit) - range) < 0.0000001f);
63  }
64  delete e;
65 }
66 
67 QUIZ_CASE(poincare_characteristic_range) {
73  assert_parsed_expression_has_characteristic_range("sin(9*x+10)+cos(x/2)", 720.0f);
79 }
#define NAN
Definition: math.h:30
#define assert(e)
Definition: assert.h:9
void assert_parsed_expression_sign(const char *expression, Poincare::Expression::Sign sign)
Definition: properties.cpp:13
#define M_PI
Definition: math.h:17
QUIZ_CASE(poincare_sign)
Definition: properties.cpp:21
Expression * parse_expression(const char *expression)
Definition: helper.cpp:44
void assert_parsed_expression_polynomial_degree(const char *expression, int degree, char symbolName)
Definition: helper.cpp:60
#define fabs(x)
Definition: math.h:178
constexpr Poincare::Expression::Sign Positive
Definition: properties.cpp:9
#define isnan(x)
Definition: math.h:43
void assert_parsed_expression_has_characteristic_range(const char *expression, float range, Expression::AngleUnit angleUnit=Expression::AngleUnit::Degree)
Definition: properties.cpp:55
constexpr Poincare::Expression::Sign Unknown
Definition: properties.cpp:11
virtual float characteristicXRange(Context &context, AngleUnit angleUnit=AngleUnit::Default) const
Definition: expression.cpp:179
virtual Sign sign() const
Definition: expression.h:195
constexpr Poincare::Expression::Sign Negative
Definition: properties.cpp:10
static void Simplify(Expression **expressionAddress, Context &context, AngleUnit angleUnit=AngleUnit::Default)
Definition: expression.cpp:277