65 lines
1.7 KiB
C++
65 lines
1.7 KiB
C++
#include <gtest/gtest.h>
|
|
#include <pdfengine/graphics_state.hpp>
|
|
|
|
using namespace pdfengine;
|
|
|
|
TEST(MatrixTest, DefaultIdentity) {
|
|
Matrix m;
|
|
EXPECT_FLOAT_EQ(m.a, 1.0f);
|
|
EXPECT_FLOAT_EQ(m.b, 0.0f);
|
|
EXPECT_FLOAT_EQ(m.c, 0.0f);
|
|
EXPECT_FLOAT_EQ(m.d, 1.0f);
|
|
EXPECT_FLOAT_EQ(m.e, 0.0f);
|
|
EXPECT_FLOAT_EQ(m.f, 0.0f);
|
|
}
|
|
|
|
TEST(MatrixTest, Multiply) {
|
|
Matrix m1(2.0f, 0.0f, 0.0f, 2.0f, 10.0f, 20.0f);
|
|
Matrix m2(0.5f, 0.0f, 0.0f, 0.5f, -5.0f, -10.0f);
|
|
Matrix result = m1.multiply(m2);
|
|
|
|
EXPECT_FLOAT_EQ(result.a, 1.0f);
|
|
EXPECT_FLOAT_EQ(result.b, 0.0f);
|
|
EXPECT_FLOAT_EQ(result.c, 0.0f);
|
|
EXPECT_FLOAT_EQ(result.d, 1.0f);
|
|
EXPECT_FLOAT_EQ(result.e, 0.0f);
|
|
EXPECT_FLOAT_EQ(result.f, 0.0f);
|
|
}
|
|
|
|
TEST(MatrixTest, TransformPoint) {
|
|
Matrix m(2.0f, 0.0f, 0.0f, 3.0f, 10.0f, 20.0f);
|
|
float x = 5.0f;
|
|
float y = 5.0f;
|
|
m.transform(x, y);
|
|
|
|
EXPECT_FLOAT_EQ(x, 20.0f); // 2*5 + 10
|
|
EXPECT_FLOAT_EQ(y, 35.0f); // 3*5 + 20
|
|
}
|
|
|
|
TEST(GraphicsStateStackTest, PushPop) {
|
|
GraphicsStateStack stack;
|
|
|
|
// Initial state
|
|
stack.current().lineWidth = 5.0f;
|
|
|
|
// Push new state
|
|
stack.push();
|
|
EXPECT_FLOAT_EQ(stack.current().lineWidth, 5.0f);
|
|
|
|
// Modify current state
|
|
stack.current().lineWidth = 10.0f;
|
|
EXPECT_FLOAT_EQ(stack.current().lineWidth, 10.0f);
|
|
|
|
// Pop back to initial
|
|
stack.pop();
|
|
EXPECT_FLOAT_EQ(stack.current().lineWidth, 5.0f);
|
|
}
|
|
|
|
TEST(GraphicsStateStackTest, PopEmptyProtection) {
|
|
GraphicsStateStack stack;
|
|
// Attempting to pop the root state should be safe (ignored)
|
|
stack.pop();
|
|
stack.current().lineWidth = 2.0f; // Should still be valid
|
|
EXPECT_FLOAT_EQ(stack.current().lineWidth, 2.0f);
|
|
}
|