mirror of
https://github.com/hyprwm/Hyprland
synced 2026-05-05 14:18:03 +02:00
tests: add unit tests for Math::CExpression (#13924)
This commit is contained in:
parent
1fdba8a8da
commit
fdd2607b9b
1 changed files with 67 additions and 0 deletions
67
tests/helpers/Expression.cpp
Normal file
67
tests/helpers/Expression.cpp
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
#include <helpers/math/Expression.hpp>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
using namespace Math;
|
||||
|
||||
TEST(Helpers, expressionBasicArithmetic) {
|
||||
CExpression expr;
|
||||
EXPECT_DOUBLE_EQ(expr.compute("2 + 3").value(), 5.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("10 - 4").value(), 6.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("3 * 7").value(), 21.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("10 / 4").value(), 2.5);
|
||||
}
|
||||
|
||||
TEST(Helpers, expressionOrderOfOperations) {
|
||||
CExpression expr;
|
||||
EXPECT_DOUBLE_EQ(expr.compute("2 + 3 * 4").value(), 14.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("(2 + 3) * 4").value(), 20.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("10 - 2 * 3").value(), 4.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("(10 - 2) * 3").value(), 24.0);
|
||||
}
|
||||
|
||||
TEST(Helpers, expressionNegativeNumbers) {
|
||||
CExpression expr;
|
||||
EXPECT_DOUBLE_EQ(expr.compute("-5 + 3").value(), -2.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("-5 * -3").value(), 15.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("0 - 10").value(), -10.0);
|
||||
}
|
||||
|
||||
TEST(Helpers, expressionFloatingPoint) {
|
||||
CExpression expr;
|
||||
EXPECT_DOUBLE_EQ(expr.compute("1.5 + 2.5").value(), 4.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("0.1 * 10").value(), 1.0);
|
||||
EXPECT_NEAR(expr.compute("1 / 3").value(), 0.3333, 0.001);
|
||||
}
|
||||
|
||||
TEST(Helpers, expressionWithVariables) {
|
||||
CExpression expr;
|
||||
expr.addVariable("x", 10);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("x * 2").value(), 20.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("x + 5").value(), 15.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("x * x").value(), 100.0);
|
||||
}
|
||||
|
||||
TEST(Helpers, expressionMultipleVariables) {
|
||||
CExpression expr;
|
||||
expr.addVariable("w", 1920);
|
||||
expr.addVariable("h", 1080);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("w / 2").value(), 960.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("w + h").value(), 3000.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("w * h").value(), 1920.0 * 1080.0);
|
||||
}
|
||||
|
||||
TEST(Helpers, expressionInvalidInput) {
|
||||
CExpression expr;
|
||||
EXPECT_EQ(expr.compute(""), std::nullopt);
|
||||
EXPECT_EQ(expr.compute("2 +"), std::nullopt);
|
||||
EXPECT_EQ(expr.compute("abc"), std::nullopt);
|
||||
EXPECT_EQ(expr.compute("* 5"), std::nullopt);
|
||||
}
|
||||
|
||||
TEST(Helpers, expressionZero) {
|
||||
CExpression expr;
|
||||
EXPECT_DOUBLE_EQ(expr.compute("0").value(), 0.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("0 * 999").value(), 0.0);
|
||||
EXPECT_DOUBLE_EQ(expr.compute("5 - 5").value(), 0.0);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue