$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r86594 - in trunk: boost/ratio boost/ratio/detail libs/ratio libs/ratio/test libs/ratio/test/ratio_arithmetic libs/ratio/test/ratio_io
From: vicente.botet_at_[hidden]
Date: 2013-11-09 06:47:43
Author: viboes
Date: 2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)
New Revision: 86594
URL: http://svn.boost.org/trac/boost/changeset/86594
Log:
Ratio: Added ratio binary prefixes and ratio_power.
Added:
   trunk/libs/ratio/test/ratio_arithmetic/ratio_power_pass.cpp   (contents, props changed)
Properties modified: 
   trunk/libs/ratio/   (props changed)
Text files modified: 
   trunk/boost/ratio/detail/ratio_io.hpp                       |   302 ++++++++++++++++++++++++++++++++++++++++
   trunk/boost/ratio/ratio.hpp                                 |    18 ++                                      
   trunk/boost/ratio/ratio_fwd.hpp                             |    12 +                                       
   trunk/boost/ratio/ratio_io.hpp                              |   257 ++++++++++++++++++++++++++++++++++      
   trunk/libs/ratio/test/Jamfile.v2                            |     1                                         
   trunk/libs/ratio/test/ratio_arithmetic/ratio_power_pass.cpp |    60 +++++++                                 
   trunk/libs/ratio/test/ratio_io/ratio_io_pass.cpp            |    18 ++                                      
   7 files changed, 667 insertions(+), 1 deletions(-)
