Numworks Epsilon  1.4.1
Graphing Calculator Operating System
trigo.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 
9 QUIZ_CASE(poincare_parse_trigo) {
22 }
23 
24 QUIZ_CASE(poincare_trigo_evaluate) {
25  Complex<double> a[1] = {Complex<double>::Float(-0.4161468365)};
27  Complex<float> a1[1] = {Complex<float>::Cartesian(-1.0086248134f, -0.8893951958f)};
29  Complex<double> b[1] = {Complex<double>::Float(0.9092974268)};
31  Complex<float> b1[1] = {Complex<float>::Cartesian( 1.16780727488f, -0.768162763456f)};
33  Complex<double> c[1] = {Complex<double>::Float(-2.18503986326151899)};
35  Complex<float> c1[1] = {Complex<float>::Cartesian(-0.27355308280730f, 1.002810507583504f)};
37  Complex<double> a2[1] = {Complex<double>::Float(3.762195691)};
39  Complex<float> a3[1] = {Complex<float>::Cartesian(14.754701170483756280f,-22.96367349919304059f)};
41  Complex<double> b2[1] = {Complex<double>::Float(3.62686040784701876)};
43  Complex<float> b3[1] = {Complex<float>::Cartesian(-14.744805188558725031023f, 22.979085577886129555168f)};
45  Complex<double> c2[1] = {Complex<double>::Float(0.9640275800758168839464)};
47  Complex<float> c3[1] = {Complex<float>::Cartesian(-1.00027905623446556836909f, 0.000610240921376259f)};
49 }
50 
51 QUIZ_CASE(poincare_trigo_simplify) {
52  // -- sin/cos -> tan
53  assert_parsed_expression_simplify_to("sin(x)/cos(x)", "tan(x)");
54  assert_parsed_expression_simplify_to("cos(x)/sin(x)", "1/tan(x)");
55  assert_parsed_expression_simplify_to("sin(x)*P/cos(x)", "tan(x)*P");
56  assert_parsed_expression_simplify_to("sin(x)/(P*cos(x))", "tan(x)/P");
57  assert_parsed_expression_simplify_to("1*tan(2)*tan(5)", "tan(2)*tan(5)");
58  assert_parsed_expression_simplify_to("tan(62P/21)", "-tan(P/21)");
59  assert_parsed_expression_simplify_to("cos(26P/21)/sin(25P/17)", "cos((5*P)/21)/sin((8*P)/17)");
60  assert_parsed_expression_simplify_to("cos(62P/21)*P*3/sin(62P/21)", "-(3*P)/tan(P/21)");
61  assert_parsed_expression_simplify_to("cos(62P/21)/(P*3*sin(62P/21))", "-1/(3*tan(P/21)*P)");
62  assert_parsed_expression_simplify_to("sin(62P/21)*P*3/cos(62P/21)", "-3*tan(P/21)*P");
63  assert_parsed_expression_simplify_to("sin(62P/21)/(P*3cos(62P/21))", "-tan(P/21)/(3*P)");
64  assert_parsed_expression_simplify_to("-cos(P/62)ln(3)/(sin(P/62)P)", "-ln(3)/(tan(P/62)*P)");
65  assert_parsed_expression_simplify_to("-2cos(P/62)ln(3)/(sin(P/62)P)", "-(2*ln(3))/(tan(P/62)*P)");
66  // -- cos
69  assert_parsed_expression_simplify_to("cos(P*4/7)", "-cos((3*P)/7)");
70  assert_parsed_expression_simplify_to("cos(P*35/29)", "-cos((6*P)/29)");
71  assert_parsed_expression_simplify_to("cos(-P*35/29)", "-cos((6*P)/29)");
72  assert_parsed_expression_simplify_to("cos(P*340000)", "1");
73  assert_parsed_expression_simplify_to("cos(-P*340001)", "-1");
74  assert_parsed_expression_simplify_to("cos(-P*R(2))", "cos(R(2)*P)");
75  assert_parsed_expression_simplify_to("cos(1311P/6)", "0");
76  assert_parsed_expression_simplify_to("cos(P/12)", "(R(2)+R(6))/4");
77  assert_parsed_expression_simplify_to("cos(-P/12)", "(R(2)+R(6))/4");
78  assert_parsed_expression_simplify_to("cos(-P17/8)", "R(2+R(2))/2");
79  assert_parsed_expression_simplify_to("cos(41P/6)", "-R(3)/2");
80  assert_parsed_expression_simplify_to("cos(P/4+1000P)", "R(2)/2");
81  assert_parsed_expression_simplify_to("cos(-P/3)", "1/2");
82  assert_parsed_expression_simplify_to("cos(41P/5)", "(1+R(5))/4");
83  assert_parsed_expression_simplify_to("cos(7P/10)", "-(R(2)*R(5-R(5)))/4");
91  assert_parsed_expression_simplify_to("cos(-180*R(2))", "cos(180*R(2))", Expression::AngleUnit::Degree);
101  // -- sin
104  assert_parsed_expression_simplify_to("sin(P*35/29)", "-sin((6*P)/29)");
105  assert_parsed_expression_simplify_to("sin(-P*35/29)", "sin((6*P)/29)");
106  assert_parsed_expression_simplify_to("sin(P*340000)", "0");
107  assert_parsed_expression_simplify_to("sin(P*340001)", "0");
108  assert_parsed_expression_simplify_to("sin(-P*340001)", "0");
109  assert_parsed_expression_simplify_to("sin(P/12)", "((-R(2))+R(6))/4");
110  assert_parsed_expression_simplify_to("sin(-P/12)", "(R(2)-R(6))/4");
111  assert_parsed_expression_simplify_to("sin(-P*R(2))", "-sin(R(2)*P)");
112  assert_parsed_expression_simplify_to("sin(1311P/6)", "1");
113  assert_parsed_expression_simplify_to("sin(-P17/8)", "-R(2-R(2))/2");
114  assert_parsed_expression_simplify_to("sin(41P/6)", "1/2");
115  assert_parsed_expression_simplify_to("sin(-3P/10)", "((-1)-R(5))/4");
116  assert_parsed_expression_simplify_to("sin(P/4+1000P)", "R(2)/2");
117  assert_parsed_expression_simplify_to("sin(-P/3)", "-R(3)/2");
118  assert_parsed_expression_simplify_to("sin(17P/5)", "-(R(2)*R(5+R(5)))/4");
119  assert_parsed_expression_simplify_to("sin(P/5)", "(R(2)*R(5-R(5)))/4");
129  assert_parsed_expression_simplify_to("sin(-180*R(2))", "-sin(180*R(2))", Expression::AngleUnit::Degree);
135  assert_parsed_expression_simplify_to("sin(612)", "-(R(2)*R(5+R(5)))/4", Expression::AngleUnit::Degree);
137  // -- tan
140  assert_parsed_expression_simplify_to("tan(P*35/29)", "tan((6*P)/29)");
141  assert_parsed_expression_simplify_to("tan(-P*35/29)", "-tan((6*P)/29)");
142  assert_parsed_expression_simplify_to("tan(P*340000)", "0");
143  assert_parsed_expression_simplify_to("tan(P*340001)", "0");
144  assert_parsed_expression_simplify_to("tan(-P*340001)", "0");
145  assert_parsed_expression_simplify_to("tan(P/12)", "2-R(3)");
146  assert_parsed_expression_simplify_to("tan(-P/12)", "(-2)+R(3)");
147  assert_parsed_expression_simplify_to("tan(-P*R(2))", "-tan(R(2)*P)");
148  assert_parsed_expression_simplify_to("tan(1311P/6)", "undef");
149  assert_parsed_expression_simplify_to("tan(-P17/8)", "1-R(2)");
150  assert_parsed_expression_simplify_to("tan(41P/6)", "-R(3)/3");
151  assert_parsed_expression_simplify_to("tan(P/4+1000P)", "1");
152  assert_parsed_expression_simplify_to("tan(-P/3)", "-R(3)");
153  assert_parsed_expression_simplify_to("tan(-P/10)", "-(R(5)*R(5-2*R(5)))/5");
157  assert_parsed_expression_simplify_to("tan(-6300/29)", "-tan(1080/29)", Expression::AngleUnit::Degree);
163  assert_parsed_expression_simplify_to("tan(-180*R(2))", "-tan(180*R(2))", Expression::AngleUnit::Degree);
169  assert_parsed_expression_simplify_to("tan(tan(tan(tan(9))))", "tan(tan(tan(tan(9))))");
170  // -- acos
171  assert_parsed_expression_simplify_to("acos(-1/2)", "(2*P)/3");
172  assert_parsed_expression_simplify_to("acos(-1.2)", "undef");
173  assert_parsed_expression_simplify_to("acos(cos(2/3))", "2/3");
174  assert_parsed_expression_simplify_to("acos(cos(3/2))", "3/2");
175  assert_parsed_expression_simplify_to("cos(acos(3/2))", "undef");
176  assert_parsed_expression_simplify_to("cos(acos(2/3))", "2/3");
177  assert_parsed_expression_simplify_to("acos(cos(12))", "acos(cos(12))");
178  assert_parsed_expression_simplify_to("acos(cos(4P/7))", "(4*P)/7");
179  assert_parsed_expression_simplify_to("acos(-cos(2))", "(-2)+P");
189  // -- asin
190  assert_parsed_expression_simplify_to("asin(-1/2)", "-P/6");
191  assert_parsed_expression_simplify_to("asin(-1.2)", "undef");
192  assert_parsed_expression_simplify_to("asin(sin(2/3))", "2/3");
193  assert_parsed_expression_simplify_to("sin(asin(2/3))", "2/3");
194  assert_parsed_expression_simplify_to("sin(asin(3/2))", "undef");
195  assert_parsed_expression_simplify_to("asin(sin(3/2))", "3/2");
196  assert_parsed_expression_simplify_to("asin(sin(12))", "asin(sin(12))");
197  assert_parsed_expression_simplify_to("asin(sin(-P/7))", "-P/7");
198  assert_parsed_expression_simplify_to("asin(sin(-R(2)))", "-R(2)");
207  // -- atan
208  assert_parsed_expression_simplify_to("atan(-1)", "-P/4");
209  assert_parsed_expression_simplify_to("atan(-1.2)", "-atan(6/5)");
210  assert_parsed_expression_simplify_to("atan(tan(2/3))", "2/3");
211  assert_parsed_expression_simplify_to("tan(atan(2/3))", "2/3");
212  assert_parsed_expression_simplify_to("tan(atan(5/2))", "5/2");
213  assert_parsed_expression_simplify_to("atan(tan(5/2))", "atan(tan(5/2))");
214  assert_parsed_expression_simplify_to("atan(tan(5/2))", "atan(tan(5/2))");
215  assert_parsed_expression_simplify_to("atan(tan(-P/7))", "-P/7");
216  assert_parsed_expression_simplify_to("atan(R(3))", "P/3");
217  assert_parsed_expression_simplify_to("atan(tan(-R(2)))", "-R(2)");
227 }
static Complex< T > Cartesian(T a, T b)
Definition: complex.cpp:28
void assert_parsed_expression_type(const char *expression, Poincare::Expression::Type type)
Definition: helper.cpp:54
c(generic_all_nodes)
void assert_parsed_expression_simplify_to(const char *expression, const char *simplifiedExpression, Expression::AngleUnit angleUnit)
Definition: helper.cpp:90
constexpr Poincare::Expression::AngleUnit Radian
Definition: helper.h:4
void assert_parsed_expression_evaluates_to(const char *expression, Complex< T > *results, int numberOfRows, int numberOfColumns, Expression::AngleUnit angleUnit)
Definition: helper.cpp:69
static Complex< T > Float(T x)
Definition: complex.cpp:23
QUIZ_CASE(poincare_parse_trigo)
Definition: trigo.cpp:9