Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
10
TEST
(
fxnumber
,
Default
) {
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
18
TEST
(
fxnumber
,
FromSigned
) {
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
33
TEST
(
fxnumber
,
FromFloat
) {
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
60
TEST
(
fxnumber
,
FromStringUnsigned
) {
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
103
TEST
(
fxnumber
,
FromStringSigned
) {
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
152
TEST
(
fxnumber
,
FromStringFloat
) {
153
FX_Number
number(
"3.24"
);
154
EXPECT_FLOAT_EQ(3.24f, number
.
GetFloat
(
)
);
155
}
FX_Number
Definition
fx_number.h:15
FX_Number::IsInteger
bool IsInteger() const
Definition
fx_number.cpp:86
FX_Number::FX_Number
FX_Number(int32_t value)
Definition
fx_number.cpp:20
FX_Number::FX_Number
FX_Number(float value)
Definition
fx_number.cpp:22
FX_Number::GetSigned
int32_t GetSigned() const
Definition
fx_number.cpp:96
FX_Number::GetFloat
float GetFloat() const
Definition
fx_number.cpp:106
FX_Number::IsSigned
bool IsSigned() const
Definition
fx_number.cpp:91
TEST
TEST(FXCRYPT, MD5GenerateEmtpyData)
Definition
fx_crypt_unittest.cpp:50
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qtwebengine
src
3rdparty
chromium
third_party
pdfium
core
fxcrt
fx_number_unittest.cpp
Generated on
for Qt by
1.18.0