diff gcc/testsuite/c-c++-common/dfp/convert-int.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/c-c++-common/dfp/convert-int.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,199 @@
+/* { dg-options "-O0" } */
+
+/* N1150 5.1 Conversion between decimal floating types and integer.
+   C99 6.3.1.4(1a) New.  */
+
+#include "dfp-dbg.h"
+
+#ifdef __cplusplus
+#define BOOL bool
+#else
+#define BOOL _Bool
+#endif
+
+_Decimal32 d32;
+_Decimal64 d64;
+_Decimal128 d128;
+unsigned int ui;
+unsigned long ul;
+unsigned long long ull;
+int si;
+long sl;
+long long sll;
+BOOL b;
+
+void
+init_dfp_1 (void)
+{
+  d32 = 456.789df;
+  d64 = 23.456789dd;
+  d128 = 1234.5678dl;
+}
+void
+init_dfp_2 (void)
+{
+  d32 = 1.23df;
+  d64 = -3.4dd;
+  d128 = 0.00003dl;
+}
+
+void
+init_dfp_3 (void)
+{
+  d32 = 0.0DF;
+  d64 = 0.0DD;
+  d128 = 0.0DL;
+}
+
+void
+init_unsigned_int (void)
+{
+  ui = 987U;
+  ul = 345678UL;
+  ull = 1234567ULL;
+}
+
+void
+init_signed_int (void)
+{
+  si = -987;
+  sl = -345678;
+  sll = -1234567;
+}
+
+int
+main ()
+{
+  /* C99 Section 6.7.2 Type specifiers.  Type _Bool is 
+     mentioned in this section.  Conversions between 
+     BOOL and DFP types.  */
+
+  /* Decimal float to unsigned integer.  */
+  init_dfp_1 ();
+
+  ui = d32;
+  if (ui != 456U)
+    FAILURE
+  ul = d32;
+  if (ul != 456UL)
+    FAILURE
+  ull = d32;
+  if (ull != 456ULL)
+    FAILURE
+
+  ui = d64;
+  if (ui != 23U)
+    FAILURE
+  ul = d64;
+  if (ul != 23UL)
+    FAILURE
+  ull = d64;
+  if (ull != 23ULL)
+    FAILURE
+
+  ui = d128;
+  if (ui != 1234U)
+    FAILURE
+  ul = d128;
+  if (ul != 1234UL)
+    FAILURE
+  ull = d128;
+  if (ull != 1234ULL)
+    FAILURE
+
+  /* Decimal float to signed integer.  */
+
+  /* Decimal float to BOOL.  */
+  init_dfp_2 ();
+
+  b = d32;
+  if (!b)
+    FAILURE
+  b = d64;
+  if (!b)
+    FAILURE
+  b = d128;
+  if (!b)
+    FAILURE
+
+  /* Unsigned integer to decimal float.  */
+  init_unsigned_int ();
+
+  d32 = ui;
+  if (d32 != 987.0df)
+    FAILURE
+  d32 = ul;
+  if (d32 != 345678.0df)
+    FAILURE
+  d32 = ull;
+  if (d32 != 1234567.df)
+    FAILURE
+
+  d64 = ui;
+  if (d64 != 987.0dd)
+    FAILURE
+  d64 = ul;
+  if (d64 != 345678.0dd)
+    FAILURE
+  d64 = ull;
+  if (d64 != 1234567.dd)
+    FAILURE
+
+  d128 = ui;
+  if (d128 != 987.0dl)
+    FAILURE
+  d128 = ul;
+  if (d128 != 345678.0dl)
+    FAILURE
+  d128 = ull;
+  if (d128 != 1234567.dl)
+    FAILURE
+
+  /* Signed integer to decimal float.  */
+  init_signed_int ();
+
+  d32 = si;
+  if (d32 != -987.0df)
+    FAILURE
+  d32 = sl;
+  if (d32 != -345678.0df)
+    FAILURE
+  d32 = sll;
+  if (d32 != -1234567.df)
+    FAILURE
+
+  d64 = si;
+  if (d64 != -987.0dd)
+    FAILURE
+  d64 = sl;
+  if (d64 != -345678.0dd)
+    FAILURE
+  d64 = sll;
+  if (d64 != -1234567.dd)
+    FAILURE
+
+  d128 = si;
+  if (d128 != -987.0dl)
+    FAILURE
+  d128 = sl;
+  if (d128 != -345678.0dl)
+    FAILURE
+  d128 = sll;
+  if (d128 != -1234567.dl)
+    FAILURE
+
+  /* BOOL to decimal float.  */
+  init_dfp_3 ();
+  
+  b = d32;
+  if (b)
+    FAILURE
+  b = d64;
+  if (b)
+    FAILURE
+  b = d128;
+  if (b)
+    FAILURE
+
+  FINISH
+}