Skip to content

Commit f8e2d9d

Browse files
christophpurrermeta-codesync[bot]
authored andcommitted
Add unit tests for DoubleConversions::toString
Summary: Add comprehensive unit tests for the `toString(double, char)` function in `DoubleConversions.cpp`. The tests cover: - Zero and negative zero - Positive and negative integers - Fractional values - Very small and very large values - Scientific notation for values below 1e-6 - Infinity and NaN serialization as "0" - Suffix character appending (including null suffix) - Suffix behavior with special values (infinity, NaN) Changelog: [Internal] Differential Revision: D96625901
1 parent cd0dbf5 commit f8e2d9d

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
#include <react/renderer/graphics/DoubleConversions.h>
9+
10+
#include <gtest/gtest.h>
11+
#include <cmath>
12+
#include <limits>
13+
14+
using namespace facebook::react;
15+
16+
TEST(DoubleConversionsTest, zeroValue) {
17+
EXPECT_EQ(toString(0.0, '\0'), "0");
18+
}
19+
20+
TEST(DoubleConversionsTest, negativeZero) {
21+
EXPECT_EQ(toString(-0.0, '\0'), "-0");
22+
}
23+
24+
TEST(DoubleConversionsTest, positiveIntegers) {
25+
EXPECT_EQ(toString(1.0, '\0'), "1");
26+
EXPECT_EQ(toString(42.0, '\0'), "42");
27+
EXPECT_EQ(toString(1000.0, '\0'), "1000");
28+
}
29+
30+
TEST(DoubleConversionsTest, negativeIntegers) {
31+
EXPECT_EQ(toString(-1.0, '\0'), "-1");
32+
EXPECT_EQ(toString(-42.0, '\0'), "-42");
33+
}
34+
35+
TEST(DoubleConversionsTest, fractionalValues) {
36+
EXPECT_EQ(toString(3.14, '\0'), "3.14");
37+
EXPECT_EQ(toString(0.5, '\0'), "0.5");
38+
EXPECT_EQ(toString(-2.75, '\0'), "-2.75");
39+
}
40+
41+
TEST(DoubleConversionsTest, verySmallValues) {
42+
EXPECT_EQ(toString(0.000001, '\0'), "0.000001");
43+
}
44+
45+
TEST(DoubleConversionsTest, veryLargeValues) {
46+
EXPECT_EQ(toString(1e20, '\0'), "100000000000000000000");
47+
}
48+
49+
TEST(DoubleConversionsTest, scientificNotation) {
50+
// Values below 1e-6 should use scientific notation
51+
auto result = toString(1e-7, '\0');
52+
EXPECT_NE(result.find('E'), std::string::npos);
53+
}
54+
55+
TEST(DoubleConversionsTest, infinitySerializedAsZero) {
56+
EXPECT_EQ(toString(std::numeric_limits<double>::infinity(), '\0'), "0");
57+
EXPECT_EQ(toString(-std::numeric_limits<double>::infinity(), '\0'), "0");
58+
}
59+
60+
TEST(DoubleConversionsTest, nanSerializedAsZero) {
61+
EXPECT_EQ(toString(std::numeric_limits<double>::quiet_NaN(), '\0'), "0");
62+
}
63+
64+
TEST(DoubleConversionsTest, suffixAppended) {
65+
EXPECT_EQ(toString(3.14, '%'), "3.14%");
66+
EXPECT_EQ(toString(100.0, 'x'), "100x");
67+
}
68+
69+
TEST(DoubleConversionsTest, nullSuffixNotAppended) {
70+
auto result = toString(42.0, '\0');
71+
EXPECT_EQ(result, "42");
72+
EXPECT_EQ(result.back(), '2');
73+
}
74+
75+
TEST(DoubleConversionsTest, suffixWithSpecialValues) {
76+
EXPECT_EQ(toString(std::numeric_limits<double>::infinity(), '%'), "0%");
77+
EXPECT_EQ(toString(std::numeric_limits<double>::quiet_NaN(), 'x'), "0x");
78+
}

0 commit comments

Comments
 (0)