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));
+}