Add some basic CPDF_PSEngine tests. Fix some nits in CPDF_PSEngine. BUG=pdfium:1164 Change-Id: Ie34c6889503b5b6ddc13a280db0bf7191c17a37c Reviewed-on: https://pdfium-review.googlesource.com/c/45387 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_psengine.cpp b/core/fpdfapi/page/cpdf_psengine.cpp index 7fa8cd3..b1e32f8 100644 --- a/core/fpdfapi/page/cpdf_psengine.cpp +++ b/core/fpdfapi/page/cpdf_psengine.cpp
@@ -173,9 +173,9 @@ m_Operators.push_back(pdfium::MakeUnique<CPDF_PSOP>(FX_atof(word))); } -CPDF_PSEngine::CPDF_PSEngine() : m_StackCount(0) {} +CPDF_PSEngine::CPDF_PSEngine() = default; -CPDF_PSEngine::~CPDF_PSEngine() {} +CPDF_PSEngine::~CPDF_PSEngine() = default; void CPDF_PSEngine::Push(float v) { if (m_StackCount < kPSEngineStackSize)
diff --git a/core/fpdfapi/page/cpdf_psengine.h b/core/fpdfapi/page/cpdf_psengine.h index 9cb1e1a..7e8e109 100644 --- a/core/fpdfapi/page/cpdf_psengine.h +++ b/core/fpdfapi/page/cpdf_psengine.h
@@ -122,7 +122,7 @@ private: static constexpr uint32_t kPSEngineStackSize = 100; - uint32_t m_StackCount; + uint32_t m_StackCount = 0; CPDF_PSProc m_MainProc; float m_Stack[kPSEngineStackSize]; };
diff --git a/core/fpdfapi/page/cpdf_psengine_unittest.cpp b/core/fpdfapi/page/cpdf_psengine_unittest.cpp index f966c3a..b853ff5 100644 --- a/core/fpdfapi/page/cpdf_psengine_unittest.cpp +++ b/core/fpdfapi/page/cpdf_psengine_unittest.cpp
@@ -5,6 +5,29 @@ #include "core/fpdfapi/page/cpdf_psengine.h" #include "testing/gtest/include/gtest/gtest.h" +namespace { + +float DoOperator1(CPDF_PSEngine* engine, float v1, PDF_PSOP op) { + EXPECT_EQ(0u, engine->GetStackSize()); + engine->Push(v1); + engine->DoOperator(op); + float ret = engine->Pop(); + EXPECT_EQ(0u, engine->GetStackSize()); + return ret; +} + +float DoOperator2(CPDF_PSEngine* engine, float v1, float v2, PDF_PSOP op) { + EXPECT_EQ(0u, engine->GetStackSize()); + engine->Push(v1); + engine->Push(v2); + engine->DoOperator(op); + float ret = engine->Pop(); + EXPECT_EQ(0u, engine->GetStackSize()); + return ret; +} + +} // namespace + TEST(CPDF_PSProc, AddOperator) { static const struct { const char* name; @@ -54,3 +77,16 @@ } } } + +TEST(CPDF_PSEngine, Basic) { + CPDF_PSEngine engine; + + EXPECT_FLOAT_EQ(300.0f, DoOperator2(&engine, 100, 200, PSOP_ADD)); + EXPECT_FLOAT_EQ(-50.0f, DoOperator2(&engine, 100, 150, PSOP_SUB)); + EXPECT_FLOAT_EQ(600.0f, DoOperator2(&engine, 5, 120, PSOP_MUL)); + EXPECT_FLOAT_EQ(1.5f, DoOperator2(&engine, 15, 10, PSOP_DIV)); + EXPECT_FLOAT_EQ(1.0f, DoOperator2(&engine, 15, 10, PSOP_IDIV)); + EXPECT_FLOAT_EQ(5.0f, DoOperator2(&engine, 15, 10, PSOP_MOD)); + EXPECT_FLOAT_EQ(5.0f, DoOperator1(&engine, -5, PSOP_NEG)); + EXPECT_FLOAT_EQ(5.0f, DoOperator1(&engine, -5, PSOP_ABS)); +}