blob: 6940e77b0e984f08ae7244bbb3a590f1e1ca766c [file]
// Copyright 2026 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "core/fxcrt/stream_write_utils.h"
#include <math.h>
#include <limits>
#include "core/fxcrt/bytestring.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_string_wrappers.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
ByteString WriteFloatToString(float value) {
fxcrt::ostringstream stream;
WriteFloat(stream, value);
return ByteString(stream);
}
} // namespace
TEST(CPDFContentstreamWriteUtils, WriteFloat) {
EXPECT_EQ("0", WriteFloatToString(0.0f));
EXPECT_EQ("0", WriteFloatToString(-0.0f));
EXPECT_EQ("1", WriteFloatToString(1.0f));
EXPECT_EQ("-1", WriteFloatToString(-1.0f));
EXPECT_EQ(".5", WriteFloatToString(0.5f));
EXPECT_EQ("-.5", WriteFloatToString(-0.5f));
EXPECT_EQ(".00125", WriteFloatToString(0.00125f));
EXPECT_EQ("123.45", WriteFloatToString(123.45f));
EXPECT_EQ("-7.5", WriteFloatToString(-7.5f));
EXPECT_EQ("38.895287", WriteFloatToString(38.895285f));
EXPECT_EQ("-77.03723", WriteFloatToString(-77.037232f));
EXPECT_EQ("340282350000000000000000000000000000000",
WriteFloatToString(std::numeric_limits<float>::max()));
EXPECT_EQ("-340282350000000000000000000000000000000",
WriteFloatToString(-std::numeric_limits<float>::max()));
EXPECT_EQ(".000000000000000000000000000000000000011754944",
WriteFloatToString(std::numeric_limits<float>::min()));
EXPECT_EQ("-.000000000000000000000000000000000000011754944",
WriteFloatToString(-std::numeric_limits<float>::min()));
EXPECT_EQ("340282350000000000000000000000000000000",
WriteFloatToString(INFINITY));
EXPECT_EQ("-340282350000000000000000000000000000000",
WriteFloatToString(-INFINITY));
EXPECT_EQ("0", WriteFloatToString(NAN));
}
TEST(CPDFContentstreamWriteUtils, WriteMatrix) {
fxcrt::ostringstream stream;
WriteMatrix(stream, CFX_Matrix(1.0f, 0.0f, 0.0f, 1.0f, 10.5f, 20.25f));
EXPECT_EQ("1 0 0 1 10.5 20.25", ByteString(stream));
}
TEST(CPDFContentstreamWriteUtils, WritePoint) {
fxcrt::ostringstream stream;
WritePoint(stream, CFX_PointF(1.0f, 2.5f));
EXPECT_EQ("1 2.5", ByteString(stream));
}
TEST(CPDFContentstreamWriteUtils, WriteRect) {
fxcrt::ostringstream stream;
WriteRect(stream, CFX_FloatRect(1.0f, 2.0f, 10.0f, 20.0f));
EXPECT_EQ("1 2 9 18", ByteString(stream));
}