1// Copyright 2023 Peter Dimov
2// Distributed under the Boost Software License, Version 1.0.
3// https://www.boost.org/LICENSE_1_0.txt
4
5#include <boost/ratio/detail/is_evenly_divisible_by.hpp>
6#include <boost/ratio/ratio.hpp>
7#include <boost/core/lightweight_test_trait.hpp>
8#include <cstdint>
9
10using boost::ratio_detail::is_evenly_divisible_by;
11using boost::ratio;
12
13int main()
14{
15 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<1, 1>, ratio<1, 1> >));
16 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<2, 1>, ratio<1, 1> >));
17 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<2, 1>, ratio<2, 1> >));
18 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<2, 1>, ratio<1, 2> >));
19
20 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<INTMAX_MAX, 1>, ratio<1, 1> >));
21 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<INTMAX_MAX, 1>, ratio<INTMAX_MAX, 1> >));
22 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<INTMAX_MAX, 1>, ratio<1, INTMAX_MAX> >));
23
24 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<4, 1>, ratio<2, 1> >));
25 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<1, 2>, ratio<1, 4> >));
26
27 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<15, 2>, ratio<3, 4> >));
28
29 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<INTMAX_MAX / 2 * 2, 1>, ratio<INTMAX_MAX / 2, 1> >));
30 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<1, INTMAX_MAX / 2>, ratio<1, INTMAX_MAX / 2 * 2> >));
31
32 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<0, 1>, ratio<INTMAX_MAX, 1> >));
33
34 BOOST_TEST_TRAIT_FALSE((is_evenly_divisible_by< ratio<1, 1>, ratio<2, 1> >));
35 BOOST_TEST_TRAIT_FALSE((is_evenly_divisible_by< ratio<1, 1>, ratio<0, 1> >));
36
37 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<-1, 1>, ratio<1, 1> >));
38 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<1, 1>, ratio<-1, 1> >));
39 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<-2, 1>, ratio<1, 1> >));
40 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<2, 1>, ratio<-1, 1> >));
41 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<-2, 1>, ratio<2, 1> >));
42 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<2, 1>, ratio<-2, 1> >));
43 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<-2, 1>, ratio<1, 2> >));
44 BOOST_TEST_TRAIT_TRUE((is_evenly_divisible_by< ratio<2, 1>, ratio<-1, 2> >));
45
46 return boost::report_errors();
47}
48

source code of boost/libs/ratio/test/ratio_detail/is_evenly_divisible_by.cpp