1151497Sru// Copyright (C) 2009 Free Software Foundation, Inc. 2151497Sru// 3151497Sru// This file is part of the GNU ISO C++ Library. This library is free 4151497Sru// software; you can redistribute it and/or modify it under the 5151497Sru// terms of the GNU General Public License as published by the 6151497Sru// Free Software Foundation; either version 3, or (at your option) 7151497Sru// any later version. 8151497Sru 9151497Sru// This library is distributed in the hope that it will be useful, 10151497Sru// but WITHOUT ANY WARRANTY; without even the implied warranty of 11151497Sru// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12151497Sru// GNU General Public License for more details. 13151497Sru 14151497Sru// You should have received a copy of the GNU General Public License along 15151497Sru// with this library; see the file COPYING3. If not see 16151497Sru// <http://www.gnu.org/licenses/>. 17151497Sru 18151497Sru// { dg-require-effective-target dfp } 19151497Sru 20151497Sru// ISO/IEC TR 24733 3.2.6 Conversion to generic floating-point type. 21151497Sru 22151497Sru#include <decimal/decimal> 23151497Sru#include <testsuite_hooks.h> 24151497Sru 25151497Sruusing namespace std::decimal; 26151497Sru 27151497Sruvoid 28151497Sruconversion_to_generic_float_32 () 29151497Sru{ 30151497Sru std::decimal::decimal32 d32(123); 31151497Sru float f; 32151497Sru double d; 33151497Sru long double ld; 34151497Sru 35151497Sru f = decimal32_to_float (d32); 36151497Sru VERIFY (f == 123.F); 37151497Sru d = decimal32_to_double (d32); 38151497Sru VERIFY (d == 123.); 39151497Sru ld = decimal32_to_long_double (d32); 40151497Sru VERIFY (ld == 123.L); 41151497Sru 42151497Sru d32++; 43151497Sru f = decimal_to_float (d32); 44151497Sru VERIFY (f == 124.F); 45151497Sru d = decimal_to_double (d32); 46151497Sru VERIFY (d == 124.); 47151497Sru ld = decimal_to_long_double (d32); 48151497Sru VERIFY (ld == 124.L); 49151497Sru} 50151497Sru 51151497Sruvoid 52151497Sruconversion_to_generic_float_64 () 53151497Sru{ 54151497Sru std::decimal::decimal64 d64(234); 55151497Sru float f; 56151497Sru double d; 57151497Sru long double ld; 58151497Sru 59151497Sru f = decimal64_to_float (d64); 60151497Sru VERIFY (f == 234.F); 61151497Sru d = decimal64_to_double (d64); 62151497Sru VERIFY (d == 234.); 63151497Sru ld = decimal64_to_long_double (d64); 64151497Sru VERIFY (ld == 234.L); 65151497Sru 66151497Sru d64++; 67151497Sru f = decimal_to_float (d64); 68151497Sru VERIFY (f == 235.F); 69151497Sru d = decimal_to_double (d64); 70151497Sru VERIFY (d == 235.); 71151497Sru ld = decimal_to_long_double (d64); 72151497Sru VERIFY (ld == 235.L); 73151497Sru} 74151497Sru 75151497Sruvoid 76151497Sruconversion_to_generic_float_128 () 77151497Sru{ 78151497Sru std::decimal::decimal128 d128(345); 79151497Sru float f; 80151497Sru double d; 81151497Sru long double ld; 82151497Sru 83151497Sru f = decimal128_to_float (d128); 84151497Sru VERIFY (f == 345.F); 85151497Sru d = decimal128_to_double (d128); 86151497Sru VERIFY (d == 345.); 87151497Sru ld = decimal128_to_long_double (d128); 88151497Sru VERIFY (ld == 345.L); 89151497Sru 90151497Sru d128++; 91151497Sru f = decimal_to_float (d128); 92151497Sru VERIFY (f == 346.F); 93151497Sru d = decimal_to_double (d128); 94151497Sru VERIFY (d == 346.); 95151497Sru ld = decimal_to_long_double (d128); 96151497Sru VERIFY (ld == 346.L); 97151497Sru} 98151497Sru 99151497Sruint 100151497Srumain () 101151497Sru{ 102151497Sru conversion_to_generic_float_32 (); 103151497Sru conversion_to_generic_float_64 (); 104151497Sru conversion_to_generic_float_128 (); 105151497Sru} 106151497Sru