From 8ff620de3b929c04d7ffbaafee55c07983a69dce Mon Sep 17 00:00:00 2001 From: John Maddock Date: Thu, 17 Jan 2013 12:23:21 +0000 Subject: [PATCH] Add debug_adaptor.hpp. Document debug_adaptor and VC++ visualizers. [SVN r82517] --- doc/debugger1.png | Bin 0 -> 18899 bytes doc/debugger2.png | Bin 0 -> 29907 bytes doc/debugger3.png | Bin 0 -> 18453 bytes doc/debugger4.png | Bin 0 -> 18225 bytes doc/debugger5.png | Bin 0 -> 18600 bytes doc/debugger6.png | Bin 0 -> 40879 bytes .../boost_multiprecision/indexes/s01.html | 4 +- .../boost_multiprecision/indexes/s02.html | 10 +- .../boost_multiprecision/indexes/s03.html | 4 +- .../boost_multiprecision/indexes/s04.html | 5 +- doc/html/boost_multiprecision/tut.html | 7 +- .../boost_multiprecision/tut/conversions.html | 6 +- doc/html/boost_multiprecision/tut/misc.html | 7 +- .../tut/misc/debug_adaptor.html | 99 ++++ .../tut/misc/logged_adaptor.html | 6 +- .../tut/misc/visualizers.html | 198 ++++++++ doc/html/index.html | 9 +- doc/multiprecision.qbk | 178 +++++++ example/debug_adaptor_snips.cpp | 40 ++ .../boost/multiprecision/debug_adaptor.hpp | 453 ++++++++++++++++++ .../boost/multiprecision/logged_adaptor.hpp | 18 +- .../traits/extract_exponent_type.hpp | 28 ++ test/Jamfile.v2 | 3 + test/test_arithmetic_dbg_adptr1.cpp | 19 + test/test_arithmetic_dbg_adptr2.cpp | 19 + 25 files changed, 1082 insertions(+), 31 deletions(-) create mode 100644 doc/debugger1.png create mode 100644 doc/debugger2.png create mode 100644 doc/debugger3.png create mode 100644 doc/debugger4.png create mode 100644 doc/debugger5.png create mode 100644 doc/debugger6.png create mode 100644 doc/html/boost_multiprecision/tut/misc/debug_adaptor.html create mode 100644 doc/html/boost_multiprecision/tut/misc/visualizers.html create mode 100644 example/debug_adaptor_snips.cpp create mode 100644 include/boost/multiprecision/debug_adaptor.hpp create mode 100644 include/boost/multiprecision/traits/extract_exponent_type.hpp create mode 100644 test/test_arithmetic_dbg_adptr1.cpp create mode 100644 test/test_arithmetic_dbg_adptr2.cpp diff --git a/doc/debugger1.png b/doc/debugger1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b195697727084ac39c98400721bd96eac29bde5 GIT binary patch literal 18899 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 literal 0 HcmV?d00001 diff --git a/doc/debugger2.png b/doc/debugger2.png new file mode 100644 index 0000000000000000000000000000000000000000..f85a7ba0f0d2815ced2bb58cc7e0197288bf5a14 GIT binary patch literal 29907 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 literal 0 HcmV?d00001 diff --git a/doc/debugger3.png b/doc/debugger3.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f6d0345660de3861966d59725d4c25b318fc0f GIT binary patch literal 18453 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 literal 0 HcmV?d00001 diff --git a/doc/debugger4.png b/doc/debugger4.png new file mode 100644 index 0000000000000000000000000000000000000000..6db2b3c2f7afc9f7385af2b2a04c5765cfd30534 GIT binary patch literal 18225 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 literal 0 HcmV?d00001 diff --git a/doc/debugger6.png b/doc/debugger6.png new file mode 100644 index 0000000000000000000000000000000000000000..2bab4f7b19b06187ef63cac8c9d909b794872724 GIT binary patch literal 40879 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�cG4k0L4e`e z+4zqCzyEf%Jl6D7{hU+fx=3RaK%k_X(%zfK`bN~I{UjE-OG_G9c_)5cgWuM(Ir)_49TI zL@F~T_()0T?BW%=Te4OwBwbBfxZuS5>Ze8TpWge+c(3t~Kz+iGkCrF@KAsv=G4FHj zIZOWY=I!r4b9KIM<}fHRc4k@9#;sTHZ?@hozus~-$IcB)?nW@4D(2*8U!JTVsh^t?p7(l=<)uXR zo4Q$Vp4J>+vd32BQeKV9+~W_*9xnTR+HO;vS3>?h{RMAS{+GU8vNrAVXH6D4Z-xE2 zJ+e1{FlqDu`CoDKWBsFxwbCcep9#s$JNh#2&i;j^?vI~tGFr3k+T1T^%M9YTKaLD- z-h8uZ_jGaHZ(=&VYEs$R8LQSVJ^1k08P(G#JnmI@OI1%zab2IacH#BR^t*~li|Y>@ z+_F`~?s{GBuL)~h-(FvK&ic7s)Mu&SZz=&9XH;$eSTC5AFCXWcc&~Y#sr~N5zpfX) zt9Q{aiz+Ms|L45FX31S;|BdG=9`*f;o0J+kEj4o5(|sEfkL{U0_pSUP_n&=_%k~(h zNe1eldHH2R!bYnNH|9jV^;?shy6w$bwQcI}3v5O1p8S}1K5@y@zq9gh$r=6nSFydX zy*x;=zumSke*=H~lG>9;Jf`I_8it9XYL%`aPi>WV+S4HygwWF<&904%fBwM_Q{XDue$6HZ8)5DDARoMpI1Q0A3nLWGs$f4Y`5CdvkmXw?~RjJ^Zl}T$(C)WO_MepTW*l=zg#6OCdP)Xx$#n0 z)H0ht48CW}o}HQ79)E!4+#I{3C;u$IVjj1gwOs4e=@lz9(hu*xxo*bO=gW*|M0FT0 zI{l-UuS?;K#oW)=_pDs4^YHg+@s)b|2M_;|ym)&0$HcNS{{2^z1I};1S8?)D`iWoF z&m~wZcN(6Ka$T^L?|xw17KUkR+|zzltqZxD@av(8l39Lg*_mB+7v^7^{(s8ay2-rp zJa1oXp5CMbLTwKsAD&xRHtEYX?c`~tKPOxWHa4H}?nlM;=Qroxv%9hV_-i{k#>dAD zeopMPd1lTSoo4BsJblv4Nhep%pKVe8&}iANw%#duU z=Ctixm+0_)`}*tb2@dDm@9kK9B+lo}>73iUX6ox#7e87wbIFe7AHIKndfeaV_?3)D z&9Rv>Kab5_+`4to_jbvOioQpU$LE#&{gdGHrc`|Y!^zVhzs+2*aM`5SyjOcNY|K=i z1;_smcqJ|4cc*FX4<5N~X)Z+P zQ1EQh;g7vv+Pn9AQ2AEXjHqmxyFb1>*=-qDUta!k#j3nV@$L5NrT^=UYCfOzIjM5k ze7>-Hw}JT#wvzw%@BiihSG%TTj(`7-Uu7RBd&}6@?m7O^AY$GAyY~*Q&d*K%yRGD! z`m&GHkC@!6u%2pu-!t{FwWf;7(oLE#^K*Rt4qtpEapm#3ZuE)_?rN zgZL939%@|^xx4M|?s8#iY3GQD8w>ni-R7#J8BJYD@<);T3K F0RY^?fP(-4 literal 0 HcmV?d00001 diff --git a/doc/html/boost_multiprecision/indexes/s01.html b/doc/html/boost_multiprecision/indexes/s01.html index 7976d235..d179b255 100644 --- a/doc/html/boost_multiprecision/indexes/s01.html +++ b/doc/html/boost_multiprecision/indexes/s01.html @@ -22,9 +22,9 @@

