1// Copyright Louis Dionne 2013-2022
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
4
5#include <boost/hana/assert.hpp>
6#include <boost/hana/div.hpp>
7#include <boost/hana/equal.hpp>
8#include <boost/hana/ext/std/ratio.hpp>
9#include <boost/hana/minus.hpp>
10#include <boost/hana/mod.hpp>
11#include <boost/hana/mult.hpp>
12#include <boost/hana/one.hpp>
13#include <boost/hana/plus.hpp>
14#include <boost/hana/zero.hpp>
15
16#include <ratio>
17namespace hana = boost::hana;
18
19
20BOOST_HANA_CONSTANT_CHECK(hana::equal(
21 hana::plus(std::ratio<5, 3>{}, std::ratio<3, 12>{}),
22 std::ratio<23, 12>{}
23));
24
25BOOST_HANA_CONSTANT_CHECK(hana::equal(
26 hana::minus(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
27 std::ratio<56, 39>{}
28));
29
30BOOST_HANA_CONSTANT_CHECK(hana::equal(
31 hana::mult(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
32 std::ratio<15, 39>{}
33));
34
35BOOST_HANA_CONSTANT_CHECK(hana::equal(
36 hana::div(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
37 std::ratio<65, 9>{}
38));
39
40// The mod of two ratios is always 0, because they can always be
41// divided without remainder.
42BOOST_HANA_CONSTANT_CHECK(hana::equal(
43 hana::mod(std::ratio<5, 3>{}, std::ratio<3, 13>{}),
44 std::ratio<0>{}
45));
46
47BOOST_HANA_CONSTANT_CHECK(hana::equal(
48 hana::zero<hana::ext::std::ratio_tag>(),
49 std::ratio<0>{}
50));
51
52BOOST_HANA_CONSTANT_CHECK(hana::equal(
53 hana::one<hana::ext::std::ratio_tag>(),
54 std::ratio<1>{}
55));
56
57int main() { }
58

source code of boost/libs/hana/example/ext/std/ratio/arithmetic.cpp