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
cpdf_number_unittest.cpp
Go to the documentation of this file.
1// Copyright 2024 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 "core/fpdfapi/parser/cpdf_number.h"
6
7#include <limits>
8
9#include "core/fxcrt/bytestring.h"
10#include "core/fxcrt/fx_stream.h"
11#include "core/fxcrt/notreached.h"
12#include "core/fxcrt/retain_ptr.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15namespace {
16
17class ByteStringArchiveStream : public IFX_ArchiveStream {
18 public:
19 ByteStringArchiveStream() = default;
20 ~ByteStringArchiveStream() override = default;
21
22 // IFX_ArchiveStream:
23 bool WriteBlock(pdfium::span<const uint8_t> buffer) override {
24 str_ += ByteStringView(buffer);
25 return true;
26 }
27 FX_FILESIZE CurrentOffset() const override { NOTREACHED_NORETURN(); }
28
29 const ByteString& str() const { return str_; }
30
31 private:
32 ByteString str_;
33};
34
35} // namespace
36
38 {
39 ByteStringArchiveStream output_stream;
40 auto number = pdfium::MakeRetain<CPDF_Number>(0.0f);
41 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
42 EXPECT_EQ(" 0", output_stream.str());
43 }
44 {
45 ByteStringArchiveStream output_stream;
46 auto number = pdfium::MakeRetain<CPDF_Number>(1.0f);
47 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
48 EXPECT_EQ(" 1", output_stream.str());
49 }
50 {
51 ByteStringArchiveStream output_stream;
52 auto number = pdfium::MakeRetain<CPDF_Number>(-7.5f);
53 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
54 EXPECT_EQ(" -7.5", output_stream.str());
55 }
56 {
57 ByteStringArchiveStream output_stream;
58 // `number` cannot be represented as a float without losing precision.
59 auto number = pdfium::MakeRetain<CPDF_Number>(38.895285f);
60 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
61 EXPECT_EQ(" 38.895287", output_stream.str());
62 }
63 {
64 ByteStringArchiveStream output_stream;
65 // `number` cannot be represented as a float without losing precision.
66 auto number = pdfium::MakeRetain<CPDF_Number>(-77.037232f);
67 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
68 EXPECT_EQ(" -77.037231", output_stream.str());
69 }
70 {
71 ByteStringArchiveStream output_stream;
72 auto number =
73 pdfium::MakeRetain<CPDF_Number>(std::numeric_limits<float>::max());
74 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
75 EXPECT_EQ(" 340282350000000000000000000000000000000", output_stream.str());
76 }
77 {
78 ByteStringArchiveStream output_stream;
79 auto number =
80 pdfium::MakeRetain<CPDF_Number>(std::numeric_limits<float>::min());
81 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
82 EXPECT_EQ(" .0000000000000000000000000000000000000117549435",
83 output_stream.str());
84 }
85}
86
88 {
89 ByteStringArchiveStream output_stream;
90 auto number = pdfium::MakeRetain<CPDF_Number>(0);
91 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
92 EXPECT_EQ(" 0", output_stream.str());
93 }
94 {
95 ByteStringArchiveStream output_stream;
96 auto number = pdfium::MakeRetain<CPDF_Number>(1);
97 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
98 EXPECT_EQ(" 1", output_stream.str());
99 }
100 {
101 ByteStringArchiveStream output_stream;
102 auto number = pdfium::MakeRetain<CPDF_Number>(-99);
103 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
104 EXPECT_EQ(" -99", output_stream.str());
105 }
106 {
107 ByteStringArchiveStream output_stream;
108 auto number = pdfium::MakeRetain<CPDF_Number>(1234);
109 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
110 EXPECT_EQ(" 1234", output_stream.str());
111 }
112 {
113 ByteStringArchiveStream output_stream;
114 auto number = pdfium::MakeRetain<CPDF_Number>(-54321);
115 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
116 EXPECT_EQ(" -54321", output_stream.str());
117 }
118 {
119 ByteStringArchiveStream output_stream;
120 auto number =
121 pdfium::MakeRetain<CPDF_Number>(std::numeric_limits<int>::max());
122 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
123 EXPECT_EQ(" 2147483647", output_stream.str());
124 }
125 {
126 ByteStringArchiveStream output_stream;
127 auto number =
128 pdfium::MakeRetain<CPDF_Number>(std::numeric_limits<int>::min());
129 ASSERT_TRUE(number->WriteTo(&output_stream, /*encryptor=*/nullptr));
130 EXPECT_EQ(" -2147483648", output_stream.str());
131 }
132}
fxcrt::ByteString ByteString
Definition bytestring.h:180
TEST(FXCRYPT, MD5GenerateEmtpyData)
#define FX_FILESIZE
Definition fx_types.h:19
#define NOTREACHED_NORETURN()
Definition notreached.h:22