aboutsummaryrefslogtreecommitdiff
path: root/core/fxcrt/fx_number_unittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt/fx_number_unittest.cpp')
-rw-r--r--core/fxcrt/fx_number_unittest.cpp75
1 files changed, 41 insertions, 34 deletions
diff --git a/core/fxcrt/fx_number_unittest.cpp b/core/fxcrt/fx_number_unittest.cpp
index a31dc55ac..deb4cf3c1 100644
--- a/core/fxcrt/fx_number_unittest.cpp
+++ b/core/fxcrt/fx_number_unittest.cpp
@@ -1,4 +1,4 @@
-// Copyright 2018 PDFium Authors. All rights reserved.
+// Copyright 2018 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -46,39 +46,46 @@ TEST(fxnumber, FromFloat) {
}
TEST(fxnumber, FromStringUnsigned) {
- {
- FX_Number number("");
- EXPECT_TRUE(number.IsInteger());
- EXPECT_FALSE(number.IsSigned());
- }
- {
- FX_Number number("0");
- EXPECT_TRUE(number.IsInteger());
- EXPECT_FALSE(number.IsSigned());
- }
- {
- FX_Number number("10");
- EXPECT_TRUE(number.IsInteger());
- EXPECT_FALSE(number.IsSigned());
- }
- {
- FX_Number number("4294967295");
- EXPECT_TRUE(number.IsInteger());
- EXPECT_FALSE(number.IsSigned());
- }
- {
- // Value overflows.
- FX_Number number("4223423494965252");
- EXPECT_TRUE(number.IsInteger());
- EXPECT_FALSE(number.IsSigned());
- }
- {
- // No explicit sign will allow the number to go negative if we retrieve
- // it as a signed value. This is needed for things like the encryption
- // Permissions flag (Table 3.20 PDF 1.7 spec)
- FX_Number number("4294965252");
- EXPECT_EQ(-2044, number.GetSigned());
- }
+ struct TestCase {
+ const char* input;
+ int expected_output;
+ };
+
+ auto test_func = [](pdfium::span<const TestCase> test_cases) {
+ for (const auto& test : test_cases) {
+ FX_Number number(test.input);
+ EXPECT_TRUE(number.IsInteger());
+ EXPECT_FALSE(number.IsSigned());
+ EXPECT_EQ(test.expected_output, number.GetSigned());
+ }
+ };
+
+ static constexpr TestCase kNormalCases[] = {
+ {"", 0},
+ {"0", 0},
+ {"10", 10},
+ };
+ test_func(kNormalCases);
+
+ static constexpr TestCase kOverflowCases[] = {
+ {"4223423494965252", 0},
+ {"4294967296", 0},
+ {"4294967297", 0},
+ {"5000000000", 0},
+ };
+ test_func(kOverflowCases);
+
+ // No explicit sign will allow the number to go negative if retrieved as a
+ // signed value. This is needed for things like the encryption permissions
+ // flag (Table 3.20 PDF 1.7 spec)
+ static constexpr TestCase kNegativeCases[] = {
+ {"4294965252", -2044},
+ {"4294967247", -49},
+ {"4294967248", -48},
+ {"4294967292", -4},
+ {"4294967295", -1},
+ };
+ test_func(kNegativeCases);
}
TEST(fxnumber, FromStringSigned) {