#include #include 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); }