mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[poincare] Add tests about cursor positioning in layout
This commit is contained in:
@@ -158,6 +158,7 @@ tests += $(addprefix poincare/test/,\
|
||||
infinity.cpp\
|
||||
integer.cpp\
|
||||
layouts.cpp\
|
||||
layout_cursor.cpp\
|
||||
logarithm.cpp\
|
||||
matrix.cpp\
|
||||
multiplication.cpp\
|
||||
|
||||
@@ -193,6 +193,11 @@ void assert_parsed_expression_layout_serialize_to_self(const char * expressionLa
|
||||
quiz_assert(strcmp(expressionLayout, buffer) == 0);
|
||||
}
|
||||
|
||||
void assert_expression_layouts_as(Poincare::Expression expression, Poincare::Layout layout) {
|
||||
Layout l = expression.createLayout(DecimalMode, PrintFloat::k_numberOfStoredSignificantDigits);
|
||||
quiz_assert(l.isIdenticalTo(layout));
|
||||
}
|
||||
|
||||
void assert_expression_layout_serialize_to(Poincare::Layout layout, const char * serialization) {
|
||||
constexpr int bufferSize = 255;
|
||||
char buffer[bufferSize];
|
||||
|
||||
@@ -39,6 +39,7 @@ void assert_parsed_expression_approximates_with_value_for_symbol(Poincare::Expre
|
||||
|
||||
void assert_parsed_expression_simplify_to(const char * expression, const char * simplifiedExpression, Poincare::ExpressionNode::ReductionTarget target = Poincare::ExpressionNode::ReductionTarget::User, Poincare::Preferences::AngleUnit angleUnit = Poincare::Preferences::AngleUnit::Radian, Poincare::Preferences::ComplexFormat complexFormat = Poincare::Preferences::ComplexFormat::Cartesian);
|
||||
void assert_parsed_expression_serialize_to(Poincare::Expression expression, const char * serializedExpression, Poincare::Preferences::PrintFloatMode mode = DecimalMode, int numberOfSignifiantDigits = 7);
|
||||
void assert_expression_layouts_as(Poincare::Expression expression, Poincare::Layout layout);
|
||||
|
||||
|
||||
// Layouts
|
||||
|
||||
74
poincare/test/layout_cursor.cpp
Normal file
74
poincare/test/layout_cursor.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
#include <quiz.h>
|
||||
#include <poincare_layouts.h>
|
||||
#include "helper.h"
|
||||
|
||||
using namespace Poincare;
|
||||
|
||||
void assert_inserted_layout_points_to(Layout layoutToInsert, Expression * correspondingExpression, Layout layoutToPoint) {
|
||||
quiz_assert(correspondingExpression != nullptr);
|
||||
assert_expression_layouts_as(*correspondingExpression, layoutToInsert);
|
||||
Layout layoutToPointComputed = layoutToInsert.layoutToPointWhenInserting(correspondingExpression);
|
||||
quiz_assert(layoutToPointComputed.identifier() == layoutToPoint.identifier());
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_layout_cursor_computation) {
|
||||
Layout l;
|
||||
Expression e;
|
||||
|
||||
// 1+2
|
||||
l = HorizontalLayout::Builder(
|
||||
CodePointLayout::Builder('1'),
|
||||
CodePointLayout::Builder('+'),
|
||||
CodePointLayout::Builder('2'));
|
||||
e = Addition::Builder(Rational::Builder(1), Rational::Builder(2));
|
||||
assert_inserted_layout_points_to(l, &e, l);
|
||||
|
||||
// random()
|
||||
HorizontalLayout hl = HorizontalLayout::Builder();
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('r'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('a'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('n'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('d'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('o'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('m'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(LeftParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(RightParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
l = hl;
|
||||
e = Random::Builder();
|
||||
assert_inserted_layout_points_to(l, &e, l);
|
||||
|
||||
// cos(\x11)
|
||||
hl = HorizontalLayout::Builder();
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('c'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('o'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(CodePointLayout::Builder('s'), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(LeftParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
hl.addChildAtIndex(RightParenthesisLayout::Builder(), hl.numberOfChildren(), hl.numberOfChildren(), nullptr);
|
||||
l = hl;
|
||||
e = Cosine::Builder(EmptyExpression::Builder());
|
||||
assert_inserted_layout_points_to(l, &e, l.childAtIndex(3));
|
||||
|
||||
// •^•
|
||||
l = HorizontalLayout::Builder(
|
||||
EmptyLayout::Builder(),
|
||||
VerticalOffsetLayout::Builder(
|
||||
EmptyLayout::Builder(),
|
||||
VerticalOffsetLayoutNode::Position::Superscript)
|
||||
);
|
||||
e = Power::Builder(EmptyExpression::Builder(), EmptyExpression::Builder());
|
||||
assert_inserted_layout_points_to(l, &e, l.childAtIndex(0));
|
||||
|
||||
// int(•, x, •, •)
|
||||
l = IntegralLayout::Builder(
|
||||
EmptyLayout::Builder(),
|
||||
HorizontalLayout::Builder(
|
||||
CodePointLayout::Builder('x')),
|
||||
EmptyLayout::Builder(),
|
||||
EmptyLayout::Builder());
|
||||
e = Integral::Builder(
|
||||
EmptyExpression::Builder(),
|
||||
Symbol::Builder('x'),
|
||||
EmptyExpression::Builder(),
|
||||
EmptyExpression::Builder());
|
||||
assert_inserted_layout_points_to(l, &e, l.childAtIndex(2));
|
||||
}
|
||||
Reference in New Issue
Block a user