diff --git a/lib/cpp/test/ToStringTest.cpp b/lib/cpp/test/ToStringTest.cpp
index 1a89c11..d204cb3 100644
--- a/lib/cpp/test/ToStringTest.cpp
+++ b/lib/cpp/test/ToStringTest.cpp
@@ -30,9 +30,9 @@
 
 using apache::thrift::to_string;
 
-BOOST_AUTO_TEST_SUITE( ToStringTest )
+BOOST_AUTO_TEST_SUITE(ToStringTest)
 
-BOOST_AUTO_TEST_CASE( base_types_to_string ) {
+BOOST_AUTO_TEST_CASE(base_types_to_string) {
   BOOST_CHECK_EQUAL(to_string(10), "10");
   BOOST_CHECK_EQUAL(to_string(true), "1");
   BOOST_CHECK_EQUAL(to_string('a'), "a");
@@ -40,91 +40,91 @@
   BOOST_CHECK_EQUAL(to_string("abc"), "abc");
 }
 
-BOOST_AUTO_TEST_CASE( empty_vector_to_string ) {
+BOOST_AUTO_TEST_CASE(empty_vector_to_string) {
   std::vector<int> l;
   BOOST_CHECK_EQUAL(to_string(l), "[]");
 }
 
-BOOST_AUTO_TEST_CASE( single_item_vector_to_string ) {
+BOOST_AUTO_TEST_CASE(single_item_vector_to_string) {
   std::vector<int> l;
   l.push_back(100);
   BOOST_CHECK_EQUAL(to_string(l), "[100]");
 }
 
-BOOST_AUTO_TEST_CASE( multiple_item_vector_to_string ) {
+BOOST_AUTO_TEST_CASE(multiple_item_vector_to_string) {
   std::vector<int> l;
   l.push_back(100);
   l.push_back(150);
   BOOST_CHECK_EQUAL(to_string(l), "[100, 150]");
 }
 
-BOOST_AUTO_TEST_CASE( empty_map_to_string ) {
+BOOST_AUTO_TEST_CASE(empty_map_to_string) {
   std::map<int, std::string> m;
   BOOST_CHECK_EQUAL(to_string(m), "{}");
 }
 
-BOOST_AUTO_TEST_CASE( single_item_map_to_string ) {
+BOOST_AUTO_TEST_CASE(single_item_map_to_string) {
   std::map<int, std::string> m;
   m[12] = "abc";
   BOOST_CHECK_EQUAL(to_string(m), "{12: abc}");
 }
 
-BOOST_AUTO_TEST_CASE( multi_item_map_to_string ) {
+BOOST_AUTO_TEST_CASE(multi_item_map_to_string) {
   std::map<int, std::string> m;
   m[12] = "abc";
   m[31] = "xyz";
   BOOST_CHECK_EQUAL(to_string(m), "{12: abc, 31: xyz}");
 }
 
-BOOST_AUTO_TEST_CASE( empty_set_to_string ) {
+BOOST_AUTO_TEST_CASE(empty_set_to_string) {
   std::set<char> s;
   BOOST_CHECK_EQUAL(to_string(s), "{}");
 }
 
-BOOST_AUTO_TEST_CASE( single_item_set_to_string ) {
+BOOST_AUTO_TEST_CASE(single_item_set_to_string) {
   std::set<char> s;
   s.insert('c');
   BOOST_CHECK_EQUAL(to_string(s), "{c}");
 }
 
-BOOST_AUTO_TEST_CASE( multi_item_set_to_string ) {
+BOOST_AUTO_TEST_CASE(multi_item_set_to_string) {
   std::set<char> s;
   s.insert('a');
   s.insert('z');
   BOOST_CHECK_EQUAL(to_string(s), "{a, z}");
 }
 
-BOOST_AUTO_TEST_CASE( generated_empty_object_to_string ) {
+BOOST_AUTO_TEST_CASE(generated_empty_object_to_string) {
   thrift::test::EmptyStruct e;
   BOOST_CHECK_EQUAL(to_string(e), "EmptyStruct()");
 }
 
-BOOST_AUTO_TEST_CASE( generated_single_basic_field_object_to_string ) {
+BOOST_AUTO_TEST_CASE(generated_single_basic_field_object_to_string) {
   thrift::test::StructA a;
   a.__set_s("abcd");
   BOOST_CHECK_EQUAL(to_string(a), "StructA(s=abcd)");
 }
 
-BOOST_AUTO_TEST_CASE( generated_two_basic_fields_object_to_string ) {
+BOOST_AUTO_TEST_CASE(generated_two_basic_fields_object_to_string) {
   thrift::test::Bonk a;
   a.__set_message("abcd");
   a.__set_type(1234);
   BOOST_CHECK_EQUAL(to_string(a), "Bonk(message=abcd, type=1234)");
 }
 
-BOOST_AUTO_TEST_CASE( generated_optional_fields_object_to_string ) {
+BOOST_AUTO_TEST_CASE(generated_optional_fields_object_to_string) {
   thrift::test::Tricky2 a;
   BOOST_CHECK_EQUAL(to_string(a), "Tricky2(im_optional=<null>)");
   a.__set_im_optional(123);
   BOOST_CHECK_EQUAL(to_string(a), "Tricky2(im_optional=123)");
 }
 
-BOOST_AUTO_TEST_CASE( generated_nested_object_to_string ) {
+BOOST_AUTO_TEST_CASE(generated_nested_object_to_string) {
   thrift::test::OneField a;
   BOOST_CHECK_EQUAL(to_string(a), "OneField(field=EmptyStruct())");
 }
 
-BOOST_AUTO_TEST_CASE( generated_nested_list_object_to_string ) {
+BOOST_AUTO_TEST_CASE(generated_nested_list_object_to_string) {
   thrift::test::ListBonks l;
   l.bonk.assign(2, thrift::test::Bonk());
   l.bonk[0].__set_message("a");
