@@ -1675,6 +1675,43 @@ JSONTEST_FIXTURE(ValueTest, specialFloats) {
16751675 JSONTEST_ASSERT_STRING_EQUAL (expected, result);
16761676}
16771677
1678+ JSONTEST_FIXTURE (ValueTest, precision) {
1679+ Json::StreamWriterBuilder b;
1680+ b.settings_ [" precision" ] = 5 ;
1681+
1682+ Json::Value v = 100.0 /3 ;
1683+ std::string expected = " 33.333" ;
1684+ std::string result = Json::writeString (b, v);
1685+ JSONTEST_ASSERT_STRING_EQUAL (expected, result);
1686+
1687+ v = 0.25000000 ;
1688+ expected = " 0.25" ;
1689+ result = Json::writeString (b, v);
1690+ JSONTEST_ASSERT_STRING_EQUAL (expected, result);
1691+
1692+ v = 0.2563456 ;
1693+ expected = " 0.25635" ;
1694+ result = Json::writeString (b, v);
1695+ JSONTEST_ASSERT_STRING_EQUAL (expected, result);
1696+
1697+ b.settings_ [" precision" ] = 1 ;
1698+ expected = " 0.3" ;
1699+ result = Json::writeString (b, v);
1700+ JSONTEST_ASSERT_STRING_EQUAL (expected, result);
1701+
1702+ b.settings_ [" precision" ] = 17 ;
1703+ v = 1234857476305.256345694873740545068 ;
1704+ expected = " 1234857476305.2563" ;
1705+ result = Json::writeString (b, v);
1706+ JSONTEST_ASSERT_STRING_EQUAL (expected, result);
1707+
1708+ b.settings_ [" precision" ] = 24 ;
1709+ v = 0.256345694873740545068 ;
1710+ expected = " 0.25634569487374054" ;
1711+ result = Json::writeString (b, v);
1712+ JSONTEST_ASSERT_STRING_EQUAL (expected, result);
1713+ }
1714+
16781715struct WriterTest : JsonTest::TestCase {};
16791716
16801717JSONTEST_FIXTURE (WriterTest, dropNullPlaceholders) {
@@ -2489,6 +2526,7 @@ int main(int argc, const char* argv[]) {
24892526 JSONTEST_REGISTER_FIXTURE (runner, ValueTest, zeroes);
24902527 JSONTEST_REGISTER_FIXTURE (runner, ValueTest, zeroesInKeys);
24912528 JSONTEST_REGISTER_FIXTURE (runner, ValueTest, specialFloats);
2529+ JSONTEST_REGISTER_FIXTURE (runner, ValueTest, precision);
24922530
24932531 JSONTEST_REGISTER_FIXTURE (runner, WriterTest, dropNullPlaceholders);
24942532 JSONTEST_REGISTER_FIXTURE (runner, StreamWriterTest, dropNullPlaceholders);
0 commit comments