-
+

-Function Index

+Function Index

A B C D E F I L M O P R S T V Z

diff --git a/doc/html/boost_multiprecision/indexes/s02.html b/doc/html/boost_multiprecision/indexes/s02.html index faff321b..99ee188f 100644 --- a/doc/html/boost_multiprecision/indexes/s02.html +++ b/doc/html/boost_multiprecision/indexes/s02.html @@ -22,10 +22,10 @@
PrevUpHomeNext
-
+

-Class Index

-

C E G I L M N T

+Class Index
+

C D E G I L M N T

C @@ -42,6 +42,10 @@
+D +
+
+
E
  • diff --git a/doc/html/boost_multiprecision/indexes/s03.html b/doc/html/boost_multiprecision/indexes/s03.html index 05dcbb04..c5685682 100644 --- a/doc/html/boost_multiprecision/indexes/s03.html +++ b/doc/html/boost_multiprecision/indexes/s03.html @@ -22,9 +22,9 @@
    PrevUpHomeNext
    -
    +

    -Typedef Index

    +Typedef Index

C I L M S T U

diff --git a/doc/html/boost_multiprecision/indexes/s04.html b/doc/html/boost_multiprecision/indexes/s04.html index ce564814..5eb4a30d 100644 --- a/doc/html/boost_multiprecision/indexes/s04.html +++ b/doc/html/boost_multiprecision/indexes/s04.html @@ -21,9 +21,9 @@
PrevUpHome
-
+

-Index

+Index

A B C D E F G I L M N O P R S T U V Z

