1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//                     The LLVM Compiler Infrastructure
4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open
6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details.
7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// test ratio_subtract
11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <ratio>
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 1> R1;
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 1> R2;
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == 0 && R::den == 1, "");
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 2> R1;
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 1> R2;
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == -1 && R::den == 2, "");
27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<-1, 2> R1;
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 1> R2;
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == -3 && R::den == 2, "");
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, -2> R1;
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 1> R2;
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == -3 && R::den == 2, "");
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 2> R1;
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<-1, 1> R2;
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == 3 && R::den == 2, "");
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, 2> R1;
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1, -1> R2;
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == 3 && R::den == 2, "");
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<56987354, 467584654> R1;
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<544668, 22145> R2;
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == -126708206685271LL && R::den == 5177331081415LL, "");
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<0> R1;
60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<0> R2;
61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == 0 && R::den == 1, "");
63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1> R1;
66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<0> R2;
67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == 1 && R::den == 1, "");
69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<0> R1;
72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio<1> R2;
73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    typedef std::ratio_subtract<R1, R2>::type R;
74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    static_assert(R::num == -1 && R::den == 1, "");
75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
77