diff options
Diffstat (limited to 'core/fxcrt/fx_number_unittest.cpp')
-rw-r--r-- | core/fxcrt/fx_number_unittest.cpp | 75 |
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) { |