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