1// Copyright (C) 2009-2015 Free Software Foundation, Inc.
2//
3// This file is part of the GNU ISO C++ Library.  This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3.  If not see
16// <http://www.gnu.org/licenses/>.
17
18// { dg-do compile }
19// { dg-require-effective-target dfp }
20
21// Test that binary comparison operators do not accept mixed decimal
22// and generic floating-point operands.  This isn't explicity prohibited
23// in ISO/IEC TR 24733 but it is prohibited in C, and in C++ there should
24// not be an implicit conversion from a decimal floating-point type to a
25// generic floating-point type.
26
27#include <decimal/decimal>
28
29using namespace std::decimal;
30
31decimal32 a32, b32, c32;
32decimal64 a64, b64, c64;
33decimal128 a128, b128, c128;
34float f;
35double d;
36long double ld;
37bool b1, b2, b3, b4, b5, b6;
38
39void
40bad_eq (void)
41{
42  b1 = b32 == f;	// { dg-error "error" }
43  b2 = ld == b32;	// { dg-error "error" }
44  b3 = b64 == d;	// { dg-error "error" }
45  b4 = ld == b64;	// { dg-error "error" }
46  b5 = b128 == ld;	// { dg-error "error" }
47  b6 = d == b128;	// { dg-error "error" }
48}
49
50void
51bad_ne (void)
52{
53  b1 = b32 != f;	// { dg-error "error" }
54  b2 = ld != b32;	// { dg-error "error" }
55  b3 = b64 != d;	// { dg-error "error" }
56  b4 = ld != b64;	// { dg-error "error" }
57  b5 = b128 != ld;	// { dg-error "error" }
58  b6 = d != b128;	// { dg-error "error" }
59}
60
61void
62bad_lt (void)
63{
64  b1 = b32 < f;		// { dg-error "error" }
65  b2 = ld < b32;	// { dg-error "error" }
66  b3 = b64 < d;		// { dg-error "error" }
67  b4 = ld < b64;	// { dg-error "error" }
68  b5 = b128 < ld;	// { dg-error "error" }
69  b6 = d < b128;	// { dg-error "error" }
70}
71
72void
73bad_le (void)
74{
75  b1 = b32 <= f;	// { dg-error "error" }
76  b2 = ld <= b32;	// { dg-error "error" }
77  b3 = b64 <= d;	// { dg-error "error" }
78  b4 = ld <= b64;	// { dg-error "error" }
79  b5 = b128 <= ld;	// { dg-error "error" }
80  b6 = d <= b128;	// { dg-error "error" }
81}
82
83void
84bad_gt (void)
85{
86  b1 = b32 > f;		// { dg-error "error" }
87  b2 = ld > b32;	// { dg-error "error" }
88  b3 = b64 > d;		// { dg-error "error" }
89  b4 = ld > b64;	// { dg-error "error" }
90  b5 = b128 > ld;	// { dg-error "error" }
91  b6 = d > b128;	// { dg-error "error" }
92}
93
94void
95bad_ge (void)
96{
97  b1 = b32 >= f;	// { dg-error "error" }
98  b2 = ld >= b32;	// { dg-error "error" }
99  b3 = b64 >= d;	// { dg-error "error" }
100  b4 = ld >= b64;	// { dg-error "error" }
101  b5 = b128 >= ld;	// { dg-error "error" }
102  b6 = d >= b128;	// { dg-error "error" }
103}
104
105