Index: include/experimental/ratio =================================================================== --- /dev/null +++ include/experimental/ratio @@ -0,0 +1,77 @@ +// -*- C++ -*- +//===------------------------------ ratio ---------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP_EXPERIMENTAL_RATIO +#define _LIBCPP_EXPERIMENTAL_RATIO + +/** + experimental/ratio synopsis + C++1y +#include + +namespace std { +namespace experimental { +inline namespace fundamentals_v1 { + + // See C++14 20.11.5, ratio comparison + template constexpr bool ratio_equal_v + = ratio_equal::value; + template constexpr bool ratio_not_equal_v + = ratio_not_equal::value; + template constexpr bool ratio_less_v + = ratio_less::value; + template constexpr bool ratio_less_equal_v + = ratio_less_equal::value; + template constexpr bool ratio_greater_v + = ratio_greater::value; + template constexpr bool ratio_greater_equal_v + = ratio_greater_equal::value; + +} // namespace fundamentals_v1 +} // namespace experimental +} // namespace std + +*/ + +#include + +#if _LIBCPP_STD_VER > 11 + +#include + +_LIBCPP_BEGIN_NAMESPACE_LFTS + +#if __has_feature(cxx_variable_templates) + +template _LIBCPP_CONSTEXPR bool ratio_equal_v + = ratio_equal<_R1, _R2>::value; + +template _LIBCPP_CONSTEXPR bool ratio_not_equal_v + = ratio_not_equal<_R1, _R2>::value; + +template _LIBCPP_CONSTEXPR bool ratio_less_v + = ratio_less<_R1, _R2>::value; + +template _LIBCPP_CONSTEXPR bool ratio_less_equal_v + = ratio_less_equal<_R1, _R2>::value; + +template _LIBCPP_CONSTEXPR bool ratio_greater_v + = ratio_greater<_R1, _R2>::value; + +template _LIBCPP_CONSTEXPR bool ratio_greater_equal_v + = ratio_greater_equal<_R1, _R2>::value; + +#endif /* __has_feature(cxx_variable_templates) */ + +_LIBCPP_END_NAMESPACE_LFTS + +#endif /* _LIBCPP_STD_VER > 11 */ + +#endif _LIBCPP_EXPERIMENTAL_RATIO \ No newline at end of file Index: test/libcxx/experimental/utilities/ratio/header.ratio.synop/includes.pass.cpp =================================================================== --- /dev/null +++ test/libcxx/experimental/utilities/ratio/header.ratio.synop/includes.pass.cpp @@ -0,0 +1,24 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// + +// Test that is included. + +#include + +#ifndef _LIBCPP_STD_VER > 11 +# ifndef _LIBCPP_RATIO +# error " must include " +# endif +#endif + +int main() +{ +} Index: test/libcxx/experimental/utilities/ratio/version.pass.cpp =================================================================== --- /dev/null +++ test/libcxx/experimental/utilities/ratio/version.pass.cpp @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// + +#include + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} Index: test/std/experimental/utilities/ratio/header.ratio.synop/includes.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/header.ratio.synop/includes.pass.cpp @@ -0,0 +1,21 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// + +// Test that is included. + +#include + +int main() +{ + std::ratio<100> x; +} Index: test/std/experimental/utilities/ratio/header.ratio.synop/ratio_equal_v.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/header.ratio.synop/ratio_equal_v.pass.cpp @@ -0,0 +1,47 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// + +// template constexpr bool ratio_equal_v; + +#include +#include + +namespace ex = std::experimental; + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + ex::ratio_equal_v, "" + ); + static_assert( + ex::ratio_equal_v == std::ratio_equal::value, "" + ); + static_assert( + std::is_same), const bool>::value + , "" + ); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert( + !ex::ratio_equal_v, "" + ); + static_assert( + ex::ratio_equal_v == std::ratio_equal::value, "" + ); + } +} Index: test/std/experimental/utilities/ratio/header.ratio.synop/ratio_greater_equal_v.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/header.ratio.synop/ratio_greater_equal_v.pass.cpp @@ -0,0 +1,61 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// + +// template constexpr bool ratio_greater_equal_v; + +#include +#include + +namespace ex = std::experimental; + +int main() +{ + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + static_assert( + !ex::ratio_greater_equal_v, "" + ); + static_assert( + ex::ratio_greater_equal_v + == std::ratio_greater_equal::value, "" + ); + static_assert( + std::is_same< + decltype(ex::ratio_greater_equal_v), const bool>::value + , "" + ); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + ex::ratio_greater_equal_v, "" + ); + static_assert( + ex::ratio_greater_equal_v + == std::ratio_greater_equal::value, "" + ); + } + { + typedef std::ratio<2, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + ex::ratio_greater_equal_v, "" + ); + static_assert( + ex::ratio_greater_equal_v + == std::ratio_greater_equal::value, "" + ); + } +} Index: test/std/experimental/utilities/ratio/header.ratio.synop/ratio_greater_v.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/header.ratio.synop/ratio_greater_v.pass.cpp @@ -0,0 +1,57 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// + +// template constexpr bool ratio_greater_v; + +#include +#include + +namespace ex = std::experimental; + +int main() +{ + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + static_assert( + !ex::ratio_greater_v, "" + ); + static_assert( + ex::ratio_greater_v == std::ratio_greater::value, "" + ); + static_assert( + std::is_same), const bool>::value + , "" + ); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + !ex::ratio_greater_v, "" + ); + static_assert( + ex::ratio_greater_v == std::ratio_greater::value, "" + ); + } + { + typedef std::ratio<2, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + ex::ratio_greater_v, "" + ); + static_assert( + ex::ratio_greater_v == std::ratio_greater::value, "" + ); + } +} Index: test/std/experimental/utilities/ratio/header.ratio.synop/ratio_less_equal_v.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/header.ratio.synop/ratio_less_equal_v.pass.cpp @@ -0,0 +1,57 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// + +// template constexpr bool ratio_less_equal_v; + +#include +#include + +namespace ex = std::experimental; + +int main() +{ + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + static_assert( + ex::ratio_less_equal_v, "" + ); + static_assert( + ex::ratio_less_equal_v == std::ratio_less_equal::value, "" + ); + static_assert( + std::is_same), const bool>::value + , "" + ); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + ex::ratio_less_equal_v, "" + ); + static_assert( + ex::ratio_less_equal_v == std::ratio_less_equal::value, "" + ); + } + { + typedef std::ratio<2, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + !ex::ratio_less_equal_v, "" + ); + static_assert( + ex::ratio_less_equal_v == std::ratio_less_equal::value, "" + ); + } +} Index: test/std/experimental/utilities/ratio/header.ratio.synop/ratio_less_v.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/header.ratio.synop/ratio_less_v.pass.cpp @@ -0,0 +1,57 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// + +// template constexpr bool ratio_less_v; + +#include +#include + +namespace ex = std::experimental; + +int main() +{ + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + static_assert( + ex::ratio_less_v, "" + ); + static_assert( + ex::ratio_less_v == std::ratio_less::value, "" + ); + static_assert( + std::is_same), const bool>::value + , "" + ); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + !ex::ratio_less_v, "" + ); + static_assert( + ex::ratio_less_v == std::ratio_less::value, "" + ); + } + { + typedef std::ratio<2, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + !ex::ratio_less_v, "" + ); + static_assert( + ex::ratio_less_v == std::ratio_less::value, "" + ); + } +} Index: test/std/experimental/utilities/ratio/header.ratio.synop/ratio_not_equal_v.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/header.ratio.synop/ratio_not_equal_v.pass.cpp @@ -0,0 +1,47 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++98, c++03, c++11 + +// + +// template constexpr bool ratio_not_equal_v; + +#include +#include + +namespace ex = std::experimental; + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert( + ex::ratio_not_equal_v, "" + ); + static_assert( + ex::ratio_not_equal_v == std::ratio_not_equal::value, "" + ); + static_assert( + std::is_same), const bool>::value + , "" + ); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert( + !ex::ratio_not_equal_v, "" + ); + static_assert( + ex::ratio_not_equal_v == std::ratio_not_equal::value, "" + ); + } +} Index: test/std/experimental/utilities/ratio/nothing_to_do.pass.cpp =================================================================== --- /dev/null +++ test/std/experimental/utilities/ratio/nothing_to_do.pass.cpp @@ -0,0 +1,13 @@ +// -*- C++ -*- +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +int main() +{ +}