Skip to content

Commit aa48d58

Browse files
committed
Add tests.
1 parent c9e3f69 commit aa48d58

File tree

1 file changed

+95
-2
lines changed

1 file changed

+95
-2
lines changed

tests/testsDumper.cpp

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,9 @@ TEST(StringDumperTest, SuppressControlChars) {
490490

491491
TEST(StringDumperTest, EscapeControlChars) {
492492
Builder b;
493-
b.add(Value(
494-
"Before\nAfter\r\t\v\f\b\x01\x02/\u00B0\uf0f9\u9095\uf0f9\u90b6\v\n\\\""));
493+
b.add(
494+
Value("Before\nAfter\r\t\v\f\b\x01\x02/"
495+
"\u00B0\uf0f9\u9095\uf0f9\u90b6\v\n\\\""));
495496
Options options;
496497
options.escapeControl = true;
497498
ASSERT_EQ(std::string("\"Before\\nAfter\\r\\t\\u000B\\f\\b\\u0001\\u0002/"
@@ -1958,3 +1959,95 @@ int main(int argc, char* argv[]) {
19581959

19591960
return RUN_ALL_TESTS();
19601961
}
1962+
1963+
TEST(DumperLargeDoubleTest, TwoToThePowerOf60Double) {
1964+
Options options;
1965+
std::string buffer;
1966+
StringSink sink(&buffer);
1967+
Dumper dumper(&sink, &options);
1968+
Builder builder;
1969+
builder.add(Value(ldexp(1.0, 60)));
1970+
dumper.dump(builder.slice());
1971+
ASSERT_EQ("1152921504606846976.0", buffer);
1972+
}
1973+
1974+
TEST(DumperLargeDoubleTest, TwoToThePowerOf60Plus1Double) {
1975+
Options options;
1976+
std::string buffer;
1977+
StringSink sink(&buffer);
1978+
Dumper dumper(&sink, &options);
1979+
Builder builder;
1980+
builder.add(Value(ldexp(1.0, 60) + 1.0));
1981+
dumper.dump(builder.slice());
1982+
ASSERT_EQ("1152921504606846976.0", buffer);
1983+
}
1984+
1985+
TEST(DumperLargeDoubleTest, MinusTwoToThePowerOf60Double) {
1986+
Options options;
1987+
std::string buffer;
1988+
StringSink sink(&buffer);
1989+
Dumper dumper(&sink, &options);
1990+
Builder builder;
1991+
builder.add(Value(-ldexp(1.0, 60)));
1992+
dumper.dump(builder.slice());
1993+
ASSERT_EQ("-1152921504606846976.0", buffer);
1994+
}
1995+
1996+
TEST(DumperLargeDoubleTest, MinusTwoToThePowerOf60Plus1Double) {
1997+
Options options;
1998+
std::string buffer;
1999+
StringSink sink(&buffer);
2000+
Dumper dumper(&sink, &options);
2001+
Builder builder;
2002+
builder.add(Value(-ldexp(1.0, 60) + 1.0));
2003+
dumper.dump(builder.slice());
2004+
ASSERT_EQ("-1152921504606846976.0", buffer);
2005+
}
2006+
2007+
TEST(DumperLargeDoubleTest, TwoToThePowerOf52Double) {
2008+
Options options;
2009+
std::string buffer;
2010+
StringSink sink(&buffer);
2011+
Dumper dumper(&sink, &options);
2012+
Builder builder;
2013+
builder.add(Value(ldexp(1.0, 52)));
2014+
dumper.dump(builder.slice());
2015+
ASSERT_EQ("4503599627370496", buffer);
2016+
}
2017+
2018+
TEST(DumperLargeDoubleTest, TwoToThePowerOf53Double) {
2019+
Options options;
2020+
std::string buffer;
2021+
StringSink sink(&buffer);
2022+
Dumper dumper(&sink, &options);
2023+
Builder builder;
2024+
builder.add(Value(ldexp(1.0, 53)));
2025+
dumper.dump(builder.slice());
2026+
ASSERT_EQ("9007199254740992.0", buffer);
2027+
}
2028+
2029+
TEST(DumperLargeDoubleTest, TwoToThePowerOf63Double) {
2030+
Options options;
2031+
std::string buffer;
2032+
StringSink sink(&buffer);
2033+
Dumper dumper(&sink, &options);
2034+
Builder builder;
2035+
builder.add(Value(ldexp(1.0, 63)));
2036+
dumper.dump(builder.slice());
2037+
ASSERT_EQ("9223372036854775808.0", buffer);
2038+
}
2039+
2040+
TEST(DumperLargeDoubleTest, TwoToThePowerOf64Double) {
2041+
Options options;
2042+
std::string buffer;
2043+
StringSink sink(&buffer);
2044+
Dumper dumper(&sink, &options);
2045+
Builder builder;
2046+
builder.add(Value(ldexp(1.0, 64)));
2047+
dumper.dump(builder.slice());
2048+
// Note that this is, strictly speaking, not correct. But since this is
2049+
// at least 2^64, it will be parsed back to double anywa and then we
2050+
// get back the actual result. This is a sacrifice we make for performance.
2051+
ASSERT_EQ("18446744073709552000", buffer);
2052+
}
2053+

0 commit comments

Comments
 (0)