Test: add unit tests for expressions with operator

This commit is contained in:
wmayer
2023-02-24 19:42:19 +01:00
committed by wwmayer
parent b55a5682ad
commit e2c9b32ebe

View File

@@ -1,25 +1,52 @@
#include "gtest/gtest.h"
#include "App/ExpressionParser.h"
#include "App/ExpressionTokenizer.h"
// clang-format off
TEST(Expression, tokenize)
{
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8(""), 10), QString());
// 0.0000 deg-
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-"), 10), QString());
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-s"), 11), QString("s"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-ss"), 12), QString("ss"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-s"), 11), QString::fromLatin1("s"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-ss"), 12), QString::fromLatin1("ss"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 deg"), 5), QString());
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 deg"), 11), QString("deg"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 deg"), 11), QString::fromLatin1("deg"));
}
TEST(Expression, tokenizePi)
{
EXPECT_EQ(App::ExpressionTokenizer().perform(QString("p"), 1), QString("p"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString("pi"), 2), QString());
EXPECT_EQ(App::ExpressionTokenizer().perform(QString("pi "), 3), QString());
EXPECT_EQ(App::ExpressionTokenizer().perform(QString("pi r"), 4), QString("r"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString("pi ra"), 5), QString("ra"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString("pi rad"), 6), QString("rad"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString("pi rad"), 2), QString());
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("p"), 1), QString::fromLatin1("p"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi"), 2), QString());
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi "), 3), QString());
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi r"), 4), QString::fromLatin1("r"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi ra"), 5), QString::fromLatin1("ra"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi rad"), 6), QString::fromLatin1("rad"));
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi rad"), 2), QString());
}
TEST(Expression, toString)
{
App::UnitExpression expr{nullptr, Base::Quantity{}, "pi rad"};
EXPECT_EQ(expr.toString(), "pi rad");
}
TEST(Expression, test_pi_rad)
{
auto constant = std::make_unique<App::ConstantExpression>(nullptr, "pi");
auto unit = std::make_unique<App::UnitExpression>(nullptr, Base::Quantity{}, "rad");
auto op = std::make_unique<App::OperatorExpression>(nullptr, constant.get(), App::OperatorExpression::UNIT, unit.get());
EXPECT_EQ(op->toString(), "pi rad");
op.release();
}
TEST(Expression, test_e_rad)
{
auto constant = std::make_unique<App::ConstantExpression>(nullptr, "e");
auto unit = std::make_unique<App::UnitExpression>(nullptr, Base::Quantity{}, "rad");
auto op = std::make_unique<App::OperatorExpression>(nullptr, constant.get(), App::OperatorExpression::UNIT, unit.get());
EXPECT_EQ(op->toString(), "e rad");
op.release();
}
// clang-format on