Modified: trunk/boost/ratio/detail/ratio_io.hpp
==============================================================================
--- trunk/boost/ratio/detail/ratio_io.hpp	Sat Nov  9 06:27:55 2013	(r86593)
+++ trunk/boost/ratio/detail/ratio_io.hpp	2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)	(r86594)
@@ -1040,6 +1040,308 @@
 #endif
 #endif
 
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<kibi, CharT> :
+    ratio_detail::ratio_string_static<kibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<kibi, char>
+{
+    static std::string short_name() {return std::string("Ki");}
+    static std::string long_name()  {return std::string("kibi");}
+    static std::string symbol() {return short_name();}
+    static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<kibi, char16_t>
+{
+    static std::u16string short_name() {return std::u16string(u"Ki");}
+    static std::u16string long_name()  {return std::u16string(u"kibi");}
+    static std::u16string symbol() {return short_name();}
+    static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<kibi, char32_t>
+{
+    static std::u32string short_name() {return std::u32string(U"Ki");}
+    static std::u32string long_name()  {return std::u32string(U"kibi");}
+    static std::u32string symbol() {return short_name();}
+    static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<kibi, wchar_t>
+{
+    static std::wstring short_name() {return std::wstring(L"Ki");}
+    static std::wstring long_name()  {return std::wstring(L"kibi");}
+    static std::wstring symbol() {return short_name();}
+    static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<mebi, CharT> :
+    ratio_detail::ratio_string_static<mebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<mebi, char>
+{
+    static std::string short_name() {return std::string("Mi");}
+    static std::string long_name()  {return std::string("mebi");}
+    static std::string symbol() {return short_name();}
+    static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<mebi, char16_t>
+{
+    static std::u16string short_name() {return std::u16string(u"Mi");}
+    static std::u16string long_name()  {return std::u16string(u"mebi");}
+    static std::u16string symbol() {return short_name();}
+    static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<mebi, char32_t>
+{
+    static std::u32string short_name() {return std::u32string(U"Mi");}
+    static std::u32string long_name()  {return std::u32string(U"mebi");}
+    static std::u32string symbol() {return short_name();}
+    static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<mebi, wchar_t>
+{
+    static std::wstring short_name() {return std::wstring(L"Mi");}
+    static std::wstring long_name()  {return std::wstring(L"mebi");}
+    static std::wstring symbol() {return short_name();}
+    static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<gibi, CharT> :
+    ratio_detail::ratio_string_static<gibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<gibi, char>
+{
+    static std::string short_name() {return std::string("Gi");}
+    static std::string long_name()  {return std::string("gibi");}
+    static std::string symbol() {return short_name();}
+    static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<gibi, char16_t>
+{
+    static std::u16string short_name() {return std::u16string(u"Gi");}
+    static std::u16string long_name()  {return std::u16string(u"gibi");}
+    static std::u16string symbol() {return short_name();}
+    static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<gibi, char32_t>
+{
+    static std::u32string short_name() {return std::u32string(U"Gi");}
+    static std::u32string long_name()  {return std::u32string(U"gibi");}
+    static std::u32string symbol() {return short_name();}
+    static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<gibi, wchar_t>
+{
+    static std::wstring short_name() {return std::wstring(L"Gi");}
+    static std::wstring long_name()  {return std::wstring(L"gibi");}
+    static std::wstring symbol() {return short_name();}
+    static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<tebi, CharT> :
+    ratio_detail::ratio_string_static<tebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<tebi, char>
+{
+    static std::string short_name() {return std::string("Ti");}
+    static std::string long_name()  {return std::string("tebi");}
+    static std::string symbol() {return short_name();}
+    static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<tebi, char16_t>
+{
+    static std::u16string short_name() {return std::u16string(u"Ti");}
+    static std::u16string long_name()  {return std::u16string(u"tebi");}
+    static std::u16string symbol() {return short_name();}
+    static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<tebi, char32_t>
+{
+    static std::u32string short_name() {return std::u32string(U"Ti");}
+    static std::u32string long_name()  {return std::u32string(U"tebi");}
+    static std::u32string symbol() {return short_name();}
+    static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<tebi, wchar_t>
+{
+    static std::wstring short_name() {return std::wstring(L"Ti");}
+    static std::wstring long_name()  {return std::wstring(L"tebi");}
+    static std::wstring symbol() {return short_name();}
+    static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<pebi, CharT> :
+    ratio_detail::ratio_string_static<pebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<pebi, char>
+{
+    static std::string short_name() {return std::string("Pi");}
+    static std::string long_name()  {return std::string("pebi");}
+    static std::string symbol() {return short_name();}
+    static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<pebi, char16_t>
+{
+    static std::u16string short_name() {return std::u16string(u"Pi");}
+    static std::u16string long_name()  {return std::u16string(u"pebi");}
+    static std::u16string symbol() {return short_name();}
+    static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<pebi, char32_t>
+{
+    static std::u32string short_name() {return std::u32string(U"Pi");}
+    static std::u32string long_name()  {return std::u32string(U"pebi");}
+    static std::u32string symbol() {return short_name();}
+    static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<pebi, wchar_t>
+{
+    static std::wstring short_name() {return std::wstring(L"Pi");}
+    static std::wstring long_name()  {return std::wstring(L"pebi");}
+    static std::wstring symbol() {return short_name();}
+    static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<exbi, CharT> :
+    ratio_detail::ratio_string_static<exbi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<exbi, char>
+{
+    static std::string short_name() {return std::string("Ei");}
+    static std::string long_name()  {return std::string("exbi");}
+    static std::string symbol() {return short_name();}
+    static std::string prefix() {return long_name();}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<exbi, char16_t>
+{
+    static std::u16string short_name() {return std::u16string(u"Ei");}
+    static std::u16string long_name()  {return std::u16string(u"exbi");}
+    static std::u16string symbol() {return short_name();}
+    static std::u16string prefix() {return long_name();}
+};
+
+template <>
+struct ratio_string<exbi, char32_t>
+{
+    static std::u32string short_name() {return std::u32string(U"Ei");}
+    static std::u32string long_name()  {return std::u32string(U"exbi");}
+    static std::u32string symbol() {return short_name();}
+    static std::u32string prefix() {return long_name();}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<exbi, wchar_t>
+{
+    static std::wstring short_name() {return std::wstring(L"Ei");}
+    static std::wstring long_name()  {return std::wstring(L"exbi");}
+    static std::wstring symbol() {return short_name();}
+    static std::wstring prefix() {return long_name();}
+};
+#endif
+#endif
+#endif
 }
 
 #endif  // BOOST_RATIO_RATIO_IO_HPP
Modified: trunk/boost/ratio/ratio.hpp
==============================================================================
--- trunk/boost/ratio/ratio.hpp	Sat Nov  9 06:27:55 2013	(r86593)
+++ trunk/boost/ratio/ratio.hpp	2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)	(r86594)
@@ -226,6 +226,24 @@
         mpl::gcd_c<boost::intmax_t, R1::den, R2::den>::value>::type
 {
 };
+
+template<typename R, int p>
+struct ratio_power :
+  ratio_multiply<
+    typename ratio_power<R, p%2>::type,
+    typename ratio_power<typename ratio_multiply<R, R>::type, p/2>::type
+  >::type
+{};
+
+template<typename R>
+struct ratio_power<R, 0> : ratio<1>::type {};
+
+template<typename R>
+struct ratio_power<R, 1> : R {};
+
+template<typename R>
+struct ratio_power<R, -1> : ratio_divide<ratio<1>, R>::type {};
+
 #endif
 }  // namespace boost
 
Modified: trunk/boost/ratio/ratio_fwd.hpp
==============================================================================
--- trunk/boost/ratio/ratio_fwd.hpp	Sat Nov  9 06:27:55 2013	(r86593)
+++ trunk/boost/ratio/ratio_fwd.hpp	2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)	(r86594)
@@ -78,6 +78,18 @@
 typedef ratio<   BOOST_RATIO_INTMAX_C(1000000000000000), BOOST_RATIO_INTMAX_C(1)> peta;
 typedef ratio<BOOST_RATIO_INTMAX_C(1000000000000000000), BOOST_RATIO_INTMAX_C(1)> exa;
 
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#define BOOST_RATIO_1024 BOOST_RATIO_INTMAX_C(1024)
+
+typedef ratio<                                                                                     BOOST_RATIO_1024> kibi;
+typedef ratio<                                                                    BOOST_RATIO_1024*BOOST_RATIO_1024> mebi;
+typedef ratio<                                                   BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> gibi;
+typedef ratio<                                  BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> tebi;
+typedef ratio<                 BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> pebi;
+typedef ratio<BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024*BOOST_RATIO_1024> exbi;
+
+#endif
 }  // namespace boost
 
 
Modified: trunk/boost/ratio/ratio_io.hpp
==============================================================================
--- trunk/boost/ratio/ratio_io.hpp	Sat Nov  9 06:27:55 2013	(r86593)
+++ trunk/boost/ratio/ratio_io.hpp	2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)	(r86594)
@@ -45,6 +45,7 @@
 #include <sstream>
 
 #ifdef BOOST_RATIO_HAS_STATIC_STRING
+#error
 #include <boost/ratio/ratio_static_string.hpp>
 #include <boost/static_string/static_string.hpp>
 #endif
@@ -818,6 +819,262 @@
 #endif
 #endif
 
+
+#ifdef BOOST_RATIO_EXTENSIONS
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<kibi, CharT> :
+    ratio_detail::ratio_string_static<kibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<kibi, char>
+{
+    static std::string symbol() {return std::string("Ki");}
+    static std::string prefix()  {return std::string("kibi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<kibi, char16_t>
+{
+    static std::u16string symbol() {return std::u16string(u"Ki");}
+    static std::u16string prefix()  {return std::u16string(u"kibi");}
+};
+
+template <>
+struct ratio_string<kibi, char32_t>
+{
+    static std::u32string symbol() {return std::u32string(U"Ki");}
+    static std::u32string prefix()  {return std::u32string(U"kibi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<kibi, wchar_t>
+{
+    static std::wstring symbol() {return std::wstring(L"Ki");}
+    static std::wstring prefix()  {return std::wstring(L"kibi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<mebi, CharT> :
+    ratio_detail::ratio_string_static<mebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<mebi, char>
+{
+    static std::string symbol() {return std::string("Mi");}
+    static std::string prefix()  {return std::string("mebi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<mebi, char16_t>
+{
+    static std::u16string symbol() {return std::u16string(u"Mi");}
+    static std::u16string prefix()  {return std::u16string(u"mebi");}
+};
+
+template <>
+struct ratio_string<mebi, char32_t>
+{
+    static std::u32string symbol() {return std::u32string(U"Mi");}
+    static std::u32string prefix()  {return std::u32string(U"mebi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<mebi, wchar_t>
+{
+    static std::wstring symbol() {return std::wstring(L"Mi");}
+    static std::wstring prefix()  {return std::wstring(L"mebi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<gibi, CharT> :
+    ratio_detail::ratio_string_static<gibi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<gibi, char>
+{
+    static std::string symbol() {return std::string("Gi");}
+    static std::string prefix()  {return std::string("gibi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<gibi, char16_t>
+{
+    static std::u16string symbol() {return std::u16string(u"Gi");}
+    static std::u16string prefix()  {return std::u16string(u"gibi");}
+};
+
+template <>
+struct ratio_string<gibi, char32_t>
+{
+    static std::u32string symbol() {return std::u32string(U"Gi");}
+    static std::u32string prefix()  {return std::u32string(U"gibi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<gibi, wchar_t>
+{
+    static std::wstring symbol() {return std::wstring(L"Gi");}
+    static std::wstring prefix()  {return std::wstring(L"gibi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<tebi, CharT> :
+    ratio_detail::ratio_string_static<tebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<tebi, char>
+{
+    static std::string symbol() {return std::string("Ti");}
+    static std::string prefix()  {return std::string("tebi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<tebi, char16_t>
+{
+    static std::u16string symbol() {return std::u16string(u"Ti");}
+    static std::u16string prefix()  {return std::u16string(u"tebi");}
+};
+
+template <>
+struct ratio_string<tebi, char32_t>
+{
+    static std::u32string symbol() {return std::u32string(U"Ti");}
+    static std::u32string prefix()  {return std::u32string(U"tebi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<tebi, wchar_t>
+{
+    static std::wstring symbol() {return std::wstring(L"Ti");}
+    static std::wstring prefix()  {return std::wstring(L"tebi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<pebi, CharT> :
+    ratio_detail::ratio_string_static<pebi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<pebi, char>
+{
+    static std::string symbol() {return std::string("Pi");}
+    static std::string prefix()  {return std::string("pebi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<pebi, char16_t>
+{
+    static std::u16string symbol() {return std::u16string(u"Pi");}
+    static std::u16string prefix()  {return std::u16string(u"pebi");}
+};
+
+template <>
+struct ratio_string<pebi, char32_t>
+{
+    static std::u32string symbol() {return std::u32string(U"Pi");}
+    static std::u32string prefix()  {return std::u32string(U"pebi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<pebi, wchar_t>
+{
+    static std::wstring symbol() {return std::wstring(L"Pi");}
+    static std::wstring prefix()  {return std::wstring(L"pebi");}
+};
+#endif
+#endif
+
+#ifdef BOOST_RATIO_HAS_STATIC_STRING
+template <typename CharT>
+struct ratio_string<exbi, CharT> :
+    ratio_detail::ratio_string_static<exbi,CharT>
+{};
+
+#else
+template <>
+struct ratio_string<exbi, char>
+{
+    static std::string symbol() {return std::string("Ei");}
+    static std::string prefix()  {return std::string("exbi");}
+};
+
+#if BOOST_RATIO_HAS_UNICODE_SUPPORT
+
+template <>
+struct ratio_string<exbi, char16_t>
+{
+    static std::u16string symbol() {return std::u16string(u"Ei");}
+    static std::u16string prefix()  {return std::u16string(u"exbi");}
+};
+
+template <>
+struct ratio_string<exbi, char32_t>
+{
+    static std::u32string symbol() {return std::u32string(U"Ei");}
+    static std::u32string prefix()  {return std::u32string(U"exbi");}
+};
+
+#endif
+
+#ifndef BOOST_NO_STD_WSTRING
+template <>
+struct ratio_string<exbi, wchar_t>
+{
+    static std::wstring symbol() {return std::wstring(L"Ei");}
+    static std::wstring prefix()  {return std::wstring(L"exbi");}
+};
+#endif
+#endif
+#endif
+
 }
 
 #endif  // BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0
Modified: trunk/libs/ratio/test/Jamfile.v2
==============================================================================
--- trunk/libs/ratio/test/Jamfile.v2	Sat Nov  9 06:27:55 2013	(r86593)
+++ trunk/libs/ratio/test/Jamfile.v2	2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)	(r86594)
@@ -82,6 +82,7 @@
         [ compile-fail ratio_arithmetic/ratio_subtract_fail.cpp  ]
         [ compile-fail ratio_arithmetic/ratio_multiply_fail.cpp  ]
         [ compile-fail ratio_arithmetic/ratio_divide_fail.cpp  ]
+        [ compile ratio_arithmetic/ratio_power_pass.cpp  ]
         ;
 
     test-suite "ratio.comparison"
Added: trunk/libs/ratio/test/ratio_arithmetic/ratio_power_pass.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/libs/ratio/test/ratio_arithmetic/ratio_power_pass.cpp	2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)	(r86594)
@@ -0,0 +1,60 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//  Adaptation to Boost of the libcxx
+//  Copyright 2010 Vicente J. Botet Escriba
+//  Distributed under the Boost Software License, Version 1.0.
+//  See http://www.boost.org/LICENSE_1_0.txt
+
+// test ratio_power
+
+#define BOOST_RATIO_EXTENSIONS
+#include <boost/ratio/ratio.hpp>
+
+#if !defined(BOOST_NO_CXX11_STATIC_ASSERT)
+#define NOTHING ""
+#endif
+
+void test()
+{
+  {
+    typedef boost::ratio<1, 2> R1;
+    typedef boost::ratio_power<R1, 1> R;
+    BOOST_RATIO_STATIC_ASSERT(R::num == 1 && R::den == 2, NOTHING, ());
+  }
+  {
+    typedef boost::ratio<1, 2> R1;
+    typedef boost::ratio_power<R1, -1> R;
+    BOOST_RATIO_STATIC_ASSERT(R::num == 2 && R::den == 1, NOTHING, ());
+  }
+  {
+    typedef boost::ratio<1, 2> R1;
+    typedef boost::ratio_power<R1, 0> R;
+    BOOST_RATIO_STATIC_ASSERT(R::num == 1 && R::den == 1, NOTHING, ());
+  }
+  {
+    typedef boost::ratio<-1, 2> R1;
+    typedef boost::ratio_power<R1, 2> R;
+    BOOST_RATIO_STATIC_ASSERT(R::num == 1 && R::den == 4, NOTHING, ());
+  }
+  {
+    typedef boost::ratio<1, -2> R1;
+    typedef boost::ratio_power<R1, 2> R;
+    BOOST_RATIO_STATIC_ASSERT(R::num == 1 && R::den == 4, NOTHING, ());
+  }
+  {
+    typedef boost::ratio<2, 3> R1;
+    typedef boost::ratio_power<R1, 2> R;
+    BOOST_RATIO_STATIC_ASSERT(R::num == 4 && R::den == 9, NOTHING, ());
+  }
+  {
+    typedef boost::ratio<2, 3> R1;
+    typedef boost::ratio_power<R1, -2> R;
+    BOOST_RATIO_STATIC_ASSERT(R::num == 9 && R::den == 4, NOTHING, ());
+  }
+}
Modified: trunk/libs/ratio/test/ratio_io/ratio_io_pass.cpp
==============================================================================
--- trunk/libs/ratio/test/ratio_io/ratio_io_pass.cpp	Sat Nov  9 06:27:55 2013	(r86593)
+++ trunk/libs/ratio/test/ratio_io/ratio_io_pass.cpp	2013-11-09 06:47:43 EST (Sat, 09 Nov 2013)	(r86594)
@@ -13,6 +13,7 @@
 
 // test ratio_add
 
+#define BOOST_RATIO_EXTENSIONS
 #include <boost/ratio/ratio_io.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <climits>
@@ -148,7 +149,22 @@
                 boost::ratio_string<boost::exa, char>::symbol() == "E"
         ));
     }
-//    return 1;
+    {
+        BOOST_TEST((
+                boost::ratio_string<boost::kibi, char>::prefix() == "kibi"
+        ));
+        BOOST_TEST((
+                boost::ratio_string<boost::kibi, char>::symbol() == "Ki"
+        ));
+    }
+    {
+        BOOST_TEST((
+                boost::ratio_string<boost::gibi, char>::prefix() == "gibi"
+        ));
+        BOOST_TEST((
+                boost::ratio_string<boost::gibi, char>::symbol() == "Gi"
+        ));
+    }
     return boost::report_errors();
 }