@@ -237,6 +237,7 @@
  • mpfr_float

  • +
  • debug_adaptor

  • default_precision

    diff --git a/doc/html/boost_multiprecision/tut.html b/doc/html/boost_multiprecision/tut.html index a4a310e0..a526dc29 100644 --- a/doc/html/boost_multiprecision/tut.html +++ b/doc/html/boost_multiprecision/tut.html @@ -68,7 +68,12 @@
    rational_adaptor
  • Miscellaneous Number Types.
    -
    logged_adaptor
    +
    +
    logged_adaptor
    +
    debug_adaptor
    +
    Visual C++ + Debugger Visualizers
    +
    Constructing and Interconverting Between Number Types
    Generating Random Numbers
    diff --git a/doc/html/boost_multiprecision/tut/conversions.html b/doc/html/boost_multiprecision/tut/conversions.html index 1b7654b4..b799bbb9 100644 --- a/doc/html/boost_multiprecision/tut/conversions.html +++ b/doc/html/boost_multiprecision/tut/conversions.html @@ -6,7 +6,7 @@ - + @@ -20,7 +20,7 @@
    -PrevUpHomeNext +PrevUpHomeNext

    @@ -171,7 +171,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost_multiprecision/tut/misc.html b/doc/html/boost_multiprecision/tut/misc.html index 8e0fd297..9ec1fa15 100644 --- a/doc/html/boost_multiprecision/tut/misc.html +++ b/doc/html/boost_multiprecision/tut/misc.html @@ -26,7 +26,12 @@ - +

    Backend types listed in this section are predominantly designed to aid debugging.

    diff --git a/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html b/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html new file mode 100644 index 00000000..2c9f71e9 --- /dev/null +++ b/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html @@ -0,0 +1,99 @@ + + + +debug_adaptor + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    + +

    + #include <boost/multiprecision/debug_adaptor.hpp> +

    +
    namespace boost{ namespace multiprecision{
    +
    +template <Backend>
    +class debug_adaptor;
    +
    +}} // namespaces
    +
    +

    + The debug_adaptor type + is used in conjunction with number + and some other backend type: it acts as a thin wrapper around some other + backend to class number + and intercepts all operations on that object storing the result as a string + within itself. +

    +

    + This type provides numeric_limits + support whenever the template argument Backend does so. +

    +

    + This type is particularly useful when your debugger provides a good view + of std::string: when this is the case multiprecision + values can easily be inspected in the debugger by looking at the debug_value member of debug_adapter. + The down side of this approach is that runtimes are much slower when using + this type. Set against that it can make debugging very much easier, certainly + much easier than sprinkling code with printf + statements. +

    +

    + When used in conjunction with the Visual C++ debugger visualisers, the + value of a multiprecision type that uses this backend is displayed in the + debugger just a builtin value would be, here we're inspecting a value of + type number<debug_adapter<cpp_dec_float<50> > + >: +

    +

    + debugger1 +

    +

    + Otherwise you will need to expand out the view and look at the "debug_value" + member: +

    +

    + debugger2 +

    +

    + It works for all the backend types equally too, here it is inspecting a + number<debug_adapter<gmp_rational> + >: +

    +

    + debugger3 +

    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html b/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html index 91b44abd..c2e00142 100644 --- a/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html +++ b/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html @@ -7,7 +7,7 @@ - + @@ -20,7 +20,7 @@

    -PrevUpHomeNext +PrevUpHomeNext

    @@ -217,7 +217,7 @@
    -PrevUpHomeNext +PrevUpHomeNext
    diff --git a/doc/html/boost_multiprecision/tut/misc/visualizers.html b/doc/html/boost_multiprecision/tut/misc/visualizers.html new file mode 100644 index 00000000..afbdee13 --- /dev/null +++ b/doc/html/boost_multiprecision/tut/misc/visualizers.html @@ -0,0 +1,198 @@ + + + +Visual C++ Debugger Visualizers + + + + + + + + + + + + + + + +
    Boost C++ LibrariesHomeLibrariesPeopleFAQMore
    +
    +
    +PrevUpHomeNext +
    +
    + +

    + Let's face it debugger multiprecision numbers is hard - simply because + we can't easily inspect the value of the numbers. Visual C++ provides a + partial solution in the shape of "visualizers" which provide + improved views of complex data structures, these visualizers need to be + added to the [Visualizer] section of autoexp.dat + located in the Common7\Packages\Debugger + directory of your Visual Studio installation. +

    +
    + + + + + +
    [Note]Note

    + These visualizers have only been tested with VC10, also given the ability + of buggy visualizers to crash your Visual C++ debugger, make sure you + back up autoexp.dat file before using these!! +

    +

    + This visualizer provides improved views of debug_adaptor: +

    +
    boost::multiprecision::number<boost::multiprecision::backends::debug_adaptor<>,>{
    +   preview(
    +      #(
    +          $e.m_backend.debug_value
    +      )
    +   )
    +}
    +
    +

    + The next visualizer provides improved views of cpp_int: small numbers are + displayed as actual values, while larger numbers are displayed as an array + of hexadecimal parts, with the most significant part first. +

    +

    + Here's what it looks like for small values: +

    +

    + debugger4 +

    +

    + And for larger values: +

    +

    + debugger5 +

    +

    + There is also a ~raw + child member that lets you see the actual members of the class: +

    +

    + debugger6 +

    +

    + Here's the visualizer code: +

    +
    boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<,,1,,void>,>{
    +   preview(
    +      #if($e.m_backend.m_limbs == 1) (
    +         #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_wrapper.m_data[0]) ) #else ($e.m_backend.m_wrapper.m_data[0])
    +      )
    +      #elif(($e.m_backend.m_limbs == 2) && ($e.m_backend.m_wrapper.m_data[1] < 0x80000000)) (
    +         #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_wrapper.m_data[0] | ((__int64)$e.m_backend.m_wrapper.m_data[1] << 32)) ) #else ($e.m_backend.m_wrapper.m_data[0] | ((__int64)$e.m_backend.m_wrapper.m_data[1] << 32))
    +      ) #else (
    +         #( "signbit = ", $e.m_backend.m_sign, " data = ", #array ( expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x] )
    +      )
    +   )
    +
    +   children (
    +      #(
    +         ~raw: [$c,!],
    +         sign bit: $e.m_backend.m_sign,
    +         #array (
    +               expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1],
    +               size: $e.m_backend.m_limbs
    +         ) : [$e,x]
    +      )
    +   )
    +}
    +
    +boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<,,0,,void>,>{
    +   preview(
    +      #if($e.m_backend.m_limbs == 1) (
    +         $e.m_backend.m_wrapper.m_data[0]
    +      )
    +      #elif($e.m_backend.m_limbs == 2) (
    +         $e.m_backend.m_wrapper.m_data[0] | ((__int64)$e.m_backend.m_wrapper.m_data[1] << 32)
    +      ) #else (
    +         #array ( expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x]
    +      )
    +   )
    +
    +   children (
    +      #(
    +         ~raw: [$c,!],
    +         #array (
    +               expr: $e.m_backend.m_wrapper.m_data[$e.m_backend.m_limbs - $i - 1],
    +               size: $e.m_backend.m_limbs
    +         ) : [$e,x]
    +      )
    +   )
    +}
    +
    +boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<0,0,1,,>,*>{
    +   preview(
    +      #if ($e.m_backend.m_internal) (
    +        #if($e.m_backend.m_limbs == 1) (
    +            #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.first) ) #else($e.m_backend.m_data.first)
    +        ) #elif(($e.m_backend.m_limbs == 2) && ($e.m_backend.m_data.la[1] < 0x80000000)) (
    +            #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.double_first) ) #else($e.m_backend.m_data.double_first)
    +        ) #else(
    +           #( "signbit = ", $e.m_backend.m_sign, " data = ", #array ( expr: $e.m_backend.m_data.la[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x] )
    +        )
    +      ) #else(
    +        #if($e.m_backend.m_limbs == 1) (
    +            #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.ld.data[0]) ) #else($e.m_backend.m_data.ld.data[0])
    +        ) #elif(($e.m_backend.m_limbs == 2) && ($e.m_backend.m_data.ld.data[1] < 0x80000000)) (
    +            #if($e.m_backend.m_sign) ( -1 * (__int64)($e.m_backend.m_data.ld.data[0] | ((__int64)$e.m_backend.m_data.ld.data[1] << 32)) ) #else($e.m_backend.m_data.ld.data[0] | ((__int64)$e.m_backend.m_data.ld.data[1] << 32))
    +        ) #else(
    +            #( "signbit = ", $e.m_backend.m_sign, " data = ", #array ( expr: $e.m_backend.m_data.ld.data[$e.m_backend.m_limbs - $i - 1], size: $e.m_backend.m_limbs ) : [$e,x] )
    +        )
    +      )
    +   )
    +
    +   children (
    +      #if ($e.m_backend.m_internal) (
    +        #if($e.m_backend.m_limbs == 1) (
    +            #(value: $e.m_backend.m_data.first)
    +         ) #elif($e.m_backend.m_limbs == 1) (
    +            #(value: $e.m_backend.m_data.double_first)
    +         ) #else (
    +            #(
    +            sign bit: $e.m_backend.m_sign,
    +            #array (
    +                expr: $e.m_backend.m_data.la[$e.m_backend.m_limbs - $i - 1],
    +                size: $e.m_backend.m_limbs
    +            ) : [$e,x]
    +            )
    +         )
    +      ) #else (
    +        #(
    +            ~raw: [$c,!],
    +            sign bit: $e.m_backend.m_sign,
    +            #array (
    +                expr: $e.m_backend.m_data.ld.data[$e.m_backend.m_limbs - $i - 1],
    +                size: $e.m_backend.m_limbs
    +            ) : [$e,x]
    +         )
    +      )
    +   )
    +}
    +
    +
    + + + +
    +
    +
    +PrevUpHomeNext +
    + + diff --git a/doc/html/index.html b/doc/html/index.html index 20c5e129..0ef82590 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -83,7 +83,12 @@
    rational_adaptor
    Miscellaneous Number Types.
    -
    logged_adaptor
    +
    +
    logged_adaptor
    +
    debug_adaptor
    +
    Visual C++ + Debugger Visualizers
    +
    Constructing and Interconverting Between Number Types
    Generating Random Numbers
    @@ -140,7 +145,7 @@

    - +

    Last revised: January 15, 2013 at 11:39:36 GMT

    Last revised: January 17, 2013 at 12:12:57 GMT


    diff --git a/doc/multiprecision.qbk b/doc/multiprecision.qbk index b9c8bd07..92455b74 100644 --- a/doc/multiprecision.qbk +++ b/doc/multiprecision.qbk @@ -1254,6 +1254,184 @@ When we examine program output we can clearly see that the diameter of the inter [endsect] +[section:debug_adaptor debug_adaptor] + +`#include ` + + namespace boost{ namespace multiprecision{ + + template + class debug_adaptor; + + }} // namespaces + +The `debug_adaptor` type is used in conjunction with `number` and some other backend type: it acts as a thin wrapper around +some other backend to class `number` and intercepts all operations on that object storing the result as a string within itself. + +This type provides `numeric_limits` support whenever the template argument Backend does so. + +This type is particularly useful when your debugger provides a good view of `std::string`: when this is the case +multiprecision values can easily be inspected in the debugger by looking at the `debug_value` member of `debug_adapter`. +The down side of this approach is that runtimes are much slower when using this type. Set against that it can make +debugging very much easier, certainly much easier than sprinkling code with `printf` statements. + +When used in conjunction with the Visual C++ debugger visualisers, the value of a multiprecision type that uses this +backend is displayed in the debugger just a builtin value would be, here we're inspecting a value of type +`number > >`: + +[$../debugger1.png] + +Otherwise you will need to expand out the view and look at the "debug_value" member: + +[$../debugger2.png] + +It works for all the backend types equally too, here it is inspecting a `number >`: + +[$../debugger3.png] + + +[endsect] + +[section:visualizers Visual C++ Debugger Visualizers] + +Let's face it debugger multiprecision numbers is hard - simply because we can't easily inspect the value of the numbers. +Visual C++ provides a partial solution in the shape of "visualizers" which provide improved views of complex data structures, +these visualizers need to be added to the `[Visualizer]` section of `autoexp.dat` located in the `Common7\Packages\Debugger` +directory of your Visual Studio installation. + +[note These visualizers have only been tested with VC10, also given the ability of buggy visualizers to crash your Visual C++ +debugger, make sure you back up `autoexp.dat` file before using these!!] + +This visualizer provides improved views of `debug_adaptor`: + +[pre +boost::multiprecision::number,*>{ + preview( + \#( + \$e.m_backend.debug_value + ) + ) +} +] + +The next visualizer provides improved views of cpp_int: small numbers are displayed as actual values, while larger numbers are +displayed as an array of hexadecimal parts, with the most significant part first. + +Here's what it looks like for small values: + +[$../debugger4.png] + +And for larger values: + +[$../debugger5.png] + +There is also a `~raw` child member that +lets you see the actual members of the class: + +[$../debugger6.png] + +Here's the visualizer code: + +[pre +boost::multiprecision::number,*>{ + preview( + \#if(\$e.m_backend.m_limbs == 1) ( + \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_wrapper.m_data\[0\]) ) \#else (\$e.m_backend.m_wrapper.m_data\[0\]) + ) + \#elif((\$e.m_backend.m_limbs == 2) && (\$e.m_backend.m_wrapper.m_data\[1\] < 0x80000000)) ( + \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_wrapper.m_data\[0\] | ((__int64)\$e.m_backend.m_wrapper.m_data\[1\] << 32)) ) \#else (\$e.m_backend.m_wrapper.m_data\[0\] | ((__int64)\$e.m_backend.m_wrapper.m_data\[1\] << 32)) + ) \#else ( + \#( "signbit = ", \$e.m_backend.m_sign, " data = ", \#array ( expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\] ) + ) + ) + + children ( + \#( + \~raw: \[\$c,!\], + sign bit: \$e.m_backend.m_sign, + \#array ( + expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\], + size: \$e.m_backend.m_limbs + ) : \[\$e,x\] + ) + ) +} + +boost::multiprecision::number,*>{ + preview( + \#if(\$e.m_backend.m_limbs == 1) ( + \$e.m_backend.m_wrapper.m_data\[0\] + ) + \#elif(\$e.m_backend.m_limbs == 2) ( + \$e.m_backend.m_wrapper.m_data\[0\] | ((__int64)\$e.m_backend.m_wrapper.m_data\[1\] << 32) + ) \#else ( + \#array ( expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\] + ) + ) + + children ( + \#( + \~raw: \[\$c,!\], + \#array ( + expr: \$e.m_backend.m_wrapper.m_data\[\$e.m_backend.m_limbs - \$i - 1\], + size: \$e.m_backend.m_limbs + ) : \[\$e,x\] + ) + ) +} + +boost::multiprecision::number,*>{ + preview( + \#if (\$e.m_backend.m_internal) ( + \#if(\$e.m_backend.m_limbs == 1) ( + \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.first) ) \#else(\$e.m_backend.m_data.first) + ) \#elif((\$e.m_backend.m_limbs == 2) && (\$e.m_backend.m_data.la\[1\] < 0x80000000)) ( + \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.double_first) ) \#else(\$e.m_backend.m_data.double_first) + ) \#else( + \#( "signbit = ", \$e.m_backend.m_sign, " data = ", \#array ( expr: \$e.m_backend.m_data.la\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\] ) + ) + ) \#else( + \#if(\$e.m_backend.m_limbs == 1) ( + \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.ld.data\[0\]) ) \#else(\$e.m_backend.m_data.ld.data\[0\]) + ) \#elif((\$e.m_backend.m_limbs == 2) && (\$e.m_backend.m_data.ld.data\[1\] < 0x80000000)) ( + \#if(\$e.m_backend.m_sign) ( -1 * (__int64)(\$e.m_backend.m_data.ld.data\[0\] | ((__int64)\$e.m_backend.m_data.ld.data\[1\] << 32)) ) \#else(\$e.m_backend.m_data.ld.data\[0\] | ((__int64)\$e.m_backend.m_data.ld.data\[1\] << 32)) + ) \#else( + \#( "signbit = ", \$e.m_backend.m_sign, " data = ", \#array ( expr: \$e.m_backend.m_data.ld.data\[\$e.m_backend.m_limbs - \$i - 1\], size: \$e.m_backend.m_limbs ) : \[\$e,x\] ) + ) + ) + ) + + children ( + \#if (\$e.m_backend.m_internal) ( + \#if(\$e.m_backend.m_limbs == 1) ( + \#(value: \$e.m_backend.m_data.first) + ) \#elif(\$e.m_backend.m_limbs == 1) ( + \#(value: \$e.m_backend.m_data.double_first) + ) \#else ( + \#( + sign bit: \$e.m_backend.m_sign, + \#array ( + expr: \$e.m_backend.m_data.la\[\$e.m_backend.m_limbs - \$i - 1\], + size: \$e.m_backend.m_limbs + ) : \[\$e,x\] + ) + ) + ) \#else ( + \#( + \~raw: \[\$c,!\], + sign bit: \$e.m_backend.m_sign, + \#array ( + expr: \$e.m_backend.m_data.ld.data\[\$e.m_backend.m_limbs - \$i - 1\], + size: \$e.m_backend.m_limbs + ) : \[\$e,x\] + ) + ) + ) +} +] + +[endsect] + [endsect] [section:conversions Constructing and Interconverting Between Number Types] diff --git a/example/debug_adaptor_snips.cpp b/example/debug_adaptor_snips.cpp new file mode 100644 index 00000000..8de85dcf --- /dev/null +++ b/example/debug_adaptor_snips.cpp @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2011 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_ + +#include +#include +#include + +void t1() +{ + //[debug_adaptor_eg + //=#include + //=#include + + using namespace boost::multiprecision; + + typedef number > > fp_type; + + fp_type denom = 1; + fp_type sum = 1; + + for(unsigned i = 2; i < 50; ++i) + { + denom *= i; + sum += 1 / denom; + } + + std::cout << std::setprecision(std::numeric_limits::digits) << sum << std::endl; + //] +} + +int main() +{ + t1(); + return 0; +} + + + diff --git a/include/boost/multiprecision/debug_adaptor.hpp b/include/boost/multiprecision/debug_adaptor.hpp new file mode 100644 index 00000000..d7987a12 --- /dev/null +++ b/include/boost/multiprecision/debug_adaptor.hpp @@ -0,0 +1,453 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2012 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_ + +#ifndef BOOST_MATH_DEBUG_ADAPTER_HPP +#define BOOST_MATH_DEBUG_ADAPTER_HPP + +#include + +namespace boost{ +namespace multiprecision{ +namespace backends{ + +template +struct debug_adaptor +{ + typedef typename Backend::signed_types signed_types; + typedef typename Backend::unsigned_types unsigned_types; + typedef typename Backend::float_types float_types; + typedef typename extract_exponent_type< + Backend, number_category::value>::type exponent_type; + +private: + std::string debug_value; + Backend m_value; +public: + void update_view() + { + try + { + debug_value = m_value.str(0, static_cast(0)); + } + catch(const std::exception& e) + { + debug_value = "String conversion failed with message: \""; + debug_value += e.what(); + debug_value += "\""; + } + } + debug_adaptor() + { + update_view(); + } + debug_adaptor(const debug_adaptor& o) : debug_value(o.debug_value), m_value(o.m_value) + { + } + debug_adaptor& operator = (const debug_adaptor& o) + { + debug_value = o.debug_value; + m_value = o.m_value; + return *this; + } + template + debug_adaptor(const T& i, const typename enable_if_c::value>::type* = 0) + : m_value(i) + { + update_view(); + } + template + debug_adaptor(const T& i, const T& j) + : m_value(i, j) + { + update_view(); + } + template + typename enable_if_c::value || is_convertible::value, debug_adaptor&>::type operator = (const T& i) + { + m_value = i; + update_view(); + return *this; + } + debug_adaptor& operator = (const char* s) + { + m_value = s; + update_view(); + return *this; + } + void swap(debug_adaptor& o) + { + std::swap(m_value, o.value()); + std::swap(debug_value, o.debug_value); + } + std::string str(std::streamsize digits, std::ios_base::fmtflags f)const + { + return m_value.str(digits, f); + } + void negate() + { + m_value.negate(); + update_view(); + } + int compare(const debug_adaptor& o)const + { + return m_value.compare(o.value()); + } + template + int compare(const T& i)const + { + return m_value.compare(i); + } + Backend& value() + { + return m_value; + } + const Backend& value()const + { + return m_value; + } +}; + +template +inline Backend const& unwrap_debug_type(debug_adaptor const& val) +{ + return val.value(); +} +template +inline const T& unwrap_debug_type(const T& val) +{ + return val; +} + +#define NON_MEMBER_OP1(name, str) \ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value());\ + result.update_view();\ + } + +#define NON_MEMBER_OP2(name, str) \ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const T& a)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const debug_adaptor& a)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a));\ + result.update_view();\ + } + +#define NON_MEMBER_OP3(name, str) \ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const T& a, const U& b)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const debug_adaptor& a, const T& b)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const T& a, const debug_adaptor& b)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const debug_adaptor& a, const debug_adaptor& b)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b));\ + result.update_view();\ + } + +#define NON_MEMBER_OP4(name, str) \ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const T& a, const U& b, const V& c)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const debug_adaptor& a, const debug_adaptor& b, const T& c)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const debug_adaptor& a, const T& b, const debug_adaptor& c)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const T& a, const debug_adaptor& b, const debug_adaptor& c)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const debug_adaptor& a, const debug_adaptor& b, const debug_adaptor& c)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\ + result.update_view();\ + }\ + template \ + inline void BOOST_JOIN(eval_, name)(debug_adaptor& result, const debug_adaptor& a, const T& b, const U& c)\ + {\ + using default_ops::BOOST_JOIN(eval_, name);\ + BOOST_JOIN(eval_, name)(result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c));\ + result.update_view();\ + }\ + +NON_MEMBER_OP2(add, "+="); +NON_MEMBER_OP2(subtract, "-="); +NON_MEMBER_OP2(multiply, "*="); +NON_MEMBER_OP2(divide, "/="); + +template +inline void eval_convert_to(R* result, const debug_adaptor& val) +{ + using default_ops::eval_convert_to; + eval_convert_to(result, val.value()); +} + +template +inline void eval_frexp(debug_adaptor& result, const debug_adaptor& arg, Exp* exp) +{ + eval_frexp(result.value(), arg.value(), exp); + result.update_view();\ +} + +template +inline void eval_ldexp(debug_adaptor& result, const debug_adaptor& arg, Exp exp) +{ + eval_ldexp(result.value(), arg.value(), exp); + result.update_view();\ +} + +NON_MEMBER_OP2(floor, "floor"); +NON_MEMBER_OP2(ceil, "ceil"); +NON_MEMBER_OP2(sqrt, "sqrt"); + +template +inline int eval_fpclassify(const debug_adaptor& arg) +{ + using default_ops::eval_fpclassify; + return eval_fpclassify(arg.value()); +} + +/********************************************************************* +* +* Optional arithmetic operations come next: +* +*********************************************************************/ + +NON_MEMBER_OP3(add, "+"); +NON_MEMBER_OP3(subtract, "-"); +NON_MEMBER_OP3(multiply, "*"); +NON_MEMBER_OP3(divide, "/"); +NON_MEMBER_OP3(multiply_add, "fused-multiply-add"); +NON_MEMBER_OP3(multiply_subtract, "fused-multiply-subtract"); +NON_MEMBER_OP4(multiply_add, "fused-multiply-add"); +NON_MEMBER_OP4(multiply_subtract, "fused-multiply-subtract"); + +NON_MEMBER_OP1(increment, "increment"); +NON_MEMBER_OP1(decrement, "decrement"); + +/********************************************************************* +* +* Optional integer operations come next: +* +*********************************************************************/ + +NON_MEMBER_OP2(modulus, "%="); +NON_MEMBER_OP3(modulus, "%"); +NON_MEMBER_OP2(bitwise_or, "|="); +NON_MEMBER_OP3(bitwise_or, "|"); +NON_MEMBER_OP2(bitwise_and, "&="); +NON_MEMBER_OP3(bitwise_and, "&"); +NON_MEMBER_OP2(bitwise_xor, "^="); +NON_MEMBER_OP3(bitwise_xor, "^"); +NON_MEMBER_OP4(qr, "quotient-and-remainder"); +NON_MEMBER_OP2(complement, "~"); + +template +inline void eval_left_shift(debug_adaptor& arg, unsigned a) +{ + using default_ops::eval_left_shift; + eval_left_shift(arg.value(), a); + arg.update_view();\ +} +template +inline void eval_left_shift(debug_adaptor& arg, const debug_adaptor& a, unsigned b) +{ + using default_ops::eval_left_shift; + eval_left_shift(arg.value(), a, b); + arg.update_view();\ +} +template +inline void eval_right_shift(debug_adaptor& arg, unsigned a) +{ + using default_ops::eval_right_shift; + eval_right_shift(arg.value(), a); + arg.update_view();\ +} +template +inline void eval_right_shift(debug_adaptor& arg, const debug_adaptor& a, unsigned b) +{ + using default_ops::eval_right_shift; + eval_right_shift(arg.value(), a, b); + arg.update_view();\ +} + +template +inline unsigned eval_integer_modulus(const debug_adaptor& arg, const T& a) +{ + using default_ops::eval_integer_modulus; + return eval_integer_modulus(arg.value(), a); +} + +template +inline unsigned eval_lsb(const debug_adaptor& arg) +{ + using default_ops::eval_lsb; + return eval_lsb(arg.value()); +} + +template +inline bool eval_bit_test(const debug_adaptor& arg, unsigned a) +{ + using default_ops::eval_bit_test; + return eval_bit_test(arg.value(), a); +} + +template +inline void eval_bit_set(const debug_adaptor& arg, unsigned a) +{ + using default_ops::eval_bit_set; + eval_bit_set(arg.value(), a); + arg.update_view();\ +} +template +inline void eval_bit_unset(const debug_adaptor& arg, unsigned a) +{ + using default_ops::eval_bit_unset; + eval_bit_unset(arg.value(), a); + arg.update_view();\ +} +template +inline void eval_bit_flip(const debug_adaptor& arg, unsigned a) +{ + using default_ops::eval_bit_flip; + eval_bit_flip(arg.value(), a); + arg.update_view();\ +} + +NON_MEMBER_OP3(gcd, "gcd"); +NON_MEMBER_OP3(lcm, "lcm"); +NON_MEMBER_OP4(powm, "powm"); + +/********************************************************************* +* +* abs/fabs: +* +*********************************************************************/ + +NON_MEMBER_OP2(abs, "abs"); +NON_MEMBER_OP2(fabs, "fabs"); + +/********************************************************************* +* +* Floating point functions: +* +*********************************************************************/ + +NON_MEMBER_OP2(trunc, "trunc"); +NON_MEMBER_OP2(round, "round"); +NON_MEMBER_OP2(exp, "exp"); +NON_MEMBER_OP2(log, "log"); +NON_MEMBER_OP2(log10, "log10"); +NON_MEMBER_OP2(sin, "sin"); +NON_MEMBER_OP2(cos, "cos"); +NON_MEMBER_OP2(tan, "tan"); +NON_MEMBER_OP2(asin, "asin"); +NON_MEMBER_OP2(acos, "acos"); +NON_MEMBER_OP2(atan, "atan"); +NON_MEMBER_OP2(sinh, "sinh"); +NON_MEMBER_OP2(cosh, "cosh"); +NON_MEMBER_OP2(tanh, "tanh"); +NON_MEMBER_OP3(fmod, "fmod"); +NON_MEMBER_OP3(pow, "pow"); +NON_MEMBER_OP3(atan2, "atan2"); + +} // namespace backends + +using backends::debug_adaptor; + +template +struct number_category > : public number_category {}; + +}} // namespaces + +namespace std{ + +template +class numeric_limits, ExpressionTemplates> > + : public std::numeric_limits > +{ + typedef std::numeric_limits > base_type; + typedef boost::multiprecision::number, ExpressionTemplates> number_type; +public: + static number_type (min)() BOOST_NOEXCEPT { return (base_type::min)(); } + static number_type (max)() BOOST_NOEXCEPT { return (base_type::max)(); } + static number_type lowest() BOOST_NOEXCEPT { return -(max)(); } + static number_type epsilon() BOOST_NOEXCEPT { return base_type::epsilon(); } + static number_type round_error() BOOST_NOEXCEPT { return epsilon() / 2; } + static number_type infinity() BOOST_NOEXCEPT { return base_type::infinity(); } + static number_type quiet_NaN() BOOST_NOEXCEPT { return base_type::quiet_NaN(); } + static number_type signaling_NaN() BOOST_NOEXCEPT { return base_type::signaling_NaN(); } + static number_type denorm_min() BOOST_NOEXCEPT { return base_type::denorm_min(); } +}; + +} // namespace std + +namespace boost{ namespace math{ + +namespace policies{ + +template +struct precision< boost::multiprecision::number, ExpressionTemplates>, Policy> + : public precision, Policy> +{}; + +#undef NON_MEMBER_OP1 +#undef NON_MEMBER_OP2 +#undef NON_MEMBER_OP3 +#undef NON_MEMBER_OP4 + +} // namespace policies + +}} // namespaces boost::math + + +#endif diff --git a/include/boost/multiprecision/logged_adaptor.hpp b/include/boost/multiprecision/logged_adaptor.hpp index b57b8255..ebc558ee 100644 --- a/include/boost/multiprecision/logged_adaptor.hpp +++ b/include/boost/multiprecision/logged_adaptor.hpp @@ -6,7 +6,7 @@ #ifndef BOOST_MATH_LOGGED_ADAPTER_HPP #define BOOST_MATH_LOGGED_ADAPTER_HPP -#include +#include namespace boost{ namespace multiprecision{ @@ -38,17 +38,6 @@ inline void log_prefix_event(const Backend&, const T&, const U&, const V&, const namespace backends{ -template -struct extract_exponent_type -{ - typedef int type; -}; -template -struct extract_exponent_type -{ - typedef typename Backend::exponent_type type; -}; - template struct logged_adaptor { @@ -298,6 +287,7 @@ NON_MEMBER_OP2(sqrt, "sqrt"); template inline int eval_fpclassify(const logged_adaptor& arg) { + using default_ops::eval_fpclassify; log_prefix_event(arg.value(), "fpclassify"); int r = eval_fpclassify(arg.value()); log_postfix_event(arg.value(), r, "fpclassify"); @@ -508,5 +498,9 @@ struct precision< boost::multiprecision::number + +namespace boost{ +namespace multiprecision{ +namespace backends{ + +template +struct extract_exponent_type +{ + typedef int type; +}; +template +struct extract_exponent_type +{ + typedef typename Backend::exponent_type type; +}; + +}}} // namespaces + +#endif diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index a238698f..96fb2555 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -104,6 +104,9 @@ run test_arithmetic_ab_3.cpp ; run test_arithmetic_logged_1.cpp ; run test_arithmetic_logged_2.cpp ; +run test_arithmetic_dbg_adptr1.cpp ; +run test_arithmetic_dbg_adptr2.cpp ; + run test_arithmetic_mpfi_50.cpp mpfi mpfr gmp : : : [ check-target-builds ../config//has_mpfi : : no ] ; run test_numeric_limits.cpp diff --git a/test/test_arithmetic_dbg_adptr1.cpp b/test/test_arithmetic_dbg_adptr1.cpp new file mode 100644 index 00000000..88fdc5aa --- /dev/null +++ b/test/test_arithmetic_dbg_adptr1.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2012 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_ + +#ifdef _MSC_VER +# define _SCL_SECURE_NO_WARNINGS +#endif + +#include +#include +#include "test_arithmetic.hpp" + +int main() +{ + test > > >(); + return boost::report_errors(); +} + diff --git a/test/test_arithmetic_dbg_adptr2.cpp b/test/test_arithmetic_dbg_adptr2.cpp new file mode 100644 index 00000000..47b5529a --- /dev/null +++ b/test/test_arithmetic_dbg_adptr2.cpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2012 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_ + +#ifdef _MSC_VER +# define _SCL_SECURE_NO_WARNINGS +#endif + +#include +#include +#include "test_arithmetic.hpp" + +int main() +{ + test > > >(); + return boost::report_errors(); +} +