===================================================================  test of cpp_dump_macro  ===================================================================
[dump] 10 => 10, 20 => 20, 30 => 30, 40 => 40, 50 => 50, 60 => 60, 70 => 70, 80 => 80, 90 => 90, 100 => 100, 110 => 110, 120 => 120, 13 => 13, 14 => 14, 00 => 0
[dump] 10 => 10, 20 => 20, 30 => 30, 40 => 40, 50 => 50, 60 => 60, 70 => 70, 80 => 80, 90 => 90, 100 => 100, 110 => 110, 120 => 120, 13 => 13, 14 => 14, 
       000 => 0
[dump] 10 => 10, 20 => 20, 30 => 30, 40 => 40, 50 => 50, 60 => 60, 70 => 70, 80 => 80, 90 => 90, 100 => 100, 110 => 110, 120 => 120, 13 => 13, 14 => 14, 00 => 0, 
       15 => 15
[dump] 10000000000 => 10000000000, 20000000000 => 20000000000, 30000000000 => 30000000000, 40000000000 => 40000000000, 50000000000 => 50000000000, 00000000 => 0, 
       70000000000 => 70000000000, 80000000000 => 80000000000, 90000000000 => 90000000000, 100000000000 => 100000000000, 110000000000 => 110000000000, 0000 => 0, 
       130000000000 => 130000000000, 140000000000 => 140000000000, 150000000000 => 150000000000, 160000000000 => 160000000000
[dump] string(132, '-')
         => "------------------------------------------------------------------------------------------------------------------------------------"
[dump] string(131, '-') => "-----------------------------------------------------------------------------------------------------------------------------------"
[dump] string(131, '-') => "-----------------------------------------------------------------------------------------------------------------------------------", 
       string(131, '-') => "-----------------------------------------------------------------------------------------------------------------------------------"
=============================================================  test of value contains newline(s)  ==============================================================
[dump] "\n" => 
`
`,
       0 => 0,
       1 => 1,
       2 => 2
[dump] 0 => 0,
       1 => 1,
       2 => 2,
       "\n" => 
`
`
[dump] string(131, '-') => "-----------------------------------------------------------------------------------------------------------------------------------",
       R"(this string contains a newline
here.)"[0] => 't',
       2 => 2
[dump] R"(this string contains a newline
here.)" => 
`this string contains a newline
here.`
=====================================================================  test of 1d vector  ======================================================================
[dump] vec1d1 => [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 800000 ], 
       vec1d2
         => [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 80000000000 ]
[dump] vec1d3 => [
         10000000000000000,
         20000000000000000,
         30000000000000000,
         40000000000000000,
         50000000000000000,
         60000000000000000,
         70000000000000000,
         800000000000
       ]
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::always);
[dump] vec1d1 => [
         10000000000000000,
         20000000000000000,
         30000000000000000,
         40000000000000000,
         50000000000000000,
         60000000000000000,
         70000000000000000,
         800000
       ]
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_nested);
[dump] vector_of_string => [
         
`this string contains a newline
here`
       ]
=====================================================================  test of 2d vector  ======================================================================
[dump] vector2d1 => [
         [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 800000, 900000 ]
       ]
[dump] vector2d2 => [
         [
           10000000000000000,
           20000000000000000,
           30000000000000000,
           40000000000000000,
           50000000000000000,
           60000000000000000,
           70000000000000000,
           800000,
           9000000
         ]
       ]
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_non_tuples_nested);
[dump] vector2d3 => [
         [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 8000000 ]
       ]
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::minimal);
[dump] vector2d3
         => [ [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 8000000 ] ]
[dump] vector2d4 => [
         [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 80000000 ]
       ]
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_non_tuples_nested);
[dump] vec_of_tuple => [ ( 1, 2 ) ]
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_nested);
[dump] vec_of_tuple => [
         ( 1, 2 )
       ]
========================================================================  test of set  =========================================================================
[dump] set1d2
         => { 80000000000, 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000 }
[dump] set1d3 => {
         800000000000,
         10000000000000000,
         20000000000000000,
         30000000000000000,
         40000000000000000,
         50000000000000000,
         60000000000000000,
         70000000000000000
       }
[dump] set_of_string => {
         
`this string contains a newline
here`
       }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_non_tuples_nested);
[dump] set_of_vec1 => {
         [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 8000000 ]
       }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::minimal);
[dump] set_of_vec1
         => { [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 8000000 ] }
[dump] set_of_vec2 => {
         [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 80000000 ]
       }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_non_tuples_nested);
[dump] set_of_tuple => { ( 1, 2 ) }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_nested);
[dump] set_of_tuple => {
         ( 1, 2 )
       }
