Numworks Epsilon  1.4.1
Graphing Calculator Operating System
power.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 <cmath>
6 #include "helper.h"
7 
8 using namespace Poincare;
9 
10 QUIZ_CASE(poincare_power_evaluate) {
13 
14  Complex<double> b[1] = {Complex<double>::Cartesian(28.0, 96.0)};
16 
17  Complex<float> c[1] = {Complex<float>::Cartesian(11.7412464f, 62.9137754f)};
19 
20 #if MATRICES_ARE_DEFINED
22  assert_parsed_expression_evaluates_to("[[1,2][3,4]]^3", d, 2, 2);
23 #endif
24 
27 
30 }
31 
32 QUIZ_CASE(poincare_power_simplify) {
34  assert_parsed_expression_simplify_to("3^(-4)", "1/81");
35  assert_parsed_expression_simplify_to("1256^(1/3)*x", "2*root(157,3)*x");
36  assert_parsed_expression_simplify_to("1256^(-1/3)", "1/(2*root(157,3))");
37  assert_parsed_expression_simplify_to("32^(-1/5)", "1/2");
38  assert_parsed_expression_simplify_to("(2+3-4)^(x)", "1");
43  assert_parsed_expression_simplify_to("0^(-3)", "undef");
45  assert_parsed_expression_simplify_to("8^0.5", "2*R(2)");
46  assert_parsed_expression_simplify_to("(12^4*3)^(0.5)", "144*R(3)");
47  assert_parsed_expression_simplify_to("(2^A)^B", "2^(A*B)");
48  assert_parsed_expression_simplify_to("(2*A)^B", "2^B*A^B");
49  assert_parsed_expression_simplify_to("(12^4*x)^(0.5)", "144*R(x)");
50  assert_parsed_expression_simplify_to("R(32)", "4*R(2)");
52  assert_parsed_expression_simplify_to("2^(2+P)", "4*2^P");
53  assert_parsed_expression_simplify_to("R(5513219850886344455940081)", "2348024669991");
54  assert_parsed_expression_simplify_to("R(154355776)", "12424");
57  assert_parsed_expression_simplify_to("R((-P)^2)", "P");
58  assert_parsed_expression_simplify_to("R(x*144)", "12*R(x)");
59  assert_parsed_expression_simplify_to("R(x*144*P^2)", "12*R(x)*P");
60  assert_parsed_expression_simplify_to("R(x*144*P)", "12*R(x)*R(P)");
61  assert_parsed_expression_simplify_to("x^(1/2)", "R(x)");
62  assert_parsed_expression_simplify_to("x^(-1/2)", "1/R(x)");
63  assert_parsed_expression_simplify_to("x^(1/7)", "root(x,7)");
64  assert_parsed_expression_simplify_to("x^(-1/7)", "1/root(x,7)");
65  assert_parsed_expression_simplify_to("1/(3R(2))", "R(2)/6");
67  assert_parsed_expression_simplify_to("X^ln(R(3))", "R(3)");
68  assert_parsed_expression_simplify_to("P^log(R(3),P)", "R(3)");
69  assert_parsed_expression_simplify_to("10^log(P)", "P");
70  assert_parsed_expression_simplify_to("X^ln(65)", "65");
71  assert_parsed_expression_simplify_to("X^ln(PX)", "P*X");
72  assert_parsed_expression_simplify_to("X^log(PX)", "X^(log(P)+log(X))");
74  assert_parsed_expression_simplify_to("999^(10000/3)", "999^(10000/3)");
75  /* This does not reduce but should not as the integer is above
76  * k_maxNumberOfPrimeFactors and thus it prime decomposition might overflow
77  * 32 factors. */
78  assert_parsed_expression_simplify_to("1881676377434183981909562699940347954480361860897069^(1/3)", "root(1881676377434183981909562699940347954480361860897069,3)");
79  /* This does not reduce but should not as the prime decomposition involves
80  * factors above k_maxNumberOfPrimeFactors. */
81  assert_parsed_expression_simplify_to("1002101470343^(1/3)", "root(1002101470343,3)");
82  assert_parsed_expression_simplify_to("(x+P)^(3)", "x^3+3*x^2*P+3*x*P^2+P^3");
83  assert_parsed_expression_simplify_to("(5+R(2))^(-8)", "(1446241-1003320*R(2))/78310985281");
84  assert_parsed_expression_simplify_to("(5*P+R(2))^(-5)", "1/(4*R(2)+100*P+500*R(2)*P^2+2500*P^3+3125*R(2)*P^4+3125*P^5)");
85  assert_parsed_expression_simplify_to("(1+R(2)+R(3))^5", "296+224*R(2)+184*R(3)+120*R(6)");
86  assert_parsed_expression_simplify_to("(P+R(2)+R(3)+x)^(-3)", "1/(11*R(2)+9*R(3)+15*x+6*R(6)*x+3*R(2)*x^2+3*R(3)*x^2+x^3+15*P+6*R(6)*P+6*R(2)*x*P+6*R(3)*x*P+3*x^2*P+3*R(2)*P^2+3*R(3)*P^2+3*x*P^2+P^3)");
87 }
#define exp(x)
Definition: math.h:176
static Complex< T > Cartesian(T a, T b)
Definition: complex.cpp:28
#define M_PI_2
Definition: math.h:18
c(generic_all_nodes)
void assert_parsed_expression_simplify_to(const char *expression, const char *simplifiedExpression, Expression::AngleUnit angleUnit)
Definition: helper.cpp:90
void assert_parsed_expression_evaluates_to(const char *expression, Complex< T > *results, int numberOfRows, int numberOfColumns, Expression::AngleUnit angleUnit)
Definition: helper.cpp:69
QUIZ_CASE(poincare_power_evaluate)
Definition: power.cpp:10
static Complex< T > Float(T x)
Definition: complex.cpp:23