Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
fx_number_unittest.cpp
Go to the documentation of this file.
1// Copyright 2018 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <limits>
6
7#include "core/fxcrt/fx_number.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
11 FX_Number number;
12 EXPECT_TRUE(number.IsInteger());
13 EXPECT_FALSE(number.IsSigned());
14 EXPECT_EQ(0, number.GetSigned());
15 EXPECT_FLOAT_EQ(0.0f, number.GetFloat());
16}
17
19 FX_Number number(-128);
20 EXPECT_TRUE(number.IsInteger());
21 EXPECT_TRUE(number.IsSigned());
22 EXPECT_EQ(-128, number.GetSigned());
23 EXPECT_FLOAT_EQ(-128.0f, number.GetFloat());
24
25 // Show that assignment works.
26 FX_Number number2 = number;
27 EXPECT_TRUE(number2.IsInteger());
28 EXPECT_TRUE(number2.IsSigned());
29 EXPECT_EQ(-128, number2.GetSigned());
30 EXPECT_FLOAT_EQ(-128.0f, number2.GetFloat());
31}
32
34 FX_Number number(-100.001f);
35 EXPECT_FALSE(number.IsInteger());
36 EXPECT_TRUE(number.IsSigned());
37 EXPECT_EQ(-100, number.GetSigned());
38 EXPECT_FLOAT_EQ(-100.001f, number.GetFloat());
39
40 // Show that assignment works.
41 FX_Number number2 = number;
42 EXPECT_FALSE(number2.IsInteger());
43 EXPECT_TRUE(number2.IsSigned());
44 EXPECT_EQ(-100, number2.GetSigned());
45 EXPECT_FLOAT_EQ(-100.001f, number2.GetFloat());
46
47 // Show positive saturation.
48 FX_Number number3(1e17f);
49 EXPECT_FALSE(number3.IsInteger());
50 EXPECT_TRUE(number3.IsSigned());
51 EXPECT_EQ(std::numeric_limits<int32_t>::max(), number3.GetSigned());
52
53 // Show negative saturation.
54 FX_Number number4(-1e17f);
55 EXPECT_FALSE(number4.IsInteger());
56 EXPECT_TRUE(number4.IsSigned());
57 EXPECT_EQ(std::numeric_limits<int32_t>::min(), number4.GetSigned());
58}
59
61 struct TestCase {
62 const char* input;
63 int expected_output;
64 };
65
66 auto test_func = [](pdfium::span<const TestCase> test_cases) {
67 for (const auto& test : test_cases) {
68 FX_Number number(test.input);
69 EXPECT_TRUE(number.IsInteger());
70 EXPECT_FALSE(number.IsSigned());
71 EXPECT_EQ(test.expected_output, number.GetSigned());
72 }
73 };
74
75 static constexpr TestCase kNormalCases[] = {
76 {"", 0},
77 {"0", 0},
78 {"10", 10},
79 };
80 test_func(kNormalCases);
81
82 static constexpr TestCase kOverflowCases[] = {
83 {"4223423494965252", 0},
84 {"4294967296", 0},
85 {"4294967297", 0},
86 {"5000000000", 0},
87 };
88 test_func(kOverflowCases);
89
90 // No explicit sign will allow the number to go negative if retrieved as a
91 // signed value. This is needed for things like the encryption permissions
92 // flag (Table 3.20 PDF 1.7 spec)
93 static constexpr TestCase kNegativeCases[] = {
94 {"4294965252", -2044},
95 {"4294967247", -49},
96 {"4294967248", -48},
97 {"4294967292", -4},
98 {"4294967295", -1},
99 };
100 test_func(kNegativeCases);
101}
102
104 {
105 FX_Number number("-0");
106 EXPECT_TRUE(number.IsInteger());
107 EXPECT_TRUE(number.IsSigned());
108 EXPECT_EQ(0, number.GetSigned());
109 }
110 {
111 FX_Number number("+0");
112 EXPECT_TRUE(number.IsInteger());
113 EXPECT_TRUE(number.IsSigned());
114 EXPECT_EQ(0, number.GetSigned());
115 }
116 {
117 FX_Number number("-10");
118 EXPECT_TRUE(number.IsInteger());
119 EXPECT_TRUE(number.IsSigned());
120 EXPECT_EQ(-10, number.GetSigned());
121 }
122 {
123 FX_Number number("+10");
124 EXPECT_TRUE(number.IsInteger());
125 EXPECT_TRUE(number.IsSigned());
126 EXPECT_EQ(10, number.GetSigned());
127 }
128 {
129 FX_Number number("-2147483648");
130 EXPECT_TRUE(number.IsInteger());
131 EXPECT_TRUE(number.IsSigned());
132 EXPECT_EQ(std::numeric_limits<int32_t>::min(), number.GetSigned());
133 }
134 {
135 FX_Number number("+2147483647");
136 EXPECT_TRUE(number.IsInteger());
137 EXPECT_TRUE(number.IsSigned());
138 EXPECT_EQ(std::numeric_limits<int32_t>::max(), number.GetSigned());
139 }
140 {
141 // Value underflows.
142 FX_Number number("-2147483649");
143 EXPECT_EQ(0, number.GetSigned());
144 }
145 {
146 // Value overflows.
147 FX_Number number("+2147483648");
148 EXPECT_EQ(0, number.GetSigned());
149 }
150}
151
153 FX_Number number("3.24");
154 EXPECT_FLOAT_EQ(3.24f, number.GetFloat());
155}
bool IsInteger() const
Definition fx_number.cpp:86
FX_Number(int32_t value)
Definition fx_number.cpp:20
FX_Number(float value)
Definition fx_number.cpp:22
int32_t GetSigned() const
Definition fx_number.cpp:96
float GetFloat() const
bool IsSigned() const
Definition fx_number.cpp:91
TEST(FXCRYPT, MD5GenerateEmtpyData)