@@ -490,8 +490,9 @@ TEST(StringDumperTest, SuppressControlChars) {
490
490
491
491
TEST (StringDumperTest, EscapeControlChars) {
492
492
Builder b;
493
- b.add (Value (
494
- " Before\n After\r\t\v\f\b\x01\x02 /\u00B0\uf0f9\u9095\uf0f9\u90b6\v\n\\\" " ));
493
+ b.add (
494
+ Value (" Before\n After\r\t\v\f\b\x01\x02 /"
495
+ " \u00B0\uf0f9\u9095\uf0f9\u90b6\v\n\\\" " ));
495
496
Options options;
496
497
options.escapeControl = true ;
497
498
ASSERT_EQ (std::string (" \" Before\\ nAfter\\ r\\ t\\ u000B\\ f\\ b\\ u0001\\ u0002/"
@@ -1958,3 +1959,95 @@ int main(int argc, char* argv[]) {
1958
1959
1959
1960
return RUN_ALL_TESTS ();
1960
1961
}
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