1 // Copyright (C) 2009-2020 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-require-effective-target dfp } 19 20 // ISO/IEC TR 24733 3.2.2.3 Conversion from integral type (decimal32). 21 // ISO/IEC TR 24733 3.2.3.3 Conversion from integral type (decimal64). 22 // ISO/IEC TR 24733 3.2.4.3 Conversion from integral type (decimal128). 23 24 #include <decimal/decimal> 25 #include <testsuite_hooks.h> 26 27 using namespace std::decimal; 28 29 void conversion_from_integral_p32()30conversion_from_integral_p32 () 31 { 32 decimal32 d; 33 decimal32 from_si (1); 34 decimal32 from_ui (2U); 35 decimal32 from_sl (3L); 36 decimal32 from_ul (4UL); 37 decimal32 from_sll (5LL); 38 decimal32 from_ull (6ULL); 39 40 d++; VERIFY (from_si == d); 41 d++; VERIFY (from_ui == d); 42 d++; VERIFY (from_sl == d); 43 d++; VERIFY (from_ul == d); 44 d++; VERIFY (from_sll == d); 45 d++; VERIFY (from_ull == d); 46 47 from_si = 7; 48 d++; VERIFY (from_si == d); 49 from_ui = 8U; 50 d++; VERIFY (from_ui == d); 51 from_sl = 9L; 52 d++; VERIFY (from_sl == d); 53 from_ul = 10UL; 54 d++; VERIFY (from_ul == d); 55 from_sll = 11LL; 56 d++; VERIFY (from_sll == d); 57 from_ull = 12ULL; 58 d++; VERIFY (from_ull == d); 59 } 60 61 void conversion_from_integral_m32()62conversion_from_integral_m32 () 63 { 64 decimal32 d; 65 decimal32 from_si (-1); 66 decimal32 from_sl (-2L); 67 decimal32 from_sll (-3LL); 68 69 d--; VERIFY (from_si == d); 70 d--; VERIFY (from_sl == d); 71 d--; VERIFY (from_sll == d); 72 73 from_si = -4; 74 d--; VERIFY (from_si == d); 75 from_sl = -5L; 76 d--; VERIFY (from_sl == d); 77 from_sll = -6LL; 78 d--; VERIFY (from_sll == d); 79 } 80 81 void conversion_from_integral_p64()82conversion_from_integral_p64 () 83 { 84 decimal64 d; 85 decimal64 from_si (1); 86 decimal64 from_ui (2U); 87 decimal64 from_sl (3L); 88 decimal64 from_ul (4UL); 89 decimal64 from_sll (5LL); 90 decimal64 from_ull (6ULL); 91 92 d++; VERIFY (from_si == d); 93 d++; VERIFY (from_ui == d); 94 d++; VERIFY (from_sl == d); 95 d++; VERIFY (from_ul == d); 96 d++; VERIFY (from_sll == d); 97 d++; VERIFY (from_ull == d); 98 99 from_si = 7; 100 d++; VERIFY (from_si == d); 101 from_ui = 8U; 102 d++; VERIFY (from_ui == d); 103 from_sl = 9L; 104 d++; VERIFY (from_sl == d); 105 from_ul = 10UL; 106 d++; VERIFY (from_ul == d); 107 from_sll = 11LL; 108 d++; VERIFY (from_sll == d); 109 from_ull = 12ULL; 110 d++; VERIFY (from_ull == d); 111 } 112 113 void conversion_from_integral_m64()114conversion_from_integral_m64 () 115 { 116 decimal64 d; 117 decimal64 from_si (-1); 118 decimal64 from_sl (-2L); 119 decimal64 from_sll (-3LL); 120 121 d--; VERIFY (from_si == d); 122 d--; VERIFY (from_sl == d); 123 d--; VERIFY (from_sll == d); 124 125 from_si = -4; 126 d--; VERIFY (from_si == d); 127 from_sl = -5L; 128 d--; VERIFY (from_sl == d); 129 from_sll = -6LL; 130 d--; VERIFY (from_sll == d); 131 } 132 133 void conversion_from_integral_p128()134conversion_from_integral_p128 () 135 { 136 decimal128 d; 137 decimal128 from_si (1); 138 decimal128 from_ui (2U); 139 decimal128 from_sl (3L); 140 decimal128 from_ul (4UL); 141 decimal128 from_sll (5LL); 142 decimal128 from_ull (6ULL); 143 144 d++; VERIFY (from_si == d); 145 d++; VERIFY (from_ui == d); 146 d++; VERIFY (from_sl == d); 147 d++; VERIFY (from_ul == d); 148 d++; VERIFY (from_sll == d); 149 d++; VERIFY (from_ull == d); 150 151 from_si = 7; 152 d++; VERIFY (from_si == d); 153 from_ui = 8U; 154 d++; VERIFY (from_ui == d); 155 from_sl = 9L; 156 d++; VERIFY (from_sl == d); 157 from_ul = 10UL; 158 d++; VERIFY (from_ul == d); 159 from_sll = 11LL; 160 d++; VERIFY (from_sll == d); 161 from_ull = 12ULL; 162 } 163 164 void conversion_from_integral_m128()165conversion_from_integral_m128 () 166 { 167 decimal128 d; 168 decimal128 from_si (-1); 169 decimal128 from_sl (-2L); 170 decimal128 from_sll (-3LL); 171 172 d--; VERIFY (from_si == d); 173 d--; VERIFY (from_sl == d); 174 d--; VERIFY (from_sll == d); 175 176 from_si = -4; 177 d--; VERIFY (from_si == d); 178 from_sl = -5L; 179 d--; VERIFY (from_sl == d); 180 from_sll = -6LL; 181 d--; VERIFY (from_sll == d); 182 } 183 184 int main()185main () 186 { 187 conversion_from_integral_p32 (); 188 conversion_from_integral_m32 (); 189 conversion_from_integral_p64 (); 190 conversion_from_integral_m64 (); 191 conversion_from_integral_p128 (); 192 conversion_from_integral_m128 (); 193 } 194