======================================================================  test of multiset  ======================================================================
[dump] mset2
         => { 8000000 (1), 1000000000000 (1), 2000000000000 (1), 3000000000000 (1), 4000000000000 (1), 5000000000000 (1), 6000000000000 (1), 7000000000000 (1) }
[dump] mset3 => {
         80000000 (1),
         1000000000000 (1),
         2000000000000 (1),
         3000000000000 (1),
         4000000000000 (1),
         5000000000000 (1),
         6000000000000 (1),
         7000000000000 (1)
       }
[dump] mset_of_string => {
         
`this string contains a newline
here` (1)
       }
========================================================================  test of map  =========================================================================
[dump] map1
         => { 0: 800000000000000, 1000000000000000000: 2000000000000000000, 3000000000000000000: 4000000000000000000, 5000000000000000000: 6000000000000000000 }
[dump] map2 => {
         0: 8000000000000000,
         1000000000000000000: 2000000000000000000,
         3000000000000000000: 4000000000000000000,
         5000000000000000000: 6000000000000000000
       }
[dump] map_of_string_key => {
         
`this string contains a newline
here`: 800000000000000
       }
[dump] map_of_string_value => {
         800000000000000: 
`this string contains a newline
here`
       }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_non_tuples_nested);
[dump] map_of_vec_key1 => {
         [ 1000000000000000, 2000000000000000, 3000000000000000, 400000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000 ]: 1
       }
[dump] map_of_vec_value1 => {
         1: [ 1000000000000000, 2000000000000000, 3000000000000000, 400000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000 ]
       }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::minimal);
[dump] map_of_vec_key1
         => { [ 1000000000000000, 2000000000000000, 3000000000000000, 400000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000 ]: 1 }
[dump] map_of_vec_value1
         => { 1: [ 1000000000000000, 2000000000000000, 3000000000000000, 400000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000 ] }
[dump] map_of_vec_key2 => {
         [ 1000000000000000, 2000000000000000, 3000000000000000, 4000000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000 ]: 1
       }
[dump] map_of_vec_value2 => {
         1: [ 1000000000000000, 2000000000000000, 3000000000000000, 4000000000000000, 500000000000000, 600000000000000, 700000000000000, 800000000000000 ]
       }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_non_tuples_nested);
[dump] map_of_tuple_key => { 1: ( 2, 3 ) }
[dump] map_of_tuple_value => { ( 1, 2 ): 3 }
CPP_DUMP_SET_OPTION(cont_indent_style, cp::cont_indent_style_t::when_nested);
[dump] map_of_tuple_key => {
         1: ( 2, 3 )
       }
[dump] map_of_tuple_value => {
         ( 1, 2 ): 3
       }
======================================================================  test of multimap  ======================================================================
[dump] mmap1 => {
         0 (8): [ 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 8000000 ]
       }
[dump] mmap2 => {
         0 (8): [
           10000000000000000,
           20000000000000000,
           30000000000000000,
           40000000000000000,
           50000000000000000,
           60000000000000000,
           70000000000000000,
           80000000
         ]
       }
[dump] mmap_of_string_key => {
         
`this string contains a newline
here` (1): [ 800000000000000 ]
       }
[dump] mmap_of_string_value => {
         800000000000000 (1): [
           
`this string contains a newline
here`
         ]
       }
=======================================================================  test of tuple  ========================================================================
[dump] tuple1d2
         => ( 10000000000000000, 20000000000000000, 30000000000000000, 40000000000000000, 50000000000000000, 60000000000000000, 70000000000000000, 80000000000 )
[dump] tuple1d3 => (
         10000000000000000,
         20000000000000000,
         30000000000000000,
         40000000000000000,
         50000000000000000,
         60000000000000000,
         70000000000000000,
         800000000000
       )
================================================================================================================================================================
[dump] pair_of_string1
         => ( "--------------------------------------------------------------------", "----------------------------------------------------------------------" )
[dump] pair_of_string2 => (
         "--------------------------------------------------------------------",
         "-----------------------------------------------------------------------"
       )
[dump] pair_of_string3 => (
         
`this string contains a newline
here`,
         ""
       )
=====================================================================  test of FIFO/LIFO  ======================================================================
[dump] queue1
         => std::queue{ front()= "----------------------------------------------------------------------------------------------------------------", size()= 1 }
[dump] queue2 => std::queue{ 
         front()= "-----------------------------------------------------------------------------------------------------------------", 
         size()= 1
       }
[dump] queue3 => std::queue{ 
         front()= 
`this string contains a newline
here`, 
         size()= 1
       }
[dump] queue4
         => std::queue{ front()= "--------------------------------------------------", back()= "--------------------------------------------------", size()= 2 }
[dump] queue5 => std::queue{ 
         front()= "--------------------------------------------------", 
         back()= "---------------------------------------------------", 
         size()= 2
       }
================================================================================================================================================================
[dump] stack1
         => std::stack{ top()= "------------------------------------------------------------------------------------------------------------------", size()= 1 }
[dump] stack2 => std::stack{ 
         top()= "-------------------------------------------------------------------------------------------------------------------", 
         size()= 1
       }
[dump] stack3 => std::stack{ 
         top()= 
`this string contains a newline
here`, 
         size()= 1
       }
================================================================================================================================================================
[dump] pq1
         => std::priority_queue{ top()= "---------------------------------------------------------------------------------------------------------", size()= 1 }
[dump] pq2 => std::priority_queue{ 
         top()= "----------------------------------------------------------------------------------------------------------", 
         size()= 1
       }
[dump] pq3 => std::priority_queue{ 
         top()= 
`this string contains a newline
here`, 
         size()= 1
       }
==========================================================  test of CPP_DUMP_DEFINE_EXPORT_OBJECT()  ===========================================================
[dump] class_a1
         => class_a{ int_a= 1000000000000000000, str= "------------------------------------------------------------------------------------------------------" }
[dump] class_a2 => class_a{ 
         int_a= 1000000000000000000, 
         str= "-------------------------------------------------------------------------------------------------------"
       }
[dump] class_a3 => class_a{ 
         int_a= 0, 
         str= 
`this string contains a newline
here`
       }
[dump] class_b1
         => class_b{ int_b= 1000000000000000000, str= "------------------------------------------------------------------------------------------------------" }
[dump] class_b2 => class_b{ 
         int_b= 1000000000000000000, 
         str= "-------------------------------------------------------------------------------------------------------"
       }
[dump] class_b3 => class_b{ 
         int_b= 0, 
         str= 
`this string contains a newline
here`
       }
================================================================  test of self-reference-class  ================================================================
[dump] self_reference_class1 => self_reference_class{ 
         str_member= "This has a self-reference.", 
         pointer= *self_reference_class{ 
           str_member= "This has a self-reference.", 
           pointer= *self_reference_class{ 
             str_member= "This has a self-reference.", 
             pointer= *self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }, 
             ref= self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }, 
           ref= self_reference_class{ 
             str_member= "This has a self-reference.", 
             pointer= *self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }, 
             ref= self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }
         }, 
         ref= self_reference_class{ 
           str_member= "This has a self-reference.", 
           pointer= *self_reference_class{ 
             str_member= "This has a self-reference.", 
             pointer= *self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }, 
             ref= self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }, 
           ref= self_reference_class{ 
             str_member= "This has a self-reference.", 
             pointer= *self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }, 
             ref= self_reference_class{ str_member= "This has a self-reference.", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }
         }
       }
[dump] self_reference_class2 => self_reference_class{ 
         str_member= "This has a self-reference..", 
         pointer= *self_reference_class{ 
           str_member= "This has a self-reference..", 
           pointer= *self_reference_class{ 
             str_member= "This has a self-reference..", 
             pointer= *self_reference_class{ 
               str_member= "This has a self-reference..", 
               pointer= *self_reference_class{ ... }, 
               ref= self_reference_class{ ... }
             }, 
             ref= self_reference_class{ str_member= "This has a self-reference..", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }, 
           ref= self_reference_class{ 
             str_member= "This has a self-reference..", 
             pointer= *self_reference_class{ 
               str_member= "This has a self-reference..", 
               pointer= *self_reference_class{ ... }, 
               ref= self_reference_class{ ... }
             }, 
             ref= self_reference_class{ str_member= "This has a self-reference..", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }
         }, 
         ref= self_reference_class{ 
           str_member= "This has a self-reference..", 
           pointer= *self_reference_class{ 
             str_member= "This has a self-reference..", 
             pointer= *self_reference_class{ 
               str_member= "This has a self-reference..", 
               pointer= *self_reference_class{ ... }, 
               ref= self_reference_class{ ... }
             }, 
             ref= self_reference_class{ str_member= "This has a self-reference..", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }, 
           ref= self_reference_class{ 
             str_member= "This has a self-reference..", 
             pointer= *self_reference_class{ 
               str_member= "This has a self-reference..", 
               pointer= *self_reference_class{ ... }, 
               ref= self_reference_class{ ... }
             }, 
             ref= self_reference_class{ str_member= "This has a self-reference..", pointer= *self_reference_class{ ... }, ref= self_reference_class{ ... } }
           }
         }
       }
