diff options
97 files changed, 11299 insertions, 8512 deletions
@@ -360,6 +360,8 @@ whole-archive = -Wl,--whole-archive # Installed name of the startup code. # The ELF convention is that the startfile is called crt1.o start-installed-name = crt1.o +# Similar to crt1.o, but without _IO_stdin_used. +start-name-2.0 = crt1-2.0.o # On systems that do not need a special startfile for statically linked # binaries, simply set it to the normal name. ifndef static-start-installed-name @@ -537,6 +539,25 @@ else # build-static endif # build-shared endif # +link +# Command for linking test programs with crt1.o from glibc 2.0. ++link-2.0-before-inputs = -nostdlib -nostartfiles $(no-pie-ldflag) \ + $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ + $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ + $(firstword $(CRT-$(@F)) $(csu-objpfx)$(start-name-2.0)) \ + $(+preinit) $(+prector) ++link-2.0-before-libc = -o $@ $(+link-2.0-before-inputs) \ + $(filter-out $(addprefix $(csu-objpfx),start.o \ + $(start-name-2.0))\ + $(+preinit) $(link-extra-libs) \ + $(common-objpfx)libc% $(+postinit),$^) \ + $(link-extra-libs) ++link-after-libc = $(+postctor) $(+postinit) +define +link-2.0-tests +$(CC) $(+link-2.0-before-libc) $(rtld-tests-LDFLAGS) $(link-libc-tests) \ + $(+link-after-libc) +$(call after-link,$@) +endef + # The pretty printer test programs need to be compiled without optimizations # so they won't confuse gdb. We could use either the 'GCC optimize' pragma # or the 'optimize' function attribute to achieve this; however, at least on @@ -37,6 +37,7 @@ The following CVEs were fixed in this release: The following bugs are resolved with this release: [19622] network: Support aliasing with struct sockaddr + [27821] ungetc: Fix backup buffer leak on program exit [30081] resolv: Do not wait for non-existing second DNS response after error [30701] time: getutxent misbehaves on 32-bit x86 when _TIME_BITS=64 [30994] REP MOVSB performance suffers from page aliasing on Zen 4 @@ -55,6 +56,7 @@ The following bugs are resolved with this release: [31372] dynamic-link: _dl_tlsdesc_dynamic doesn't preserve all caller- saved registers [31429] build: Glibc failed to build with -march=x86-64-v3 + [31476] resolv: Track single-request fallback via _res._flags [31501] dynamic-link: _dl_tlsdesc_dynamic_xsavec may clobber %rbx [31612] libc: arc4random fails to fallback to /dev/urandom if getrandom is not present @@ -73,6 +75,7 @@ The following bugs are resolved with this release: [31686] dynamic-link: Stack-based buffer overflow in parse_tunables_string [31695] libc: pidfd_spawn/pidfd_spawnp leak an fd if clone3 succeeds + [31717] elf: Avoid re-initializing already allocated TLS in dlopen [31719] dynamic-link: --enable-hardcoded-path-in-tests doesn't work with -Wl,--enable-new-dtags [31782] Test build failure with recent GCC trunk @@ -85,6 +88,10 @@ The following bugs are resolved with this release: is otherwise broken for arithmetic [31890] resolv: Allow short error responses to match any DNS query [31965] rseq extension mechanism does not work as intended + [31968] mremap implementation in C does not handle arguments correctly + [32026] strerror/strsignal TLS not handled correctly for secondary namespaces + [32052] Name space violation in fortify wrappers + [32137] libio: Attempt wide backup free only for non-legacy code Version 2.39 @@ -188,6 +188,7 @@ binaries-all = $(binaries-all-notests) $(binaries-all-tests) binaries-static-notests = $(others-static) binaries-static-tests = $(tests-static) $(xtests-static) binaries-static = $(binaries-static-notests) $(binaries-static-tests) +binaries-shared-2.0-tests = $(tests-2.0) ifeq (yesyes,$(have-fpie)$(build-shared)) binaries-pie-tests = $(tests-pie) $(xtests-pie) binaries-pie-notests = $(others-pie) @@ -215,7 +216,8 @@ binaries-malloc-hugetlb2-tests = endif binaries-pie = $(binaries-pie-tests) $(binaries-pie-notests) -binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \ +binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static) \ + $(binaries-shared-2.0-tests), \ $(binaries-all-tests)) binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \ $(binaries-all-notests)) @@ -235,6 +237,15 @@ $(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \ $(+link-tests) endif +# Linking test programs with crt1.o from glibc 2.0. +ifneq "$(strip $(binaries-shared-2.0-tests))" "" +$(addprefix $(objpfx),$(binaries-shared-2.0-tests)): %: %.o \ + $(link-extra-libs-tests) \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link-2.0-tests) +endif + ifneq "$(strip $(binaries-mcheck-tests))" "" $(addprefix $(objpfx),$(binaries-mcheck-tests)): %-mcheck: %.o \ $(link-extra-libs-tests) \ diff --git a/csu/Makefile b/csu/Makefile index ac05ab2..34a8d74 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -33,7 +33,7 @@ elide-routines.os = libc-tls csu-dummies = $(filter-out $(start-installed-name),crt1.o Mcrt1.o) extra-objs = start.o \ $(start-installed-name) g$(start-installed-name) $(csu-dummies) \ - S$(start-installed-name) + S$(start-installed-name) $(start-name-2.0) omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \ b$(start-installed-name) $(csu-dummies) \ S$(start-installed-name) \ @@ -138,6 +138,9 @@ ifndef start-installed-name-rule $(objpfx)$(start-installed-name): $(objpfx)start.o $(objpfx)abi-note.o \ $(objpfx)init.o $(objpfx)static-reloc.o $(link-relocatable) +$(objpfx)$(start-name-2.0): $(objpfx)start.o $(objpfx)abi-note.o \ + $(objpfx)static-reloc.o + $(link-relocatable) $(objpfx)r$(start-installed-name): $(objpfx)start.o $(objpfx)abi-note.o \ $(objpfx)init.o $(link-relocatable) diff --git a/debug/pcprofiledump.c b/debug/pcprofiledump.c index 049a9c2..94530f0 100644 --- a/debug/pcprofiledump.c +++ b/debug/pcprofiledump.c @@ -75,6 +75,44 @@ static struct argp argp = options, parse_opt, args_doc, doc, NULL, more_help }; +/* Try to read SIZE bytes from FD and store them on BUF. Terminate + the process upon read error. Also terminate the process if less + than SIZE bytes are remaining in the file. If !IN_HEADER, do not + terminate the process if the end of the file is encountered + immediately, before any bytes are read. + + Returns true if SIZE bytes have been read, and false if no bytes + have been read due to an end-of-file condition. */ +static bool +read_exactly (int fd, void *buffer, size_t size, bool in_header) +{ + char *p = buffer; + char *end = p + size; + while (p < end) + { + ssize_t ret = TEMP_FAILURE_RETRY (read (fd, p, end - p)); + if (ret < 0) + { + if (in_header) + error (EXIT_FAILURE, errno, _("cannot read header")); + else + error (EXIT_FAILURE, errno, _("cannot read pointer pair")); + } + if (ret == 0) + { + if (p == buffer && !in_header) + /* Nothing has been read. */ + return false; + if (in_header) + error (EXIT_FAILURE, 0, _("unexpected end of file in header")); + else + error (EXIT_FAILURE, 0, + _("unexpected end of file in pointer pair")); + } + p += ret; + } + return true; +} int main (int argc, char *argv[]) @@ -110,8 +148,7 @@ main (int argc, char *argv[]) /* Read the first 4-byte word. It contains the information about the word size and the endianness. */ uint32_t word; - if (TEMP_FAILURE_RETRY (read (fd, &word, 4)) != 4) - error (EXIT_FAILURE, errno, _("cannot read header")); + read_exactly (fd, &word, sizeof (word), true); /* Check whether we have to swap the byte order. */ int must_swap = (word & 0x0fffffff) == bswap_32 (0xdeb00000); @@ -121,56 +158,30 @@ main (int argc, char *argv[]) /* We have two loops, one for 32 bit pointers, one for 64 bit pointers. */ if (word == 0xdeb00004) { - union - { - uint32_t ptrs[2]; - char bytes[8]; - } pair; + uint32_t ptrs[2]; while (1) { - size_t len = sizeof (pair); - size_t n; - - while (len > 0 - && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len], - len))) != 0) - len -= n; - - if (len != 0) - /* Nothing to read. */ + if (!read_exactly (fd, ptrs, sizeof (ptrs), false)) break; printf ("this = %#010" PRIx32 ", caller = %#010" PRIx32 "\n", - must_swap ? bswap_32 (pair.ptrs[0]) : pair.ptrs[0], - must_swap ? bswap_32 (pair.ptrs[1]) : pair.ptrs[1]); + must_swap ? bswap_32 (ptrs[0]) : ptrs[0], + must_swap ? bswap_32 (ptrs[1]) : ptrs[1]); } } else if (word == 0xdeb00008) { - union - { - uint64_t ptrs[2]; - char bytes[16]; - } pair; + uint64_t ptrs[2]; while (1) { - size_t len = sizeof (pair); - size_t n; - - while (len > 0 - && (n = TEMP_FAILURE_RETRY (read (fd, &pair.bytes[8 - len], - len))) != 0) - len -= n; - - if (len != 0) - /* Nothing to read. */ + if (!read_exactly (fd, ptrs, sizeof (ptrs), false)) break; printf ("this = %#018" PRIx64 ", caller = %#018" PRIx64 "\n", - must_swap ? bswap_64 (pair.ptrs[0]) : pair.ptrs[0], - must_swap ? bswap_64 (pair.ptrs[1]) : pair.ptrs[1]); + must_swap ? bswap_64 (ptrs[0]) : ptrs[0], + must_swap ? bswap_64 (ptrs[1]) : ptrs[1]); } } else diff --git a/debug/tst-fortify-syslog.c b/debug/tst-fortify-syslog.c index a7ddbf7..2712acf 100644 --- a/debug/tst-fortify-syslog.c +++ b/debug/tst-fortify-syslog.c @@ -22,7 +22,6 @@ #include <syslog.h> #include <string.h> #include <unistd.h> -#include <stdio.h> #include <support/check.h> #include <support/support.h> @@ -46,18 +45,13 @@ handler (int sig) _exit (127); } -#define FAIL() \ - do { \ - printf ("Failure on line %d\n", __LINE__); \ - support_record_failure (); \ - } while (0) #define CHK_FAIL_START \ chk_fail_ok = 1; \ if (! setjmp (chk_fail_buf)) \ { #define CHK_FAIL_END \ chk_fail_ok = 0; \ - FAIL (); \ + FAIL ("not supposed to reach here"); \ } static void diff --git a/elf/Makefile b/elf/Makefile index a50a988..8a5678a 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -414,6 +414,10 @@ tests += \ tst-dlmopen4 \ tst-dlopen-self \ tst-dlopen-tlsmodid \ + tst-dlopen-tlsreinit1 \ + tst-dlopen-tlsreinit2 \ + tst-dlopen-tlsreinit3 \ + tst-dlopen-tlsreinit4 \ tst-dlopenfail \ tst-dlopenfail-2 \ tst-dlopenrpath \ @@ -443,6 +447,7 @@ tests += \ tst-p_align1 \ tst-p_align2 \ tst-p_align3 \ + tst-recursive-tls \ tst-relsort1 \ tst-ro-dynamic \ tst-rtld-run-static \ @@ -837,6 +842,9 @@ modules-names += \ tst-dlmopen-twice-mod1 \ tst-dlmopen-twice-mod2 \ tst-dlmopen1mod \ + tst-dlopen-tlsreinitmod1 \ + tst-dlopen-tlsreinitmod2 \ + tst-dlopen-tlsreinitmod3 \ tst-dlopenfaillinkmod \ tst-dlopenfailmod1 \ tst-dlopenfailmod2 \ @@ -877,6 +885,23 @@ modules-names += \ tst-null-argv-lib \ tst-p_alignmod-base \ tst-p_alignmod3 \ + tst-recursive-tlsmallocmod \ + tst-recursive-tlsmod0 \ + tst-recursive-tlsmod1 \ + tst-recursive-tlsmod2 \ + tst-recursive-tlsmod3 \ + tst-recursive-tlsmod4 \ + tst-recursive-tlsmod5 \ + tst-recursive-tlsmod6 \ + tst-recursive-tlsmod7 \ + tst-recursive-tlsmod8 \ + tst-recursive-tlsmod9 \ + tst-recursive-tlsmod10 \ + tst-recursive-tlsmod11 \ + tst-recursive-tlsmod12 \ + tst-recursive-tlsmod13 \ + tst-recursive-tlsmod14 \ + tst-recursive-tlsmod15 \ tst-relsort1mod1 \ tst-relsort1mod2 \ tst-ro-dynamic-mod \ @@ -3064,3 +3089,34 @@ CFLAGS-tst-gnu2-tls2mod0.c += -mtls-dialect=$(have-mtls-descriptor) CFLAGS-tst-gnu2-tls2mod1.c += -mtls-dialect=$(have-mtls-descriptor) CFLAGS-tst-gnu2-tls2mod2.c += -mtls-dialect=$(have-mtls-descriptor) endif + +$(objpfx)tst-recursive-tls: $(objpfx)tst-recursive-tlsmallocmod.so +# More objects than DTV_SURPLUS, to trigger DTV reallocation. +$(objpfx)tst-recursive-tls.out: \ + $(patsubst %,$(objpfx)tst-recursive-tlsmod%.so, \ + 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) +$(objpfx)tst-recursive-tlsmod%.os: tst-recursive-tlsmodN.c + $(compile-command.c) -DVAR=thread_$* -DFUNC=get_threadvar_$* + +# Order matters here. The test needs the constructor for +# tst-dlopen-tlsreinitmod2.so to be called first. +LDFLAGS-tst-dlopen-tlsreinitmod1.so = -Wl,--no-as-needed +$(objpfx)tst-dlopen-tlsreinitmod1.so: \ + $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so +LDFLAGS-tst-dlopen-tlsreinit2 = -Wl,--no-as-needed +$(objpfx)tst-dlopen-tlsreinit2: \ + $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so +LDFLAGS-tst-dlopen-tlsreinit4 = -Wl,--no-as-needed +$(objpfx)tst-dlopen-tlsreinit4: \ + $(objpfx)tst-dlopen-tlsreinitmod3.so $(objpfx)tst-dlopen-tlsreinitmod2.so +# tst-dlopen-tlsreinitmod2.so is underlinked and refers to +# tst-dlopen-tlsreinitmod3.so. The dependency is provided via +# $(objpfx)tst-dlopen-tlsreinitmod1.so. +tst-dlopen-tlsreinitmod2.so-no-z-defs = yes +$(objpfx)tst-dlopen-tlsreinit1.out: $(objpfx)tst-dlopen-tlsreinitmod1.so \ + $(objpfx)tst-dlopen-tlsreinitmod2.so $(objpfx)tst-dlopen-tlsreinitmod3.so +# Reuse an audit module which provides ample debug logging. +$(objpfx)tst-dlopen-tlsreinit3.out: $(objpfx)tst-auditmod1.so +tst-dlopen-tlsreinit3-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so +$(objpfx)tst-dlopen-tlsreinit4.out: $(objpfx)tst-auditmod1.so +tst-dlopen-tlsreinit4-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so diff --git a/elf/dl-open.c b/elf/dl-open.c index c378da1..8556e7b 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -363,17 +363,8 @@ resize_tls_slotinfo (struct link_map *new) { bool any_tls = false; for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i) - { - struct link_map *imap = new->l_searchlist.r_list[i]; - - /* Only add TLS memory if this object is loaded now and - therefore is not yet initialized. */ - if (! imap->l_init_called && imap->l_tls_blocksize > 0) - { - _dl_add_to_slotinfo (imap, false); - any_tls = true; - } - } + if (_dl_add_to_slotinfo (new->l_searchlist.r_list[i], false)) + any_tls = true; return any_tls; } @@ -383,22 +374,8 @@ resize_tls_slotinfo (struct link_map *new) static void update_tls_slotinfo (struct link_map *new) { - unsigned int first_static_tls = new->l_searchlist.r_nlist; for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i) - { - struct link_map *imap = new->l_searchlist.r_list[i]; - - /* Only add TLS memory if this object is loaded now and - therefore is not yet initialized. */ - if (! imap->l_init_called && imap->l_tls_blocksize > 0) - { - _dl_add_to_slotinfo (imap, true); - - if (imap->l_need_tls_init - && first_static_tls == new->l_searchlist.r_nlist) - first_static_tls = i; - } - } + _dl_add_to_slotinfo (new->l_searchlist.r_list[i], true); size_t newgen = GL(dl_tls_generation) + 1; if (__glibc_unlikely (newgen == 0)) @@ -410,13 +387,11 @@ TLS generation counter wrapped! Please report this.")); /* We need a second pass for static tls data, because _dl_update_slotinfo must not be run while calls to _dl_add_to_slotinfo are still pending. */ - for (unsigned int i = first_static_tls; i < new->l_searchlist.r_nlist; ++i) + for (unsigned int i = 0; i < new->l_searchlist.r_nlist; ++i) { struct link_map *imap = new->l_searchlist.r_list[i]; - if (imap->l_need_tls_init - && ! imap->l_init_called - && imap->l_tls_blocksize > 0) + if (imap->l_need_tls_init && imap->l_tls_blocksize > 0) { /* For static TLS we have to allocate the memory here and now, but we can delay updating the DTV. */ diff --git a/elf/dl-tls.c b/elf/dl-tls.c index 670dbc4..3d529b7 100644 --- a/elf/dl-tls.c +++ b/elf/dl-tls.c @@ -75,6 +75,31 @@ /* Default for dl_tls_static_optional. */ #define OPTIONAL_TLS 512 +/* Used to count the number of threads currently executing dynamic TLS + updates. Used to avoid recursive malloc calls in __tls_get_addr + for an interposed malloc that uses global-dynamic TLS (which is not + recommended); see _dl_tls_allocate_active checks. This could be a + per-thread flag, but would need TLS access in the dynamic linker. */ +unsigned int _dl_tls_threads_in_update; + +static inline void +_dl_tls_allocate_begin (void) +{ + atomic_fetch_add_relaxed (&_dl_tls_threads_in_update, 1); +} + +static inline void +_dl_tls_allocate_end (void) +{ + atomic_fetch_add_relaxed (&_dl_tls_threads_in_update, -1); +} + +static inline bool +_dl_tls_allocate_active (void) +{ + return atomic_load_relaxed (&_dl_tls_threads_in_update) > 0; +} + /* Compute the static TLS surplus based on the namespace count and the TLS space that can be used for optimizations. */ static inline int @@ -425,12 +450,18 @@ _dl_allocate_tls_storage (void) size += TLS_PRE_TCB_SIZE; #endif - /* Perform the allocation. Reserve space for the required alignment - and the pointer to the original allocation. */ + /* Reserve space for the required alignment and the pointer to the + original allocation. */ size_t alignment = GLRO (dl_tls_static_align); + + /* Perform the allocation. */ + _dl_tls_allocate_begin (); void *allocated = malloc (size + alignment + sizeof (void *)); if (__glibc_unlikely (allocated == NULL)) - return NULL; + { + _dl_tls_allocate_end (); + return NULL; + } /* Perform alignment and allocate the DTV. */ #if TLS_TCB_AT_TP @@ -466,6 +497,8 @@ _dl_allocate_tls_storage (void) result = allocate_dtv (result); if (result == NULL) free (allocated); + + _dl_tls_allocate_end (); return result; } @@ -483,6 +516,7 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid) size_t newsize = max_modid + DTV_SURPLUS; size_t oldsize = dtv[-1].counter; + _dl_tls_allocate_begin (); if (dtv == GL(dl_initial_dtv)) { /* This is the initial dtv that was either statically allocated in @@ -502,6 +536,7 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid) if (newp == NULL) oom (); } + _dl_tls_allocate_end (); newp[0].counter = newsize; @@ -517,9 +552,14 @@ _dl_resize_dtv (dtv_t *dtv, size_t max_modid) /* Allocate initial TLS. RESULT should be a non-NULL pointer to storage for the TLS space. The DTV may be resized, and so this function may call malloc to allocate that space. The loader's GL(dl_load_tls_lock) - is taken when manipulating global TLS-related data in the loader. */ + is taken when manipulating global TLS-related data in the loader. + + If MAIN_THREAD, this is the first call during process + initialization. In this case, TLS initialization for secondary + (audit) namespaces is skipped because that has already been handled + by dlopen. */ void * -_dl_allocate_tls_init (void *result, bool init_tls) +_dl_allocate_tls_init (void *result, bool main_thread) { if (result == NULL) /* The memory allocation failed. */ @@ -592,17 +632,21 @@ _dl_allocate_tls_init (void *result, bool init_tls) some platforms use in static programs requires it. */ dtv[map->l_tls_modid].pointer.val = dest; - /* Copy the initialization image and clear the BSS part. For - audit modules or dependencies with initial-exec TLS, we can not - set the initial TLS image on default loader initialization - because it would already be set by the audit setup. However, - subsequent thread creation would need to follow the default - behaviour. */ - if (map->l_ns != LM_ID_BASE && !init_tls) + /* Copy the initialization image and clear the BSS part. + For audit modules or dependencies with initial-exec TLS, + we can not set the initial TLS image on default loader + initialization because it would already be set by the + audit setup, which uses the dlopen code and already + clears l_need_tls_init. Calls with !main_thread from + pthread_create need to initialze TLS for the current + thread regardless of namespace. */ + if (map->l_ns != LM_ID_BASE && main_thread) continue; memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size), '\0', map->l_tls_blocksize - map->l_tls_initimage_size); + if (main_thread) + map->l_need_tls_init = 0; } total += cnt; @@ -626,7 +670,7 @@ _dl_allocate_tls (void *mem) { return _dl_allocate_tls_init (mem == NULL ? _dl_allocate_tls_storage () - : allocate_dtv (mem), true); + : allocate_dtv (mem), false); } rtld_hidden_def (_dl_allocate_tls) @@ -676,7 +720,9 @@ allocate_dtv_entry (size_t alignment, size_t size) if (powerof2 (alignment) && alignment <= _Alignof (max_align_t)) { /* The alignment is supported by malloc. */ + _dl_tls_allocate_begin (); void *ptr = malloc (size); + _dl_tls_allocate_end (); return (struct dtv_pointer) { ptr, ptr }; } @@ -688,7 +734,10 @@ allocate_dtv_entry (size_t alignment, size_t size) /* Perform the allocation. This is the pointer we need to free later. */ + _dl_tls_allocate_begin (); void *start = malloc (alloc_size); + _dl_tls_allocate_end (); + if (start == NULL) return (struct dtv_pointer) {}; @@ -826,7 +875,11 @@ _dl_update_slotinfo (unsigned long int req_modid, size_t new_gen) free implementation. Checking here papers over at least some dynamic TLS usage by interposed mallocs. */ if (dtv[modid].pointer.to_free != NULL) - free (dtv[modid].pointer.to_free); + { + _dl_tls_allocate_begin (); + free (dtv[modid].pointer.to_free); + _dl_tls_allocate_end (); + } dtv[modid].pointer.val = TLS_DTV_UNALLOCATED; dtv[modid].pointer.to_free = NULL; @@ -956,10 +1009,22 @@ __tls_get_addr (GET_ADDR_ARGS) size_t gen = atomic_load_relaxed (&GL(dl_tls_generation)); if (__glibc_unlikely (dtv[0].counter != gen)) { - /* Update DTV up to the global generation, see CONCURRENCY NOTES - in _dl_update_slotinfo. */ - gen = atomic_load_acquire (&GL(dl_tls_generation)); - return update_get_addr (GET_ADDR_PARAM, gen); + if (_dl_tls_allocate_active () + && GET_ADDR_MODULE < _dl_tls_initial_modid_limit) + /* This is a reentrant __tls_get_addr call, but we can + satisfy it because it's an initially-loaded module ID. + These TLS slotinfo slots do not change, so the + out-of-date generation counter does not matter. However, + if not in a TLS update, still update_get_addr below, to + get off the slow path eventually. */ + ; + else + { + /* Update DTV up to the global generation, see CONCURRENCY NOTES + in _dl_update_slotinfo. */ + gen = atomic_load_acquire (&GL(dl_tls_generation)); + return update_get_addr (GET_ADDR_PARAM, gen); + } } void *p = dtv[GET_ADDR_MODULE].pointer.val; @@ -969,7 +1034,7 @@ __tls_get_addr (GET_ADDR_ARGS) return (char *) p + GET_ADDR_OFFSET; } -#endif +#endif /* SHARED */ /* Look up the module's TLS block as for __tls_get_addr, @@ -1018,10 +1083,52 @@ _dl_tls_get_addr_soft (struct link_map *l) return data; } +size_t _dl_tls_initial_modid_limit; void +_dl_tls_initial_modid_limit_setup (void) +{ + struct dtv_slotinfo_list *listp = GL(dl_tls_dtv_slotinfo_list); + size_t idx; + for (idx = 0; idx < listp->len; ++idx) + { + struct link_map *l = listp->slotinfo[idx].map; + if (l == NULL + /* The object can be unloaded, so its modid can be + reassociated. */ + || !(l->l_type == lt_executable || l->l_type == lt_library)) + break; + } + _dl_tls_initial_modid_limit = idx; +} + + +/* Add module to slot information data. If DO_ADD is false, only the + required memory is allocated. Must be called with + GL (dl_load_tls_lock) acquired. If the function has already been + called for the link map L with !DO_ADD, then this function will not + raise an exception, otherwise it is possible that it encounters a + memory allocation failure. + + Return false if L has already been added to the slotinfo data, or + if L has no TLS data. If the returned value is true, L has been + added with this call (DO_ADD), or has been added in a previous call + (!DO_ADD). + + The expected usage is as follows: Call _dl_add_to_slotinfo for + several link maps with DO_ADD set to false, and record if any calls + result in a true result. If there was a true result, call + _dl_add_to_slotinfo again, this time with DO_ADD set to true. (For + simplicity, it's possible to call the function for link maps where + the previous result was false.) The return value from the second + round of calls can be ignored. If there was true result initially, + call _dl_update_slotinfo to update the TLS generation counter. */ +bool _dl_add_to_slotinfo (struct link_map *l, bool do_add) { + if (l->l_tls_blocksize == 0 || l->l_tls_in_slotinfo) + return false; + /* Now that we know the object is loaded successfully add modules containing TLS data to the dtv info table. We might have to increase its size. */ @@ -1050,9 +1157,11 @@ _dl_add_to_slotinfo (struct link_map *l, bool do_add) the first slot. */ assert (idx == 0); + _dl_tls_allocate_begin (); listp = (struct dtv_slotinfo_list *) malloc (sizeof (struct dtv_slotinfo_list) + TLS_SLOTINFO_SURPLUS * sizeof (struct dtv_slotinfo)); + _dl_tls_allocate_end (); if (listp == NULL) { /* We ran out of memory while resizing the dtv slotinfo list. */ @@ -1075,7 +1184,10 @@ cannot create TLS data structures")); atomic_store_relaxed (&listp->slotinfo[idx].map, l); atomic_store_relaxed (&listp->slotinfo[idx].gen, GL(dl_tls_generation) + 1); + l->l_tls_in_slotinfo = true; } + + return true; } #if PTHREAD_IN_LIBC @@ -788,6 +788,8 @@ init_tls (size_t naudit) _dl_fatal_printf ("\ cannot allocate TLS data structures for initial thread\n"); + _dl_tls_initial_modid_limit_setup (); + /* Store for detection of the special case by __tls_get_addr so it knows not to pass this dtv to the normal realloc. */ GL(dl_initial_dtv) = GET_DTV (tcbp); @@ -2335,7 +2337,7 @@ dl_main (const ElfW(Phdr) *phdr, into the main thread's TLS area, which we allocated above. Note: thread-local variables must only be accessed after completing the next step. */ - _dl_allocate_tls_init (tcbp, false); + _dl_allocate_tls_init (tcbp, true); /* And finally install it for the main thread. */ if (! __rtld_tls_init_tp_called) diff --git a/elf/tst-dlopen-tlsreinit1.c b/elf/tst-dlopen-tlsreinit1.c new file mode 100644 index 0000000..2016b9b --- /dev/null +++ b/elf/tst-dlopen-tlsreinit1.c @@ -0,0 +1,40 @@ +/* Test that dlopen preserves already accessed TLS (bug 31717). + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdbool.h> +#include <support/check.h> +#include <support/xdlfcn.h> +#include <ctype.h> + +static int +do_test (void) +{ + void *handle = xdlopen ("tst-dlopen-tlsreinitmod1.so", RTLD_NOW); + + bool *tlsreinitmod3_tested = xdlsym (handle, "tlsreinitmod3_tested"); + TEST_VERIFY (*tlsreinitmod3_tested); + + xdlclose (handle); + + /* This crashes if the libc.so.6 TLS image has been reverted. */ + TEST_VERIFY (!isupper ('@')); + + return 0; +} + +#include <support/test-driver.c> diff --git a/elf/tst-dlopen-tlsreinit2.c b/elf/tst-dlopen-tlsreinit2.c new file mode 100644 index 0000000..90ad2c7 --- /dev/null +++ b/elf/tst-dlopen-tlsreinit2.c @@ -0,0 +1,39 @@ +/* Test that dlopen preserves already accessed TLS (bug 31717). + Variant with initially-linked modules. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <ctype.h> +#include <stdbool.h> +#include <support/check.h> +#include <support/xdlfcn.h> + + +static int +do_test (void) +{ + /* Defined in tst-dlopen-tlsreinitmod3.so. */ + extern bool tlsreinitmod3_tested; + TEST_VERIFY (tlsreinitmod3_tested); + + /* This crashes if the libc.so.6 TLS image has been reverted. */ + TEST_VERIFY (!isupper ('@')); + + return 0; +} + +#include <support/test-driver.c> diff --git a/elf/tst-dlopen-tlsreinit3.c b/elf/tst-dlopen-tlsreinit3.c new file mode 100644 index 0000000..79bd585 --- /dev/null +++ b/elf/tst-dlopen-tlsreinit3.c @@ -0,0 +1,2 @@ +/* Same code, but run with LD_AUDIT=tst-auditmod1.so. */ +#include "tst-dlopen-tlsreinit1.c" diff --git a/elf/tst-dlopen-tlsreinit4.c b/elf/tst-dlopen-tlsreinit4.c new file mode 100644 index 0000000..344c921 --- /dev/null +++ b/elf/tst-dlopen-tlsreinit4.c @@ -0,0 +1,2 @@ +/* Same code, but run with LD_AUDIT=tst-auditmod1.so. */ +#include "tst-dlopen-tlsreinit2.c" diff --git a/elf/tst-dlopen-tlsreinitmod1.c b/elf/tst-dlopen-tlsreinitmod1.c new file mode 100644 index 0000000..354cc3d --- /dev/null +++ b/elf/tst-dlopen-tlsreinitmod1.c @@ -0,0 +1,20 @@ +/* Test that dlopen preserves already accessed TLS (bug 31717), module 1. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* This module triggers loading of tst-dlopen-tlsreinitmod2.so and + tst-dlopen-tlsreinitmod3.so. */ diff --git a/elf/tst-dlopen-tlsreinitmod2.c b/elf/tst-dlopen-tlsreinitmod2.c new file mode 100644 index 0000000..677e69b --- /dev/null +++ b/elf/tst-dlopen-tlsreinitmod2.c @@ -0,0 +1,30 @@ +/* Test that dlopen preserves already accessed TLS (bug 31717), module 2. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> + +/* Defined in tst-dlopen-tlsreinitmod3.so. This an underlinked symbol + dependency. */ +extern void call_tlsreinitmod3 (void); + +static void __attribute__ ((constructor)) +tlsreinitmod2_init (void) +{ + puts ("info: constructor of tst-dlopen-tlsreinitmod2.so invoked"); + call_tlsreinitmod3 (); +} diff --git a/elf/tst-dlopen-tlsreinitmod3.c b/elf/tst-dlopen-tlsreinitmod3.c new file mode 100644 index 0000000..ef769c5 --- /dev/null +++ b/elf/tst-dlopen-tlsreinitmod3.c @@ -0,0 +1,102 @@ +/* Test that dlopen preserves already accessed TLS (bug 31717), module 3. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <dlfcn.h> +#include <stdbool.h> +#include <stdio.h> +#include <unistd.h> + +/* Used to verify from the main program that the test ran. */ +bool tlsreinitmod3_tested; + +/* This TLS variable must not revert back to the initial state after + dlopen. */ +static __thread int tlsreinitmod3_state = 1; + +/* Set from the ELF constructor during dlopen. */ +static bool tlsreinitmod3_constructed; + +/* Second half of test, behind a compiler barrier. The compiler + barrier is necessary to prevent carrying over TLS address + information from call_tlsreinitmod3 to call_tlsreinitmod3_tail. */ +void call_tlsreinitmod3_tail (void *self) __attribute__ ((weak)); + +/* Called from tst-dlopen-tlsreinitmod2.so. */ +void +call_tlsreinitmod3 (void) +{ + printf ("info: call_tlsreinitmod3 invoked (state=%d)\n", + tlsreinitmod3_state); + + if (tlsreinitmod3_constructed) + { + puts ("error: call_tlsreinitmod3 called after ELF constructor"); + fflush (stdout); + /* Cannot rely on test harness due to dynamic linking. */ + _exit (1); + } + + tlsreinitmod3_state = 2; + + /* Self-dlopen. This will run the ELF constructor. */ + void *self = dlopen ("tst-dlopen-tlsreinitmod3.so", RTLD_NOW); + if (self == NULL) + { + printf ("error: dlopen: %s\n", dlerror ()); + fflush (stdout); + /* Cannot rely on test harness due to dynamic linking. */ + _exit (1); + } + + call_tlsreinitmod3_tail (self); +} + +void +call_tlsreinitmod3_tail (void *self) +{ + printf ("info: dlopen returned in tlsreinitmod3 (state=%d)\n", + tlsreinitmod3_state); + + if (!tlsreinitmod3_constructed) + { + puts ("error: dlopen did not call tlsreinitmod3 ELF constructor"); + fflush (stdout); + /* Cannot rely on test harness due to dynamic linking. */ + _exit (1); + } + + if (tlsreinitmod3_state != 2) + { + puts ("error: TLS state reverted in tlsreinitmod3"); + fflush (stdout); + /* Cannot rely on test harness due to dynamic linking. */ + _exit (1); + } + + dlclose (self); + + /* Signal test completion to the main program. */ + tlsreinitmod3_tested = true; +} + +static void __attribute__ ((constructor)) +tlsreinitmod3_init (void) +{ + puts ("info: constructor of tst-dlopen-tlsreinitmod3.so invoked"); + tlsreinitmod3_constructed = true; +} diff --git a/elf/tst-recursive-tls.c b/elf/tst-recursive-tls.c new file mode 100644 index 0000000..716d1f7 --- /dev/null +++ b/elf/tst-recursive-tls.c @@ -0,0 +1,60 @@ +/* Test with interposed malloc with dynamic TLS. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <array_length.h> +#include <stdio.h> +#include <support/check.h> +#include <support/xdlfcn.h> + +/* Defined in tst-recursive-tlsmallocmod.so. */ +extern __thread unsigned int malloc_subsytem_counter; + +static int +do_test (void) +{ + /* 16 is large enough to exercise the DTV resizing case. */ + void *handles[16]; + + for (unsigned int i = 0; i < array_length (handles); ++i) + { + /* Re-use the TLS slot for module 0. */ + if (i > 0) + xdlclose (handles[0]); + + char soname[30]; + snprintf (soname, sizeof (soname), "tst-recursive-tlsmod%u.so", i); + handles[i] = xdlopen (soname, RTLD_NOW); + + if (i > 0) + { + handles[0] = xdlopen ("tst-recursive-tlsmod0.so", RTLD_NOW); + int (*fptr) (void) = xdlsym (handles[0], "get_threadvar_0"); + /* May trigger TLS storage allocation using malloc. */ + TEST_COMPARE (fptr (), 0); + } + } + + for (unsigned int i = 0; i < array_length (handles); ++i) + xdlclose (handles[i]); + + printf ("info: malloc subsystem calls: %u\n", malloc_subsytem_counter); + TEST_VERIFY (malloc_subsytem_counter > 0); + return 0; +} + +#include <support/test-driver.c> diff --git a/elf/tst-recursive-tlsmallocmod.c b/elf/tst-recursive-tlsmallocmod.c new file mode 100644 index 0000000..c24e994 --- /dev/null +++ b/elf/tst-recursive-tlsmallocmod.c @@ -0,0 +1,64 @@ +/* Interposed malloc with dynamic TLS. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdlib.h> +#include <dlfcn.h> + +__thread unsigned int malloc_subsytem_counter; + +static __typeof (malloc) *malloc_fptr; +static __typeof (free) *free_fptr; +static __typeof (calloc) *calloc_fptr; +static __typeof (realloc) *realloc_fptr; + +static void __attribute__ ((constructor)) +init (void) +{ + malloc_fptr = dlsym (RTLD_NEXT, "malloc"); + free_fptr = dlsym (RTLD_NEXT, "free"); + calloc_fptr = dlsym (RTLD_NEXT, "calloc"); + realloc_fptr = dlsym (RTLD_NEXT, "realloc"); +} + +void * +malloc (size_t size) +{ + ++malloc_subsytem_counter; + return malloc_fptr (size); +} + +void +free (void *ptr) +{ + ++malloc_subsytem_counter; + return free_fptr (ptr); +} + +void * +calloc (size_t a, size_t b) +{ + ++malloc_subsytem_counter; + return calloc_fptr (a, b); +} + +void * +realloc (void *ptr, size_t size) +{ + ++malloc_subsytem_counter; + return realloc_fptr (ptr, size); +} diff --git a/elf/tst-recursive-tlsmodN.c b/elf/tst-recursive-tlsmodN.c new file mode 100644 index 0000000..bb7592a --- /dev/null +++ b/elf/tst-recursive-tlsmodN.c @@ -0,0 +1,28 @@ +/* Test module with global-dynamic TLS. Used to trigger DTV reallocation. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Compiled with VAR and FUNC set via -D. FUNC requires some + relocation against TLS variable VAR. */ + +__thread int VAR; + +int +FUNC (void) +{ + return VAR; +} diff --git a/include/libc-internal.h b/include/libc-internal.h index 87ac591..1ef43ff 100644 --- a/include/libc-internal.h +++ b/include/libc-internal.h @@ -53,6 +53,9 @@ extern __typeof (__profile_frequency) __profile_frequency attribute_hidden; is not for an audit module, not loaded via dlmopen, and not loaded via static dlopen either). */ extern _Bool __libc_initial attribute_hidden; +#else +/* The static libc is always the initial namespace. */ +# define __libc_initial ((_Bool) 1) #endif #endif /* _LIBC_INTERNAL */ diff --git a/include/link.h b/include/link.h index cb0d7d8..5ed445d 100644 --- a/include/link.h +++ b/include/link.h @@ -212,6 +212,7 @@ struct link_map unsigned int l_find_object_processed:1; /* Zero if _dl_find_object_update needs to process this lt_library map. */ + unsigned int l_tls_in_slotinfo:1; /* TLS slotinfo updated in dlopen. */ /* NODELETE status of the map. Only valid for maps of type lt_loaded. Lazy binding sets l_nodelete_active directly, diff --git a/libio/Makefile b/libio/Makefile index 27623c9..b92aeaf 100644 --- a/libio/Makefile +++ b/libio/Makefile @@ -212,6 +212,12 @@ aux := fileops genops stdfiles stdio strops ifeq ($(build-shared),yes) generated += tst-bz24228.mtrace tst-bz24228.check aux += oldfileops oldstdfiles +tests += \ + tst-stderr-compat \ +# tests +tests-2.0 += \ + tst-stderr-compat \ +# tests-2.0 endif shared-only-routines = oldiofopen oldiofdopen oldiofclose oldfileops \ diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h index f9e8d37..0dc4e87 100644 --- a/libio/bits/stdio2.h +++ b/libio/bits/stdio2.h @@ -195,24 +195,24 @@ __fortify_function __wur __fortified_attr_access (__write_only__, 1, 2) __nonnull ((3)) char * fgets (char *__restrict __s, int __n, FILE *__restrict __stream) { - size_t sz = __glibc_objsize (__s); - if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz)) + size_t __sz = __glibc_objsize (__s); + if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz)) return __fgets_alias (__s, __n, __stream); - if (__glibc_unsafe_len (__n, sizeof (char), sz)) - return __fgets_chk_warn (__s, sz, __n, __stream); - return __fgets_chk (__s, sz, __n, __stream); + if (__glibc_unsafe_len (__n, sizeof (char), __sz)) + return __fgets_chk_warn (__s, __sz, __n, __stream); + return __fgets_chk (__s, __sz, __n, __stream); } __fortify_function __wur __nonnull ((4)) size_t fread (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) { - size_t sz = __glibc_objsize0 (__ptr); - if (__glibc_safe_or_unknown_len (__n, __size, sz)) + size_t __sz = __glibc_objsize0 (__ptr); + if (__glibc_safe_or_unknown_len (__n, __size, __sz)) return __fread_alias (__ptr, __size, __n, __stream); - if (__glibc_unsafe_len (__n, __size, sz)) - return __fread_chk_warn (__ptr, sz, __size, __n, __stream); - return __fread_chk (__ptr, sz, __size, __n, __stream); + if (__glibc_unsafe_len (__n, __size, __sz)) + return __fread_chk_warn (__ptr, __sz, __size, __n, __stream); + return __fread_chk (__ptr, __sz, __size, __n, __stream); } #ifdef __USE_GNU @@ -220,12 +220,12 @@ __fortify_function __wur __fortified_attr_access (__write_only__, 1, 2) __nonnull ((3)) char * fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream) { - size_t sz = __glibc_objsize (__s); - if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz)) + size_t __sz = __glibc_objsize (__s); + if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz)) return __fgets_unlocked_alias (__s, __n, __stream); - if (__glibc_unsafe_len (__n, sizeof (char), sz)) - return __fgets_unlocked_chk_warn (__s, sz, __n, __stream); - return __fgets_unlocked_chk (__s, sz, __n, __stream); + if (__glibc_unsafe_len (__n, sizeof (char), __sz)) + return __fgets_unlocked_chk_warn (__s, __sz, __n, __stream); + return __fgets_unlocked_chk (__s, __sz, __n, __stream); } #endif @@ -235,8 +235,8 @@ __fortify_function __wur __nonnull ((4)) size_t fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) { - size_t sz = __glibc_objsize0 (__ptr); - if (__glibc_safe_or_unknown_len (__n, __size, sz)) + size_t __sz = __glibc_objsize0 (__ptr); + if (__glibc_safe_or_unknown_len (__n, __size, __sz)) { # ifdef __USE_EXTERN_INLINES if (__builtin_constant_p (__size) @@ -261,9 +261,9 @@ fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, # endif return __fread_unlocked_alias (__ptr, __size, __n, __stream); } - if (__glibc_unsafe_len (__n, __size, sz)) - return __fread_unlocked_chk_warn (__ptr, sz, __size, __n, __stream); - return __fread_unlocked_chk (__ptr, sz, __size, __n, __stream); + if (__glibc_unsafe_len (__n, __size, __sz)) + return __fread_unlocked_chk_warn (__ptr, __sz, __size, __n, __stream); + return __fread_unlocked_chk (__ptr, __sz, __size, __n, __stream); } #endif diff --git a/libio/genops.c b/libio/genops.c index bc45e60..02292be 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -635,7 +635,7 @@ _IO_sputbackc (FILE *fp, int c) { int result; - if (fp->_IO_read_ptr > fp->_IO_read_base + if (fp->_IO_read_ptr > fp->_IO_read_base && !_IO_in_backup (fp) && (unsigned char)fp->_IO_read_ptr[-1] == (unsigned char)c) { fp->_IO_read_ptr--; @@ -789,6 +789,12 @@ _IO_unbuffer_all (void) legacy = 1; #endif + /* Free up the backup area if it was ever allocated. */ + if (_IO_have_backup (fp)) + _IO_free_backup_area (fp); + if (!legacy && fp->_mode > 0 && _IO_have_wbackup (fp)) + _IO_free_wbackup_area (fp); + if (! (fp->_flags & _IO_UNBUFFERED) /* Iff stream is un-orientated, it wasn't used. */ && (legacy || fp->_mode != 0)) diff --git a/libio/libioP.h b/libio/libioP.h index 1af287b..616253f 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -577,8 +577,8 @@ extern void _IO_old_init (FILE *fp, int flags) __THROW; ((__fp)->_wide_data->_IO_write_base \ = (__fp)->_wide_data->_IO_write_ptr = __p, \ (__fp)->_wide_data->_IO_write_end = (__ep)) -#define _IO_have_backup(fp) ((fp)->_IO_save_base != NULL) -#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_save_base != NULL) +#define _IO_have_backup(fp) ((fp)->_IO_backup_base != NULL) +#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_backup_base != NULL) #define _IO_in_backup(fp) ((fp)->_flags & _IO_IN_BACKUP) #define _IO_have_markers(fp) ((fp)->_markers != NULL) #define _IO_blen(fp) ((fp)->_IO_buf_end - (fp)->_IO_buf_base) diff --git a/libio/tst-stderr-compat.c b/libio/tst-stderr-compat.c new file mode 100644 index 0000000..8221415 --- /dev/null +++ b/libio/tst-stderr-compat.c @@ -0,0 +1,52 @@ +/* Test that fclose works on stderr from glibc 2.0. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <shlib-compat.h> + +#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) +# define _LIBC +# define _IO_USE_OLD_IO_FILE +# include <stdio.h> +# include <support/check.h> + +extern FILE _IO_stderr_; +compat_symbol_reference (libc, _IO_stderr_, _IO_stderr_, GLIBC_2_0); +compat_symbol_reference (libc, fclose, fclose, GLIBC_2_0); + +__attribute__ ((weak, noclone, noinline)) +void +do_fclose (FILE *fp) +{ + TEST_VERIFY_EXIT (fclose (fp) == 0); +} + +static int +do_test (void) +{ + do_fclose (&_IO_stderr_); + return 0; +} +#else +static int +do_test (void) +{ + return 0; +} +#endif + +#include <support/test-driver.c> diff --git a/localedata/tst-ctype.c b/localedata/tst-ctype.c index 9de979a..a236897 100644 --- a/localedata/tst-ctype.c +++ b/localedata/tst-ctype.c @@ -21,6 +21,8 @@ #include <stdio.h> #include <string.h> +#include <support/check.h> + static const char lower[] = "abcdefghijklmnopqrstuvwxyz"; static const char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; @@ -53,19 +55,11 @@ static struct classes #define nclasses (sizeof (classes) / sizeof (classes[0])) -#define FAIL(str, args...) \ - { \ - printf (" " str "\n", ##args); \ - ++errors; \ - } - - static int do_test (void) { const char *cp; const char *cp2; - int errors = 0; char *inpline = NULL; size_t inplinelen = 0; char *resline = NULL; @@ -394,11 +388,8 @@ punct = %04x alnum = %04x\n", { if (((__ctype_b[(unsigned int) *inp] & classes[n].mask) != 0) != (*resp != '0')) - { - printf (" is%s('%c' = '\\x%02x') %s true\n", inpline, - *inp, *inp, *resp == '1' ? "not" : "is"); - ++errors; - } + FAIL (" is%s('%c' = '\\x%02x') %s true\n", inpline, + *inp, *inp, *resp == '1' ? "not" : "is"); ++inp; ++resp; } @@ -408,11 +399,8 @@ punct = %04x alnum = %04x\n", while (*inp != '\0') { if (tolower (*inp) != *resp) - { - printf (" tolower('%c' = '\\x%02x') != '%c'\n", - *inp, *inp, *resp); - ++errors; - } + FAIL (" tolower('%c' = '\\x%02x') != '%c'\n", + *inp, *inp, *resp); ++inp; ++resp; } @@ -422,11 +410,8 @@ punct = %04x alnum = %04x\n", while (*inp != '\0') { if (toupper (*inp) != *resp) - { - printf (" toupper('%c' = '\\x%02x') != '%c'\n", - *inp, *inp, *resp); - ++errors; - } + FAIL (" toupper('%c' = '\\x%02x') != '%c'\n", + *inp, *inp, *resp); ++inp; ++resp; } @@ -436,14 +421,7 @@ punct = %04x alnum = %04x\n", } - if (errors != 0) - { - printf (" %d error%s for `%s' locale\n\n\n", errors, - errors == 1 ? "" : "s", setlocale (LC_ALL, NULL)); - return 1; - } - - printf (" No errors for `%s' locale\n\n\n", setlocale (LC_ALL, NULL)); + printf ("Completed testing for `%s' locale\n\n\n", setlocale (LC_ALL, NULL)); return 0; } diff --git a/malloc/Makefile b/malloc/Makefile index cc14cf6..ef7d4fa 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -28,6 +28,8 @@ tests := \ mallocbug \ tst-aligned-alloc \ tst-aligned-alloc-random \ + tst-aligned-alloc-random-thread \ + tst-aligned-alloc-random-thread-cross \ tst-alloc_buffer \ tst-calloc \ tst-free-errno \ @@ -151,6 +153,8 @@ ifeq ($(have-GLIBC_2.23)$(build-shared),yesyes) # the tests expect specific internal behavior that is changed due to linking to # libmcheck.a. tests-exclude-mcheck = \ + tst-aligned-alloc-random-thread \ + tst-aligned-alloc-random-thread-cross \ tst-compathooks-off \ tst-compathooks-on \ tst-malloc-backtrace \ @@ -417,7 +421,11 @@ $(objpfx)tst-mallocstate: $(objpfx)libc_malloc_debug.so $(objpfx)tst-mallocstate-malloc-check: $(objpfx)libc_malloc_debug.so $(objpfx)tst-aligned-alloc-random.out: $(objpfx)tst-aligned_alloc-lib.so +$(objpfx)tst-aligned-alloc-random-thread.out: $(objpfx)tst-aligned_alloc-lib.so +$(objpfx)tst-aligned-alloc-random-thread-cross.out: $(objpfx)tst-aligned_alloc-lib.so $(objpfx)tst-malloc-random.out: $(objpfx)tst-aligned_alloc-lib.so tst-aligned-alloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so +tst-aligned-alloc-random-thread-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so +tst-aligned-alloc-random-thread-cross-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so tst-malloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so diff --git a/malloc/tst-aligned-alloc-random-thread-cross.c b/malloc/tst-aligned-alloc-random-thread-cross.c new file mode 100644 index 0000000..360ecc5 --- /dev/null +++ b/malloc/tst-aligned-alloc-random-thread-cross.c @@ -0,0 +1,19 @@ +/* multi-threaded memory allocation and cross-thread deallocation test. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; see the file COPYING.LIB. If + not, see <https://www.gnu.org/licenses/>. */ +#define CROSS_THREAD_DEALLOC +#include "tst-aligned-alloc-random-thread.c" diff --git a/malloc/tst-aligned-alloc-random-thread.c b/malloc/tst-aligned-alloc-random-thread.c new file mode 100644 index 0000000..e95f792 --- /dev/null +++ b/malloc/tst-aligned-alloc-random-thread.c @@ -0,0 +1,145 @@ +/* multi-threaded memory allocation/deallocation test. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; see the file COPYING.LIB. If + not, see <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <support/check.h> +#include <support/support.h> +#include <support/xthread.h> +#include <support/test-driver.h> +#include <sys/sysinfo.h> +#include <unistd.h> + +#ifndef ITERATIONS +# define ITERATIONS 16 +#endif + +#ifndef NUM_THREADS +# define NUM_THREADS 8 +#endif + +#ifndef NUM_ALLOCATIONS +# define NUM_ALLOCATIONS 2048 +#endif + +static pthread_barrier_t barrier; + +__thread unsigned int seed; + +typedef struct +{ + int id; + pthread_t thread; +} thread; + +thread threads[NUM_THREADS]; + +void *allocations[NUM_THREADS][NUM_ALLOCATIONS]; + +void +run_thread_dealloc (int id) +{ + for (int i = 0; i < NUM_ALLOCATIONS; i++) + { + free (allocations[id][i]); + allocations[id][i] = NULL; + } +} + +void +run_thread_alloc (int id) +{ + size_t msb, size; + for (int i = 0; i < NUM_ALLOCATIONS; i++) + { + msb = 1 << rand_r (&seed) % 16; + size = msb + rand_r (&seed) % msb; + allocations[id][i] = malloc (size); + TEST_VERIFY_EXIT (allocations[id][i] != NULL); + } +} + +void * +run_allocations (void *arg) +{ + int id = *((int *) arg); + seed = time (NULL) + id; + + /* Stage 1: First half o the threads allocating memory and the second + * half waiting for them to finish + */ + if (id < NUM_THREADS / 2) + run_thread_alloc (id); + + xpthread_barrier_wait (&barrier); + + /* Stage 2: Half of the threads allocationg memory and the other + * half deallocating: + * - In the non cross-thread dealloc scenario the first half will be + * deallocating the memory allocated by themselves in stage 1 and the + * second half will be allocating memory. + * - In the cross-thread dealloc scenario the first half will continue + * to allocate memory and the second half will deallocate the memory + * allocated by the first half in stage 1. + */ + if (id < NUM_THREADS / 2) +#ifndef CROSS_THREAD_DEALLOC + run_thread_dealloc (id); +#else + run_thread_alloc (id + NUM_THREADS / 2); +#endif + else +#ifndef CROSS_THREAD_DEALLOC + run_thread_alloc (id); +#else + run_thread_dealloc (id - NUM_THREADS / 2); +#endif + + xpthread_barrier_wait (&barrier); + + // Stage 3: Second half of the threads deallocating and the first half + // waiting for them to finish. + if (id >= NUM_THREADS / 2) + run_thread_dealloc (id); + + return NULL; +} + +static int +do_test (void) +{ + xpthread_barrier_init (&barrier, NULL, NUM_THREADS); + + for (int i = 0; i < ITERATIONS; i++) + { + for (int t = 0; t < NUM_THREADS; t++) + { + threads[t].id = t; + threads[t].thread + = xpthread_create (NULL, run_allocations, &threads[t].id); + } + + for (int t = 0; t < NUM_THREADS; t++) + xpthread_join (threads[t].thread); + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/malloc/tst-aligned_alloc-lib.c b/malloc/tst-aligned_alloc-lib.c index 0205df5..9ef1f83 100644 --- a/malloc/tst-aligned_alloc-lib.c +++ b/malloc/tst-aligned_alloc-lib.c @@ -17,37 +17,38 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, see <https://www.gnu.org/licenses/>. */ -#include <array_length.h> #include <libc-symbols.h> #include <stdlib.h> +#include <time.h> extern void *__libc_malloc (size_t size); extern void *__libc_calloc (size_t n, size_t size); +__thread unsigned int seed = 0; + int aligned_alloc_count = 0; int libc_malloc_count = 0; int libc_calloc_count = 0; -/* Get a random alignment value. Biased towards the smaller values. Must be - a power of 2. */ -static size_t get_random_alignment (void) -{ - size_t aligns[] = { - 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 - }; - - return aligns[random () % array_length (aligns)]; -} - -static void *get_random_alloc (size_t size) +static void * +get_random_alloc (size_t size) { void *retval; size_t align; + struct timespec tp; + + if (seed == 0) + { + clock_gettime (CLOCK_REALTIME, &tp); + seed = tp.tv_nsec; + } - switch (random() % 3) - { + switch (rand_r (&seed) % 3) + { case 1: - align = get_random_alignment (); + /* Get a random alignment value. Biased towards the smaller + * values up to 16384. Must be a power of 2. */ + align = 1 << rand_r (&seed) % 15; retval = aligned_alloc (align, size); aligned_alloc_count++; break; @@ -59,13 +60,13 @@ static void *get_random_alloc (size_t size) retval = __libc_malloc (size); libc_malloc_count++; break; - } + } return retval; } - -void * __random_malloc (size_t size) +void * +__random_malloc (size_t size) { return get_random_alloc (size); } diff --git a/manual/llio.texi b/manual/llio.texi index fae49d1..a65230d 100644 --- a/manual/llio.texi +++ b/manual/llio.texi @@ -1781,7 +1781,7 @@ There is no existing mapping in at least part of the given region. @end deftypefun -@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag}) +@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag}, ... /* void *@var{new_address} */) @standards{GNU, sys/mman.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @@ -1790,12 +1790,40 @@ area. @var{address} and @var{length} must cover a region entirely mapped in the same @code{mmap} statement. A new mapping with the same characteristics will be returned with the length @var{new_length}. -One option is possible, @code{MREMAP_MAYMOVE}. If it is given in -@var{flags}, the system may remove the existing mapping and create a new -one of the desired length in another location. +Possible flags are -The address of the resulting mapping is returned, or @math{-1}. Possible -error codes include: +@table @code + +@item MREMAP_MAYMOVE +If it is given in @var{flags}, the system may remove the existing mapping +and create a new one of the desired length in another location. + +@item MREMAP_FIXED +If it is given in @var{flags}, @code{mremap} accepts a fifth argument, +@code{void *new_address}, which specifies a page-aligned address to +which the mapping must be moved. Any previous mapping at the address +range specified by @var{new_address} and @var{new_size} is unmapped. + +@code{MREMAP_FIXED} must be used together with @code{MREMAP_MAYMOVE}. + +@item MREMAP_DONTUNMAP +If it is given in @var{flags}, @code{mremap} accepts a fifth argument, +@code{void *new_address}, which specifies a page-aligned address. Any +previous mapping at the address range specified by @var{new_address} and +@var{new_size} is unmapped. If @var{new_address} is @code{NULL}, the +kernel chooses the page-aligned address at which to create the mapping. +Otherwise, the kernel takes it as a hint about where to place the mapping. +The mapping at the address range specified by @var{old_address} and +@var{old_size} isn't unmapped. + +@code{MREMAP_DONTUNMAP} must be used together with @code{MREMAP_MAYMOVE}. +@var{old_size} must be the same as @var{new_size}. This flag bit is +Linux-specific. + +@end table + +The address of the resulting mapping is returned, or @code{MAP_FAILED}. +Possible error codes include: @table @code @@ -1804,7 +1832,7 @@ There is no existing mapping in at least part of the original region, or the region covers two or more distinct mappings. @item EINVAL -The address given is misaligned or inappropriate. +Any arguments are inappropriate, including unknown @var{flags} values. @item EAGAIN The region has pages locked, and if extended it would exceed the diff --git a/manual/resource.texi b/manual/resource.texi index 37462ab..743cc94 100644 --- a/manual/resource.texi +++ b/manual/resource.texi @@ -192,8 +192,8 @@ If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a @standards{BSD, sys/resource.h} @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} @c Direct syscall on most systems; lock-taking critical section on HURD. -Store the current and maximum limits for the resource @var{resource} -in @code{*@var{rlp}}. +Change the current and maximum limits of the process for the resource +@var{resource} to the values provided in @code{*@var{rlp}}. The return value is @code{0} on success and @code{-1} on failure. The following @code{errno} error condition is possible: diff --git a/manual/stdio.texi b/manual/stdio.texi index 002fce7..393ed9c 100644 --- a/manual/stdio.texi +++ b/manual/stdio.texi @@ -903,21 +903,17 @@ This function is a GNU extension. @deftypefun int putc (int @var{c}, FILE *@var{stream}) @standards{ISO, stdio.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} -This is just like @code{fputc}, except that most systems implement it as -a macro, making it faster. One consequence is that it may evaluate the -@var{stream} argument more than once, which is an exception to the -general rule for macros. @code{putc} is usually the best function to -use for writing a single character. +This is just like @code{fputc}, except that it may be implemented as +a macro and may evaluate the @var{stream} argument more than once. +Therefore, @var{stream} should never be an expression with side-effects. @end deftypefun @deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream}) @standards{ISO, wchar.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} -This is just like @code{fputwc}, except that it can be implement as -a macro, making it faster. One consequence is that it may evaluate the -@var{stream} argument more than once, which is an exception to the -general rule for macros. @code{putwc} is usually the best function to -use for writing a single wide character. +This is just like @code{fputwc}, except that it may be implemented as +a macro and may evaluate the @var{stream} argument more than once. +Therefore, @var{stream} should never be an expression with side-effects. @end deftypefun @deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream}) @@ -1110,20 +1106,17 @@ This function is a GNU extension. @deftypefun int getc (FILE *@var{stream}) @standards{ISO, stdio.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} -This is just like @code{fgetc}, except that it is permissible (and -typical) for it to be implemented as a macro that evaluates the -@var{stream} argument more than once. @code{getc} is often highly -optimized, so it is usually the best function to use to read a single -character. +This is just like @code{fgetc}, except that it may be implemented as +a macro and may evaluate the @var{stream} argument more than once. +Therefore, @var{stream} should never be an expression with side-effects. @end deftypefun @deftypefun wint_t getwc (FILE *@var{stream}) @standards{ISO, wchar.h} @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} -This is just like @code{fgetwc}, except that it is permissible for it to -be implemented as a macro that evaluates the @var{stream} argument more -than once. @code{getwc} can be highly optimized, so it is usually the -best function to use to read a single wide character. +This is just like @code{fgetwc}, except that it may be implemented as +a macro and may evaluate the @var{stream} argument more than once. +Therefore, @var{stream} should never be an expression with side-effects. @end deftypefun @deftypefun int getc_unlocked (FILE *@var{stream}) @@ -1474,11 +1467,9 @@ program; usually @code{ungetc} is used only to unread a character that was just read from the same stream. @Theglibc{} supports this even on files opened in binary mode, but other systems might not. -@Theglibc{} only supports one character of pushback---in other -words, it does not work to call @code{ungetc} twice without doing input -in between. Other systems might let you push back multiple characters; -then reading from the stream retrieves the characters in the reverse -order that they were pushed. +@Theglibc{} supports pushing back multiple characters; subsequently +reading from the stream retrieves the characters in the reverse order +that they were pushed. Pushing back characters doesn't alter the file; only the internal buffering for the stream is affected. If a file positioning function diff --git a/math/Makefile b/math/Makefile index 79ef4eb..c98ee4e 100644 --- a/math/Makefile +++ b/math/Makefile @@ -261,6 +261,9 @@ tests-static = test-fpucw-static test-fpucw-ieee-static \ # The tested symbols matherr, _LIB_VERSION have been removed in glibc 2.27. ifeq ($(have-GLIBC_2.26)$(build-shared),yesyes) tests += test-matherr test-matherr-2 +tests-2.0 += \ + test-matherr-2 \ + # tests-2.0 endif # These tests use internal (unexported) GMP functions and are linked @@ -462,6 +465,7 @@ CFLAGS-test-flt-eval-method.c += -fexcess-precision=standard CFLAGS-test-fe-snans-always-signal.c += $(config-cflags-signaling-nans) CFLAGS-test-nan-const.c += -fno-builtin +CFLAGS-test-nan-payload.c += -fno-builtin include ../Rules diff --git a/math/test-nan-payload.c b/math/test-nan-payload.c index 4a81dc3..413791e 100644 --- a/math/test-nan-payload.c +++ b/math/test-nan-payload.c @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ +#define _LIBC_TEST 1 +#define __STDC_WANT_IEC_60559_TYPES_EXT__ +#include <errno.h> #include <float.h> #include <math.h> #include <stdio.h> @@ -31,7 +34,7 @@ #define CHECK_IS_NAN(TYPE, A) \ do \ { \ - if (isnan (A)) \ + if (isnan (A) && !issignaling (A)) \ puts ("PASS: " #TYPE " " #A); \ else \ { \ @@ -41,6 +44,19 @@ } \ while (0) +#define CHECK_PAYLOAD(TYPE, FUNC, A, P) \ + do \ + { \ + if (FUNC (&(A)) == (P)) \ + puts ("PASS: " #TYPE " payload " #A); \ + else \ + { \ + puts ("FAIL: " #TYPE " payload " #A); \ + result = 1; \ + } \ + } \ + while (0) + #define CHECK_SAME_NAN(TYPE, A, B) \ do \ { \ @@ -67,33 +83,97 @@ } \ while (0) +#define CLEAR_ERRNO \ + do \ + { \ + errno = 12345; \ + } \ + while (0) + +#define CHECK_ERRNO(TYPE, A) \ + do \ + { \ + if (errno == 12345) \ + puts ("PASS: " #TYPE " " #A " errno"); \ + else \ + { \ + puts ("FAIL: " #TYPE " " #A " errno"); \ + result = 1; \ + } \ + } \ + while (0) + /* Cannot test payloads by memcmp for formats where NaNs have padding bits. */ #define CAN_TEST_EQ(MANT_DIG) ((MANT_DIG) != 64 && (MANT_DIG) != 106) -#define RUN_TESTS(TYPE, SFUNC, FUNC, MANT_DIG) \ +#define RUN_TESTS(TYPE, SFUNC, FUNC, PLFUNC, MANT_DIG) \ do \ { \ + CLEAR_ERRNO; \ TYPE n123 = WRAP_NAN (FUNC, "123"); \ + CHECK_ERRNO (TYPE, n123); \ CHECK_IS_NAN (TYPE, n123); \ + CLEAR_ERRNO; \ TYPE s123 = WRAP_STRTO (SFUNC, "NAN(123)"); \ + CHECK_ERRNO (TYPE, s123); \ CHECK_IS_NAN (TYPE, s123); \ + CLEAR_ERRNO; \ TYPE n456 = WRAP_NAN (FUNC, "456"); \ + CHECK_ERRNO (TYPE, n456); \ CHECK_IS_NAN (TYPE, n456); \ + CLEAR_ERRNO; \ TYPE s456 = WRAP_STRTO (SFUNC, "NAN(456)"); \ + CHECK_ERRNO (TYPE, s456); \ CHECK_IS_NAN (TYPE, s456); \ + CLEAR_ERRNO; \ + TYPE nh123 = WRAP_NAN (FUNC, "0x123"); \ + CHECK_ERRNO (TYPE, nh123); \ + CHECK_IS_NAN (TYPE, nh123); \ + CLEAR_ERRNO; \ + TYPE sh123 = WRAP_STRTO (SFUNC, "NAN(0x123)"); \ + CHECK_ERRNO (TYPE, sh123); \ + CHECK_IS_NAN (TYPE, sh123); \ + CLEAR_ERRNO; \ TYPE n123x = WRAP_NAN (FUNC, "123)"); \ + CHECK_ERRNO (TYPE, n123x); \ CHECK_IS_NAN (TYPE, n123x); \ + CLEAR_ERRNO; \ TYPE nemp = WRAP_NAN (FUNC, ""); \ + CHECK_ERRNO (TYPE, nemp); \ CHECK_IS_NAN (TYPE, nemp); \ + CLEAR_ERRNO; \ TYPE semp = WRAP_STRTO (SFUNC, "NAN()"); \ + CHECK_ERRNO (TYPE, semp); \ CHECK_IS_NAN (TYPE, semp); \ + CLEAR_ERRNO; \ TYPE sx = WRAP_STRTO (SFUNC, "NAN"); \ + CHECK_ERRNO (TYPE, sx); \ CHECK_IS_NAN (TYPE, sx); \ + CLEAR_ERRNO; \ + TYPE novf = WRAP_NAN (FUNC, "9999999999" \ + "99999999999999999999" \ + "9999999999"); \ + CHECK_ERRNO (TYPE, novf); \ + CHECK_IS_NAN (TYPE, novf); \ + CLEAR_ERRNO; \ + TYPE sovf = WRAP_STRTO (SFUNC, "NAN(9999999999" \ + "99999999999999999999" \ + "9999999999)"); \ + CHECK_ERRNO (TYPE, sovf); \ + CHECK_IS_NAN (TYPE, sovf); \ if (CAN_TEST_EQ (MANT_DIG)) \ CHECK_SAME_NAN (TYPE, n123, s123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, n123, 123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, s123, 123); \ if (CAN_TEST_EQ (MANT_DIG)) \ CHECK_SAME_NAN (TYPE, n456, s456); \ + CHECK_PAYLOAD (TYPE, PLFUNC, n456, 456); \ + CHECK_PAYLOAD (TYPE, PLFUNC, s456, 456); \ + if (CAN_TEST_EQ (MANT_DIG)) \ + CHECK_SAME_NAN (TYPE, nh123, sh123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, nh123, 0x123); \ + CHECK_PAYLOAD (TYPE, PLFUNC, sh123, 0x123); \ if (CAN_TEST_EQ (MANT_DIG)) \ CHECK_SAME_NAN (TYPE, nemp, semp); \ if (CAN_TEST_EQ (MANT_DIG)) \ @@ -110,9 +190,31 @@ static int do_test (void) { int result = 0; - RUN_TESTS (float, strtof, nanf, FLT_MANT_DIG); - RUN_TESTS (double, strtod, nan, DBL_MANT_DIG); - RUN_TESTS (long double, strtold, nanl, LDBL_MANT_DIG); + RUN_TESTS (float, strtof, nanf, getpayloadf, FLT_MANT_DIG); + RUN_TESTS (double, strtod, nan, getpayload, DBL_MANT_DIG); + RUN_TESTS (long double, strtold, nanl, getpayloadl, LDBL_MANT_DIG); +#if __HAVE_FLOAT16 + RUN_TESTS (_Float16, strtof16, nanf16, getpayloadf16, FLT16_MANT_DIG); +#endif +#if __HAVE_FLOAT32 + RUN_TESTS (_Float32, strtof32, nanf32, getpayloadf32, FLT32_MANT_DIG); +#endif +#if __HAVE_FLOAT64 + RUN_TESTS (_Float64, strtof64, nanf64, getpayloadf64, FLT64_MANT_DIG); +#endif +#if __HAVE_FLOAT128 + RUN_TESTS (_Float128, strtof128, nanf128, getpayloadf128, FLT128_MANT_DIG); +#endif +#if __HAVE_FLOAT32X + RUN_TESTS (_Float32x, strtof32x, nanf32x, getpayloadf32x, FLT32X_MANT_DIG); +#endif +#if __HAVE_FLOAT64X + RUN_TESTS (_Float64x, strtof64x, nanf64x, getpayloadf64x, FLT64X_MANT_DIG); +#endif +#if __HAVE_FLOAT128X + RUN_TESTS (_Float128x, strtof128x, nanf128x, getpayloadf128x, + FLT128X_MANT_DIG); +#endif return result; } diff --git a/math/test-tgmath2.c b/math/test-tgmath2.c index 37afa8a..4aeb877 100644 --- a/math/test-tgmath2.c +++ b/math/test-tgmath2.c @@ -24,6 +24,8 @@ #include <string.h> #include <tgmath.h> +#include <support/check.h> + //#define DEBUG typedef complex float cfloat; @@ -87,13 +89,6 @@ enum int count; int counts[Tlast][C_last]; -#define FAIL(str) \ - do \ - { \ - printf ("%s failure on line %d\n", (str), __LINE__); \ - result = 1; \ - } \ - while (0) #define TEST_TYPE_ONLY(expr, rettype) \ do \ { \ @@ -133,8 +128,6 @@ int counts[Tlast][C_last]; int test_cos (const int Vint4, const long long int Vllong4) { - int result = 0; - TEST (cos (vfloat1), float, cos); TEST (cos (vdouble1), double, cos); TEST (cos (vldouble1), ldouble, cos); @@ -152,7 +145,7 @@ test_cos (const int Vint4, const long long int Vllong4) TEST (cos (Vcdouble1), cdouble, cos); TEST (cos (Vcldouble1), cldouble, cos); - return result; + return 0; } int diff --git a/misc/Makefile b/misc/Makefile index c273ec6..235fc7e 100644 --- a/misc/Makefile +++ b/misc/Makefile @@ -251,6 +251,8 @@ tests := \ tst-mntent-blank-passno \ tst-mntent-escape \ tst-mntent2 \ + tst-mremap1 \ + tst-mremap2 \ tst-preadvwritev \ tst-preadvwritev2 \ tst-preadvwritev64 \ diff --git a/misc/tst-mremap1.c b/misc/tst-mremap1.c new file mode 100644 index 0000000..0469991 --- /dev/null +++ b/misc/tst-mremap1.c @@ -0,0 +1,46 @@ +/* Test mremap with MREMAP_MAYMOVE. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <sys/mman.h> +#include <support/xstdlib.h> +#include <support/xunistd.h> +#include <support/check.h> +#include <support/test-driver.h> + +static int +do_test (void) +{ + size_t old_size = getpagesize (); + char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1); + old_addr[0] = 1; + old_addr[old_size - 1] = 2; + + /* Test MREMAP_MAYMOVE. */ + size_t new_size = old_size + old_size; + char *new_addr = mremap (old_addr, old_size, new_size, MREMAP_MAYMOVE); + TEST_VERIFY_EXIT (new_addr != MAP_FAILED); + new_addr[0] = 1; + new_addr[new_size - 1] = 2; + xmunmap (new_addr, new_size); + + return 0; +} + +#include <support/test-driver.c> diff --git a/misc/tst-mremap2.c b/misc/tst-mremap2.c new file mode 100644 index 0000000..45be7f0 --- /dev/null +++ b/misc/tst-mremap2.c @@ -0,0 +1,54 @@ +/* Test mremap with MREMAP_FIXED. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <sys/mman.h> +#include <support/xstdlib.h> +#include <support/xunistd.h> +#include <support/test-driver.h> +#include <mremap-failure.h> + +static int +do_test (void) +{ + size_t old_size = getpagesize (); + size_t new_size = old_size + old_size; + char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1); + old_addr[0] = 1; + old_addr[old_size - 1] = 2; + + char *fixed_addr = xmmap (NULL, new_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1); + fixed_addr[0] = 1; + fixed_addr[new_size - 1] = 2; + + /* Test MREMAP_FIXED. */ + char *new_addr = mremap (old_addr, old_size, new_size, + MREMAP_FIXED | MREMAP_MAYMOVE, + fixed_addr); + if (new_addr == MAP_FAILED) + return mremap_failure_exit (errno); + new_addr[0] = 1; + new_addr[new_size - 1] = 2; + xmunmap (new_addr, new_size); + + return 0; +} + +#include <support/test-driver.c> diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index f35a836..2cb562f 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -139,7 +139,7 @@ get_cached_stack (size_t *sizep, void **memp) memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t)); /* Re-initialize the TLS. */ - _dl_allocate_tls_init (TLS_TPADJ (result), true); + _dl_allocate_tls_init (TLS_TPADJ (result), false); return result; } diff --git a/posix/tst-truncate-common.c b/posix/tst-truncate-common.c index b774fa4..b8c561f 100644 --- a/posix/tst-truncate-common.c +++ b/posix/tst-truncate-common.c @@ -21,6 +21,8 @@ #include <sys/stat.h> #include <unistd.h> +#include <support/check.h> + static void do_prepare (void); #define PREPARE(argc, argv) do_prepare () static int do_test (void); @@ -42,9 +44,6 @@ do_prepare (void) } } -#define FAIL(str) \ - do { printf ("error: %s (line %d)\n", str, __LINE__); return 1; } while (0) - static int do_test_with_offset (off_t offset) { @@ -54,35 +53,35 @@ do_test_with_offset (off_t offset) memset (buf, 0xcf, sizeof (buf)); if (pwrite (temp_fd, buf, sizeof (buf), offset) != sizeof (buf)) - FAIL ("write failed"); + FAIL_RET ("write failed"); if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + sizeof (buf))) - FAIL ("initial size wrong"); + FAIL_RET ("initial size wrong"); if (ftruncate (temp_fd, offset + 800) < 0) - FAIL ("size reduction with ftruncate failed"); + FAIL_RET ("size reduction with ftruncate failed"); if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800)) - FAIL ("size after reduction with ftruncate is incorrect"); + FAIL_RET ("size after reduction with ftruncate is incorrect"); /* The following test covers more than POSIX. POSIX does not require that ftruncate() can increase the file size. But we are testing Unix systems. */ if (ftruncate (temp_fd, offset + 1200) < 0) - FAIL ("size increate with ftruncate failed"); + FAIL_RET ("size increate with ftruncate failed"); if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200)) - FAIL ("size after increase is incorrect"); + FAIL_RET ("size after increase is incorrect"); if (truncate (temp_filename, offset + 800) < 0) - FAIL ("size reduction with truncate failed"); + FAIL_RET ("size reduction with truncate failed"); if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 800)) - FAIL ("size after reduction with truncate incorrect"); + FAIL_RET ("size after reduction with truncate incorrect"); /* The following test covers more than POSIX. POSIX does not require that truncate() can increase the file size. But we are testing Unix systems. */ if (truncate (temp_filename, (offset + 1200)) < 0) - FAIL ("size increase with truncate failed"); + FAIL_RET ("size increase with truncate failed"); if (fstat (temp_fd, &st) < 0 || st.st_size != (offset + 1200)) - FAIL ("size increase with truncate is incorrect"); + FAIL_RET ("size increase with truncate is incorrect"); return 0; } diff --git a/resolv/res_send.c b/resolv/res_send.c index 3a4a206..9c77613 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -947,9 +947,11 @@ send_dg(res_state statp, seconds /= statp->nscount; if (seconds <= 0) seconds = 1; - bool single_request_reopen = (statp->options & RES_SNGLKUPREOP) != 0; - bool single_request = (((statp->options & RES_SNGLKUP) != 0) - | single_request_reopen); + bool single_request_reopen = ((statp->options & RES_SNGLKUPREOP) + || (statp->_flags & RES_F_SNGLKUPREOP)); + bool single_request = ((statp->options & RES_SNGLKUP) + || (statp->_flags & RES_F_SNGLKUP) + || single_request_reopen); int save_gotsomewhere = *gotsomewhere; int retval; @@ -1006,14 +1008,14 @@ send_dg(res_state statp, have received the first answer. */ if (!single_request) { - statp->options |= RES_SNGLKUP; + statp->_flags |= RES_F_SNGLKUP; single_request = true; *gotsomewhere = save_gotsomewhere; goto retry; } else if (!single_request_reopen) { - statp->options |= RES_SNGLKUPREOP; + statp->_flags |= RES_F_SNGLKUPREOP; single_request_reopen = true; *gotsomewhere = save_gotsomewhere; __res_iclose (statp, false); diff --git a/resolv/resolv-internal.h b/resolv/resolv-internal.h index 24b164f..944af3e 100644 --- a/resolv/resolv-internal.h +++ b/resolv/resolv-internal.h @@ -26,6 +26,8 @@ #define RES_F_VC 0x00000001 /* Socket is TCP. */ #define RES_F_CONN 0x00000002 /* Socket is connected. */ #define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors. */ +#define RES_F_SNGLKUP 0x00200000 /* Private version of RES_SNGLKUP. */ +#define RES_F_SNGLKUPREOP 0x00400000 /* Private version of RES_SNGLKUPREOP. */ /* The structure HEADER is normally aligned on a word boundary. In some code, we need to access this structure when it may be aligned diff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c index be354ae..9b06b0c 100644 --- a/resolv/tst-resolv-short-response.c +++ b/resolv/tst-resolv-short-response.c @@ -33,8 +33,10 @@ response (const struct resolv_response_context *ctx, { case 0: /* First server times out. */ - struct resolv_response_flags flags = {.rcode = rcode}; - resolv_response_init (b, flags); + { + struct resolv_response_flags flags = {.rcode = rcode}; + resolv_response_init (b, flags); + } break; case 1: /* Second server sends reply. */ diff --git a/scripts/check-local-headers.sh b/scripts/check-local-headers.sh index 5d3e61f..ad238403 100755 --- a/scripts/check-local-headers.sh +++ b/scripts/check-local-headers.sh @@ -33,7 +33,7 @@ exec ${AWK} -v includedir="$includedir" ' BEGIN { status = 0 exclude = "^" includedir \ - "/(.*-.*-.*/|.*-.*/|)(asm[-/]|arch|linux/|selinux/|mach/|mach_debug/|device/|hurd/(((hurd|ioctl)_types|paths)\\.h|ioctls\\.defs|ihash\\.h|version\\.h)|gd|nss3/|nspr4?/|c\\+\\+/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h)" + "/(.*-.*-.*/|.*-.*/|)(asm[-/]|arch|linux/|selinux/|mach/|mach_debug/|device/|hurd/(((hurd|ioctl)_types|paths)\\.h|ioctls\\.defs|ihash\\.h|version\\.h)|gd|nss3/|nspr4?/|c\\+\\+/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h|audit(_logging|-records)\\.h)" } /^[^ ]/ && $1 ~ /.*:/ { obj = $1 } { diff --git a/socket/bits/socket2.h b/socket/bits/socket2.h index a88cb64..71f8d9c 100644 --- a/socket/bits/socket2.h +++ b/socket/bits/socket2.h @@ -33,12 +33,12 @@ extern ssize_t __REDIRECT (__recv_chk_warn, __fortify_function ssize_t recv (int __fd, void *__buf, size_t __n, int __flags) { - size_t sz = __glibc_objsize0 (__buf); - if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz)) + size_t __sz = __glibc_objsize0 (__buf); + if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz)) return __recv_alias (__fd, __buf, __n, __flags); - if (__glibc_unsafe_len (__n, sizeof (char), sz)) - return __recv_chk_warn (__fd, __buf, __n, sz, __flags); - return __recv_chk (__fd, __buf, __n, sz, __flags); + if (__glibc_unsafe_len (__n, sizeof (char), __sz)) + return __recv_chk_warn (__fd, __buf, __n, __sz, __flags); + return __recv_chk (__fd, __buf, __n, __sz, __flags); } extern ssize_t __recvfrom_chk (int __fd, void *__restrict __buf, size_t __n, @@ -61,11 +61,11 @@ __fortify_function ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len) { - size_t sz = __glibc_objsize0 (__buf); - if (__glibc_safe_or_unknown_len (__n, sizeof (char), sz)) + size_t __sz = __glibc_objsize0 (__buf); + if (__glibc_safe_or_unknown_len (__n, sizeof (char), __sz)) return __recvfrom_alias (__fd, __buf, __n, __flags, __addr, __addr_len); - if (__glibc_unsafe_len (__n, sizeof (char), sz)) - return __recvfrom_chk_warn (__fd, __buf, __n, sz, __flags, __addr, + if (__glibc_unsafe_len (__n, sizeof (char), __sz)) + return __recvfrom_chk_warn (__fd, __buf, __n, __sz, __flags, __addr, __addr_len); - return __recvfrom_chk (__fd, __buf, __n, sz, __flags, __addr, __addr_len); + return __recvfrom_chk (__fd, __buf, __n, __sz, __flags, __addr, __addr_len); } diff --git a/stdio-common/Makefile b/stdio-common/Makefile index e312565..c822434 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -206,6 +206,7 @@ tests := \ tst-cookie \ tst-dprintf-length \ tst-fdopen \ + tst-fdopen2 \ tst-ferror \ tst-fgets \ tst-fileno \ @@ -215,6 +216,7 @@ tests := \ tst-fmemopen4 \ tst-fphex \ tst-fphex-wide \ + tst-fread \ tst-fseek \ tst-fwrite \ tst-gets \ @@ -243,6 +245,7 @@ tests := \ tst-scanf-binary-c2x \ tst-scanf-binary-gnu11 \ tst-scanf-binary-gnu89 \ + tst-scanf-bz27650 \ tst-scanf-intn \ tst-scanf-round \ tst-scanf-to_inpunct \ @@ -256,6 +259,7 @@ tests := \ tst-swscanf \ tst-tmpnam \ tst-ungetc \ + tst-ungetc-leak \ tst-unlockedio \ tst-vfprintf-mbs-prec \ tst-vfprintf-user-type \ @@ -300,6 +304,7 @@ tests-special += \ $(objpfx)tst-printfsz-islongdouble.out \ $(objpfx)tst-setvbuf1-cmp.out \ $(objpfx)tst-unbputc.out \ + $(objpfx)tst-ungetc-leak-mem.out \ $(objpfx)tst-vfprintf-width-prec-mem.out \ # tests-special @@ -313,6 +318,9 @@ generated += \ tst-printf-fp-free.mtrace \ tst-printf-fp-leak-mem.out \ tst-printf-fp-leak.mtrace \ + tst-scanf-bz27650.mtrace \ + tst-ungetc-leak-mem.out \ + tst-ungetc-leak.mtrace \ tst-vfprintf-width-prec-mem.out \ tst-vfprintf-width-prec.mtrace \ # generated @@ -402,6 +410,12 @@ tst-printf-fp-free-ENV = \ tst-printf-fp-leak-ENV = \ MALLOC_TRACE=$(objpfx)tst-printf-fp-leak.mtrace \ LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so +tst-scanf-bz27650-ENV = \ + MALLOC_TRACE=$(objpfx)tst-scanf-bz27650.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so +tst-ungetc-leak-ENV = \ + MALLOC_TRACE=$(objpfx)tst-ungetc-leak.mtrace \ + LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so $(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc $(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \ diff --git a/stdio-common/tst-fdopen2.c b/stdio-common/tst-fdopen2.c new file mode 100644 index 0000000..0c6625f --- /dev/null +++ b/stdio-common/tst-fdopen2.c @@ -0,0 +1,246 @@ +/* Test the fdopen function. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <errno.h> +#include <fcntl.h> +#include <support/check.h> +#include <support/support.h> +#include <support/xunistd.h> +#include <support/temp_file.h> + +char *tmp_dir; +char *path_to_file; + +void +prepare_tmp_dir (void) +{ + tmp_dir = support_create_temp_directory ("tst-fdopen2"); + path_to_file = xasprintf ("%s/tst-fdopen2.txt", tmp_dir); +} + +/* open temp file descriptor with mode. */ +int +open_tmp_fd (int mode) +{ + int fd = xopen (path_to_file, mode, 0644); + return fd; +} + + +/* close and remove temp file with close. */ +void +close_tmp_fd (int fd) +{ + xclose (fd); + xunlink (path_to_file); +} + +/* close and remove temp file with fclose. */ +void +close_tmp_fp (FILE *fp) +{ + fclose (fp); + xunlink (path_to_file); +} + +/* test "w" fdopen mode. */ +void +do_test_fdopen_w (void) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (O_WRONLY | O_CREAT | O_TRUNC); + + /* test mode mismatch. */ + fp = fdopen (fd, "r"); + if (fp != NULL || errno != EINVAL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, r) should fail with EINVAL: %m", fd); + } + + fp = fdopen (fd, "w"); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w): %m", fd); + } + + const void *buf = "AAAA"; + ret = fwrite (buf, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite (): %m"); + } + + unsigned char buf2[4]; + rewind (fp); + clearerr (fp); + /* fread should fail in "w" mode */ + ret = fread (buf2, 1, 4, fp); + if (ret != 0 || ferror (fp) == 0) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread should fail in \"w\" mode"); + } + + fclose (fp); +} + +/* test "r" fdopen mode. */ +void +do_test_fdopen_r (void) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (O_RDONLY); + + /* test mode mismatch. */ + fp = fdopen (fd, "w"); + if (fp != NULL || errno != EINVAL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w) should fail with EINVAL: %m", fd); + } + + fp = fdopen (fd, "r"); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w): %m", fd); + } + + const void *buf = "BBBB"; + /* fwrite should fail in "r" mode. */ + ret = fwrite (buf, 1, 4, fp); + if (ret != 0 || ferror (fp) == 0) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite should fail in \"r\" mode"); + } + + unsigned char buf2[4]; + ret = fread (buf2, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread (): %m"); + } + + fclose (fp); +} + +/* test "a" fdopen mode. */ +void +do_test_fdopen_a (void) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (O_WRONLY | O_CREAT | O_APPEND); + + /* test mode mismatch. */ + fp = fdopen (fd, "r+"); + if (fp != NULL || errno != EINVAL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, \"r+\") should fail with EINVAL: %m", fd); + } + + fp = fdopen (fd, "a"); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, w): %m", fd); + } + + const void *buf = "CCCC"; + ret = fwrite (buf, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite (): %m"); + } + + /* fread should fail in "a" mode. */ + unsigned char buf2[4]; + clearerr (fp); + ret = fread (buf2, 1, 4, fp); + if (ret != 0 || ferror (fp) == 0) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread should fail \"a\" mode"); + } + + fclose (fp); +} + +void +do_test_fdopen_mode (int mode, const char *fmode) +{ + int fd, ret; + FILE *fp; + fd = open_tmp_fd (mode); + + fp = fdopen (fd, fmode); + if (fp == NULL) + { + close_tmp_fd (fd); + FAIL_EXIT1 ("fdopen (%d, %s): %m", fd, fmode); + } + + const void *buf = "EEEE"; + ret = fwrite (buf, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fwrite () in mode:%s returns %d: %m", fmode, ret); + } + + rewind (fp); + unsigned char buf2[4]; + ret = fread (buf2, 1, 4, fp); + if (ret != 4) + { + close_tmp_fp (fp); + FAIL_EXIT1 ("fread () in mode:%s returns %d: %m", fmode, ret); + } + + fclose (fp); +} + +static int +do_test (void) +{ + + prepare_tmp_dir (); + + do_test_fdopen_w (); + do_test_fdopen_r (); + do_test_fdopen_a (); + + /* test r+ w+ a+ fdopen modes. */ + do_test_fdopen_mode (O_RDWR, "r+"); + do_test_fdopen_mode (O_RDWR | O_CREAT | O_TRUNC, "w+"); + do_test_fdopen_mode (O_RDWR | O_CREAT | O_APPEND, "a+"); + xunlink (path_to_file); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-fread.c b/stdio-common/tst-fread.c new file mode 100644 index 0000000..4d9a789 --- /dev/null +++ b/stdio-common/tst-fread.c @@ -0,0 +1,134 @@ +/* Test fread. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <support/check.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/test-driver.h> +#include <support/xstdio.h> +#include <support/xunistd.h> + +int +do_test (void) +{ + char *temp_dir = support_create_temp_directory ("tst-fread"); + char *file1 = xasprintf ("%s/file1", temp_dir); + support_write_file_string (file1, "file1"); + add_temp_file (file1); + FILE *fp; + size_t ret; + char buf[1024]; + + verbose_printf ("test single-byte reads\n"); + fp = xfopen (file1, "r"); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, 2, fp); + TEST_COMPARE (ret, 2); + TEST_COMPARE (buf[0], 'f'); + TEST_COMPARE (buf[1], 'i'); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ftell (fp), 2); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, 3, fp); + TEST_COMPARE (ret, 3); + TEST_COMPARE (buf[0], 'l'); + TEST_COMPARE (buf[1], 'e'); + TEST_COMPARE (buf[2], '1'); + TEST_COMPARE (ftell (fp), 5); + TEST_COMPARE (feof (fp), 0); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, 1, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (!!feof (fp), 1); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 5); + xfclose (fp); + + verbose_printf ("test single-byte reads, EOF part way through\n"); + fp = xfopen (file1, "r"); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, sizeof buf, fp); + TEST_COMPARE (ret, 5); + TEST_COMPARE (buf[0], 'f'); + TEST_COMPARE (buf[1], 'i'); + TEST_COMPARE (buf[2], 'l'); + TEST_COMPARE (buf[3], 'e'); + TEST_COMPARE (buf[4], '1'); + TEST_COMPARE (!!feof (fp), 1); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 5); + xfclose (fp); + + verbose_printf ("test multi-byte reads\n"); + fp = xfopen (file1, "r"); + memset (buf, 0, sizeof buf); + ret = fread (buf, 2, 2, fp); + TEST_COMPARE (ret, 2); + TEST_COMPARE (buf[0], 'f'); + TEST_COMPARE (buf[1], 'i'); + TEST_COMPARE (buf[2], 'l'); + TEST_COMPARE (buf[3], 'e'); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ftell (fp), 4); + memset (buf, 0, sizeof buf); + ret = fread (buf, 3, 3, fp); + TEST_COMPARE (ret, 0); + /* The bytes written for a partial element read are unspecified. */ + TEST_COMPARE (!!feof (fp), 1); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 5); + xfclose (fp); + + verbose_printf ("test read error\n"); + fp = xfopen (file1, "r"); + xclose (fileno (fp)); + memset (buf, 0, sizeof buf); + ret = fread (buf, 1, sizeof buf, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (!!ferror (fp), 1); + fclose (fp); + + verbose_printf ("test zero size\n"); + fp = xfopen (file1, "r"); + ret = fread (buf, 0, SIZE_MAX, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 0); + xfclose (fp); + + verbose_printf ("test zero items\n"); + fp = xfopen (file1, "r"); + ret = fread (buf, SIZE_MAX, 0, fp); + TEST_COMPARE (ret, 0); + TEST_COMPARE (feof (fp), 0); + TEST_COMPARE (ferror (fp), 0); + TEST_COMPARE (ftell (fp), 0); + xfclose (fp); + + free (temp_dir); + free (file1); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-scanf-bz27650.c b/stdio-common/tst-scanf-bz27650.c new file mode 100644 index 0000000..3a742bc --- /dev/null +++ b/stdio-common/tst-scanf-bz27650.c @@ -0,0 +1,108 @@ +/* Test for BZ #27650, formatted input matching beyond INT_MAX. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <error.h> +#include <errno.h> +#include <limits.h> +#include <mcheck.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <sys/types.h> + +#include <support/check.h> +#include <support/test-driver.h> + +/* Produce a stream of more than INT_MAX characters via buffer BUF of + size SIZE according to bookkeeping in COOKIE and then return EOF. */ + +static ssize_t +io_read (void *cookie, char *buf, size_t size) +{ + unsigned int *written = cookie; + unsigned int w = *written; + + if (w > INT_MAX) + return 0; + + memset (buf, 'a', size); + *written = w + size; + return size; +} + +/* Consume a stream of more than INT_MAX characters from an artificial + input stream of which none is the new line character. The call to + fscanf is supposed to complete upon the EOF condition of input, + however in the presence of BZ #27650 it will terminate prematurely + with characters still outstanding in input. Diagnose the condition + and return status accordingly. */ + +int +do_test (void) +{ + static cookie_io_functions_t io_funcs = { .read = io_read }; + unsigned int written = 0; + FILE *in; + int v; + + mtrace (); + + in = fopencookie (&written, "r", io_funcs); + if (in == NULL) + { + FAIL ("fopencookie: %m"); + goto out; + } + + v = fscanf (in, "%*[^\n]"); + if (ferror (in)) + { + FAIL ("fscanf: input failure, at %u: %m", written); + goto out_close; + } + else if (v == EOF) + { + FAIL ("fscanf: unexpected end of file, at %u", written); + goto out_close; + } + + if (!feof (in)) + { + v = fgetc (in); + if (ferror (in)) + FAIL ("fgetc: input failure: %m"); + else if (v == EOF) + FAIL ("fgetc: unexpected end of file after missing end of file"); + else if (v == '\n') + FAIL ("unexpected new line character received"); + else + FAIL ("character received after end of file expected: \\x%02x", v); + } + +out_close: + if (fclose (in) != 0) + FAIL ("fclose: %m"); + +out: + return EXIT_SUCCESS; +} + +#define TIMEOUT (DEFAULT_TIMEOUT * 8) +#include <support/test-driver.c> diff --git a/stdio-common/tst-ungetc-leak.c b/stdio-common/tst-ungetc-leak.c new file mode 100644 index 0000000..6c5152b --- /dev/null +++ b/stdio-common/tst-ungetc-leak.c @@ -0,0 +1,32 @@ +/* Test for memory leak with ungetc when stream is unused. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <mcheck.h> +#include <support/check.h> +#include <support/support.h> + +static int +do_test (void) +{ + mtrace (); + TEST_COMPARE (ungetc('y', stdin), 'y'); + return 0; +} + +#include <support/test-driver.c> diff --git a/stdio-common/tst-ungetc.c b/stdio-common/tst-ungetc.c index 1344b2b..388b202 100644 --- a/stdio-common/tst-ungetc.c +++ b/stdio-common/tst-ungetc.c @@ -1,70 +1,74 @@ -/* Test for ungetc bugs. */ +/* Test for ungetc bugs. + Copyright (C) 1996-2024 Free Software Foundation, Inc. + Copyright The GNU Toolchain Authors. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> -#include <unistd.h> - -#undef assert -#define assert(x) \ - if (!(x)) \ - { \ - fputs ("test failed: " #x "\n", stderr); \ - retval = 1; \ - goto the_end; \ - } +#include <support/check.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/xstdio.h> +#include <support/xunistd.h> -int -main (int argc, char *argv[]) +static int +do_test (void) { - char name[] = "/tmp/tst-ungetc.XXXXXX"; + char *name = NULL; FILE *fp = NULL; - int retval = 0; int c; char buffer[64]; - int fd = mkstemp (name); + int fd = create_temp_file ("tst-ungetc.", &name); if (fd == -1) - { - printf ("mkstemp failed: %m\n"); - return 1; - } - close (fd); - fp = fopen (name, "w"); - assert (fp != NULL) - fputs ("bla", fp); - fclose (fp); - fp = NULL; + FAIL_EXIT1 ("cannot create temporary file: %m"); + xclose (fd); - fp = fopen (name, "r"); - assert (fp != NULL); - assert (ungetc ('z', fp) == 'z'); - assert (getc (fp) == 'z'); - assert (getc (fp) == 'b'); - assert (getc (fp) == 'l'); - assert (ungetc ('m', fp) == 'm'); - assert (getc (fp) == 'm'); - assert ((c = getc (fp)) == 'a'); - assert (getc (fp) == EOF); - assert (ungetc (c, fp) == c); - assert (feof (fp) == 0); - assert (getc (fp) == c); - assert (getc (fp) == EOF); - fclose (fp); - fp = NULL; + fp = xfopen (name, "w"); + fputs ("bla", fp); + xfclose (fp); - fp = fopen (name, "r"); - assert (fp != NULL); - assert (getc (fp) == 'b'); - assert (getc (fp) == 'l'); - assert (ungetc ('b', fp) == 'b'); - assert (fread (buffer, 1, 64, fp) == 2); - assert (buffer[0] == 'b'); - assert (buffer[1] == 'a'); + fp = xfopen (name, "r"); + TEST_VERIFY_EXIT (ungetc ('z', fp) == 'z'); + TEST_VERIFY_EXIT (getc (fp) == 'z'); + TEST_VERIFY_EXIT (getc (fp) == 'b'); + TEST_VERIFY_EXIT (getc (fp) == 'l'); + TEST_VERIFY_EXIT (ungetc ('m', fp) == 'm'); + TEST_VERIFY_EXIT (ungetc ('n', fp) == 'n'); + TEST_VERIFY_EXIT (getc (fp) == 'n'); + TEST_VERIFY_EXIT (getc (fp) == 'm'); + TEST_VERIFY_EXIT ((c = getc (fp)) == 'a'); + TEST_VERIFY_EXIT (getc (fp) == EOF); + TEST_VERIFY_EXIT (ungetc (c, fp) == c); + TEST_VERIFY_EXIT (feof (fp) == 0); + TEST_VERIFY_EXIT (getc (fp) == c); + TEST_VERIFY_EXIT (getc (fp) == EOF); + xfclose (fp); -the_end: - if (fp != NULL) - fclose (fp); - unlink (name); + fp = xfopen (name, "r"); + TEST_VERIFY_EXIT (getc (fp) == 'b'); + TEST_VERIFY_EXIT (getc (fp) == 'l'); + TEST_VERIFY_EXIT (ungetc ('b', fp) == 'b'); + TEST_VERIFY_EXIT (fread (buffer, 1, 64, fp) == 2); + TEST_VERIFY_EXIT (buffer[0] == 'b'); + TEST_VERIFY_EXIT (buffer[1] == 'a'); + xfclose (fp); - return retval; + return 0; } + +#include <support/test-driver.c> diff --git a/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h index 1c7191b..32f7ef5 100644 --- a/stdlib/bits/stdlib.h +++ b/stdlib/bits/stdlib.h @@ -36,16 +36,16 @@ extern char *__REDIRECT_NTH (__realpath_chk_warn, __fortify_function __wur char * __NTH (realpath (const char *__restrict __name, char *__restrict __resolved)) { - size_t sz = __glibc_objsize (__resolved); + size_t __sz = __glibc_objsize (__resolved); - if (sz == (size_t) -1) + if (__sz == (size_t) -1) return __realpath_alias (__name, __resolved); #if defined _LIBC_LIMITS_H_ && defined PATH_MAX - if (__glibc_unsafe_len (PATH_MAX, sizeof (char), sz)) - return __realpath_chk_warn (__name, __resolved, sz); + if (__glibc_unsafe_len (PATH_MAX, sizeof (char), __sz)) + return __realpath_chk_warn (__name, __resolved, __sz); #endif - return __realpath_chk (__name, __resolved, sz); + return __realpath_chk (__name, __resolved, __sz); } diff --git a/stdlib/gen-tst-strtod-round.c b/stdlib/gen-tst-strtod-round.c index e48bf4d..7ce735f 100644 --- a/stdlib/gen-tst-strtod-round.c +++ b/stdlib/gen-tst-strtod-round.c @@ -46,6 +46,7 @@ static int string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd) { mpfr_clear_overflow (); + mpfr_clear_underflow (); #ifdef WORKAROUND mpfr_t f2; mpfr_init2 (f2, 100000); @@ -53,12 +54,16 @@ string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd) int r = mpfr_set (f, f2, rnd); r |= mpfr_subnormalize (f, r, rnd); mpfr_clear (f2); - return r0 | r; + r |= r0; #else int r = mpfr_strtofr (f, s, NULL, 0, rnd); r |= mpfr_subnormalize (f, r, rnd); - return r; #endif + if (r == 0) + /* The MPFR underflow flag is set for exact subnormal results, + which is not wanted here. */ + mpfr_clear_underflow (); + return r; } void @@ -70,6 +75,21 @@ print_fp (FILE *fout, mpfr_t f, const char *suffix) mpfr_fprintf (fout, "\t%Ra%s", f, suffix); } +static const char * +suffix_to_print (bool overflow, bool underflow, bool underflow_before_rounding, + bool with_comma) +{ + if (overflow) + return with_comma ? ", true, false,\n" : ", true, false"; + if (underflow) + return with_comma ? ", false, true,\n" : ", false, true"; + if (underflow_before_rounding) + return (with_comma + ? ", false, !TININESS_AFTER_ROUNDING,\n" + : ", false, !TININESS_AFTER_ROUNDING"); + return with_comma ? ", false, false,\n" : ", false, false"; +} + static void round_str (FILE *fout, const char *s, int prec, int emin, int emax, bool ibm_ld) @@ -80,8 +100,11 @@ round_str (FILE *fout, const char *s, int prec, int emin, int emax, mpfr_set_emin (emin); mpfr_set_emax (emax); mpfr_init (f); + string_to_fp (f, s, MPFR_RNDZ); + bool underflow_before_rounding = mpfr_underflow_p () != 0; int r = string_to_fp (f, s, MPFR_RNDD); bool overflow = mpfr_overflow_p () != 0; + bool underflow = mpfr_underflow_p () != 0; if (ibm_ld) { assert (prec == 106 && emin == -1073 && emax == 1024); @@ -97,19 +120,27 @@ round_str (FILE *fout, const char *s, int prec, int emin, int emax, } } mpfr_fprintf (fout, "\t%s,\n", r ? "false" : "true"); - print_fp (fout, f, overflow ? ", true,\n" : ", false,\n"); + print_fp (fout, f, + suffix_to_print (overflow, underflow, underflow_before_rounding, + true)); string_to_fp (f, s, MPFR_RNDN); overflow = (mpfr_overflow_p () != 0 || (ibm_ld && mpfr_cmpabs (f, max_value) > 0)); - print_fp (fout, f, overflow ? ", true,\n" : ", false,\n"); + print_fp (fout, f, + suffix_to_print (overflow, underflow, underflow_before_rounding, + true)); string_to_fp (f, s, MPFR_RNDZ); overflow = (mpfr_overflow_p () != 0 || (ibm_ld && mpfr_cmpabs (f, max_value) > 0)); - print_fp (fout, f, overflow ? ", true,\n" : ", false,\n"); + print_fp (fout, f, + suffix_to_print (overflow, underflow, underflow_before_rounding, + true)); string_to_fp (f, s, MPFR_RNDU); overflow = (mpfr_overflow_p () != 0 || (ibm_ld && mpfr_cmpabs (f, max_value) > 0)); - print_fp (fout, f, overflow ? ", true" : ", false"); + print_fp (fout, f, + suffix_to_print (overflow, underflow, underflow_before_rounding, + false)); mpfr_clear (f); if (ibm_ld) mpfr_clear (max_value); diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c index be515ce..beb97b3 100644 --- a/stdlib/strtod_l.c +++ b/stdlib/strtod_l.c @@ -222,6 +222,7 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative, mp_size_t shift = MIN_EXP - 1 - exponent; bool is_tiny = true; + bool old_half_bit = (round_limb & (((mp_limb_t) 1) << round_bit)) != 0; more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0; if (shift == MANT_DIG) @@ -292,6 +293,7 @@ round_and_return (mp_limb_t *retval, intmax_t exponent, int negative, round_bit = shift - 1; (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, shift); } + more_bits |= old_half_bit; /* This is a hook for the m68k long double format, where the exponent bias is the same for normalized and denormalized numbers. */ diff --git a/stdlib/strtod_nan_main.c b/stdlib/strtod_nan_main.c index 4cb286d..39fb7e9 100644 --- a/stdlib/strtod_nan_main.c +++ b/stdlib/strtod_nan_main.c @@ -16,6 +16,7 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ +#include <errno.h> #include <ieee754.h> #include <locale.h> #include <math.h> @@ -50,7 +51,9 @@ STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc) STRING_TYPE *endp; unsigned long long int mant; + int save_errno = errno; mant = STRTOULL (str, &endp, 0); + __set_errno (save_errno); if (endp == cp) SET_NAN_PAYLOAD (retval, mant); diff --git a/stdlib/tst-strtod-round-data b/stdlib/tst-strtod-round-data index 84ab705..9489fbc 100644 --- a/stdlib/tst-strtod-round-data +++ b/stdlib/tst-strtod-round-data @@ -265,3 +265,15 @@ 1.000000000000000000000000000000000385185988877447170611195588516985463707620329643077639047987759113311767578125 1.0000000000000000000000000000000001925929944387235853055977942584927318538101648215388195239938795566558837890625 1.00000000000000000000000000000000009629649721936179265279889712924636592690508241076940976199693977832794189453125 +0x30000002222225p-1077 +0x0.7fffffffffffeap-1022 +0x0.7fffffffffffe9p-1022 +0x0.7ffffd4p-126 +0x0.7ffffffffffffffd4p-16382 +0x0.7ffffffffffffffd4p-16383 +0x0.7ffffffffffffffffffffffffffeap-16382 +0x0.7000004p-126 +0x0.70000000000002p-1022 +0x0.70000000000000004p-16382 +0x0.70000000000000004p-16383 +0x0.70000000000000000000000000002p-16382 diff --git a/stdlib/tst-strtod-round-data.h b/stdlib/tst-strtod-round-data.h index 8899d15..ed50eb2 100644 --- a/stdlib/tst-strtod-round-data.h +++ b/stdlib/tst-strtod-round-data.h @@ -2,1852 +2,1852 @@ static const struct test tests[] = { TEST ("3.518437208883201171875E+013", false, - 0x2p+44, false, - 0x2p+44, false, - 0x2p+44, false, - 0x2.000004p+44, false, - false, - 0x2.0000000000002p+44, false, - 0x2.0000000000004p+44, false, - 0x2.0000000000002p+44, false, - 0x2.0000000000004p+44, false, - true, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - true, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - true, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - true, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false, - 0x2.0000000000003p+44, false), + 0x2p+44, false, false, + 0x2p+44, false, false, + 0x2p+44, false, false, + 0x2.000004p+44, false, false, + false, + 0x2.0000000000002p+44, false, false, + 0x2.0000000000004p+44, false, false, + 0x2.0000000000002p+44, false, false, + 0x2.0000000000004p+44, false, false, + true, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + true, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + true, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + true, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false, + 0x2.0000000000003p+44, false, false), TEST ("1.00000005960464477550", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000001p+0, false, - false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000004p+0, false, - false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000004p+0, false, - false, - 0x1.0000010000000002048242f2ffp+0, false, - 0x1.0000010000000002048242f2ff8p+0, false, - 0x1.0000010000000002048242f2ffp+0, false, - 0x1.0000010000000002048242f2ff8p+0, false, - false, - 0x1.0000010000000002048242f2ff66p+0, false, - 0x1.0000010000000002048242f2ff67p+0, false, - 0x1.0000010000000002048242f2ff66p+0, false, - 0x1.0000010000000002048242f2ff67p+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000004p+0, false, false, + false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000004p+0, false, false, + false, + 0x1.0000010000000002048242f2ffp+0, false, false, + 0x1.0000010000000002048242f2ff8p+0, false, false, + 0x1.0000010000000002048242f2ffp+0, false, false, + 0x1.0000010000000002048242f2ff8p+0, false, false, + false, + 0x1.0000010000000002048242f2ff66p+0, false, false, + 0x1.0000010000000002048242f2ff67p+0, false, false, + 0x1.0000010000000002048242f2ff66p+0, false, false, + 0x1.0000010000000002048242f2ff67p+0, false, false), TEST ("1.0000000596046447755", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000001p+0, false, - false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000004p+0, false, - false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000002p+0, false, - 0x1.0000010000000004p+0, false, - false, - 0x1.0000010000000002048242f2ffp+0, false, - 0x1.0000010000000002048242f2ff8p+0, false, - 0x1.0000010000000002048242f2ffp+0, false, - 0x1.0000010000000002048242f2ff8p+0, false, - false, - 0x1.0000010000000002048242f2ff66p+0, false, - 0x1.0000010000000002048242f2ff67p+0, false, - 0x1.0000010000000002048242f2ff66p+0, false, - 0x1.0000010000000002048242f2ff67p+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000004p+0, false, false, + false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000002p+0, false, false, + 0x1.0000010000000004p+0, false, false, + false, + 0x1.0000010000000002048242f2ffp+0, false, false, + 0x1.0000010000000002048242f2ff8p+0, false, false, + 0x1.0000010000000002048242f2ffp+0, false, false, + 0x1.0000010000000002048242f2ff8p+0, false, false, + false, + 0x1.0000010000000002048242f2ff66p+0, false, false, + 0x1.0000010000000002048242f2ff67p+0, false, false, + 0x1.0000010000000002048242f2ff66p+0, false, false, + 0x1.0000010000000002048242f2ff67p+0, false, false), TEST ("1.000000059604644776", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000001p+0, false, - false, - 0x1.000001000000000ap+0, false, - 0x1.000001000000000cp+0, false, - 0x1.000001000000000ap+0, false, - 0x1.000001000000000cp+0, false, - false, - 0x1.000001000000000ap+0, false, - 0x1.000001000000000cp+0, false, - 0x1.000001000000000ap+0, false, - 0x1.000001000000000cp+0, false, - false, - 0x1.000001000000000b3db12bdc21p+0, false, - 0x1.000001000000000b3db12bdc21p+0, false, - 0x1.000001000000000b3db12bdc21p+0, false, - 0x1.000001000000000b3db12bdc218p+0, false, - false, - 0x1.000001000000000b3db12bdc213cp+0, false, - 0x1.000001000000000b3db12bdc213dp+0, false, - 0x1.000001000000000b3db12bdc213cp+0, false, - 0x1.000001000000000b3db12bdc213dp+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + false, + 0x1.000001000000000ap+0, false, false, + 0x1.000001000000000cp+0, false, false, + 0x1.000001000000000ap+0, false, false, + 0x1.000001000000000cp+0, false, false, + false, + 0x1.000001000000000ap+0, false, false, + 0x1.000001000000000cp+0, false, false, + 0x1.000001000000000ap+0, false, false, + 0x1.000001000000000cp+0, false, false, + false, + 0x1.000001000000000b3db12bdc21p+0, false, false, + 0x1.000001000000000b3db12bdc21p+0, false, false, + 0x1.000001000000000b3db12bdc21p+0, false, false, + 0x1.000001000000000b3db12bdc218p+0, false, false, + false, + 0x1.000001000000000b3db12bdc213cp+0, false, false, + 0x1.000001000000000b3db12bdc213dp+0, false, false, + 0x1.000001000000000b3db12bdc213cp+0, false, false, + 0x1.000001000000000b3db12bdc213dp+0, false, false), TEST ("1.000000059604644775", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000000fffffffp+0, false, - 0x1.000001p+0, false, - 0x1.000000fffffffp+0, false, - 0x1.000001p+0, false, - false, - 0x1.000000fffffffff8p+0, false, - 0x1.000000fffffffff8p+0, false, - 0x1.000000fffffffff8p+0, false, - 0x1.000000fffffffffap+0, false, - false, - 0x1.000000fffffffff8p+0, false, - 0x1.000000fffffffff8p+0, false, - 0x1.000000fffffffff8p+0, false, - 0x1.000000fffffffffap+0, false, - false, - 0x1.000000fffffffff8cb535a09dd8p+0, false, - 0x1.000000fffffffff8cb535a09dd8p+0, false, - 0x1.000000fffffffff8cb535a09dd8p+0, false, - 0x1.000000fffffffff8cb535a09dep+0, false, - false, - 0x1.000000fffffffff8cb535a09dd9p+0, false, - 0x1.000000fffffffff8cb535a09dd91p+0, false, - 0x1.000000fffffffff8cb535a09dd9p+0, false, - 0x1.000000fffffffff8cb535a09dd91p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000000fffffffp+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000000fffffffp+0, false, false, + 0x1.000001p+0, false, false, + false, + 0x1.000000fffffffff8p+0, false, false, + 0x1.000000fffffffff8p+0, false, false, + 0x1.000000fffffffff8p+0, false, false, + 0x1.000000fffffffffap+0, false, false, + false, + 0x1.000000fffffffff8p+0, false, false, + 0x1.000000fffffffff8p+0, false, false, + 0x1.000000fffffffff8p+0, false, false, + 0x1.000000fffffffffap+0, false, false, + false, + 0x1.000000fffffffff8cb535a09dd8p+0, false, false, + 0x1.000000fffffffff8cb535a09dd8p+0, false, false, + 0x1.000000fffffffff8cb535a09dd8p+0, false, false, + 0x1.000000fffffffff8cb535a09dep+0, false, false, + false, + 0x1.000000fffffffff8cb535a09dd9p+0, false, false, + 0x1.000000fffffffff8cb535a09dd91p+0, false, false, + 0x1.000000fffffffff8cb535a09dd9p+0, false, false, + 0x1.000000fffffffff8cb535a09dd91p+0, false, false), TEST ("1.00000005960464478", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000001p+0, false, - false, - 0x1.0000010000000054p+0, false, - 0x1.0000010000000056p+0, false, - 0x1.0000010000000054p+0, false, - 0x1.0000010000000056p+0, false, - false, - 0x1.0000010000000054p+0, false, - 0x1.0000010000000056p+0, false, - 0x1.0000010000000054p+0, false, - 0x1.0000010000000056p+0, false, - false, - 0x1.0000010000000055072873252f8p+0, false, - 0x1.0000010000000055072873253p+0, false, - 0x1.0000010000000055072873252f8p+0, false, - 0x1.0000010000000055072873253p+0, false, - false, - 0x1.0000010000000055072873252febp+0, false, - 0x1.0000010000000055072873252febp+0, false, - 0x1.0000010000000055072873252febp+0, false, - 0x1.0000010000000055072873252fecp+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + false, + 0x1.0000010000000054p+0, false, false, + 0x1.0000010000000056p+0, false, false, + 0x1.0000010000000054p+0, false, false, + 0x1.0000010000000056p+0, false, false, + false, + 0x1.0000010000000054p+0, false, false, + 0x1.0000010000000056p+0, false, false, + 0x1.0000010000000054p+0, false, false, + 0x1.0000010000000056p+0, false, false, + false, + 0x1.0000010000000055072873252f8p+0, false, false, + 0x1.0000010000000055072873253p+0, false, false, + 0x1.0000010000000055072873252f8p+0, false, false, + 0x1.0000010000000055072873253p+0, false, false, + false, + 0x1.0000010000000055072873252febp+0, false, false, + 0x1.0000010000000055072873252febp+0, false, false, + 0x1.0000010000000055072873252febp+0, false, false, + 0x1.0000010000000055072873252fecp+0, false, false), TEST ("1.0000000596046448", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000001p+0, false, - false, - 0x1.00000100000001c4p+0, false, - 0x1.00000100000001c6p+0, false, - 0x1.00000100000001c4p+0, false, - 0x1.00000100000001c6p+0, false, - false, - 0x1.00000100000001c4p+0, false, - 0x1.00000100000001c6p+0, false, - 0x1.00000100000001c4p+0, false, - 0x1.00000100000001c6p+0, false, - false, - 0x1.00000100000001c5f67cd79279p+0, false, - 0x1.00000100000001c5f67cd792798p+0, false, - 0x1.00000100000001c5f67cd79279p+0, false, - 0x1.00000100000001c5f67cd792798p+0, false, - false, - 0x1.00000100000001c5f67cd7927953p+0, false, - 0x1.00000100000001c5f67cd7927954p+0, false, - 0x1.00000100000001c5f67cd7927953p+0, false, - 0x1.00000100000001c5f67cd7927954p+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + false, + 0x1.00000100000001c4p+0, false, false, + 0x1.00000100000001c6p+0, false, false, + 0x1.00000100000001c4p+0, false, false, + 0x1.00000100000001c6p+0, false, false, + false, + 0x1.00000100000001c4p+0, false, false, + 0x1.00000100000001c6p+0, false, false, + 0x1.00000100000001c4p+0, false, false, + 0x1.00000100000001c6p+0, false, false, + false, + 0x1.00000100000001c5f67cd79279p+0, false, false, + 0x1.00000100000001c5f67cd792798p+0, false, false, + 0x1.00000100000001c5f67cd79279p+0, false, false, + 0x1.00000100000001c5f67cd792798p+0, false, false, + false, + 0x1.00000100000001c5f67cd7927953p+0, false, false, + 0x1.00000100000001c5f67cd7927954p+0, false, false, + 0x1.00000100000001c5f67cd7927953p+0, false, false, + 0x1.00000100000001c5f67cd7927954p+0, false, false), TEST ("1.000000059604645", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.0000010000001p+0, false, - 0x1.0000010000001p+0, false, - 0x1.0000010000001p+0, false, - 0x1.0000010000002p+0, false, - false, - 0x1.000001000000102ep+0, false, - 0x1.000001000000103p+0, false, - 0x1.000001000000102ep+0, false, - 0x1.000001000000103p+0, false, - false, - 0x1.000001000000102ep+0, false, - 0x1.000001000000103p+0, false, - 0x1.000001000000102ep+0, false, - 0x1.000001000000103p+0, false, - false, - 0x1.000001000000102f4fc8c3d757p+0, false, - 0x1.000001000000102f4fc8c3d7578p+0, false, - 0x1.000001000000102f4fc8c3d757p+0, false, - 0x1.000001000000102f4fc8c3d7578p+0, false, - false, - 0x1.000001000000102f4fc8c3d75769p+0, false, - 0x1.000001000000102f4fc8c3d75769p+0, false, - 0x1.000001000000102f4fc8c3d75769p+0, false, - 0x1.000001000000102f4fc8c3d7576ap+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.0000010000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + 0x1.0000010000002p+0, false, false, + false, + 0x1.000001000000102ep+0, false, false, + 0x1.000001000000103p+0, false, false, + 0x1.000001000000102ep+0, false, false, + 0x1.000001000000103p+0, false, false, + false, + 0x1.000001000000102ep+0, false, false, + 0x1.000001000000103p+0, false, false, + 0x1.000001000000102ep+0, false, false, + 0x1.000001000000103p+0, false, false, + false, + 0x1.000001000000102f4fc8c3d757p+0, false, false, + 0x1.000001000000102f4fc8c3d7578p+0, false, false, + 0x1.000001000000102f4fc8c3d757p+0, false, false, + 0x1.000001000000102f4fc8c3d7578p+0, false, false, + false, + 0x1.000001000000102f4fc8c3d75769p+0, false, false, + 0x1.000001000000102f4fc8c3d75769p+0, false, false, + 0x1.000001000000102f4fc8c3d75769p+0, false, false, + 0x1.000001000000102f4fc8c3d7576ap+0, false, false), TEST ("1.00000005960464", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000000fffffeap+0, false, - 0x1.000000fffffeap+0, false, - 0x1.000000fffffeap+0, false, - 0x1.000000fffffebp+0, false, - false, - 0x1.000000fffffea7e4p+0, false, - 0x1.000000fffffea7e6p+0, false, - 0x1.000000fffffea7e4p+0, false, - 0x1.000000fffffea7e6p+0, false, - false, - 0x1.000000fffffea7e4p+0, false, - 0x1.000000fffffea7e6p+0, false, - 0x1.000000fffffea7e4p+0, false, - 0x1.000000fffffea7e6p+0, false, - false, - 0x1.000000fffffea7e5975eb11da7p+0, false, - 0x1.000000fffffea7e5975eb11da78p+0, false, - 0x1.000000fffffea7e5975eb11da7p+0, false, - 0x1.000000fffffea7e5975eb11da78p+0, false, - false, - 0x1.000000fffffea7e5975eb11da74ap+0, false, - 0x1.000000fffffea7e5975eb11da74bp+0, false, - 0x1.000000fffffea7e5975eb11da74ap+0, false, - 0x1.000000fffffea7e5975eb11da74bp+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000000fffffeap+0, false, false, + 0x1.000000fffffeap+0, false, false, + 0x1.000000fffffeap+0, false, false, + 0x1.000000fffffebp+0, false, false, + false, + 0x1.000000fffffea7e4p+0, false, false, + 0x1.000000fffffea7e6p+0, false, false, + 0x1.000000fffffea7e4p+0, false, false, + 0x1.000000fffffea7e6p+0, false, false, + false, + 0x1.000000fffffea7e4p+0, false, false, + 0x1.000000fffffea7e6p+0, false, false, + 0x1.000000fffffea7e4p+0, false, false, + 0x1.000000fffffea7e6p+0, false, false, + false, + 0x1.000000fffffea7e5975eb11da7p+0, false, false, + 0x1.000000fffffea7e5975eb11da78p+0, false, false, + 0x1.000000fffffea7e5975eb11da7p+0, false, false, + 0x1.000000fffffea7e5975eb11da78p+0, false, false, + false, + 0x1.000000fffffea7e5975eb11da74ap+0, false, false, + 0x1.000000fffffea7e5975eb11da74bp+0, false, false, + 0x1.000000fffffea7e5975eb11da74ap+0, false, false, + 0x1.000000fffffea7e5975eb11da74bp+0, false, false), TEST ("1.0000000596046", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000000fffff36p+0, false, - 0x1.000000fffff36p+0, false, - 0x1.000000fffff36p+0, false, - 0x1.000000fffff37p+0, false, - false, - 0x1.000000fffff36596p+0, false, - 0x1.000000fffff36598p+0, false, - 0x1.000000fffff36596p+0, false, - 0x1.000000fffff36598p+0, false, - false, - 0x1.000000fffff36596p+0, false, - 0x1.000000fffff36598p+0, false, - 0x1.000000fffff36596p+0, false, - 0x1.000000fffff36598p+0, false, - false, - 0x1.000000fffff36597d40e1b5026p+0, false, - 0x1.000000fffff36597d40e1b50268p+0, false, - 0x1.000000fffff36597d40e1b5026p+0, false, - 0x1.000000fffff36597d40e1b50268p+0, false, - false, - 0x1.000000fffff36597d40e1b502655p+0, false, - 0x1.000000fffff36597d40e1b502656p+0, false, - 0x1.000000fffff36597d40e1b502655p+0, false, - 0x1.000000fffff36597d40e1b502656p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000000fffff36p+0, false, false, + 0x1.000000fffff36p+0, false, false, + 0x1.000000fffff36p+0, false, false, + 0x1.000000fffff37p+0, false, false, + false, + 0x1.000000fffff36596p+0, false, false, + 0x1.000000fffff36598p+0, false, false, + 0x1.000000fffff36596p+0, false, false, + 0x1.000000fffff36598p+0, false, false, + false, + 0x1.000000fffff36596p+0, false, false, + 0x1.000000fffff36598p+0, false, false, + 0x1.000000fffff36596p+0, false, false, + 0x1.000000fffff36598p+0, false, false, + false, + 0x1.000000fffff36597d40e1b5026p+0, false, false, + 0x1.000000fffff36597d40e1b50268p+0, false, false, + 0x1.000000fffff36597d40e1b5026p+0, false, false, + 0x1.000000fffff36597d40e1b50268p+0, false, false, + false, + 0x1.000000fffff36597d40e1b502655p+0, false, false, + 0x1.000000fffff36597d40e1b502656p+0, false, false, + 0x1.000000fffff36597d40e1b502655p+0, false, false, + 0x1.000000fffff36597d40e1b502656p+0, false, false), TEST ("1.000000059605", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001000063fp+0, false, - 0x1.000001000064p+0, false, - 0x1.000001000063fp+0, false, - 0x1.000001000064p+0, false, - false, - 0x1.000001000063fcap+0, false, - 0x1.000001000063fca2p+0, false, - 0x1.000001000063fcap+0, false, - 0x1.000001000063fca2p+0, false, - false, - 0x1.000001000063fcap+0, false, - 0x1.000001000063fca2p+0, false, - 0x1.000001000063fcap+0, false, - 0x1.000001000063fca2p+0, false, - false, - 0x1.000001000063fca17533f5572f8p+0, false, - 0x1.000001000063fca17533f5573p+0, false, - 0x1.000001000063fca17533f5572f8p+0, false, - 0x1.000001000063fca17533f5573p+0, false, - false, - 0x1.000001000063fca17533f5572fe9p+0, false, - 0x1.000001000063fca17533f5572feap+0, false, - 0x1.000001000063fca17533f5572fe9p+0, false, - 0x1.000001000063fca17533f5572feap+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001000063fp+0, false, false, + 0x1.000001000064p+0, false, false, + 0x1.000001000063fp+0, false, false, + 0x1.000001000064p+0, false, false, + false, + 0x1.000001000063fcap+0, false, false, + 0x1.000001000063fca2p+0, false, false, + 0x1.000001000063fcap+0, false, false, + 0x1.000001000063fca2p+0, false, false, + false, + 0x1.000001000063fcap+0, false, false, + 0x1.000001000063fca2p+0, false, false, + 0x1.000001000063fcap+0, false, false, + 0x1.000001000063fca2p+0, false, false, + false, + 0x1.000001000063fca17533f5572f8p+0, false, false, + 0x1.000001000063fca17533f5573p+0, false, false, + 0x1.000001000063fca17533f5572f8p+0, false, false, + 0x1.000001000063fca17533f5573p+0, false, false, + false, + 0x1.000001000063fca17533f5572fe9p+0, false, false, + 0x1.000001000063fca17533f5572feap+0, false, false, + 0x1.000001000063fca17533f5572fe9p+0, false, false, + 0x1.000001000063fca17533f5572feap+0, false, false), TEST ("1.00000005960", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000000fffae49p+0, false, - 0x1.000000fffae4ap+0, false, - 0x1.000000fffae49p+0, false, - 0x1.000000fffae4ap+0, false, - false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - false, - 0x1.000000fffae49ca916dacfff38p+0, false, - 0x1.000000fffae49ca916dacfff38p+0, false, - 0x1.000000fffae49ca916dacfff38p+0, false, - 0x1.000000fffae49ca916dacfff388p+0, false, - false, - 0x1.000000fffae49ca916dacfff382dp+0, false, - 0x1.000000fffae49ca916dacfff382dp+0, false, - 0x1.000000fffae49ca916dacfff382dp+0, false, - 0x1.000000fffae49ca916dacfff382ep+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000000fffae49p+0, false, false, + 0x1.000000fffae4ap+0, false, false, + 0x1.000000fffae49p+0, false, false, + 0x1.000000fffae4ap+0, false, false, + false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + false, + 0x1.000000fffae49ca916dacfff38p+0, false, false, + 0x1.000000fffae49ca916dacfff38p+0, false, false, + 0x1.000000fffae49ca916dacfff38p+0, false, false, + 0x1.000000fffae49ca916dacfff388p+0, false, false, + false, + 0x1.000000fffae49ca916dacfff382dp+0, false, false, + 0x1.000000fffae49ca916dacfff382dp+0, false, false, + 0x1.000000fffae49ca916dacfff382dp+0, false, false, + 0x1.000000fffae49ca916dacfff382ep+0, false, false), TEST ("1.0000000596", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000000fffae49p+0, false, - 0x1.000000fffae4ap+0, false, - 0x1.000000fffae49p+0, false, - 0x1.000000fffae4ap+0, false, - false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - 0x1.000000fffae49ca8p+0, false, - 0x1.000000fffae49caap+0, false, - false, - 0x1.000000fffae49ca916dacfff38p+0, false, - 0x1.000000fffae49ca916dacfff38p+0, false, - 0x1.000000fffae49ca916dacfff38p+0, false, - 0x1.000000fffae49ca916dacfff388p+0, false, - false, - 0x1.000000fffae49ca916dacfff382dp+0, false, - 0x1.000000fffae49ca916dacfff382dp+0, false, - 0x1.000000fffae49ca916dacfff382dp+0, false, - 0x1.000000fffae49ca916dacfff382ep+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000000fffae49p+0, false, false, + 0x1.000000fffae4ap+0, false, false, + 0x1.000000fffae49p+0, false, false, + 0x1.000000fffae4ap+0, false, false, + false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + 0x1.000000fffae49ca8p+0, false, false, + 0x1.000000fffae49caap+0, false, false, + false, + 0x1.000000fffae49ca916dacfff38p+0, false, false, + 0x1.000000fffae49ca916dacfff38p+0, false, false, + 0x1.000000fffae49ca916dacfff38p+0, false, false, + 0x1.000000fffae49ca916dacfff388p+0, false, false, + false, + 0x1.000000fffae49ca916dacfff382dp+0, false, false, + 0x1.000000fffae49ca916dacfff382dp+0, false, false, + 0x1.000000fffae49ca916dacfff382dp+0, false, false, + 0x1.000000fffae49ca916dacfff382ep+0, false, false), TEST ("1.000000060", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.00000101b2b29p+0, false, - 0x1.00000101b2b2ap+0, false, - 0x1.00000101b2b29p+0, false, - 0x1.00000101b2b2ap+0, false, - false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a48p+0, false, - false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a48p+0, false, - false, - 0x1.00000101b2b29a4692b67b7ca3p+0, false, - 0x1.00000101b2b29a4692b67b7ca3p+0, false, - 0x1.00000101b2b29a4692b67b7ca3p+0, false, - 0x1.00000101b2b29a4692b67b7ca38p+0, false, - false, - 0x1.00000101b2b29a4692b67b7ca313p+0, false, - 0x1.00000101b2b29a4692b67b7ca314p+0, false, - 0x1.00000101b2b29a4692b67b7ca313p+0, false, - 0x1.00000101b2b29a4692b67b7ca314p+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.00000101b2b29p+0, false, false, + 0x1.00000101b2b2ap+0, false, false, + 0x1.00000101b2b29p+0, false, false, + 0x1.00000101b2b2ap+0, false, false, + false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a48p+0, false, false, + false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a48p+0, false, false, + false, + 0x1.00000101b2b29a4692b67b7ca3p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca3p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca3p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca38p+0, false, false, + false, + 0x1.00000101b2b29a4692b67b7ca313p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca314p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca313p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca314p+0, false, false), TEST ("1.00000006", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.00000101b2b29p+0, false, - 0x1.00000101b2b2ap+0, false, - 0x1.00000101b2b29p+0, false, - 0x1.00000101b2b2ap+0, false, - false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a48p+0, false, - false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a46p+0, false, - 0x1.00000101b2b29a48p+0, false, - false, - 0x1.00000101b2b29a4692b67b7ca3p+0, false, - 0x1.00000101b2b29a4692b67b7ca3p+0, false, - 0x1.00000101b2b29a4692b67b7ca3p+0, false, - 0x1.00000101b2b29a4692b67b7ca38p+0, false, - false, - 0x1.00000101b2b29a4692b67b7ca313p+0, false, - 0x1.00000101b2b29a4692b67b7ca314p+0, false, - 0x1.00000101b2b29a4692b67b7ca313p+0, false, - 0x1.00000101b2b29a4692b67b7ca314p+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.00000101b2b29p+0, false, false, + 0x1.00000101b2b2ap+0, false, false, + 0x1.00000101b2b29p+0, false, false, + 0x1.00000101b2b2ap+0, false, false, + false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a48p+0, false, false, + false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a46p+0, false, false, + 0x1.00000101b2b29a48p+0, false, false, + false, + 0x1.00000101b2b29a4692b67b7ca3p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca3p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca3p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca38p+0, false, false, + false, + 0x1.00000101b2b29a4692b67b7ca313p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca314p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca313p+0, false, false, + 0x1.00000101b2b29a4692b67b7ca314p+0, false, false), TEST ("1.0000001", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001ad7f29ap+0, false, - 0x1.000001ad7f29bp+0, false, - 0x1.000001ad7f29ap+0, false, - 0x1.000001ad7f29bp+0, false, - false, - 0x1.000001ad7f29abcap+0, false, - 0x1.000001ad7f29abcap+0, false, - 0x1.000001ad7f29abcap+0, false, - 0x1.000001ad7f29abccp+0, false, - false, - 0x1.000001ad7f29abcap+0, false, - 0x1.000001ad7f29abcap+0, false, - 0x1.000001ad7f29abcap+0, false, - 0x1.000001ad7f29abccp+0, false, - false, - 0x1.000001ad7f29abcaf485787a65p+0, false, - 0x1.000001ad7f29abcaf485787a65p+0, false, - 0x1.000001ad7f29abcaf485787a65p+0, false, - 0x1.000001ad7f29abcaf485787a658p+0, false, - false, - 0x1.000001ad7f29abcaf485787a652p+0, false, - 0x1.000001ad7f29abcaf485787a6521p+0, false, - 0x1.000001ad7f29abcaf485787a652p+0, false, - 0x1.000001ad7f29abcaf485787a6521p+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001ad7f29ap+0, false, false, + 0x1.000001ad7f29bp+0, false, false, + 0x1.000001ad7f29ap+0, false, false, + 0x1.000001ad7f29bp+0, false, false, + false, + 0x1.000001ad7f29abcap+0, false, false, + 0x1.000001ad7f29abcap+0, false, false, + 0x1.000001ad7f29abcap+0, false, false, + 0x1.000001ad7f29abccp+0, false, false, + false, + 0x1.000001ad7f29abcap+0, false, false, + 0x1.000001ad7f29abcap+0, false, false, + 0x1.000001ad7f29abcap+0, false, false, + 0x1.000001ad7f29abccp+0, false, false, + false, + 0x1.000001ad7f29abcaf485787a65p+0, false, false, + 0x1.000001ad7f29abcaf485787a65p+0, false, false, + 0x1.000001ad7f29abcaf485787a65p+0, false, false, + 0x1.000001ad7f29abcaf485787a658p+0, false, false, + false, + 0x1.000001ad7f29abcaf485787a652p+0, false, false, + 0x1.000001ad7f29abcaf485787a6521p+0, false, false, + 0x1.000001ad7f29abcaf485787a652p+0, false, false, + 0x1.000001ad7f29abcaf485787a6521p+0, false, false), TEST ("1.000000", true, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - true, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - true, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - true, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - true, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - true, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + true, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + true, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + true, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + true, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + true, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false), TEST ("1.00000000000000011113", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - false, - 0x1.0000000000000801fc96557232p+0, false, - 0x1.0000000000000801fc96557232p+0, false, - 0x1.0000000000000801fc96557232p+0, false, - 0x1.0000000000000801fc965572328p+0, false, - false, - 0x1.0000000000000801fc9655723222p+0, false, - 0x1.0000000000000801fc9655723222p+0, false, - 0x1.0000000000000801fc9655723222p+0, false, - 0x1.0000000000000801fc9655723223p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + false, + 0x1.0000000000000801fc96557232p+0, false, false, + 0x1.0000000000000801fc96557232p+0, false, false, + 0x1.0000000000000801fc96557232p+0, false, false, + 0x1.0000000000000801fc965572328p+0, false, false, + false, + 0x1.0000000000000801fc9655723222p+0, false, false, + 0x1.0000000000000801fc9655723222p+0, false, false, + 0x1.0000000000000801fc9655723222p+0, false, false, + 0x1.0000000000000801fc9655723223p+0, false, false), TEST ("1.00000000000000011103", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - false, - 0x1.00000000000008002459c076c48p+0, false, - 0x1.00000000000008002459c076c5p+0, false, - 0x1.00000000000008002459c076c48p+0, false, - 0x1.00000000000008002459c076c5p+0, false, - false, - 0x1.00000000000008002459c076c4f7p+0, false, - 0x1.00000000000008002459c076c4f8p+0, false, - 0x1.00000000000008002459c076c4f7p+0, false, - 0x1.00000000000008002459c076c4f8p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + false, + 0x1.00000000000008002459c076c48p+0, false, false, + 0x1.00000000000008002459c076c5p+0, false, false, + 0x1.00000000000008002459c076c48p+0, false, false, + 0x1.00000000000008002459c076c5p+0, false, false, + false, + 0x1.00000000000008002459c076c4f7p+0, false, false, + 0x1.00000000000008002459c076c4f8p+0, false, false, + 0x1.00000000000008002459c076c4f7p+0, false, false, + 0x1.00000000000008002459c076c4f8p+0, false, false), TEST ("1.00000000000000011102", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - false, - 0x1.00000000000007fff5207e5dap+0, false, - 0x1.00000000000007fff5207e5da08p+0, false, - 0x1.00000000000007fff5207e5dap+0, false, - 0x1.00000000000007fff5207e5da08p+0, false, - false, - 0x1.00000000000007fff5207e5da073p+0, false, - 0x1.00000000000007fff5207e5da073p+0, false, - 0x1.00000000000007fff5207e5da073p+0, false, - 0x1.00000000000007fff5207e5da074p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + false, + 0x1.00000000000007fff5207e5dap+0, false, false, + 0x1.00000000000007fff5207e5da08p+0, false, false, + 0x1.00000000000007fff5207e5dap+0, false, false, + 0x1.00000000000007fff5207e5da08p+0, false, false, + false, + 0x1.00000000000007fff5207e5da073p+0, false, false, + 0x1.00000000000007fff5207e5da073p+0, false, false, + 0x1.00000000000007fff5207e5da073p+0, false, false, + 0x1.00000000000007fff5207e5da074p+0, false, false), TEST ("1.00000000000000011101", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - false, - 0x1.00000000000007ffc5e73c447b8p+0, false, - 0x1.00000000000007ffc5e73c447cp+0, false, - 0x1.00000000000007ffc5e73c447b8p+0, false, - 0x1.00000000000007ffc5e73c447cp+0, false, - false, - 0x1.00000000000007ffc5e73c447befp+0, false, - 0x1.00000000000007ffc5e73c447befp+0, false, - 0x1.00000000000007ffc5e73c447befp+0, false, - 0x1.00000000000007ffc5e73c447bfp+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + false, + 0x1.00000000000007ffc5e73c447b8p+0, false, false, + 0x1.00000000000007ffc5e73c447cp+0, false, false, + 0x1.00000000000007ffc5e73c447b8p+0, false, false, + 0x1.00000000000007ffc5e73c447cp+0, false, false, + false, + 0x1.00000000000007ffc5e73c447befp+0, false, false, + 0x1.00000000000007ffc5e73c447befp+0, false, false, + 0x1.00000000000007ffc5e73c447befp+0, false, false, + 0x1.00000000000007ffc5e73c447bfp+0, false, false), TEST ("1.0000000000000001111", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - 0x1.00000000000008p+0, false, - 0x1.0000000000000802p+0, false, - false, - 0x1.00000000000008016eea8f26c48p+0, false, - 0x1.00000000000008016eea8f26c48p+0, false, - 0x1.00000000000008016eea8f26c48p+0, false, - 0x1.00000000000008016eea8f26c5p+0, false, - false, - 0x1.00000000000008016eea8f26c495p+0, false, - 0x1.00000000000008016eea8f26c496p+0, false, - 0x1.00000000000008016eea8f26c495p+0, false, - 0x1.00000000000008016eea8f26c496p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.0000000000000802p+0, false, false, + false, + 0x1.00000000000008016eea8f26c48p+0, false, false, + 0x1.00000000000008016eea8f26c48p+0, false, false, + 0x1.00000000000008016eea8f26c48p+0, false, false, + 0x1.00000000000008016eea8f26c5p+0, false, false, + false, + 0x1.00000000000008016eea8f26c495p+0, false, false, + 0x1.00000000000008016eea8f26c496p+0, false, false, + 0x1.00000000000008016eea8f26c495p+0, false, false, + 0x1.00000000000008016eea8f26c496p+0, false, false), TEST ("1.000000000000000111", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000007fep+0, false, - 0x1.00000000000008p+0, false, - false, - 0x1.00000000000007ff96adfa2b57p+0, false, - 0x1.00000000000007ff96adfa2b578p+0, false, - 0x1.00000000000007ff96adfa2b57p+0, false, - 0x1.00000000000007ff96adfa2b578p+0, false, - false, - 0x1.00000000000007ff96adfa2b576ap+0, false, - 0x1.00000000000007ff96adfa2b576bp+0, false, - 0x1.00000000000007ff96adfa2b576ap+0, false, - 0x1.00000000000007ff96adfa2b576bp+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000007fep+0, false, false, + 0x1.00000000000008p+0, false, false, + false, + 0x1.00000000000007ff96adfa2b57p+0, false, false, + 0x1.00000000000007ff96adfa2b578p+0, false, false, + 0x1.00000000000007ff96adfa2b57p+0, false, false, + 0x1.00000000000007ff96adfa2b578p+0, false, false, + false, + 0x1.00000000000007ff96adfa2b576ap+0, false, false, + 0x1.00000000000007ff96adfa2b576bp+0, false, false, + 0x1.00000000000007ff96adfa2b576ap+0, false, false, + 0x1.00000000000007ff96adfa2b576bp+0, false, false), TEST ("1.00000000000000011", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.00000000000007ecp+0, false, - 0x1.00000000000007eep+0, false, - 0x1.00000000000007ecp+0, false, - 0x1.00000000000007eep+0, false, - false, - 0x1.00000000000007ecp+0, false, - 0x1.00000000000007eep+0, false, - 0x1.00000000000007ecp+0, false, - 0x1.00000000000007eep+0, false, - false, - 0x1.00000000000007ed24502859138p+0, false, - 0x1.00000000000007ed24502859138p+0, false, - 0x1.00000000000007ed24502859138p+0, false, - 0x1.00000000000007ed2450285914p+0, false, - false, - 0x1.00000000000007ed2450285913bfp+0, false, - 0x1.00000000000007ed2450285913bfp+0, false, - 0x1.00000000000007ed2450285913bfp+0, false, - 0x1.00000000000007ed2450285913cp+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.00000000000007ecp+0, false, false, + 0x1.00000000000007eep+0, false, false, + 0x1.00000000000007ecp+0, false, false, + 0x1.00000000000007eep+0, false, false, + false, + 0x1.00000000000007ecp+0, false, false, + 0x1.00000000000007eep+0, false, false, + 0x1.00000000000007ecp+0, false, false, + 0x1.00000000000007eep+0, false, false, + false, + 0x1.00000000000007ed24502859138p+0, false, false, + 0x1.00000000000007ed24502859138p+0, false, false, + 0x1.00000000000007ed24502859138p+0, false, false, + 0x1.00000000000007ed2450285914p+0, false, false, + false, + 0x1.00000000000007ed2450285913bfp+0, false, false, + 0x1.00000000000007ed2450285913bfp+0, false, false, + 0x1.00000000000007ed2450285913bfp+0, false, false, + 0x1.00000000000007ed2450285913cp+0, false, false), TEST ("1.0000000000000001", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1.0000000000000734p+0, false, - 0x1.0000000000000734p+0, false, - 0x1.0000000000000734p+0, false, - 0x1.0000000000000736p+0, false, - false, - 0x1.0000000000000734p+0, false, - 0x1.0000000000000734p+0, false, - 0x1.0000000000000734p+0, false, - 0x1.0000000000000736p+0, false, - false, - 0x1.0000000000000734aca5f6226fp+0, false, - 0x1.0000000000000734aca5f6226fp+0, false, - 0x1.0000000000000734aca5f6226fp+0, false, - 0x1.0000000000000734aca5f6226f8p+0, false, - false, - 0x1.0000000000000734aca5f6226f0ap+0, false, - 0x1.0000000000000734aca5f6226f0bp+0, false, - 0x1.0000000000000734aca5f6226f0ap+0, false, - 0x1.0000000000000734aca5f6226f0bp+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1.0000000000000734p+0, false, false, + 0x1.0000000000000734p+0, false, false, + 0x1.0000000000000734p+0, false, false, + 0x1.0000000000000736p+0, false, false, + false, + 0x1.0000000000000734p+0, false, false, + 0x1.0000000000000734p+0, false, false, + 0x1.0000000000000734p+0, false, false, + 0x1.0000000000000736p+0, false, false, + false, + 0x1.0000000000000734aca5f6226fp+0, false, false, + 0x1.0000000000000734aca5f6226fp+0, false, false, + 0x1.0000000000000734aca5f6226fp+0, false, false, + 0x1.0000000000000734aca5f6226f8p+0, false, false, + false, + 0x1.0000000000000734aca5f6226f0ap+0, false, false, + 0x1.0000000000000734aca5f6226f0bp+0, false, false, + 0x1.0000000000000734aca5f6226f0ap+0, false, false, + 0x1.0000000000000734aca5f6226f0bp+0, false, false), TEST ("3929201589819414e-25", false, - 0x1.b0053p-32, false, - 0x1.b00532p-32, false, - 0x1.b0053p-32, false, - 0x1.b00532p-32, false, - false, - 0x1.b005314e2421ep-32, false, - 0x1.b005314e2421ep-32, false, - 0x1.b005314e2421ep-32, false, - 0x1.b005314e2421fp-32, false, - false, - 0x1.b005314e2421e7fep-32, false, - 0x1.b005314e2421e8p-32, false, - 0x1.b005314e2421e7fep-32, false, - 0x1.b005314e2421e8p-32, false, - false, - 0x1.b005314e2421e7fep-32, false, - 0x1.b005314e2421e8p-32, false, - 0x1.b005314e2421e7fep-32, false, - 0x1.b005314e2421e8p-32, false, - false, - 0x1.b005314e2421e7ffb472840c5ap-32, false, - 0x1.b005314e2421e7ffb472840c5a8p-32, false, - 0x1.b005314e2421e7ffb472840c5ap-32, false, - 0x1.b005314e2421e7ffb472840c5a8p-32, false, - false, - 0x1.b005314e2421e7ffb472840c5a6ep-32, false, - 0x1.b005314e2421e7ffb472840c5a6fp-32, false, - 0x1.b005314e2421e7ffb472840c5a6ep-32, false, - 0x1.b005314e2421e7ffb472840c5a6fp-32, false), + 0x1.b0053p-32, false, false, + 0x1.b00532p-32, false, false, + 0x1.b0053p-32, false, false, + 0x1.b00532p-32, false, false, + false, + 0x1.b005314e2421ep-32, false, false, + 0x1.b005314e2421ep-32, false, false, + 0x1.b005314e2421ep-32, false, false, + 0x1.b005314e2421fp-32, false, false, + false, + 0x1.b005314e2421e7fep-32, false, false, + 0x1.b005314e2421e8p-32, false, false, + 0x1.b005314e2421e7fep-32, false, false, + 0x1.b005314e2421e8p-32, false, false, + false, + 0x1.b005314e2421e7fep-32, false, false, + 0x1.b005314e2421e8p-32, false, false, + 0x1.b005314e2421e7fep-32, false, false, + 0x1.b005314e2421e8p-32, false, false, + false, + 0x1.b005314e2421e7ffb472840c5ap-32, false, false, + 0x1.b005314e2421e7ffb472840c5a8p-32, false, false, + 0x1.b005314e2421e7ffb472840c5ap-32, false, false, + 0x1.b005314e2421e7ffb472840c5a8p-32, false, false, + false, + 0x1.b005314e2421e7ffb472840c5a6ep-32, false, false, + 0x1.b005314e2421e7ffb472840c5a6fp-32, false, false, + 0x1.b005314e2421e7ffb472840c5a6ep-32, false, false, + 0x1.b005314e2421e7ffb472840c5a6fp-32, false, false), TEST ("0.0000000000000000000000000000000000000000000021019476964872" "256063855943749348741969203929128147736576356024258346866240" "28790902229957282543182373046875", false, - 0x8p-152, false, - 0x1p-148, false, - 0x8p-152, false, - 0x1p-148, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false), + 0x8p-152, false, true, + 0x1p-148, false, true, + 0x8p-152, false, true, + 0x1p-148, false, true, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false), TEST ("1.00000005960464477539062499", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000000fffffffp+0, false, - 0x1.000001p+0, false, - 0x1.000000fffffffp+0, false, - 0x1.000001p+0, false, - false, - 0x1.000000fffffffffep+0, false, - 0x1.000001p+0, false, - 0x1.000000fffffffffep+0, false, - 0x1.000001p+0, false, - false, - 0x1.000000fffffffffep+0, false, - 0x1.000001p+0, false, - 0x1.000000fffffffffep+0, false, - 0x1.000001p+0, false, - false, - 0x1.000000fffffffffffffffce7b78p+0, false, - 0x1.000000fffffffffffffffce7b8p+0, false, - 0x1.000000fffffffffffffffce7b78p+0, false, - 0x1.000000fffffffffffffffce7b8p+0, false, - false, - 0x1.000000fffffffffffffffce7b7e7p+0, false, - 0x1.000000fffffffffffffffce7b7e7p+0, false, - 0x1.000000fffffffffffffffce7b7e7p+0, false, - 0x1.000000fffffffffffffffce7b7e8p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000000fffffffp+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000000fffffffp+0, false, false, + 0x1.000001p+0, false, false, + false, + 0x1.000000fffffffffep+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000000fffffffffep+0, false, false, + 0x1.000001p+0, false, false, + false, + 0x1.000000fffffffffep+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000000fffffffffep+0, false, false, + 0x1.000001p+0, false, false, + false, + 0x1.000000fffffffffffffffce7b78p+0, false, false, + 0x1.000000fffffffffffffffce7b8p+0, false, false, + 0x1.000000fffffffffffffffce7b78p+0, false, false, + 0x1.000000fffffffffffffffce7b8p+0, false, false, + false, + 0x1.000000fffffffffffffffce7b7e7p+0, false, false, + 0x1.000000fffffffffffffffce7b7e7p+0, false, false, + 0x1.000000fffffffffffffffce7b7e7p+0, false, false, + 0x1.000000fffffffffffffffce7b7e8p+0, false, false), TEST ("1.000000059604644775390625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - true, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - true, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - true, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - true, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + true, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + true, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + true, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + true, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false), TEST ("1.00000005960464477539062501", false, - 0x1p+0, false, - 0x1.000002p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000001p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000000002p+0, false, - false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.000001p+0, false, - 0x1.0000010000000002p+0, false, - false, - 0x1.00000100000000000000031848p+0, false, - 0x1.00000100000000000000031848p+0, false, - 0x1.00000100000000000000031848p+0, false, - 0x1.000001000000000000000318488p+0, false, - false, - 0x1.0000010000000000000003184818p+0, false, - 0x1.0000010000000000000003184819p+0, false, - 0x1.0000010000000000000003184818p+0, false, - 0x1.0000010000000000000003184819p+0, false), + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000001p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000000002p+0, false, false, + false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.000001p+0, false, false, + 0x1.0000010000000002p+0, false, false, + false, + 0x1.00000100000000000000031848p+0, false, false, + 0x1.00000100000000000000031848p+0, false, false, + 0x1.00000100000000000000031848p+0, false, false, + 0x1.000001000000000000000318488p+0, false, false, + false, + 0x1.0000010000000000000003184818p+0, false, false, + 0x1.0000010000000000000003184819p+0, false, false, + 0x1.0000010000000000000003184818p+0, false, false, + 0x1.0000010000000000000003184819p+0, false, false), TEST ("1.00000011920928955078125", true, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false), + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false), TEST ("1.00000017881393432617187499", false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000002p+0, false, - 0x1.000004p+0, false, - false, - 0x1.000002fffffffp+0, false, - 0x1.000003p+0, false, - 0x1.000002fffffffp+0, false, - 0x1.000003p+0, false, - false, - 0x1.000002fffffffffep+0, false, - 0x1.000003p+0, false, - 0x1.000002fffffffffep+0, false, - 0x1.000003p+0, false, - false, - 0x1.000002fffffffffep+0, false, - 0x1.000003p+0, false, - 0x1.000002fffffffffep+0, false, - 0x1.000003p+0, false, - false, - 0x1.000002fffffffffffffffce7b78p+0, false, - 0x1.000002fffffffffffffffce7b8p+0, false, - 0x1.000002fffffffffffffffce7b78p+0, false, - 0x1.000002fffffffffffffffce7b8p+0, false, - false, - 0x1.000002fffffffffffffffce7b7e7p+0, false, - 0x1.000002fffffffffffffffce7b7e7p+0, false, - 0x1.000002fffffffffffffffce7b7e7p+0, false, - 0x1.000002fffffffffffffffce7b7e8p+0, false), + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000004p+0, false, false, + false, + 0x1.000002fffffffp+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000002fffffffp+0, false, false, + 0x1.000003p+0, false, false, + false, + 0x1.000002fffffffffep+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000002fffffffffep+0, false, false, + 0x1.000003p+0, false, false, + false, + 0x1.000002fffffffffep+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000002fffffffffep+0, false, false, + 0x1.000003p+0, false, false, + false, + 0x1.000002fffffffffffffffce7b78p+0, false, false, + 0x1.000002fffffffffffffffce7b8p+0, false, false, + 0x1.000002fffffffffffffffce7b78p+0, false, false, + 0x1.000002fffffffffffffffce7b8p+0, false, false, + false, + 0x1.000002fffffffffffffffce7b7e7p+0, false, false, + 0x1.000002fffffffffffffffce7b7e7p+0, false, false, + 0x1.000002fffffffffffffffce7b7e7p+0, false, false, + 0x1.000002fffffffffffffffce7b7e8p+0, false, false), TEST ("1.000000178813934326171875", false, - 0x1.000002p+0, false, - 0x1.000004p+0, false, - 0x1.000002p+0, false, - 0x1.000004p+0, false, - true, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - true, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - true, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - true, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - true, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false), + 0x1.000002p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000004p+0, false, false, + true, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + true, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + true, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + true, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + true, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false), TEST ("1.00000017881393432617187501", false, - 0x1.000002p+0, false, - 0x1.000004p+0, false, - 0x1.000002p+0, false, - 0x1.000004p+0, false, - false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.0000030000001p+0, false, - false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.0000030000000002p+0, false, - false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.000003p+0, false, - 0x1.0000030000000002p+0, false, - false, - 0x1.00000300000000000000031848p+0, false, - 0x1.00000300000000000000031848p+0, false, - 0x1.00000300000000000000031848p+0, false, - 0x1.000003000000000000000318488p+0, false, - false, - 0x1.0000030000000000000003184818p+0, false, - 0x1.0000030000000000000003184819p+0, false, - 0x1.0000030000000000000003184818p+0, false, - 0x1.0000030000000000000003184819p+0, false), + 0x1.000002p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000002p+0, false, false, + 0x1.000004p+0, false, false, + false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.0000030000001p+0, false, false, + false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.0000030000000002p+0, false, false, + false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.000003p+0, false, false, + 0x1.0000030000000002p+0, false, false, + false, + 0x1.00000300000000000000031848p+0, false, false, + 0x1.00000300000000000000031848p+0, false, false, + 0x1.00000300000000000000031848p+0, false, false, + 0x1.000003000000000000000318488p+0, false, false, + false, + 0x1.0000030000000000000003184818p+0, false, false, + 0x1.0000030000000000000003184819p+0, false, false, + 0x1.0000030000000000000003184818p+0, false, false, + 0x1.0000030000000000000003184819p+0, false, false), TEST ("1.0000002384185791015625", true, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - true, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - true, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - true, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - true, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - true, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false, - 0x1.000004p+0, false), + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + true, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + true, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + true, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + true, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + true, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false, + 0x1.000004p+0, false, false), TEST ("1.08420217248550443400745280086994171142578125e-19", true, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - true, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - true, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - true, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - true, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - true, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false), + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + true, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + true, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + true, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + true, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + true, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false), TEST ("1.0842022371089897897127399001987457793916291848290711641311" "645507812499e-19", false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2.000004p-64, false, - false, - 0x2.000001ffffffep-64, false, - 0x2.000002p-64, false, - 0x2.000001ffffffep-64, false, - 0x2.000002p-64, false, - false, - 0x2.000001fffffffffcp-64, false, - 0x2.000002p-64, false, - 0x2.000001fffffffffcp-64, false, - 0x2.000002p-64, false, - false, - 0x2.000001fffffffffcp-64, false, - 0x2.000002p-64, false, - 0x2.000001fffffffffcp-64, false, - 0x2.000002p-64, false, - false, - 0x2.000001ffffffffffffffffffffp-64, false, - 0x2.000002p-64, false, - 0x2.000001ffffffffffffffffffffp-64, false, - 0x2.000002p-64, false, - false, - 0x2.000001fffffffffffffffffffffep-64, false, - 0x2.000002p-64, false, - 0x2.000001fffffffffffffffffffffep-64, false, - 0x2.000002p-64, false), + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2.000004p-64, false, false, + false, + 0x2.000001ffffffep-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000001ffffffep-64, false, false, + 0x2.000002p-64, false, false, + false, + 0x2.000001fffffffffcp-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000001fffffffffcp-64, false, false, + 0x2.000002p-64, false, false, + false, + 0x2.000001fffffffffcp-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000001fffffffffcp-64, false, false, + 0x2.000002p-64, false, false, + false, + 0x2.000001ffffffffffffffffffffp-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000001ffffffffffffffffffffp-64, false, false, + 0x2.000002p-64, false, false, + false, + 0x2.000001fffffffffffffffffffffep-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000001fffffffffffffffffffffep-64, false, false, + 0x2.000002p-64, false, false), TEST ("1.0842022371089897897127399001987457793916291848290711641311" "6455078125e-19", false, - 0x2p-64, false, - 0x2p-64, false, - 0x2p-64, false, - 0x2.000004p-64, false, - true, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - true, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - true, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - true, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - true, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false), + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2p-64, false, false, + 0x2.000004p-64, false, false, + true, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + true, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + true, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + true, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + true, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false), TEST ("1.0842022371089897897127399001987457793916291848290711641311" "645507812501e-19", false, - 0x2p-64, false, - 0x2.000004p-64, false, - 0x2p-64, false, - 0x2.000004p-64, false, - false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.0000020000002p-64, false, - false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.0000020000000004p-64, false, - false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.0000020000000004p-64, false, - false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.00000200000000000000000001p-64, false, - false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.000002p-64, false, - 0x2.0000020000000000000000000002p-64, false), + 0x2p-64, false, false, + 0x2.000004p-64, false, false, + 0x2p-64, false, false, + 0x2.000004p-64, false, false, + false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.0000020000002p-64, false, false, + false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.0000020000000004p-64, false, false, + false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.0000020000000004p-64, false, false, + false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.00000200000000000000000001p-64, false, false, + false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.000002p-64, false, false, + 0x2.0000020000000000000000000002p-64, false, false), TEST ("1.0842023017324751454180269995275498473574771196581423282623" "291015625e-19", true, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - true, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - true, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - true, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - true, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - true, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false), + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + true, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + true, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + true, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + true, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + true, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false), TEST ("1.0842023663559605011233140988563539153233250544872134923934" "936523437499e-19", false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000004p-64, false, - 0x2.000008p-64, false, - false, - 0x2.000005ffffffep-64, false, - 0x2.000006p-64, false, - 0x2.000005ffffffep-64, false, - 0x2.000006p-64, false, - false, - 0x2.000005fffffffffcp-64, false, - 0x2.000006p-64, false, - 0x2.000005fffffffffcp-64, false, - 0x2.000006p-64, false, - false, - 0x2.000005fffffffffcp-64, false, - 0x2.000006p-64, false, - 0x2.000005fffffffffcp-64, false, - 0x2.000006p-64, false, - false, - 0x2.000005ffffffffffffffffffffp-64, false, - 0x2.000006p-64, false, - 0x2.000005ffffffffffffffffffffp-64, false, - 0x2.000006p-64, false, - false, - 0x2.000005fffffffffffffffffffffep-64, false, - 0x2.000006p-64, false, - 0x2.000005fffffffffffffffffffffep-64, false, - 0x2.000006p-64, false), + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000008p-64, false, false, + false, + 0x2.000005ffffffep-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000005ffffffep-64, false, false, + 0x2.000006p-64, false, false, + false, + 0x2.000005fffffffffcp-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000005fffffffffcp-64, false, false, + 0x2.000006p-64, false, false, + false, + 0x2.000005fffffffffcp-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000005fffffffffcp-64, false, false, + 0x2.000006p-64, false, false, + false, + 0x2.000005ffffffffffffffffffffp-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000005ffffffffffffffffffffp-64, false, false, + 0x2.000006p-64, false, false, + false, + 0x2.000005fffffffffffffffffffffep-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000005fffffffffffffffffffffep-64, false, false, + 0x2.000006p-64, false, false), TEST ("1.0842023663559605011233140988563539153233250544872134923934" "9365234375e-19", false, - 0x2.000004p-64, false, - 0x2.000008p-64, false, - 0x2.000004p-64, false, - 0x2.000008p-64, false, - true, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - true, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - true, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - true, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - true, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false), + 0x2.000004p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000008p-64, false, false, + true, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + true, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + true, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + true, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + true, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false), TEST ("1.0842023663559605011233140988563539153233250544872134923934" "936523437501e-19", false, - 0x2.000004p-64, false, - 0x2.000008p-64, false, - 0x2.000004p-64, false, - 0x2.000008p-64, false, - false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.0000060000002p-64, false, - false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.0000060000000004p-64, false, - false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.0000060000000004p-64, false, - false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.00000600000000000000000001p-64, false, - false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.000006p-64, false, - 0x2.0000060000000000000000000002p-64, false), + 0x2.000004p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000004p-64, false, false, + 0x2.000008p-64, false, false, + false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.0000060000002p-64, false, false, + false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.0000060000000004p-64, false, false, + false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.0000060000000004p-64, false, false, + false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.00000600000000000000000001p-64, false, false, + false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.000006p-64, false, false, + 0x2.0000060000000000000000000002p-64, false, false), TEST ("1.0842024309794458568286011981851579832891729893162846565246" "58203125e-19", true, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - true, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - true, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - true, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - true, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - true, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false, - 0x2.000008p-64, false), + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + true, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + true, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + true, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + true, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + true, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false, + 0x2.000008p-64, false, false), TEST ("7.5231638452626400509999138382223723380394595633413601376560" "1092018187046051025390625e-37", true, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - true, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - true, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - true, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - true, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - true, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false), + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + true, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + true, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + true, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + true, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + true, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false), TEST ("7.5231642936781486349413765338158389908126215730251815381410" "578824437213052434003657253924757242202758789062499e-37", false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1.000002p-120, false, - false, - 0x1.000000fffffffp-120, false, - 0x1.000001p-120, false, - 0x1.000000fffffffp-120, false, - 0x1.000001p-120, false, - false, - 0x1.000000fffffffffep-120, false, - 0x1.000001p-120, false, - 0x1.000000fffffffffep-120, false, - 0x1.000001p-120, false, - false, - 0x1.000000fffffffffep-120, false, - 0x1.000001p-120, false, - 0x1.000000fffffffffep-120, false, - 0x1.000001p-120, false, - false, - 0x1.000000ffffffffffffffffffff8p-120, false, - 0x1.000001p-120, false, - 0x1.000000ffffffffffffffffffff8p-120, false, - 0x1.000001p-120, false, - false, - 0x1.000000ffffffffffffffffffffffp-120, false, - 0x1.000001p-120, false, - 0x1.000000ffffffffffffffffffffffp-120, false, - 0x1.000001p-120, false), + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1.000002p-120, false, false, + false, + 0x1.000000fffffffp-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000000fffffffp-120, false, false, + 0x1.000001p-120, false, false, + false, + 0x1.000000fffffffffep-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000000fffffffffep-120, false, false, + 0x1.000001p-120, false, false, + false, + 0x1.000000fffffffffep-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000000fffffffffep-120, false, false, + 0x1.000001p-120, false, false, + false, + 0x1.000000ffffffffffffffffffff8p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000000ffffffffffffffffffff8p-120, false, false, + 0x1.000001p-120, false, false, + false, + 0x1.000000ffffffffffffffffffffffp-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000000ffffffffffffffffffffffp-120, false, false, + 0x1.000001p-120, false, false), TEST ("7.5231642936781486349413765338158389908126215730251815381410" "5788244372130524340036572539247572422027587890625e-37", false, - 0x1p-120, false, - 0x1p-120, false, - 0x1p-120, false, - 0x1.000002p-120, false, - true, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - true, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - true, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - true, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - true, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false), + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1p-120, false, false, + 0x1.000002p-120, false, false, + true, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + true, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + true, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + true, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + true, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false), TEST ("7.5231642936781486349413765338158389908126215730251815381410" "578824437213052434003657253924757242202758789062501e-37", false, - 0x1p-120, false, - 0x1.000002p-120, false, - 0x1p-120, false, - 0x1.000002p-120, false, - false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.0000010000001p-120, false, - false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.0000010000000002p-120, false, - false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.0000010000000002p-120, false, - false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001000000000000000000008p-120, false, - false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.000001p-120, false, - 0x1.0000010000000000000000000001p-120, false), + 0x1p-120, false, false, + 0x1.000002p-120, false, false, + 0x1p-120, false, false, + 0x1.000002p-120, false, false, + false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.0000010000001p-120, false, false, + false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.0000010000000002p-120, false, false, + false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.0000010000000002p-120, false, false, + false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001000000000000000000008p-120, false, false, + false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.000001p-120, false, false, + 0x1.0000010000000000000000000001p-120, false, false), TEST ("7.5231647420936572188828392294093056435857835827090029386261" "048447055721499765468252007849514484405517578125e-37", true, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - true, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - true, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - true, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - true, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - true, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false), + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + true, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + true, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + true, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + true, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + true, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false), TEST ("7.5231651905091658028243019250027722963589455923928243391111" "518069674229947096932846761774271726608276367187499e-37", false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000002p-120, false, - 0x1.000004p-120, false, - false, - 0x1.000002fffffffp-120, false, - 0x1.000003p-120, false, - 0x1.000002fffffffp-120, false, - 0x1.000003p-120, false, - false, - 0x1.000002fffffffffep-120, false, - 0x1.000003p-120, false, - 0x1.000002fffffffffep-120, false, - 0x1.000003p-120, false, - false, - 0x1.000002fffffffffep-120, false, - 0x1.000003p-120, false, - 0x1.000002fffffffffep-120, false, - 0x1.000003p-120, false, - false, - 0x1.000002ffffffffffffffffffff8p-120, false, - 0x1.000003p-120, false, - 0x1.000002ffffffffffffffffffff8p-120, false, - 0x1.000003p-120, false, - false, - 0x1.000002ffffffffffffffffffffffp-120, false, - 0x1.000003p-120, false, - 0x1.000002ffffffffffffffffffffffp-120, false, - 0x1.000003p-120, false), + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000004p-120, false, false, + false, + 0x1.000002fffffffp-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000002fffffffp-120, false, false, + 0x1.000003p-120, false, false, + false, + 0x1.000002fffffffffep-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000002fffffffffep-120, false, false, + 0x1.000003p-120, false, false, + false, + 0x1.000002fffffffffep-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000002fffffffffep-120, false, false, + 0x1.000003p-120, false, false, + false, + 0x1.000002ffffffffffffffffffff8p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000002ffffffffffffffffffff8p-120, false, false, + 0x1.000003p-120, false, false, + false, + 0x1.000002ffffffffffffffffffffffp-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000002ffffffffffffffffffffffp-120, false, false, + 0x1.000003p-120, false, false), TEST ("7.5231651905091658028243019250027722963589455923928243391111" "5180696742299470969328467617742717266082763671875e-37", false, - 0x1.000002p-120, false, - 0x1.000004p-120, false, - 0x1.000002p-120, false, - 0x1.000004p-120, false, - true, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - true, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - true, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - true, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - true, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false), + 0x1.000002p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000004p-120, false, false, + true, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + true, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + true, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + true, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + true, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false), TEST ("7.5231651905091658028243019250027722963589455923928243391111" "518069674229947096932846761774271726608276367187501e-37", false, - 0x1.000002p-120, false, - 0x1.000004p-120, false, - 0x1.000002p-120, false, - 0x1.000004p-120, false, - false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.0000030000001p-120, false, - false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.0000030000000002p-120, false, - false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.0000030000000002p-120, false, - false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003000000000000000000008p-120, false, - false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.000003p-120, false, - 0x1.0000030000000000000000000001p-120, false), + 0x1.000002p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000002p-120, false, false, + 0x1.000004p-120, false, false, + false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.0000030000001p-120, false, false, + false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.0000030000000002p-120, false, false, + false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.0000030000000002p-120, false, false, + false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003000000000000000000008p-120, false, false, + false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.000003p-120, false, false, + 0x1.0000030000000000000000000001p-120, false, false), TEST ("7.5231656389246743867657646205962389491321076020766457395961" "98769229273839442839744151569902896881103515625e-37", true, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - true, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - true, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - true, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - true, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - true, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false, - 0x1.000004p-120, false), + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + true, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + true, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + true, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + true, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + true, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false, + 0x1.000004p-120, false, false), TEST ("340282356779733661637539395458142568447.999", false, - 0xf.fffffp+124, false, - 0xf.fffffp+124, false, - 0xf.fffffp+124, false, - INF, true, - false, - 0xf.fffff7ffffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff7ffffff8p+124, false, - 0xf.fffff8p+124, false, - false, - 0xf.fffff7fffffffffp+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff7fffffffffp+124, false, - 0xf.fffff8p+124, false, - false, - 0xf.fffff7fffffffffp+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff7fffffffffp+124, false, - 0xf.fffff8p+124, false, - false, - 0xf.fffff7fffffffffffffffffffcp+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff7fffffffffffffffffffcp+124, false, - 0xf.fffff8p+124, false, - false, - 0xf.fffff7fffffffffffffffffffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff7fffffffffffffffffffff8p+124, false, - 0xf.fffff8p+124, false), + 0xf.fffffp+124, false, false, + 0xf.fffffp+124, false, false, + 0xf.fffffp+124, false, false, + INF, true, false, + false, + 0xf.fffff7ffffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff7ffffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + false, + 0xf.fffff7fffffffffp+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff7fffffffffp+124, false, false, + 0xf.fffff8p+124, false, false, + false, + 0xf.fffff7fffffffffp+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff7fffffffffp+124, false, false, + 0xf.fffff8p+124, false, false, + false, + 0xf.fffff7fffffffffffffffffffcp+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff7fffffffffffffffffffcp+124, false, false, + 0xf.fffff8p+124, false, false, + false, + 0xf.fffff7fffffffffffffffffffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff7fffffffffffffffffffff8p+124, false, false, + 0xf.fffff8p+124, false, false), TEST ("340282356779733661637539395458142568448", false, - 0xf.fffffp+124, false, - INF, true, - 0xf.fffffp+124, false, - INF, true, - true, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - true, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - true, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - true, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - true, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false), + 0xf.fffffp+124, false, false, + INF, true, false, + 0xf.fffffp+124, false, false, + INF, true, false, + true, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + true, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + true, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + true, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + true, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false), TEST ("340282356779733661637539395458142568448.001", false, - 0xf.fffffp+124, false, - INF, true, - 0xf.fffffp+124, false, - INF, true, - false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff80000008p+124, false, - false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8000000001p+124, false, - false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8000000001p+124, false, - false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff800000000000000000004p+124, false, - false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff8p+124, false, - 0xf.fffff80000000000000000000008p+124, false), + 0xf.fffffp+124, false, false, + INF, true, false, + 0xf.fffffp+124, false, false, + INF, true, false, + false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff80000008p+124, false, false, + false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8000000001p+124, false, false, + false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8000000001p+124, false, false, + false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff800000000000000000004p+124, false, false, + false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff8p+124, false, false, + 0xf.fffff80000000000000000000008p+124, false, false), TEST ("-340282356779733661637539395458142568447.999", false, - -INF, true, - -0xf.fffffp+124, false, - -0xf.fffffp+124, false, - -0xf.fffffp+124, false, - false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff7ffffff8p+124, false, - -0xf.fffff7ffffff8p+124, false, - false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff7fffffffffp+124, false, - -0xf.fffff7fffffffffp+124, false, - false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff7fffffffffp+124, false, - -0xf.fffff7fffffffffp+124, false, - false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff7fffffffffffffffffffcp+124, false, - -0xf.fffff7fffffffffffffffffffcp+124, false, - false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff7fffffffffffffffffffff8p+124, false, - -0xf.fffff7fffffffffffffffffffff8p+124, false), + -INF, true, false, + -0xf.fffffp+124, false, false, + -0xf.fffffp+124, false, false, + -0xf.fffffp+124, false, false, + false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff7ffffff8p+124, false, false, + -0xf.fffff7ffffff8p+124, false, false, + false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff7fffffffffp+124, false, false, + -0xf.fffff7fffffffffp+124, false, false, + false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff7fffffffffp+124, false, false, + -0xf.fffff7fffffffffp+124, false, false, + false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff7fffffffffffffffffffcp+124, false, false, + -0xf.fffff7fffffffffffffffffffcp+124, false, false, + false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff7fffffffffffffffffffff8p+124, false, false, + -0xf.fffff7fffffffffffffffffffff8p+124, false, false), TEST ("-340282356779733661637539395458142568448", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, false, - -0xf.fffffp+124, false, - true, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - true, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - true, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - true, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - true, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, false, false, + -0xf.fffffp+124, false, false, + true, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + true, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + true, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + true, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + true, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false), TEST ("-340282356779733661637539395458142568448.001", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, false, - -0xf.fffffp+124, false, - false, - -0xf.fffff80000008p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - false, - -0xf.fffff8000000001p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - false, - -0xf.fffff8000000001p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - false, - -0xf.fffff800000000000000000004p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - false, - -0xf.fffff80000000000000000000008p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false, - -0xf.fffff8p+124, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, false, false, + -0xf.fffffp+124, false, false, + false, + -0xf.fffff80000008p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + false, + -0xf.fffff8000000001p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + false, + -0xf.fffff8000000001p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + false, + -0xf.fffff800000000000000000004p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + false, + -0xf.fffff80000000000000000000008p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false, + -0xf.fffff8p+124, false, false), TEST ("179769313486231580793728971405303415079934132710037826936173" "778980444968292764750946649017977587207096330286416692887910" "946555547851940402630657488671505820681908902000708383676273" @@ -1855,35 +1855,35 @@ static const struct test tests[] = { "936475292719074168444365510704342711559699508093042880177904" "174497791.999", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, false, - 0xf.ffffffffffff8p+1020, false, - 0xf.ffffffffffff8p+1020, false, - INF, true, - false, - 0xf.ffffffffffffbffp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffbffp+1020, false, - 0xf.ffffffffffffcp+1020, false, - false, - 0xf.ffffffffffffbffp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffbffp+1020, false, - 0xf.ffffffffffffcp+1020, false, - false, - 0xf.ffffffffffffbffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, true, - 0xf.ffffffffffffbffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, true, - false, - 0xf.ffffffffffffbffffffffffffff8p+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffbffffffffffffff8p+1020, false, - 0xf.ffffffffffffcp+1020, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, false, false, + 0xf.ffffffffffff8p+1020, false, false, + 0xf.ffffffffffff8p+1020, false, false, + INF, true, false, + false, + 0xf.ffffffffffffbffp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffbffp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + false, + 0xf.ffffffffffffbffp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffbffp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + false, + 0xf.ffffffffffffbffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, true, false, + 0xf.ffffffffffffbffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, true, false, + false, + 0xf.ffffffffffffbffffffffffffff8p+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffbffffffffffffff8p+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false), TEST ("179769313486231580793728971405303415079934132710037826936173" "778980444968292764750946649017977587207096330286416692887910" "946555547851940402630657488671505820681908902000708383676273" @@ -1891,35 +1891,35 @@ static const struct test tests[] = { "936475292719074168444365510704342711559699508093042880177904" "174497792", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, false, - INF, true, - 0xf.ffffffffffff8p+1020, false, - INF, true, - true, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - true, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - false, - 0xf.ffffffffffffcp+1020, true, - 0xf.ffffffffffffcp+1020, true, - 0xf.ffffffffffffcp+1020, true, - 0xf.ffffffffffffcp+1020, true, - true, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, false, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, false, false, + INF, true, false, + true, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + true, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + false, + 0xf.ffffffffffffcp+1020, true, false, + 0xf.ffffffffffffcp+1020, true, false, + 0xf.ffffffffffffcp+1020, true, false, + 0xf.ffffffffffffcp+1020, true, false, + true, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false), TEST ("179769313486231580793728971405303415079934132710037826936173" "778980444968292764750946649017977587207096330286416692887910" "946555547851940402630657488671505820681908902000708383676273" @@ -1927,35 +1927,35 @@ static const struct test tests[] = { "936475292719074168444365510704342711559699508093042880177904" "174497792.001", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, false, - INF, true, - 0xf.ffffffffffff8p+1020, false, - INF, true, - false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffc01p+1020, false, - false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffc01p+1020, false, - false, - 0xf.ffffffffffffcp+1020, true, - 0xf.ffffffffffffcp+1020, true, - 0xf.ffffffffffffcp+1020, true, - 0xf.ffffffffffffc0000000000004p+1020, true, - false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffcp+1020, false, - 0xf.ffffffffffffc000000000000008p+1020, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, false, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, false, false, + INF, true, false, + false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffc01p+1020, false, false, + false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffc01p+1020, false, false, + false, + 0xf.ffffffffffffcp+1020, true, false, + 0xf.ffffffffffffcp+1020, true, false, + 0xf.ffffffffffffcp+1020, true, false, + 0xf.ffffffffffffc0000000000004p+1020, true, false, + false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffcp+1020, false, false, + 0xf.ffffffffffffc000000000000008p+1020, false, false), TEST ("-17976931348623158079372897140530341507993413271003782693617" "377898044496829276475094664901797758720709633028641669288791" "094655554785194040263065748867150582068190890200070838367627" @@ -1963,35 +1963,35 @@ static const struct test tests[] = { "493647529271907416844436551070434271155969950809304288017790" "4174497791.999", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -0xf.ffffffffffff8p+1020, false, - -0xf.ffffffffffff8p+1020, false, - -0xf.ffffffffffff8p+1020, false, - false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffbffp+1020, false, - -0xf.ffffffffffffbffp+1020, false, - false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffbffp+1020, false, - -0xf.ffffffffffffbffp+1020, false, - false, - -0xf.ffffffffffffcp+1020, true, - -0xf.ffffffffffffcp+1020, true, - -0xf.ffffffffffffbffffffffffffcp+1020, false, - -0xf.ffffffffffffbffffffffffffcp+1020, false, - false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffbffffffffffffff8p+1020, false, - -0xf.ffffffffffffbffffffffffffff8p+1020, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, false, false, + -0xf.ffffffffffff8p+1020, false, false, + -0xf.ffffffffffff8p+1020, false, false, + false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffbffp+1020, false, false, + -0xf.ffffffffffffbffp+1020, false, false, + false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffbffp+1020, false, false, + -0xf.ffffffffffffbffp+1020, false, false, + false, + -0xf.ffffffffffffcp+1020, true, false, + -0xf.ffffffffffffcp+1020, true, false, + -0xf.ffffffffffffbffffffffffffcp+1020, false, false, + -0xf.ffffffffffffbffffffffffffcp+1020, false, false, + false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffbffffffffffffff8p+1020, false, false, + -0xf.ffffffffffffbffffffffffffff8p+1020, false, false), TEST ("-17976931348623158079372897140530341507993413271003782693617" "377898044496829276475094664901797758720709633028641669288791" "094655554785194040263065748867150582068190890200070838367627" @@ -1999,35 +1999,35 @@ static const struct test tests[] = { "493647529271907416844436551070434271155969950809304288017790" "4174497792", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, false, - -0xf.ffffffffffff8p+1020, false, - true, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - true, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - false, - -0xf.ffffffffffffcp+1020, true, - -0xf.ffffffffffffcp+1020, true, - -0xf.ffffffffffffcp+1020, true, - -0xf.ffffffffffffcp+1020, true, - true, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, false, false, + -0xf.ffffffffffff8p+1020, false, false, + true, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + true, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + false, + -0xf.ffffffffffffcp+1020, true, false, + -0xf.ffffffffffffcp+1020, true, false, + -0xf.ffffffffffffcp+1020, true, false, + -0xf.ffffffffffffcp+1020, true, false, + true, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false), TEST ("-17976931348623158079372897140530341507993413271003782693617" "377898044496829276475094664901797758720709633028641669288791" "094655554785194040263065748867150582068190890200070838367627" @@ -2035,35 +2035,35 @@ static const struct test tests[] = { "493647529271907416844436551070434271155969950809304288017790" "4174497792.001", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, false, - -0xf.ffffffffffff8p+1020, false, - false, - -0xf.ffffffffffffc01p+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - false, - -0xf.ffffffffffffc01p+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - false, - -0xf.ffffffffffffc0000000000004p+1020, true, - -0xf.ffffffffffffcp+1020, true, - -0xf.ffffffffffffcp+1020, true, - -0xf.ffffffffffffcp+1020, true, - false, - -0xf.ffffffffffffc000000000000008p+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false, - -0xf.ffffffffffffcp+1020, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, false, false, + -0xf.ffffffffffff8p+1020, false, false, + false, + -0xf.ffffffffffffc01p+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + false, + -0xf.ffffffffffffc01p+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + false, + -0xf.ffffffffffffc0000000000004p+1020, true, false, + -0xf.ffffffffffffcp+1020, true, false, + -0xf.ffffffffffffcp+1020, true, false, + -0xf.ffffffffffffcp+1020, true, false, + false, + -0xf.ffffffffffffc000000000000008p+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false, + -0xf.ffffffffffffcp+1020, false, false), TEST ("118973149535723176505351158982948866796625400469556721895649" "927756249918185172720476044944290457046138433056764616744328" "666255526748948793023632513609765434237723241753648908036202" @@ -2148,35 +2148,35 @@ static const struct test tests[] = { "578031503869424406179027994752890226443351619365453243328968" "8740976918527.999", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - 0xf.fffffffffffffffp+16380, false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - 0xf.fffffffffffffffp+16380, false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0xf.fffffffffffffff7fffffffffff8p+16380, false, - 0xf.fffffffffffffff8p+16380, false, - 0xf.fffffffffffffff7fffffffffff8p+16380, false, - 0xf.fffffffffffffff8p+16380, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + 0xf.fffffffffffffffp+16380, false, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + 0xf.fffffffffffffffp+16380, false, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffff7fffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffff7fffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8p+16380, false, false), TEST ("118973149535723176505351158982948866796625400469556721895649" "927756249918185172720476044944290457046138433056764616744328" "666255526748948793023632513609765434237723241753648908036202" @@ -2261,35 +2261,35 @@ static const struct test tests[] = { "578031503869424406179027994752890226443351619365453243328968" "8740976918528", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - true, - 0xf.fffffffffffffff8p+16380, false, - 0xf.fffffffffffffff8p+16380, false, - 0xf.fffffffffffffff8p+16380, false, - 0xf.fffffffffffffff8p+16380, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + true, + 0xf.fffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8p+16380, false, false), TEST ("118973149535723176505351158982948866796625400469556721895649" "927756249918185172720476044944290457046138433056764616744328" "666255526748948793023632513609765434237723241753648908036202" @@ -2374,35 +2374,35 @@ static const struct test tests[] = { "578031503869424406179027994752890226443351619365453243328968" "8740976918528.001", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0xf.fffffffffffffff8p+16380, false, - 0xf.fffffffffffffff8p+16380, false, - 0xf.fffffffffffffff8p+16380, false, - 0xf.fffffffffffffff8000000000008p+16380, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffff8000000000008p+16380, false, false), TEST ("-11897314953572317650535115898294886679662540046955672189564" "992775624991818517272047604494429045704613843305676461674432" "866625552674894879302363251360976543423772324175364890803620" @@ -2487,35 +2487,35 @@ static const struct test tests[] = { "557803150386942440617902799475289022644335161936545324332896" "88740976918527.999", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, true, - -0xf.ffffffffffff8p+1020, true, - false, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - false, - -0xf.fffffffffffffff8p+16380, false, - -0xf.fffffffffffffff8p+16380, false, - -0xf.fffffffffffffff7fffffffffff8p+16380, false, - -0xf.fffffffffffffff7fffffffffff8p+16380, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, true, false, + -0xf.ffffffffffff8p+1020, true, false, + false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + false, + -0xf.fffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffff7fffffffffff8p+16380, false, false, + -0xf.fffffffffffffff7fffffffffff8p+16380, false, false), TEST ("-11897314953572317650535115898294886679662540046955672189564" "992775624991818517272047604494429045704613843305676461674432" "866625552674894879302363251360976543423772324175364890803620" @@ -2600,35 +2600,35 @@ static const struct test tests[] = { "557803150386942440617902799475289022644335161936545324332896" "88740976918528", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, true, - -0xf.ffffffffffff8p+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - true, - -0xf.fffffffffffffff8p+16380, false, - -0xf.fffffffffffffff8p+16380, false, - -0xf.fffffffffffffff8p+16380, false, - -0xf.fffffffffffffff8p+16380, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, true, false, + -0xf.ffffffffffff8p+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + true, + -0xf.fffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffff8p+16380, false, false), TEST ("-11897314953572317650535115898294886679662540046955672189564" "992775624991818517272047604494429045704613843305676461674432" "866625552674894879302363251360976543423772324175364890803620" @@ -2713,35 +2713,35 @@ static const struct test tests[] = { "557803150386942440617902799475289022644335161936545324332896" "88740976918528.001", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, true, - -0xf.ffffffffffff8p+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - false, - -0xf.fffffffffffffff8000000000008p+16380, false, - -0xf.fffffffffffffff8p+16380, false, - -0xf.fffffffffffffff8p+16380, false, - -0xf.fffffffffffffff8p+16380, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, true, false, + -0xf.ffffffffffff8p+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + false, + -0xf.fffffffffffffff8000000000008p+16380, false, false, + -0xf.fffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffff8p+16380, false, false), TEST ("118973149535723176508575932662800707347995686986910214150118" "685272271246896789803961473130416053705672050873552479421805" "932646640744124594447361172514341324846716679654551308018400" @@ -2826,35 +2826,35 @@ static const struct test tests[] = { "972233447491583165728635513802591543441145939539353470970452" "5536550715391.999", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - INF, true), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + INF, true, false), TEST ("118973149535723176508575932662800707347995686986910214150118" "685272271246896789803961473130416053705672050873552479421805" "932646640744124594447361172514341324846716679654551308018400" @@ -2939,35 +2939,35 @@ static const struct test tests[] = { "972233447491583165728635513802591543441145939539353470970452" "5536550715392", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - INF, true, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - INF, true), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + INF, true, false), TEST ("118973149535723176508575932662800707347995686986910214150118" "685272271246896789803961473130416053705672050873552479421805" "932646640744124594447361172514341324846716679654551308018400" @@ -3052,35 +3052,35 @@ static const struct test tests[] = { "972233447491583165728635513802591543441145939539353470970452" "5536550715392.001", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - INF, true, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - INF, true), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + INF, true, false), TEST ("-11897314953572317650857593266280070734799568698691021415011" "868527227124689678980396147313041605370567205087355247942180" "593264664074412459444736117251434132484671667965455130801840" @@ -3165,35 +3165,35 @@ static const struct test tests[] = { "097223344749158316572863551380259154344114593953935347097045" "25536550715391.999", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, true, - -0xf.ffffffffffff8p+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - false, - -INF, true, - -0xf.fffffffffffffffffffffffffff8p+16380, false, - -0xf.fffffffffffffffffffffffffff8p+16380, false, - -0xf.fffffffffffffffffffffffffff8p+16380, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, true, false, + -0xf.ffffffffffff8p+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false), TEST ("-11897314953572317650857593266280070734799568698691021415011" "868527227124689678980396147313041605370567205087355247942180" "593264664074412459444736117251434132484671667965455130801840" @@ -3278,35 +3278,35 @@ static const struct test tests[] = { "097223344749158316572863551380259154344114593953935347097045" "25536550715392", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, true, - -0xf.ffffffffffff8p+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffff8p+16380, false, - -0xf.fffffffffffffffffffffffffff8p+16380, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, true, false, + -0xf.ffffffffffff8p+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false), TEST ("-11897314953572317650857593266280070734799568698691021415011" "868527227124689678980396147313041605370567205087355247942180" "593264664074412459444736117251434132484671667965455130801840" @@ -3391,419 +3391,419 @@ static const struct test tests[] = { "097223344749158316572863551380259154344114593953935347097045" "25536550715392.001", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, true, - -0xf.ffffffffffff8p+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffff8p+16380, false, - -0xf.fffffffffffffffffffffffffff8p+16380, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, true, false, + -0xf.ffffffffffff8p+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false), TEST ("2.1019476964872256063855943749348741969203929128147736576356" "0242583468662402879090222995728254318237304687499e-45", false, - 0x8p-152, false, - 0x8p-152, false, - 0x8p-152, false, - 0x1p-148, false, - false, - 0xb.ffffffffffff8p-152, false, - 0xcp-152, false, - 0xb.ffffffffffff8p-152, false, - 0xcp-152, false, - false, - 0xb.fffffffffffffffp-152, false, - 0xcp-152, false, - 0xb.fffffffffffffffp-152, false, - 0xcp-152, false, - false, - 0xb.fffffffffffffffp-152, false, - 0xcp-152, false, - 0xb.fffffffffffffffp-152, false, - 0xcp-152, false, - false, - 0xb.fffffffffffffffffffffffffcp-152, false, - 0xcp-152, false, - 0xb.fffffffffffffffffffffffffcp-152, false, - 0xcp-152, false, - false, - 0xb.fffffffffffffffffffffffffff8p-152, false, - 0xcp-152, false, - 0xb.fffffffffffffffffffffffffff8p-152, false, - 0xcp-152, false), + 0x8p-152, false, true, + 0x8p-152, false, true, + 0x8p-152, false, true, + 0x1p-148, false, true, + false, + 0xb.ffffffffffff8p-152, false, false, + 0xcp-152, false, false, + 0xb.ffffffffffff8p-152, false, false, + 0xcp-152, false, false, + false, + 0xb.fffffffffffffffp-152, false, false, + 0xcp-152, false, false, + 0xb.fffffffffffffffp-152, false, false, + 0xcp-152, false, false, + false, + 0xb.fffffffffffffffp-152, false, false, + 0xcp-152, false, false, + 0xb.fffffffffffffffp-152, false, false, + 0xcp-152, false, false, + false, + 0xb.fffffffffffffffffffffffffcp-152, false, false, + 0xcp-152, false, false, + 0xb.fffffffffffffffffffffffffcp-152, false, false, + 0xcp-152, false, false, + false, + 0xb.fffffffffffffffffffffffffff8p-152, false, false, + 0xcp-152, false, false, + 0xb.fffffffffffffffffffffffffff8p-152, false, false, + 0xcp-152, false, false), TEST ("2.1019476964872256063855943749348741969203929128147736576356" "02425834686624028790902229957282543182373046875e-45", false, - 0x8p-152, false, - 0x1p-148, false, - 0x8p-152, false, - 0x1p-148, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - true, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false), + 0x8p-152, false, true, + 0x1p-148, false, true, + 0x8p-152, false, true, + 0x1p-148, false, true, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + true, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false), TEST ("2.1019476964872256063855943749348741969203929128147736576356" "0242583468662402879090222995728254318237304687501e-45", false, - 0x8p-152, false, - 0x1p-148, false, - 0x8p-152, false, - 0x1p-148, false, - false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xc.0000000000008p-152, false, - false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xc.000000000000001p-152, false, - false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xc.000000000000001p-152, false, - false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xc.00000000000000000000000004p-152, false, - false, - 0xcp-152, false, - 0xcp-152, false, - 0xcp-152, false, - 0xc.0000000000000000000000000008p-152, false), + 0x8p-152, false, true, + 0x1p-148, false, true, + 0x8p-152, false, true, + 0x1p-148, false, true, + false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xc.0000000000008p-152, false, false, + false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xc.000000000000001p-152, false, false, + false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xc.000000000000001p-152, false, false, + false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xc.00000000000000000000000004p-152, false, false, + false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xcp-152, false, false, + 0xc.0000000000000000000000000008p-152, false, false), TEST ("-2.101947696487225606385594374934874196920392912814773657635" "60242583468662402879090222995728254318237304687499e-45", false, - -0x1p-148, false, - -0x8p-152, false, - -0x8p-152, false, - -0x8p-152, false, - false, - -0xcp-152, false, - -0xcp-152, false, - -0xb.ffffffffffff8p-152, false, - -0xb.ffffffffffff8p-152, false, - false, - -0xcp-152, false, - -0xcp-152, false, - -0xb.fffffffffffffffp-152, false, - -0xb.fffffffffffffffp-152, false, - false, - -0xcp-152, false, - -0xcp-152, false, - -0xb.fffffffffffffffp-152, false, - -0xb.fffffffffffffffp-152, false, - false, - -0xcp-152, false, - -0xcp-152, false, - -0xb.fffffffffffffffffffffffffcp-152, false, - -0xb.fffffffffffffffffffffffffcp-152, false, - false, - -0xcp-152, false, - -0xcp-152, false, - -0xb.fffffffffffffffffffffffffff8p-152, false, - -0xb.fffffffffffffffffffffffffff8p-152, false), + -0x1p-148, false, true, + -0x8p-152, false, true, + -0x8p-152, false, true, + -0x8p-152, false, true, + false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xb.ffffffffffff8p-152, false, false, + -0xb.ffffffffffff8p-152, false, false, + false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xb.fffffffffffffffp-152, false, false, + -0xb.fffffffffffffffp-152, false, false, + false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xb.fffffffffffffffp-152, false, false, + -0xb.fffffffffffffffp-152, false, false, + false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xb.fffffffffffffffffffffffffcp-152, false, false, + -0xb.fffffffffffffffffffffffffcp-152, false, false, + false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xb.fffffffffffffffffffffffffff8p-152, false, false, + -0xb.fffffffffffffffffffffffffff8p-152, false, false), TEST ("-2.101947696487225606385594374934874196920392912814773657635" "602425834686624028790902229957282543182373046875e-45", false, - -0x1p-148, false, - -0x1p-148, false, - -0x8p-152, false, - -0x8p-152, false, - true, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - true, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - true, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - true, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - true, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false), + -0x1p-148, false, true, + -0x1p-148, false, true, + -0x8p-152, false, true, + -0x8p-152, false, true, + true, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + true, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + true, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + true, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + true, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false), TEST ("-2.101947696487225606385594374934874196920392912814773657635" "60242583468662402879090222995728254318237304687501e-45", false, - -0x1p-148, false, - -0x1p-148, false, - -0x8p-152, false, - -0x8p-152, false, - false, - -0xc.0000000000008p-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - false, - -0xc.000000000000001p-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - false, - -0xc.000000000000001p-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - false, - -0xc.00000000000000000000000004p-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false, - false, - -0xc.0000000000000000000000000008p-152, false, - -0xcp-152, false, - -0xcp-152, false, - -0xcp-152, false), + -0x1p-148, false, true, + -0x1p-148, false, true, + -0x8p-152, false, true, + -0x8p-152, false, true, + false, + -0xc.0000000000008p-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + false, + -0xc.000000000000001p-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + false, + -0xc.000000000000001p-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + false, + -0xc.00000000000000000000000004p-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + false, + -0xc.0000000000000000000000000008p-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false, + -0xcp-152, false, false), TEST ("3.5032461608120426773093239582247903282006548546912894293926" "7070972447770671465150371659547090530395507812499e-45", false, - 0x1p-148, false, - 0x1p-148, false, - 0x1p-148, false, - 0x1.8p-148, false, - false, - 0x1.3ffffffffffffp-148, false, - 0x1.4p-148, false, - 0x1.3ffffffffffffp-148, false, - 0x1.4p-148, false, - false, - 0x1.3ffffffffffffffep-148, false, - 0x1.4p-148, false, - 0x1.3ffffffffffffffep-148, false, - 0x1.4p-148, false, - false, - 0x1.3ffffffffffffffep-148, false, - 0x1.4p-148, false, - 0x1.3ffffffffffffffep-148, false, - 0x1.4p-148, false, - false, - 0x1.3fffffffffffffffffffffffff8p-148, false, - 0x1.4p-148, false, - 0x1.3fffffffffffffffffffffffff8p-148, false, - 0x1.4p-148, false, - false, - 0x1.3fffffffffffffffffffffffffffp-148, false, - 0x1.4p-148, false, - 0x1.3fffffffffffffffffffffffffffp-148, false, - 0x1.4p-148, false), + 0x1p-148, false, true, + 0x1p-148, false, true, + 0x1p-148, false, true, + 0x1.8p-148, false, true, + false, + 0x1.3ffffffffffffp-148, false, false, + 0x1.4p-148, false, false, + 0x1.3ffffffffffffp-148, false, false, + 0x1.4p-148, false, false, + false, + 0x1.3ffffffffffffffep-148, false, false, + 0x1.4p-148, false, false, + 0x1.3ffffffffffffffep-148, false, false, + 0x1.4p-148, false, false, + false, + 0x1.3ffffffffffffffep-148, false, false, + 0x1.4p-148, false, false, + 0x1.3ffffffffffffffep-148, false, false, + 0x1.4p-148, false, false, + false, + 0x1.3fffffffffffffffffffffffff8p-148, false, false, + 0x1.4p-148, false, false, + 0x1.3fffffffffffffffffffffffff8p-148, false, false, + 0x1.4p-148, false, false, + false, + 0x1.3fffffffffffffffffffffffffffp-148, false, false, + 0x1.4p-148, false, false, + 0x1.3fffffffffffffffffffffffffffp-148, false, false, + 0x1.4p-148, false, false), TEST ("3.5032461608120426773093239582247903282006548546912894293926" "70709724477706714651503716595470905303955078125e-45", false, - 0x1p-148, false, - 0x1p-148, false, - 0x1p-148, false, - 0x1.8p-148, false, - true, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - true, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - true, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - true, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - true, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false), + 0x1p-148, false, true, + 0x1p-148, false, true, + 0x1p-148, false, true, + 0x1.8p-148, false, true, + true, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + true, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + true, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + true, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + true, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false), TEST ("3.5032461608120426773093239582247903282006548546912894293926" "7070972447770671465150371659547090530395507812501e-45", false, - 0x1p-148, false, - 0x1.8p-148, false, - 0x1p-148, false, - 0x1.8p-148, false, - false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4000000000001p-148, false, - false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4000000000000002p-148, false, - false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4000000000000002p-148, false, - false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.400000000000000000000000008p-148, false, - false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4p-148, false, - 0x1.4000000000000000000000000001p-148, false), + 0x1p-148, false, true, + 0x1.8p-148, false, true, + 0x1p-148, false, true, + 0x1.8p-148, false, true, + false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4000000000001p-148, false, false, + false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4000000000000002p-148, false, false, + false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4000000000000002p-148, false, false, + false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.400000000000000000000000008p-148, false, false, + false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4p-148, false, false, + 0x1.4000000000000000000000000001p-148, false, false), TEST ("-3.503246160812042677309323958224790328200654854691289429392" "67070972447770671465150371659547090530395507812499e-45", false, - -0x1.8p-148, false, - -0x1p-148, false, - -0x1p-148, false, - -0x1p-148, false, - false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.3ffffffffffffp-148, false, - -0x1.3ffffffffffffp-148, false, - false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.3ffffffffffffffep-148, false, - -0x1.3ffffffffffffffep-148, false, - false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.3ffffffffffffffep-148, false, - -0x1.3ffffffffffffffep-148, false, - false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.3fffffffffffffffffffffffff8p-148, false, - -0x1.3fffffffffffffffffffffffff8p-148, false, - false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.3fffffffffffffffffffffffffffp-148, false, - -0x1.3fffffffffffffffffffffffffffp-148, false), + -0x1.8p-148, false, true, + -0x1p-148, false, true, + -0x1p-148, false, true, + -0x1p-148, false, true, + false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.3ffffffffffffp-148, false, false, + -0x1.3ffffffffffffp-148, false, false, + false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.3ffffffffffffffep-148, false, false, + -0x1.3ffffffffffffffep-148, false, false, + false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.3ffffffffffffffep-148, false, false, + -0x1.3ffffffffffffffep-148, false, false, + false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.3fffffffffffffffffffffffff8p-148, false, false, + -0x1.3fffffffffffffffffffffffff8p-148, false, false, + false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.3fffffffffffffffffffffffffffp-148, false, false, + -0x1.3fffffffffffffffffffffffffffp-148, false, false), TEST ("-3.503246160812042677309323958224790328200654854691289429392" "670709724477706714651503716595470905303955078125e-45", false, - -0x1.8p-148, false, - -0x1p-148, false, - -0x1p-148, false, - -0x1p-148, false, - true, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - true, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - true, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - true, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - true, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false), + -0x1.8p-148, false, true, + -0x1p-148, false, true, + -0x1p-148, false, true, + -0x1p-148, false, true, + true, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + true, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + true, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + true, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + true, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false), TEST ("-3.503246160812042677309323958224790328200654854691289429392" "67070972447770671465150371659547090530395507812501e-45", false, - -0x1.8p-148, false, - -0x1.8p-148, false, - -0x1p-148, false, - -0x1p-148, false, - false, - -0x1.4000000000001p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - false, - -0x1.4000000000000002p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - false, - -0x1.4000000000000002p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - false, - -0x1.400000000000000000000000008p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - false, - -0x1.4000000000000000000000000001p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false, - -0x1.4p-148, false), + -0x1.8p-148, false, true, + -0x1.8p-148, false, true, + -0x1p-148, false, true, + -0x1p-148, false, true, + false, + -0x1.4000000000001p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + false, + -0x1.4000000000000002p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + false, + -0x1.4000000000000002p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + false, + -0x1.400000000000000000000000008p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + false, + -0x1.4000000000000000000000000001p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false, + -0x1.4p-148, false, false), TEST ("7.4109846876186981626485318930233205854758970392148714663837" "852375101326090531312779794975454245398856969484704316857659" "638998506553390969459816219401617281718945106978546710679176" @@ -3818,35 +3818,35 @@ static const struct test tests[] = { "337560846003984904972149117463085539556354188641513168478436" "31308023759629577398300170898437499e-324", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x4p-1076, false, - 0x4p-1076, false, - 0x4p-1076, false, - 0x8p-1076, false, - false, - 0x5.fffffffffffffff8p-1076, false, - 0x6p-1076, false, - 0x5.fffffffffffffff8p-1076, false, - 0x6p-1076, false, - false, - 0x5.fffffffffffffff8p-1076, false, - 0x6p-1076, false, - 0x5.fffffffffffffff8p-1076, false, - 0x6p-1076, false, - false, - 0x4p-1076, false, - 0x4p-1076, false, - 0x4p-1076, false, - 0x8p-1076, false, - false, - 0x5.fffffffffffffffffffffffffffcp-1076, false, - 0x6p-1076, false, - 0x5.fffffffffffffffffffffffffffcp-1076, false, - 0x6p-1076, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x4p-1076, false, true, + 0x4p-1076, false, true, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + false, + 0x5.fffffffffffffff8p-1076, false, false, + 0x6p-1076, false, false, + 0x5.fffffffffffffff8p-1076, false, false, + 0x6p-1076, false, false, + false, + 0x5.fffffffffffffff8p-1076, false, false, + 0x6p-1076, false, false, + 0x5.fffffffffffffff8p-1076, false, false, + 0x6p-1076, false, false, + false, + 0x4p-1076, false, true, + 0x4p-1076, false, true, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + false, + 0x5.fffffffffffffffffffffffffffcp-1076, false, false, + 0x6p-1076, false, false, + 0x5.fffffffffffffffffffffffffffcp-1076, false, false, + 0x6p-1076, false, false), TEST ("7.4109846876186981626485318930233205854758970392148714663837" "852375101326090531312779794975454245398856969484704316857659" "638998506553390969459816219401617281718945106978546710679176" @@ -3861,35 +3861,35 @@ static const struct test tests[] = { "337560846003984904972149117463085539556354188641513168478436" "313080237596295773983001708984375e-324", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x4p-1076, false, - 0x8p-1076, false, - 0x4p-1076, false, - 0x8p-1076, false, - true, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - true, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - false, - 0x4p-1076, false, - 0x8p-1076, false, - 0x4p-1076, false, - 0x8p-1076, false, - true, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + true, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + true, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + false, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + true, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false), TEST ("7.4109846876186981626485318930233205854758970392148714663837" "852375101326090531312779794975454245398856969484704316857659" "638998506553390969459816219401617281718945106978546710679176" @@ -3904,35 +3904,35 @@ static const struct test tests[] = { "337560846003984904972149117463085539556354188641513168478436" "31308023759629577398300170898437501e-324", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x4p-1076, false, - 0x8p-1076, false, - 0x4p-1076, false, - 0x8p-1076, false, - false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6.0000000000000008p-1076, false, - false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6.0000000000000008p-1076, false, - false, - 0x4p-1076, false, - 0x8p-1076, false, - 0x4p-1076, false, - 0x8p-1076, false, - false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6p-1076, false, - 0x6.0000000000000000000000000004p-1076, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6.0000000000000008p-1076, false, false, + false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6.0000000000000008p-1076, false, false, + false, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + 0x4p-1076, false, true, + 0x8p-1076, false, true, + false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6p-1076, false, false, + 0x6.0000000000000000000000000004p-1076, false, false), TEST ("-7.410984687618698162648531893023320585475897039214871466383" "785237510132609053131277979497545424539885696948470431685765" "963899850655339096945981621940161728171894510697854671067917" @@ -3947,35 +3947,35 @@ static const struct test tests[] = { "433756084600398490497214911746308553955635418864151316847843" "631308023759629577398300170898437499e-324", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x5.fffffffffffffff8p-1076, false, - -0x5.fffffffffffffff8p-1076, false, - false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x5.fffffffffffffff8p-1076, false, - -0x5.fffffffffffffff8p-1076, false, - false, - -0x8p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x5.fffffffffffffffffffffffffffcp-1076, false, - -0x5.fffffffffffffffffffffffffffcp-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x5.fffffffffffffff8p-1076, false, false, + -0x5.fffffffffffffff8p-1076, false, false, + false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x5.fffffffffffffff8p-1076, false, false, + -0x5.fffffffffffffff8p-1076, false, false, + false, + -0x8p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x5.fffffffffffffffffffffffffffcp-1076, false, false, + -0x5.fffffffffffffffffffffffffffcp-1076, false, false), TEST ("-7.410984687618698162648531893023320585475897039214871466383" "785237510132609053131277979497545424539885696948470431685765" "963899850655339096945981621940161728171894510697854671067917" @@ -3990,35 +3990,35 @@ static const struct test tests[] = { "433756084600398490497214911746308553955635418864151316847843" "6313080237596295773983001708984375e-324", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-1076, false, - -0x8p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - true, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - true, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - false, - -0x8p-1076, false, - -0x8p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - true, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-1076, false, true, + -0x8p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + true, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + true, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + false, + -0x8p-1076, false, true, + -0x8p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + true, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false), TEST ("-7.410984687618698162648531893023320585475897039214871466383" "785237510132609053131277979497545424539885696948470431685765" "963899850655339096945981621940161728171894510697854671067917" @@ -4033,35 +4033,35 @@ static const struct test tests[] = { "433756084600398490497214911746308553955635418864151316847843" "631308023759629577398300170898437501e-324", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-1076, false, - -0x8p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - false, - -0x6.0000000000000008p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - false, - -0x6.0000000000000008p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - false, - -0x8p-1076, false, - -0x8p-1076, false, - -0x4p-1076, false, - -0x4p-1076, false, - false, - -0x6.0000000000000000000000000004p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false, - -0x6p-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-1076, false, true, + -0x8p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + false, + -0x6.0000000000000008p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + false, + -0x6.0000000000000008p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + false, + -0x8p-1076, false, true, + -0x8p-1076, false, true, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + false, + -0x6.0000000000000000000000000004p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false, + -0x6p-1076, false, false), TEST ("5.4677992978237119037926089004291297245985762235403450155814" "707305425575329500966052143410629387408077958710210208052966" "529504784489330482549602621133847135082257338717668975178538" @@ -4255,35 +4255,35 @@ static const struct test tests[] = { "866268925981702690270202829595794350800918257913991744455922" "683343374046671669930219650268554687499e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x8p-16448, false, - 0x8p-16448, false, - 0x8p-16448, false, - 0x1p-16444, false, - false, - 0x8p-16448, false, - 0xcp-16448, false, - 0x8p-16448, false, - 0xcp-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0xb.fffffffffffcp-16448, false, - 0xcp-16448, false, - 0xb.fffffffffffcp-16448, false, - 0xcp-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x8p-16448, false, true, + 0x8p-16448, false, true, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + false, + 0x8p-16448, false, true, + 0xcp-16448, false, true, + 0x8p-16448, false, true, + 0xcp-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0xb.fffffffffffcp-16448, false, true, + 0xcp-16448, false, true, + 0xb.fffffffffffcp-16448, false, true, + 0xcp-16448, false, true), TEST ("5.4677992978237119037926089004291297245985762235403450155814" "707305425575329500966052143410629387408077958710210208052966" "529504784489330482549602621133847135082257338717668975178538" @@ -4477,35 +4477,35 @@ static const struct test tests[] = { "866268925981702690270202829595794350800918257913991744455922" "6833433740466716699302196502685546875e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x8p-16448, false, - 0x1p-16444, false, - 0x8p-16448, false, - 0x1p-16444, false, - true, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + true, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false), TEST ("5.4677992978237119037926089004291297245985762235403450155814" "707305425575329500966052143410629387408077958710210208052966" "529504784489330482549602621133847135082257338717668975178538" @@ -4699,35 +4699,35 @@ static const struct test tests[] = { "866268925981702690270202829595794350800918257913991744455922" "683343374046671669930219650268554687501e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x8p-16448, false, - 0x1p-16444, false, - 0x8p-16448, false, - 0x1p-16444, false, - false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0x1p-16444, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xc.000000000004p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + false, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0x1p-16444, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0xc.000000000004p-16448, false, true), TEST ("-5.467799297823711903792608900429129724598576223540345015581" "470730542557532950096605214341062938740807795871021020805296" "652950478448933048254960262113384713508225733871766897517853" @@ -4921,35 +4921,35 @@ static const struct test tests[] = { "386626892598170269027020282959579435080091825791399174445592" "2683343374046671669930219650268554687499e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x1p-16444, false, - -0x8p-16448, false, - -0x8p-16448, false, - -0x8p-16448, false, - false, - -0xcp-16448, false, - -0xcp-16448, false, - -0x8p-16448, false, - -0x8p-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xb.fffffffffffcp-16448, false, - -0xb.fffffffffffcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x1p-16444, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + false, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0xb.fffffffffffcp-16448, false, true, + -0xb.fffffffffffcp-16448, false, true), TEST ("-5.467799297823711903792608900429129724598576223540345015581" "470730542557532950096605214341062938740807795871021020805296" "652950478448933048254960262113384713508225733871766897517853" @@ -5143,35 +5143,35 @@ static const struct test tests[] = { "386626892598170269027020282959579435080091825791399174445592" "26833433740466716699302196502685546875e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x1p-16444, false, - -0x1p-16444, false, - -0x8p-16448, false, - -0x8p-16448, false, - true, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x1p-16444, false, true, + -0x1p-16444, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + true, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false), TEST ("-5.467799297823711903792608900429129724598576223540345015581" "470730542557532950096605214341062938740807795871021020805296" "652950478448933048254960262113384713508225733871766897517853" @@ -5365,35 +5365,35 @@ static const struct test tests[] = { "386626892598170269027020282959579435080091825791399174445592" "2683343374046671669930219650268554687501e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x1p-16444, false, - -0x1p-16444, false, - -0x8p-16448, false, - -0x8p-16448, false, - false, - -0x1p-16444, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0xc.000000000004p-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x1p-16444, false, true, + -0x1p-16444, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + false, + -0x1p-16444, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0xc.000000000004p-16448, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true), TEST ("5.4677992978237119037926089004291297245985762235403450155814" "707305425575329500966052143410629387408077958710210208052966" "529504784489330482549602621133847135082257338717668975178538" @@ -5587,35 +5587,35 @@ static const struct test tests[] = { "866268925981702690270202829595794350800918257913991744455922" "683343374046671669930219650268554687499e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x8p-16448, false, - 0x8p-16448, false, - 0x8p-16448, false, - 0x1p-16444, false, - false, - 0x8p-16448, false, - 0xcp-16448, false, - 0x8p-16448, false, - 0xcp-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0xb.fffffffffffcp-16448, false, - 0xcp-16448, false, - 0xb.fffffffffffcp-16448, false, - 0xcp-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x8p-16448, false, true, + 0x8p-16448, false, true, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + false, + 0x8p-16448, false, true, + 0xcp-16448, false, true, + 0x8p-16448, false, true, + 0xcp-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0xb.fffffffffffcp-16448, false, true, + 0xcp-16448, false, true, + 0xb.fffffffffffcp-16448, false, true, + 0xcp-16448, false, true), TEST ("5.4677992978237119037926089004291297245985762235403450155814" "707305425575329500966052143410629387408077958710210208052966" "529504784489330482549602621133847135082257338717668975178538" @@ -5809,35 +5809,35 @@ static const struct test tests[] = { "866268925981702690270202829595794350800918257913991744455922" "6833433740466716699302196502685546875e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x8p-16448, false, - 0x1p-16444, false, - 0x8p-16448, false, - 0x1p-16444, false, - true, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + true, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false, + 0xcp-16448, false, false), TEST ("5.4677992978237119037926089004291297245985762235403450155814" "707305425575329500966052143410629387408077958710210208052966" "529504784489330482549602621133847135082257338717668975178538" @@ -6031,35 +6031,35 @@ static const struct test tests[] = { "866268925981702690270202829595794350800918257913991744455922" "683343374046671669930219650268554687501e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x8p-16448, false, - 0x1p-16444, false, - 0x8p-16448, false, - 0x1p-16444, false, - false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0x1p-16444, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xcp-16448, false, - 0xc.000000000004p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + 0x8p-16448, false, true, + 0x1p-16444, false, true, + false, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0x1p-16444, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0xcp-16448, false, true, + 0xc.000000000004p-16448, false, true), TEST ("-5.467799297823711903792608900429129724598576223540345015581" "470730542557532950096605214341062938740807795871021020805296" "652950478448933048254960262113384713508225733871766897517853" @@ -6253,35 +6253,35 @@ static const struct test tests[] = { "386626892598170269027020282959579435080091825791399174445592" "2683343374046671669930219650268554687499e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x1p-16444, false, - -0x8p-16448, false, - -0x8p-16448, false, - -0x8p-16448, false, - false, - -0xcp-16448, false, - -0xcp-16448, false, - -0x8p-16448, false, - -0x8p-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xb.fffffffffffcp-16448, false, - -0xb.fffffffffffcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x1p-16444, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + false, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0xb.fffffffffffcp-16448, false, true, + -0xb.fffffffffffcp-16448, false, true), TEST ("-5.467799297823711903792608900429129724598576223540345015581" "470730542557532950096605214341062938740807795871021020805296" "652950478448933048254960262113384713508225733871766897517853" @@ -6475,35 +6475,35 @@ static const struct test tests[] = { "386626892598170269027020282959579435080091825791399174445592" "26833433740466716699302196502685546875e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x1p-16444, false, - -0x1p-16444, false, - -0x8p-16448, false, - -0x8p-16448, false, - true, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x1p-16444, false, true, + -0x1p-16444, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + true, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false, + -0xcp-16448, false, false), TEST ("-5.467799297823711903792608900429129724598576223540345015581" "470730542557532950096605214341062938740807795871021020805296" "652950478448933048254960262113384713508225733871766897517853" @@ -6697,630 +6697,630 @@ static const struct test tests[] = { "386626892598170269027020282959579435080091825791399174445592" "2683343374046671669930219650268554687501e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x1p-16444, false, - -0x1p-16444, false, - -0x8p-16448, false, - -0x8p-16448, false, - false, - -0x1p-16444, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0xc.000000000004p-16448, false, - -0xcp-16448, false, - -0xcp-16448, false, - -0xcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x1p-16444, false, true, + -0x1p-16444, false, true, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + false, + -0x1p-16444, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0xc.000000000004p-16448, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true, + -0xcp-16448, false, true), TEST ("-0x0.7p-149", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - true, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - true, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - true, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - true, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false, - -0x3.8p-152, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + true, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + true, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + true, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + true, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false, + -0x3.8p-152, false, false), TEST ("-0x0.7p-1074", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - true, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - -0x1.cp-1076, false, - -0x1.cp-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + true, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false, + -0x1.cp-1076, false, false), TEST ("-0x0.7p-16445", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x3.8p-16448, false, - -0x3.8p-16448, false, - -0x3.8p-16448, false, - -0x3.8p-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x3.8p-16448, false, false, + -0x3.8p-16448, false, false, + -0x3.8p-16448, false, false, + -0x3.8p-16448, false, false), TEST ("-0x0.7p-16494", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16496, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16496, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true), TEST ("0x1p-150", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false), TEST ("0x1p-1075", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - true, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + true, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false), TEST ("0x1p-16446", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - true, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + true, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false), TEST ("0x1p-16495", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16496, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16496, false, true), TEST ("-0x1p-150", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false), TEST ("-0x1p-1075", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - true, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + true, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false), TEST ("-0x1p-16446", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false), TEST ("-0x1p-16495", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16496, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16496, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true), TEST (".70064923216240853546186479164495807e-45", false, - 0x0p+0, false, - 0x8p-152, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000004p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000000008p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000000008p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.00000000000000000000000002p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000000000000000000004p-152, false), + 0x0p+0, false, true, + 0x8p-152, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000004p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000000008p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000000008p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.00000000000000000000000002p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000000000000000000004p-152, false, false), TEST ("7.0064923216240853546186479164495806564013097093825788587853" "4141944895541342930300743319094181060791015624e-46", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x3.ffffffffffffep-152, false, - 0x4p-152, false, - 0x3.ffffffffffffep-152, false, - 0x4p-152, false, - false, - 0x3.fffffffffffffffcp-152, false, - 0x4p-152, false, - 0x3.fffffffffffffffcp-152, false, - 0x4p-152, false, - false, - 0x3.fffffffffffffffcp-152, false, - 0x4p-152, false, - 0x3.fffffffffffffffcp-152, false, - 0x4p-152, false, - false, - 0x3.ffffffffffffffffffffffffffp-152, false, - 0x4p-152, false, - 0x3.ffffffffffffffffffffffffffp-152, false, - 0x4p-152, false, - false, - 0x3.fffffffffffffffffffffffffffep-152, false, - 0x4p-152, false, - 0x3.fffffffffffffffffffffffffffep-152, false, - 0x4p-152, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x3.ffffffffffffep-152, false, false, + 0x4p-152, false, false, + 0x3.ffffffffffffep-152, false, false, + 0x4p-152, false, false, + false, + 0x3.fffffffffffffffcp-152, false, false, + 0x4p-152, false, false, + 0x3.fffffffffffffffcp-152, false, false, + 0x4p-152, false, false, + false, + 0x3.fffffffffffffffcp-152, false, false, + 0x4p-152, false, false, + 0x3.fffffffffffffffcp-152, false, false, + 0x4p-152, false, false, + false, + 0x3.ffffffffffffffffffffffffffp-152, false, false, + 0x4p-152, false, false, + 0x3.ffffffffffffffffffffffffffp-152, false, false, + 0x4p-152, false, false, + false, + 0x3.fffffffffffffffffffffffffffep-152, false, false, + 0x4p-152, false, false, + 0x3.fffffffffffffffffffffffffffep-152, false, false, + 0x4p-152, false, false), TEST ("7.0064923216240853546186479164495806564013097093825788587853" "4141944895541342930300743319094181060791015625e-46", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - true, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + true, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false), TEST ("7.0064923216240853546186479164495806564013097093825788587853" "4141944895541342930300743319094181060791015626e-46", false, - 0x0p+0, false, - 0x8p-152, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000004p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000000008p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000000008p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.00000000000000000000000002p-152, false, - false, - 0x4p-152, false, - 0x4p-152, false, - 0x4p-152, false, - 0x4.0000000000000000000000000004p-152, false), + 0x0p+0, false, true, + 0x8p-152, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000004p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000000008p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000000008p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.00000000000000000000000002p-152, false, false, + false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4p-152, false, false, + 0x4.0000000000000000000000000004p-152, false, false), TEST ("-7.006492321624085354618647916449580656401309709382578858785" "34141944895541342930300743319094181060791015624e-46", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-152, false, - -0x4p-152, false, - -0x3.ffffffffffffep-152, false, - -0x3.ffffffffffffep-152, false, - false, - -0x4p-152, false, - -0x4p-152, false, - -0x3.fffffffffffffffcp-152, false, - -0x3.fffffffffffffffcp-152, false, - false, - -0x4p-152, false, - -0x4p-152, false, - -0x3.fffffffffffffffcp-152, false, - -0x3.fffffffffffffffcp-152, false, - false, - -0x4p-152, false, - -0x4p-152, false, - -0x3.ffffffffffffffffffffffffffp-152, false, - -0x3.ffffffffffffffffffffffffffp-152, false, - false, - -0x4p-152, false, - -0x4p-152, false, - -0x3.fffffffffffffffffffffffffffep-152, false, - -0x3.fffffffffffffffffffffffffffep-152, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x3.ffffffffffffep-152, false, false, + -0x3.ffffffffffffep-152, false, false, + false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x3.fffffffffffffffcp-152, false, false, + -0x3.fffffffffffffffcp-152, false, false, + false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x3.fffffffffffffffcp-152, false, false, + -0x3.fffffffffffffffcp-152, false, false, + false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x3.ffffffffffffffffffffffffffp-152, false, false, + -0x3.ffffffffffffffffffffffffffp-152, false, false, + false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x3.fffffffffffffffffffffffffffep-152, false, false, + -0x3.fffffffffffffffffffffffffffep-152, false, false), TEST ("-7.006492321624085354618647916449580656401309709382578858785" "34141944895541342930300743319094181060791015625e-46", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - true, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + true, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false), TEST ("-7.006492321624085354618647916449580656401309709382578858785" "34141944895541342930300743319094181060791015626e-46", false, - -0x8p-152, false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4.0000000000004p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - false, - -0x4.0000000000000008p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - false, - -0x4.0000000000000008p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - false, - -0x4.00000000000000000000000002p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false, - false, - -0x4.0000000000000000000000000004p-152, false, - -0x4p-152, false, - -0x4p-152, false, - -0x4p-152, false), + -0x8p-152, false, true, + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4.0000000000004p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + false, + -0x4.0000000000000008p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + false, + -0x4.0000000000000008p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + false, + -0x4.00000000000000000000000002p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + false, + -0x4.0000000000000000000000000004p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false, + -0x4p-152, false, false), TEST ("2.4703282292062327208828439643411068618252990130716238221279" "284125033775363510437593264991818081799618989828234772285886" "546332835517796989819938739800539093906315035659515570226392" @@ -7335,35 +7335,35 @@ static const struct test tests[] = { "779186948667994968324049705821028513185451396213837722826145" "437693412532098591327667236328124e-324", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x1.fffffffffffffffep-1076, false, - 0x2p-1076, false, - 0x1.fffffffffffffffep-1076, false, - 0x2p-1076, false, - false, - 0x1.fffffffffffffffep-1076, false, - 0x2p-1076, false, - 0x1.fffffffffffffffep-1076, false, - 0x2p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x1.ffffffffffffffffffffffffffffp-1076, false, - 0x2p-1076, false, - 0x1.ffffffffffffffffffffffffffffp-1076, false, - 0x2p-1076, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.fffffffffffffffep-1076, false, false, + 0x2p-1076, false, false, + 0x1.fffffffffffffffep-1076, false, false, + 0x2p-1076, false, false, + false, + 0x1.fffffffffffffffep-1076, false, false, + 0x2p-1076, false, false, + 0x1.fffffffffffffffep-1076, false, false, + 0x2p-1076, false, false, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.ffffffffffffffffffffffffffffp-1076, false, false, + 0x2p-1076, false, false, + 0x1.ffffffffffffffffffffffffffffp-1076, false, false, + 0x2p-1076, false, false), TEST ("2.4703282292062327208828439643411068618252990130716238221279" "284125033775363510437593264991818081799618989828234772285886" "546332835517796989819938739800539093906315035659515570226392" @@ -7378,35 +7378,35 @@ static const struct test tests[] = { "779186948667994968324049705821028513185451396213837722826145" "437693412532098591327667236328125e-324", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - true, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + true, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false), TEST ("2.4703282292062327208828439643411068618252990130716238221279" "284125033775363510437593264991818081799618989828234772285886" "546332835517796989819938739800539093906315035659515570226392" @@ -7421,35 +7421,35 @@ static const struct test tests[] = { "779186948667994968324049705821028513185451396213837722826145" "437693412532098591327667236328126e-324", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x4p-1076, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2.0000000000000004p-1076, false, - false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2.0000000000000004p-1076, false, - false, - 0x0p+0, false, - 0x4p-1076, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2p-1076, false, - 0x2.0000000000000000000000000002p-1076, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x4p-1076, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2.0000000000000004p-1076, false, false, + false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2.0000000000000004p-1076, false, false, + false, + 0x0p+0, false, true, + 0x4p-1076, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2p-1076, false, false, + 0x2.0000000000000000000000000002p-1076, false, false), TEST ("-2.470328229206232720882843964341106861825299013071623822127" "928412503377536351043759326499181808179961898982823477228588" "654633283551779698981993873980053909390631503565951557022639" @@ -7464,35 +7464,35 @@ static const struct test tests[] = { "477918694866799496832404970582102851318545139621383772282614" "5437693412532098591327667236328124e-324", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x1.fffffffffffffffep-1076, false, - -0x1.fffffffffffffffep-1076, false, - false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x1.fffffffffffffffep-1076, false, - -0x1.fffffffffffffffep-1076, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x1.ffffffffffffffffffffffffffffp-1076, false, - -0x1.ffffffffffffffffffffffffffffp-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x1.fffffffffffffffep-1076, false, false, + -0x1.fffffffffffffffep-1076, false, false, + false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x1.fffffffffffffffep-1076, false, false, + -0x1.fffffffffffffffep-1076, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x1.ffffffffffffffffffffffffffffp-1076, false, false, + -0x1.ffffffffffffffffffffffffffffp-1076, false, false), TEST ("-2.470328229206232720882843964341106861825299013071623822127" "928412503377536351043759326499181808179961898982823477228588" "654633283551779698981993873980053909390631503565951557022639" @@ -7507,35 +7507,35 @@ static const struct test tests[] = { "477918694866799496832404970582102851318545139621383772282614" "5437693412532098591327667236328125e-324", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - true, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + true, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false), TEST ("-2.470328229206232720882843964341106861825299013071623822127" "928412503377536351043759326499181808179961898982823477228588" "654633283551779698981993873980053909390631503565951557022639" @@ -7550,35 +7550,35 @@ static const struct test tests[] = { "477918694866799496832404970582102851318545139621383772282614" "5437693412532098591327667236328126e-324", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x2.0000000000000004p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - false, - -0x2.0000000000000004p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - false, - -0x4p-1076, false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x2.0000000000000000000000000002p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false, - -0x2p-1076, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x2.0000000000000004p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + false, + -0x2.0000000000000004p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + false, + -0x4p-1076, false, true, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x2.0000000000000000000000000002p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false, + -0x2p-1076, false, false), TEST ("1.8225997659412373012642029668097099081995254078467816718604" "902435141858443166988684047803543129136025986236736736017655" "509834928163110160849867540377949045027419112905889658392846" @@ -7772,35 +7772,35 @@ static const struct test tests[] = { "622089641993900896756734276531931450266972752637997248151974" "2277811246822238899767398834228515624e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x4p-16448, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x3.fffffffffffcp-16448, false, - 0x4p-16448, false, - 0x3.fffffffffffcp-16448, false, - 0x4p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x4p-16448, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x3.fffffffffffcp-16448, false, true, + 0x4p-16448, false, true, + 0x3.fffffffffffcp-16448, false, true, + 0x4p-16448, false, true), TEST ("1.8225997659412373012642029668097099081995254078467816718604" "902435141858443166988684047803543129136025986236736736017655" "509834928163110160849867540377949045027419112905889658392846" @@ -7994,35 +7994,35 @@ static const struct test tests[] = { "622089641993900896756734276531931450266972752637997248151974" "2277811246822238899767398834228515625e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - true, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + true, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false, + 0x4p-16448, false, false), TEST ("1.8225997659412373012642029668097099081995254078467816718604" "902435141858443166988684047803543129136025986236736736017655" "509834928163110160849867540377949045027419112905889658392846" @@ -8216,35 +8216,35 @@ static const struct test tests[] = { "622089641993900896756734276531931450266972752637997248151974" "2277811246822238899767398834228515626e-4951", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x8p-16448, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4p-16448, false, - 0x4.000000000004p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x8p-16448, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x4p-16448, false, true, + 0x4p-16448, false, true, + 0x4p-16448, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x4p-16448, false, true, + 0x4p-16448, false, true, + 0x4p-16448, false, true, + 0x4.000000000004p-16448, false, true), TEST ("-1.822599765941237301264202966809709908199525407846781671860" "490243514185844316698868404780354312913602598623673673601765" "550983492816311016084986754037794904502741911290588965839284" @@ -8438,35 +8438,35 @@ static const struct test tests[] = { "462208964199390089675673427653193145026697275263799724815197" "42277811246822238899767398834228515624e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x3.fffffffffffcp-16448, false, - -0x3.fffffffffffcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x4p-16448, false, true, + -0x3.fffffffffffcp-16448, false, true, + -0x3.fffffffffffcp-16448, false, true), TEST ("-1.822599765941237301264202966809709908199525407846781671860" "490243514185844316698868404780354312913602598623673673601765" "550983492816311016084986754037794904502741911290588965839284" @@ -8660,35 +8660,35 @@ static const struct test tests[] = { "462208964199390089675673427653193145026697275263799724815197" "42277811246822238899767398834228515625e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false, + -0x4p-16448, false, false), TEST ("-1.822599765941237301264202966809709908199525407846781671860" "490243514185844316698868404780354312913602598623673673601765" "550983492816311016084986754037794904502741911290588965839284" @@ -8882,35 +8882,35 @@ static const struct test tests[] = { "462208964199390089675673427653193145026697275263799724815197" "42277811246822238899767398834228515626e-4951", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4.000000000004p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x4p-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x4p-16448, false, true, + -0x4p-16448, false, true, + -0x4p-16448, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4.000000000004p-16448, false, true, + -0x4p-16448, false, true, + -0x4p-16448, false, true, + -0x4p-16448, false, true), TEST ("9.1129988297061865063210148340485495409976270392339083593024" "512175709292215834943420239017715645680129931183683680088277" "549174640815550804249337701889745225137095564529448291964230" @@ -9104,35 +9104,35 @@ static const struct test tests[] = { "110448209969504483783671382659657251334863763189986240759871" "1389056234111194498836994171142578124e-4952", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x1.fffffffffffcp-16448, false, - 0x2p-16448, false, - 0x1.fffffffffffcp-16448, false, - 0x2p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.fffffffffffcp-16448, false, true, + 0x2p-16448, false, true, + 0x1.fffffffffffcp-16448, false, true, + 0x2p-16448, false, true), TEST ("9.1129988297061865063210148340485495409976270392339083593024" "512175709292215834943420239017715645680129931183683680088277" "549174640815550804249337701889745225137095564529448291964230" @@ -9326,35 +9326,35 @@ static const struct test tests[] = { "110448209969504483783671382659657251334863763189986240759871" "1389056234111194498836994171142578125e-4952", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - true, - 0x2p-16448, false, - 0x2p-16448, false, - 0x2p-16448, false, - 0x2p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x2p-16448, false, false, + 0x2p-16448, false, false, + 0x2p-16448, false, false, + 0x2p-16448, false, false), TEST ("9.1129988297061865063210148340485495409976270392339083593024" "512175709292215834943420239017715645680129931183683680088277" "549174640815550804249337701889745225137095564529448291964230" @@ -9548,35 +9548,35 @@ static const struct test tests[] = { "110448209969504483783671382659657251334863763189986240759871" "1389056234111194498836994171142578126e-4952", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x4p-16448, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x2p-16448, false, - 0x2p-16448, false, - 0x2p-16448, false, - 0x2.000000000004p-16448, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x4p-16448, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x2p-16448, false, true, + 0x2p-16448, false, true, + 0x2p-16448, false, true, + 0x2.000000000004p-16448, false, true), TEST ("-9.112998829706186506321014834048549540997627039233908359302" "451217570929221583494342023901771564568012993118368368008827" "754917464081555080424933770188974522513709556452944829196423" @@ -9770,35 +9770,35 @@ static const struct test tests[] = { "311044820996950448378367138265965725133486376318998624075987" "11389056234111194498836994171142578124e-4952", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x2p-16448, false, - -0x2p-16448, false, - -0x1.fffffffffffcp-16448, false, - -0x1.fffffffffffcp-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x2p-16448, false, true, + -0x2p-16448, false, true, + -0x1.fffffffffffcp-16448, false, true, + -0x1.fffffffffffcp-16448, false, true), TEST ("-9.112998829706186506321014834048549540997627039233908359302" "451217570929221583494342023901771564568012993118368368008827" "754917464081555080424933770188974522513709556452944829196423" @@ -9992,35 +9992,35 @@ static const struct test tests[] = { "311044820996950448378367138265965725133486376318998624075987" "11389056234111194498836994171142578125e-4952", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - true, - -0x2p-16448, false, - -0x2p-16448, false, - -0x2p-16448, false, - -0x2p-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + true, + -0x2p-16448, false, false, + -0x2p-16448, false, false, + -0x2p-16448, false, false, + -0x2p-16448, false, false), TEST ("-9.112998829706186506321014834048549540997627039233908359302" "451217570929221583494342023901771564568012993118368368008827" "754917464081555080424933770188974522513709556452944829196423" @@ -10214,35 +10214,35 @@ static const struct test tests[] = { "311044820996950448378367138265965725133486376318998624075987" "11389056234111194498836994171142578126e-4952", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x2.000000000004p-16448, false, - -0x2p-16448, false, - -0x2p-16448, false, - -0x2p-16448, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x2.000000000004p-16448, false, true, + -0x2p-16448, false, true, + -0x2p-16448, false, true, + -0x2p-16448, false, true), TEST ("3.2375875597190125554622194791138232762497846690173405048449" "421945985197700620596855088357456383249701279390707384240598" "382936099431912710233425550359863089915213963553756674672083" @@ -10437,35 +10437,35 @@ static const struct test tests[] = { "182358152808745703724362178773168996492870519432472065091133" "11767578124e-4966", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16496, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16496, false, true), TEST ("3.2375875597190125554622194791138232762497846690173405048449" "421945985197700620596855088357456383249701279390707384240598" "382936099431912710233425550359863089915213963553756674672083" @@ -10660,35 +10660,35 @@ static const struct test tests[] = { "182358152808745703724362178773168996492870519432472065091133" "11767578125e-4966", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16496, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16496, false, true), TEST ("3.2375875597190125554622194791138232762497846690173405048449" "421945985197700620596855088357456383249701279390707384240598" "382936099431912710233425550359863089915213963553756674672083" @@ -10883,35 +10883,35 @@ static const struct test tests[] = { "182358152808745703724362178773168996492870519432472065091133" "11767578126e-4966", false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-152, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x8p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-16448, false, - false, - 0x0p+0, false, - 0x0p+0, false, - 0x0p+0, false, - 0x4p-1076, false, - false, - 0x0p+0, false, - 0x4p-16496, false, - 0x0p+0, false, - 0x4p-16496, false), + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-16448, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x0p+0, false, true, + 0x4p-16496, false, true, + 0x0p+0, false, true, + 0x4p-16496, false, true), TEST ("-3.237587559719012555462219479113823276249784669017340504844" "942194598519770062059685508835745638324970127939070738424059" "838293609943191271023342555035986308991521396355375667467208" @@ -11106,35 +11106,35 @@ static const struct test tests[] = { "218235815280874570372436217877316899649287051943247206509113" "311767578124e-4966", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16496, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16496, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true), TEST ("-3.237587559719012555462219479113823276249784669017340504844" "942194598519770062059685508835745638324970127939070738424059" "838293609943191271023342555035986308991521396355375667467208" @@ -11329,35 +11329,35 @@ static const struct test tests[] = { "218235815280874570372436217877316899649287051943247206509113" "311767578125e-4966", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16496, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16496, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true), TEST ("-3.237587559719012555462219479113823276249784669017340504844" "942194598519770062059685508835745638324970127939070738424059" "838293609943191271023342555035986308991521396355375667467208" @@ -11552,66 +11552,66 @@ static const struct test tests[] = { "218235815280874570372436217877316899649287051943247206509113" "311767578126e-4966", false, - -0x8p-152, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x8p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16448, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-1076, false, - -0x0p+0, false, - -0x0p+0, false, - -0x0p+0, false, - false, - -0x4p-16496, false, - -0x4p-16496, false, - -0x0p+0, false, - -0x0p+0, false), + -0x8p-152, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x8p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16448, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-1076, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true, + false, + -0x4p-16496, false, true, + -0x4p-16496, false, true, + -0x0p+0, false, true, + -0x0p+0, false, true), TEST ("340282366920938463463374607431768211455", false, - 0xf.fffffp+124, false, - INF, true, - 0xf.fffffp+124, false, - INF, true, - false, - 0xf.ffffffffffff8p+124, false, - 0x1p+128, false, - 0xf.ffffffffffff8p+124, false, - 0x1p+128, false, - false, - 0xf.fffffffffffffffp+124, false, - 0x1p+128, false, - 0xf.fffffffffffffffp+124, false, - 0x1p+128, false, - false, - 0xf.fffffffffffffffp+124, false, - 0x1p+128, false, - 0xf.fffffffffffffffp+124, false, - 0x1p+128, false, - false, - 0xf.fffffffffffffffffffffffffcp+124, false, - 0x1p+128, false, - 0xf.fffffffffffffffffffffffffcp+124, false, - 0x1p+128, false, - false, - 0xf.fffffffffffffffffffffffffff8p+124, false, - 0x1p+128, false, - 0xf.fffffffffffffffffffffffffff8p+124, false, - 0x1p+128, false), + 0xf.fffffp+124, false, false, + INF, true, false, + 0xf.fffffp+124, false, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+124, false, false, + 0x1p+128, false, false, + 0xf.ffffffffffff8p+124, false, false, + 0x1p+128, false, false, + false, + 0xf.fffffffffffffffp+124, false, false, + 0x1p+128, false, false, + 0xf.fffffffffffffffp+124, false, false, + 0x1p+128, false, false, + false, + 0xf.fffffffffffffffp+124, false, false, + 0x1p+128, false, false, + 0xf.fffffffffffffffp+124, false, false, + 0x1p+128, false, false, + false, + 0xf.fffffffffffffffffffffffffcp+124, false, false, + 0x1p+128, false, false, + 0xf.fffffffffffffffffffffffffcp+124, false, false, + 0x1p+128, false, false, + false, + 0xf.fffffffffffffffffffffffffff8p+124, false, false, + 0x1p+128, false, false, + 0xf.fffffffffffffffffffffffffff8p+124, false, false, + 0x1p+128, false, false), TEST ("179769313486231590772930519078902473361797697894230657273430" "081157732675805500963132708477322407536021120113879871393357" "658789768814416622492847430639474124377767893424865485276302" @@ -11619,35 +11619,35 @@ static const struct test tests[] = { "540827237163350510684586298239947245938479716304835356329624" "224137215", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, false, - INF, true, - 0xf.ffffffffffff8p+1020, false, - INF, true, - false, - 0xf.fffffffffffffffp+1020, false, - 0x1p+1024, false, - 0xf.fffffffffffffffp+1020, false, - 0x1p+1024, false, - false, - 0xf.fffffffffffffffp+1020, false, - 0x1p+1024, false, - 0xf.fffffffffffffffp+1020, false, - 0x1p+1024, false, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0xf.fffffffffffffffffffffffffff8p+1020, false, - 0x1p+1024, false, - 0xf.fffffffffffffffffffffffffff8p+1020, false, - 0x1p+1024, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, false, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+1020, false, false, + 0x1p+1024, false, false, + 0xf.fffffffffffffffp+1020, false, false, + 0x1p+1024, false, false, + false, + 0xf.fffffffffffffffp+1020, false, false, + 0x1p+1024, false, false, + 0xf.fffffffffffffffp+1020, false, false, + 0x1p+1024, false, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffff8p+1020, false, false, + 0x1p+1024, false, false, + 0xf.fffffffffffffffffffffffffff8p+1020, false, false, + 0x1p+1024, false, false), TEST ("118973149535723176508575932662800713076344468709651023747267" "482123326135818048368690448859547261203991511543748483930925" "889766738130868742627452469834156500608087163436600489752214" @@ -11732,66 +11732,66 @@ static const struct test tests[] = { "047398248889922809181821393428829567971736994315246044702729" "0669964066815", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffp+16380, false, - INF, true, - 0xf.fffffffffffffffp+16380, false, - INF, true, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - INF, true, - 0xf.fffffffffffffffffffffffffff8p+16380, false, - INF, true), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffp+16380, false, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffff8p+16380, false, false, + INF, true, false), TEST ("-340282366920938463463374607431768211455", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, false, - -0xf.fffffp+124, false, - false, - -0x1p+128, false, - -0x1p+128, false, - -0xf.ffffffffffff8p+124, false, - -0xf.ffffffffffff8p+124, false, - false, - -0x1p+128, false, - -0x1p+128, false, - -0xf.fffffffffffffffp+124, false, - -0xf.fffffffffffffffp+124, false, - false, - -0x1p+128, false, - -0x1p+128, false, - -0xf.fffffffffffffffp+124, false, - -0xf.fffffffffffffffp+124, false, - false, - -0x1p+128, false, - -0x1p+128, false, - -0xf.fffffffffffffffffffffffffcp+124, false, - -0xf.fffffffffffffffffffffffffcp+124, false, - false, - -0x1p+128, false, - -0x1p+128, false, - -0xf.fffffffffffffffffffffffffff8p+124, false, - -0xf.fffffffffffffffffffffffffff8p+124, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, false, false, + -0xf.fffffp+124, false, false, + false, + -0x1p+128, false, false, + -0x1p+128, false, false, + -0xf.ffffffffffff8p+124, false, false, + -0xf.ffffffffffff8p+124, false, false, + false, + -0x1p+128, false, false, + -0x1p+128, false, false, + -0xf.fffffffffffffffp+124, false, false, + -0xf.fffffffffffffffp+124, false, false, + false, + -0x1p+128, false, false, + -0x1p+128, false, false, + -0xf.fffffffffffffffp+124, false, false, + -0xf.fffffffffffffffp+124, false, false, + false, + -0x1p+128, false, false, + -0x1p+128, false, false, + -0xf.fffffffffffffffffffffffffcp+124, false, false, + -0xf.fffffffffffffffffffffffffcp+124, false, false, + false, + -0x1p+128, false, false, + -0x1p+128, false, false, + -0xf.fffffffffffffffffffffffffff8p+124, false, false, + -0xf.fffffffffffffffffffffffffff8p+124, false, false), TEST ("-17976931348623159077293051907890247336179769789423065727343" "008115773267580550096313270847732240753602112011387987139335" "765878976881441662249284743063947412437776789342486548527630" @@ -11799,35 +11799,35 @@ static const struct test tests[] = { "054082723716335051068458629823994724593847971630483535632962" "4224137215", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, false, - -0xf.ffffffffffff8p+1020, false, - false, - -0x1p+1024, false, - -0x1p+1024, false, - -0xf.fffffffffffffffp+1020, false, - -0xf.fffffffffffffffp+1020, false, - false, - -0x1p+1024, false, - -0x1p+1024, false, - -0xf.fffffffffffffffp+1020, false, - -0xf.fffffffffffffffp+1020, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - false, - -0x1p+1024, false, - -0x1p+1024, false, - -0xf.fffffffffffffffffffffffffff8p+1020, false, - -0xf.fffffffffffffffffffffffffff8p+1020, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, false, false, + -0xf.ffffffffffff8p+1020, false, false, + false, + -0x1p+1024, false, false, + -0x1p+1024, false, false, + -0xf.fffffffffffffffp+1020, false, false, + -0xf.fffffffffffffffp+1020, false, false, + false, + -0x1p+1024, false, false, + -0x1p+1024, false, false, + -0xf.fffffffffffffffp+1020, false, false, + -0xf.fffffffffffffffp+1020, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + false, + -0x1p+1024, false, false, + -0x1p+1024, false, false, + -0xf.fffffffffffffffffffffffffff8p+1020, false, false, + -0xf.fffffffffffffffffffffffffff8p+1020, false, false), TEST ("-11897314953572317650857593266280071307634446870965102374726" "748212332613581804836869044885954726120399151154374848393092" "588976673813086874262745246983415650060808716343660048975221" @@ -11912,3529 +11912,3901 @@ static const struct test tests[] = { "904739824888992280918182139342882956797173699431524604470272" "90669964066815", false, - -INF, true, - -INF, true, - -0xf.fffffp+124, true, - -0xf.fffffp+124, true, - false, - -INF, true, - -INF, true, - -0xf.ffffffffffff8p+1020, true, - -0xf.ffffffffffff8p+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffp+16380, false, - -0xf.fffffffffffffffp+16380, false, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - -0xf.fffffffffffffffffffffffffcp+1020, true, - false, - -INF, true, - -INF, true, - -0xf.fffffffffffffffffffffffffff8p+16380, false, - -0xf.fffffffffffffffffffffffffff8p+16380, false), + -INF, true, false, + -INF, true, false, + -0xf.fffffp+124, true, false, + -0xf.fffffp+124, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.ffffffffffff8p+1020, true, false, + -0xf.ffffffffffff8p+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffp+16380, false, false, + -0xf.fffffffffffffffp+16380, false, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + -0xf.fffffffffffffffffffffffffcp+1020, true, false, + false, + -INF, true, false, + -INF, true, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false, + -0xf.fffffffffffffffffffffffffff8p+16380, false, false), TEST ("+0x.80000000000000000000000000000001p1025", false, - 0xf.fffffp+124, true, - INF, true, - 0xf.fffffp+124, true, - INF, true, - false, - 0xf.ffffffffffff8p+1020, true, - INF, true, - 0xf.ffffffffffff8p+1020, true, - INF, true, - false, - 0x1p+1024, false, - 0x1p+1024, false, - 0x1p+1024, false, - 0x1.0000000000000002p+1024, false, - false, - 0x1p+1024, false, - 0x1p+1024, false, - 0x1p+1024, false, - 0x1.0000000000000002p+1024, false, - false, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - 0xf.fffffffffffffffffffffffffcp+1020, true, - INF, true, - false, - 0x1p+1024, false, - 0x1p+1024, false, - 0x1p+1024, false, - 0x1.0000000000000000000000000001p+1024, false), + 0xf.fffffp+124, true, false, + INF, true, false, + 0xf.fffffp+124, true, false, + INF, true, false, + false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + 0xf.ffffffffffff8p+1020, true, false, + INF, true, false, + false, + 0x1p+1024, false, false, + 0x1p+1024, false, false, + 0x1p+1024, false, false, + 0x1.0000000000000002p+1024, false, false, + false, + 0x1p+1024, false, false, + 0x1p+1024, false, false, + 0x1p+1024, false, false, + 0x1.0000000000000002p+1024, false, false, + false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + 0xf.fffffffffffffffffffffffffcp+1020, true, false, + INF, true, false, + false, + 0x1p+1024, false, false, + 0x1p+1024, false, false, + 0x1p+1024, false, false, + 0x1.0000000000000000000000000001p+1024, false, false), TEST ("1.5", true, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - true, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - true, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - true, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - true, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - true, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false, - 0x1.8p+0, false), + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + true, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + true, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + true, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + true, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + true, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false, + 0x1.8p+0, false, false), TEST ("1.25", true, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - true, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - true, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - true, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - true, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - true, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false, - 0x1.4p+0, false), + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + true, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + true, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + true, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + true, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + true, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false, + 0x1.4p+0, false, false), TEST ("1.125", true, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - true, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - true, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - true, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - true, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - true, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false, - 0x1.2p+0, false), + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + true, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + true, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + true, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + true, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + true, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false, + 0x1.2p+0, false, false), TEST ("1.0625", true, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - true, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - true, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - true, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - true, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - true, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false, - 0x1.1p+0, false), + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + true, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + true, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + true, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + true, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + true, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false, + 0x1.1p+0, false, false), TEST ("1.03125", true, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - true, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - true, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - true, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - true, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - true, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false, - 0x1.08p+0, false), + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + true, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + true, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + true, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + true, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + true, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false, + 0x1.08p+0, false, false), TEST ("1.015625", true, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - true, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - true, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - true, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - true, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - true, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false, - 0x1.04p+0, false), + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + true, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + true, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + true, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + true, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + true, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false, + 0x1.04p+0, false, false), TEST ("1.0078125", true, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - true, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - true, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - true, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - true, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - true, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false, - 0x1.02p+0, false), + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + true, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + true, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + true, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + true, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + true, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false, + 0x1.02p+0, false, false), TEST ("1.00390625", true, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - true, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - true, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - true, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - true, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - true, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false, - 0x1.01p+0, false), + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + true, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + true, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + true, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + true, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + true, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false, + 0x1.01p+0, false, false), TEST ("1.001953125", true, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - true, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - true, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - true, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - true, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - true, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false, - 0x1.008p+0, false), + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + true, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + true, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + true, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + true, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + true, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false, + 0x1.008p+0, false, false), TEST ("1.0009765625", true, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - true, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - true, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - true, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - true, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - true, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false, - 0x1.004p+0, false), + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + true, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + true, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + true, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + true, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + true, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false, + 0x1.004p+0, false, false), TEST ("1.00048828125", true, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - true, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - true, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - true, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - true, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - true, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false, - 0x1.002p+0, false), + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + true, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + true, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + true, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + true, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + true, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false, + 0x1.002p+0, false, false), TEST ("1.000244140625", true, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - true, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - true, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - true, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - true, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - true, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false, - 0x1.001p+0, false), + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + true, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + true, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + true, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + true, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + true, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false, + 0x1.001p+0, false, false), TEST ("1.0001220703125", true, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - true, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - true, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - true, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - true, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - true, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false, - 0x1.0008p+0, false), + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + true, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + true, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + true, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + true, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + true, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false, + 0x1.0008p+0, false, false), TEST ("1.00006103515625", true, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - true, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - true, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - true, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - true, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - true, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false, - 0x1.0004p+0, false), + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + true, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + true, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + true, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + true, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + true, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false, + 0x1.0004p+0, false, false), TEST ("1.000030517578125", true, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - true, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - true, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - true, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - true, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - true, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false, - 0x1.0002p+0, false), + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + true, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + true, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + true, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + true, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + true, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false, + 0x1.0002p+0, false, false), TEST ("1.0000152587890625", true, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - true, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - true, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - true, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - true, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - true, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false, - 0x1.0001p+0, false), + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + true, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + true, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + true, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + true, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + true, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false, + 0x1.0001p+0, false, false), TEST ("1.00000762939453125", true, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - true, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - true, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - true, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - true, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - true, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false, - 0x1.00008p+0, false), + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + true, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + true, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + true, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + true, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + true, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false, + 0x1.00008p+0, false, false), TEST ("1.000003814697265625", true, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - true, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - true, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - true, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - true, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - true, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false, - 0x1.00004p+0, false), + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + true, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + true, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + true, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + true, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + true, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false, + 0x1.00004p+0, false, false), TEST ("1.0000019073486328125", true, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - true, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - true, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - true, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - true, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - true, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false, - 0x1.00002p+0, false), + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + true, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + true, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + true, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + true, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + true, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false, + 0x1.00002p+0, false, false), TEST ("1.00000095367431640625", true, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - true, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - true, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - true, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - true, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - true, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false, - 0x1.00001p+0, false), + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + true, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + true, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + true, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + true, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + true, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false, + 0x1.00001p+0, false, false), TEST ("1.000000476837158203125", true, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - true, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - true, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - true, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - true, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - true, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false, - 0x1.000008p+0, false), + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + true, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + true, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + true, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + true, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + true, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false, + 0x1.000008p+0, false, false), TEST ("1.0000000298023223876953125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - true, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - true, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - true, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - true, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false, - 0x1.0000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + true, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + true, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + true, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + true, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false, + 0x1.0000008p+0, false, false), TEST ("1.00000001490116119384765625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - true, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - true, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - true, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - true, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false, - 0x1.0000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + true, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + true, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + true, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + true, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false, + 0x1.0000004p+0, false, false), TEST ("1.000000007450580596923828125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - true, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - true, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - true, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - true, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false, - 0x1.0000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + true, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + true, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + true, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + true, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false, + 0x1.0000002p+0, false, false), TEST ("1.0000000037252902984619140625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - true, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - true, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - true, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - true, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false, - 0x1.0000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + true, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + true, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + true, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + true, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false, + 0x1.0000001p+0, false, false), TEST ("1.00000000186264514923095703125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - true, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - true, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - true, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - true, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false, - 0x1.00000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + true, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + true, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + true, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + true, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false, + 0x1.00000008p+0, false, false), TEST ("1.000000000931322574615478515625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - true, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - true, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - true, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - true, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false, - 0x1.00000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + true, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + true, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + true, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + true, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false, + 0x1.00000004p+0, false, false), TEST ("1.0000000004656612873077392578125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - true, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - true, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - true, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - true, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false, - 0x1.00000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + true, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + true, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + true, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + true, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false, + 0x1.00000002p+0, false, false), TEST ("1.00000000023283064365386962890625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - true, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - true, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - true, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - true, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false, - 0x1.00000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + true, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + true, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + true, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + true, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false, + 0x1.00000001p+0, false, false), TEST ("1.000000000116415321826934814453125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - true, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - true, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - true, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - true, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false, - 0x1.000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + true, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + true, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + true, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + true, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false, + 0x1.000000008p+0, false, false), TEST ("1.0000000000582076609134674072265625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - true, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - true, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - true, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - true, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false, - 0x1.000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + true, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + true, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + true, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + true, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false, + 0x1.000000004p+0, false, false), TEST ("1.00000000002910383045673370361328125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - true, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - true, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - true, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - true, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false, - 0x1.000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + true, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + true, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + true, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + true, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false, + 0x1.000000002p+0, false, false), TEST ("1.000000000014551915228366851806640625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - true, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - true, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - true, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - true, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false, - 0x1.000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + true, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + true, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + true, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + true, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false, + 0x1.000000001p+0, false, false), TEST ("1.0000000000072759576141834259033203125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - true, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - true, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - true, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - true, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false, - 0x1.0000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + true, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + true, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + true, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + true, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false, + 0x1.0000000008p+0, false, false), TEST ("1.00000000000363797880709171295166015625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - true, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - true, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - true, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - true, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false, - 0x1.0000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + true, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + true, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + true, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + true, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false, + 0x1.0000000004p+0, false, false), TEST ("1.000000000001818989403545856475830078125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - true, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - true, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - true, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - true, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false, - 0x1.0000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + true, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + true, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + true, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + true, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false, + 0x1.0000000002p+0, false, false), TEST ("1.0000000000009094947017729282379150390625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - true, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - true, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - true, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - true, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false, - 0x1.0000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + true, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + true, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + true, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + true, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false, + 0x1.0000000001p+0, false, false), TEST ("1.00000000000045474735088646411895751953125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - true, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - true, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - true, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - true, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false, - 0x1.00000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + true, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + true, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + true, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + true, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false, + 0x1.00000000008p+0, false, false), TEST ("1.000000000000227373675443232059478759765625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - true, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - true, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - true, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - true, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false, - 0x1.00000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + true, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + true, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + true, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + true, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false, + 0x1.00000000004p+0, false, false), TEST ("1.0000000000001136868377216160297393798828125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - true, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - true, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - true, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - true, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false, - 0x1.00000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + true, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + true, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + true, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + true, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false, + 0x1.00000000002p+0, false, false), TEST ("1.00000000000005684341886080801486968994140625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - true, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - true, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - true, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - true, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false, - 0x1.00000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + true, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + true, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + true, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + true, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false, + 0x1.00000000001p+0, false, false), TEST ("1.000000000000028421709430404007434844970703125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - true, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - true, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - true, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - true, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false, - 0x1.000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + true, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + true, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + true, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + true, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false, + 0x1.000000000008p+0, false, false), TEST ("1.0000000000000142108547152020037174224853515625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - true, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - true, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - true, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - true, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false, - 0x1.000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + true, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + true, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + true, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + true, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false, + 0x1.000000000004p+0, false, false), TEST ("1.00000000000000710542735760100185871124267578125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - true, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - true, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - true, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - true, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false, - 0x1.000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + true, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + true, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + true, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + true, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false, + 0x1.000000000002p+0, false, false), TEST ("1.000000000000003552713678800500929355621337890625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - true, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - true, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - true, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - true, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false, - 0x1.000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + true, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + true, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + true, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + true, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false, + 0x1.000000000001p+0, false, false), TEST ("1.0000000000000017763568394002504646778106689453125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - true, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - true, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - true, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - true, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false, - 0x1.0000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + true, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + true, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + true, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + true, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false, + 0x1.0000000000008p+0, false, false), TEST ("1.00000000000000088817841970012523233890533447265625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - true, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - true, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - true, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - true, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false, - 0x1.0000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + true, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + true, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + true, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + true, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false, + 0x1.0000000000004p+0, false, false), TEST ("1.000000000000000444089209850062616169452667236328125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - true, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - true, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - true, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - true, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false, - 0x1.0000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + true, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + true, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + true, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + true, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false, + 0x1.0000000000002p+0, false, false), TEST ("1.0000000000000002220446049250313080847263336181640625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - true, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false, - 0x1.0000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + true, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false, + 0x1.0000000000001p+0, false, false), TEST ("1.00000000000000011102230246251565404236316680908203125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - true, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - true, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - true, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false, - 0x1.00000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + true, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + true, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + true, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false, + 0x1.00000000000008p+0, false, false), TEST ("1.000000000000000055511151231257827021181583404541015625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - true, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - true, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - true, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false, - 0x1.00000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + true, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + true, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + true, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false, + 0x1.00000000000004p+0, false, false), TEST ("1.0000000000000000277555756156289135105907917022705078125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - true, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - true, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - true, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false, - 0x1.00000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + true, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + true, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + true, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false, + 0x1.00000000000002p+0, false, false), TEST ("1.00000000000000001387778780781445675529539585113525390625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - true, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - true, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - true, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false, - 0x1.00000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + true, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + true, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + true, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false, + 0x1.00000000000001p+0, false, false), TEST ("1.000000000000000006938893903907228377647697925567626953125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - true, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - true, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - true, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false, - 0x1.000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + true, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + true, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + true, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false, + 0x1.000000000000008p+0, false, false), TEST ("1.0000000000000000034694469519536141888238489627838134765625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - true, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - true, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - true, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false, - 0x1.000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + true, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + true, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + true, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false, + 0x1.000000000000004p+0, false, false), TEST ("1.0000000000000000017347234759768070944119244813919067382812" "5", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - true, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - true, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - true, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false, - 0x1.000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + true, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + true, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + true, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false, + 0x1.000000000000002p+0, false, false), TEST ("1.0000000000000000008673617379884035472059622406959533691406" "25", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - true, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - true, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - true, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false, - 0x1.000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + true, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + true, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + true, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false, + 0x1.000000000000001p+0, false, false), TEST ("1.0000000000000000004336808689942017736029811203479766845703" "125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - true, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - true, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - true, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false, - 0x1.0000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + true, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + true, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + true, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false, + 0x1.0000000000000008p+0, false, false), TEST ("1.0000000000000000002168404344971008868014905601739883422851" "5625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - true, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - true, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - true, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false, - 0x1.0000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + true, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + true, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + true, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false, + 0x1.0000000000000004p+0, false, false), TEST ("1.0000000000000000001084202172485504434007452800869941711425" "78125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - true, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false, - 0x1.0000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + true, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false, + 0x1.0000000000000002p+0, false, false), TEST ("1.0000000000000000000542101086242752217003726400434970855712" "890625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000001p+0, false, - 0x1.0000000000000001p+0, false, - 0x1.0000000000000001p+0, false, - 0x1.0000000000000001p+0, false, - true, - 0x1.0000000000000001p+0, false, - 0x1.0000000000000001p+0, false, - 0x1.0000000000000001p+0, false, - 0x1.0000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000001p+0, false, false, + 0x1.0000000000000001p+0, false, false, + 0x1.0000000000000001p+0, false, false, + 0x1.0000000000000001p+0, false, false, + true, + 0x1.0000000000000001p+0, false, false, + 0x1.0000000000000001p+0, false, false, + 0x1.0000000000000001p+0, false, false, + 0x1.0000000000000001p+0, false, false), TEST ("1.0000000000000000000271050543121376108501863200217485427856" "4453125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000008p+0, false, - 0x1.00000000000000008p+0, false, - 0x1.00000000000000008p+0, false, - 0x1.00000000000000008p+0, false, - true, - 0x1.00000000000000008p+0, false, - 0x1.00000000000000008p+0, false, - 0x1.00000000000000008p+0, false, - 0x1.00000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000008p+0, false, false, + 0x1.00000000000000008p+0, false, false, + 0x1.00000000000000008p+0, false, false, + 0x1.00000000000000008p+0, false, false, + true, + 0x1.00000000000000008p+0, false, false, + 0x1.00000000000000008p+0, false, false, + 0x1.00000000000000008p+0, false, false, + 0x1.00000000000000008p+0, false, false), TEST ("1.0000000000000000000135525271560688054250931600108742713928" "22265625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000004p+0, false, - 0x1.00000000000000004p+0, false, - 0x1.00000000000000004p+0, false, - 0x1.00000000000000004p+0, false, - true, - 0x1.00000000000000004p+0, false, - 0x1.00000000000000004p+0, false, - 0x1.00000000000000004p+0, false, - 0x1.00000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000004p+0, false, false, + 0x1.00000000000000004p+0, false, false, + 0x1.00000000000000004p+0, false, false, + 0x1.00000000000000004p+0, false, false, + true, + 0x1.00000000000000004p+0, false, false, + 0x1.00000000000000004p+0, false, false, + 0x1.00000000000000004p+0, false, false, + 0x1.00000000000000004p+0, false, false), TEST ("1.0000000000000000000067762635780344027125465800054371356964" "111328125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000002p+0, false, - 0x1.00000000000000002p+0, false, - 0x1.00000000000000002p+0, false, - 0x1.00000000000000002p+0, false, - true, - 0x1.00000000000000002p+0, false, - 0x1.00000000000000002p+0, false, - 0x1.00000000000000002p+0, false, - 0x1.00000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000002p+0, false, false, + 0x1.00000000000000002p+0, false, false, + 0x1.00000000000000002p+0, false, false, + 0x1.00000000000000002p+0, false, false, + true, + 0x1.00000000000000002p+0, false, false, + 0x1.00000000000000002p+0, false, false, + 0x1.00000000000000002p+0, false, false, + 0x1.00000000000000002p+0, false, false), TEST ("1.0000000000000000000033881317890172013562732900027185678482" "0556640625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000001p+0, false, - 0x1.00000000000000001p+0, false, - 0x1.00000000000000001p+0, false, - 0x1.00000000000000001p+0, false, - true, - 0x1.00000000000000001p+0, false, - 0x1.00000000000000001p+0, false, - 0x1.00000000000000001p+0, false, - 0x1.00000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000001p+0, false, false, + 0x1.00000000000000001p+0, false, false, + 0x1.00000000000000001p+0, false, false, + 0x1.00000000000000001p+0, false, false, + true, + 0x1.00000000000000001p+0, false, false, + 0x1.00000000000000001p+0, false, false, + 0x1.00000000000000001p+0, false, false, + 0x1.00000000000000001p+0, false, false), TEST ("1.0000000000000000000016940658945086006781366450013592839241" "02783203125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000008p+0, false, - 0x1.000000000000000008p+0, false, - 0x1.000000000000000008p+0, false, - 0x1.000000000000000008p+0, false, - true, - 0x1.000000000000000008p+0, false, - 0x1.000000000000000008p+0, false, - 0x1.000000000000000008p+0, false, - 0x1.000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000008p+0, false, false, + 0x1.000000000000000008p+0, false, false, + 0x1.000000000000000008p+0, false, false, + 0x1.000000000000000008p+0, false, false, + true, + 0x1.000000000000000008p+0, false, false, + 0x1.000000000000000008p+0, false, false, + 0x1.000000000000000008p+0, false, false, + 0x1.000000000000000008p+0, false, false), TEST ("1.0000000000000000000008470329472543003390683225006796419620" "513916015625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000004p+0, false, - 0x1.000000000000000004p+0, false, - 0x1.000000000000000004p+0, false, - 0x1.000000000000000004p+0, false, - true, - 0x1.000000000000000004p+0, false, - 0x1.000000000000000004p+0, false, - 0x1.000000000000000004p+0, false, - 0x1.000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000004p+0, false, false, + 0x1.000000000000000004p+0, false, false, + 0x1.000000000000000004p+0, false, false, + 0x1.000000000000000004p+0, false, false, + true, + 0x1.000000000000000004p+0, false, false, + 0x1.000000000000000004p+0, false, false, + 0x1.000000000000000004p+0, false, false, + 0x1.000000000000000004p+0, false, false), TEST ("1.0000000000000000000004235164736271501695341612503398209810" "2569580078125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000002p+0, false, - 0x1.000000000000000002p+0, false, - 0x1.000000000000000002p+0, false, - 0x1.000000000000000002p+0, false, - true, - 0x1.000000000000000002p+0, false, - 0x1.000000000000000002p+0, false, - 0x1.000000000000000002p+0, false, - 0x1.000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000002p+0, false, false, + 0x1.000000000000000002p+0, false, false, + 0x1.000000000000000002p+0, false, false, + 0x1.000000000000000002p+0, false, false, + true, + 0x1.000000000000000002p+0, false, false, + 0x1.000000000000000002p+0, false, false, + 0x1.000000000000000002p+0, false, false, + 0x1.000000000000000002p+0, false, false), TEST ("1.0000000000000000000002117582368135750847670806251699104905" "12847900390625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000001p+0, false, - 0x1.000000000000000001p+0, false, - 0x1.000000000000000001p+0, false, - 0x1.000000000000000001p+0, false, - true, - 0x1.000000000000000001p+0, false, - 0x1.000000000000000001p+0, false, - 0x1.000000000000000001p+0, false, - 0x1.000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000001p+0, false, false, + 0x1.000000000000000001p+0, false, false, + 0x1.000000000000000001p+0, false, false, + 0x1.000000000000000001p+0, false, false, + true, + 0x1.000000000000000001p+0, false, false, + 0x1.000000000000000001p+0, false, false, + 0x1.000000000000000001p+0, false, false, + 0x1.000000000000000001p+0, false, false), TEST ("1.0000000000000000000001058791184067875423835403125849552452" "564239501953125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000008p+0, false, - 0x1.0000000000000000008p+0, false, - 0x1.0000000000000000008p+0, false, - 0x1.0000000000000000008p+0, false, - true, - 0x1.0000000000000000008p+0, false, - 0x1.0000000000000000008p+0, false, - 0x1.0000000000000000008p+0, false, - 0x1.0000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000008p+0, false, false, + 0x1.0000000000000000008p+0, false, false, + 0x1.0000000000000000008p+0, false, false, + 0x1.0000000000000000008p+0, false, false, + true, + 0x1.0000000000000000008p+0, false, false, + 0x1.0000000000000000008p+0, false, false, + 0x1.0000000000000000008p+0, false, false, + 0x1.0000000000000000008p+0, false, false), TEST ("1.0000000000000000000000529395592033937711917701562924776226" "2821197509765625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000004p+0, false, - 0x1.0000000000000000004p+0, false, - 0x1.0000000000000000004p+0, false, - 0x1.0000000000000000004p+0, false, - true, - 0x1.0000000000000000004p+0, false, - 0x1.0000000000000000004p+0, false, - 0x1.0000000000000000004p+0, false, - 0x1.0000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000004p+0, false, false, + 0x1.0000000000000000004p+0, false, false, + 0x1.0000000000000000004p+0, false, false, + 0x1.0000000000000000004p+0, false, false, + true, + 0x1.0000000000000000004p+0, false, false, + 0x1.0000000000000000004p+0, false, false, + 0x1.0000000000000000004p+0, false, false, + 0x1.0000000000000000004p+0, false, false), TEST ("1.0000000000000000000000264697796016968855958850781462388113" "14105987548828125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000002p+0, false, - 0x1.0000000000000000002p+0, false, - 0x1.0000000000000000002p+0, false, - 0x1.0000000000000000002p+0, false, - true, - 0x1.0000000000000000002p+0, false, - 0x1.0000000000000000002p+0, false, - 0x1.0000000000000000002p+0, false, - 0x1.0000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000002p+0, false, false, + 0x1.0000000000000000002p+0, false, false, + 0x1.0000000000000000002p+0, false, false, + 0x1.0000000000000000002p+0, false, false, + true, + 0x1.0000000000000000002p+0, false, false, + 0x1.0000000000000000002p+0, false, false, + 0x1.0000000000000000002p+0, false, false, + 0x1.0000000000000000002p+0, false, false), TEST ("1.0000000000000000000000132348898008484427979425390731194056" "570529937744140625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000001p+0, false, - 0x1.0000000000000000001p+0, false, - 0x1.0000000000000000001p+0, false, - 0x1.0000000000000000001p+0, false, - true, - 0x1.0000000000000000001p+0, false, - 0x1.0000000000000000001p+0, false, - 0x1.0000000000000000001p+0, false, - 0x1.0000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000001p+0, false, false, + 0x1.0000000000000000001p+0, false, false, + 0x1.0000000000000000001p+0, false, false, + 0x1.0000000000000000001p+0, false, false, + true, + 0x1.0000000000000000001p+0, false, false, + 0x1.0000000000000000001p+0, false, false, + 0x1.0000000000000000001p+0, false, false, + 0x1.0000000000000000001p+0, false, false), TEST ("1.0000000000000000000000066174449004242213989712695365597028" "2852649688720703125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000008p+0, false, - 0x1.00000000000000000008p+0, false, - 0x1.00000000000000000008p+0, false, - 0x1.00000000000000000008p+0, false, - true, - 0x1.00000000000000000008p+0, false, - 0x1.00000000000000000008p+0, false, - 0x1.00000000000000000008p+0, false, - 0x1.00000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000008p+0, false, false, + 0x1.00000000000000000008p+0, false, false, + 0x1.00000000000000000008p+0, false, false, + 0x1.00000000000000000008p+0, false, false, + true, + 0x1.00000000000000000008p+0, false, false, + 0x1.00000000000000000008p+0, false, false, + 0x1.00000000000000000008p+0, false, false, + 0x1.00000000000000000008p+0, false, false), TEST ("1.0000000000000000000000033087224502121106994856347682798514" "14263248443603515625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000004p+0, false, - 0x1.00000000000000000004p+0, false, - 0x1.00000000000000000004p+0, false, - 0x1.00000000000000000004p+0, false, - true, - 0x1.00000000000000000004p+0, false, - 0x1.00000000000000000004p+0, false, - 0x1.00000000000000000004p+0, false, - 0x1.00000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000004p+0, false, false, + 0x1.00000000000000000004p+0, false, false, + 0x1.00000000000000000004p+0, false, false, + 0x1.00000000000000000004p+0, false, false, + true, + 0x1.00000000000000000004p+0, false, false, + 0x1.00000000000000000004p+0, false, false, + 0x1.00000000000000000004p+0, false, false, + 0x1.00000000000000000004p+0, false, false), TEST ("1.0000000000000000000000016543612251060553497428173841399257" "071316242218017578125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000002p+0, false, - 0x1.00000000000000000002p+0, false, - 0x1.00000000000000000002p+0, false, - 0x1.00000000000000000002p+0, false, - true, - 0x1.00000000000000000002p+0, false, - 0x1.00000000000000000002p+0, false, - 0x1.00000000000000000002p+0, false, - 0x1.00000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000002p+0, false, false, + 0x1.00000000000000000002p+0, false, false, + 0x1.00000000000000000002p+0, false, false, + 0x1.00000000000000000002p+0, false, false, + true, + 0x1.00000000000000000002p+0, false, false, + 0x1.00000000000000000002p+0, false, false, + 0x1.00000000000000000002p+0, false, false, + 0x1.00000000000000000002p+0, false, false), TEST ("1.0000000000000000000000008271806125530276748714086920699628" "5356581211090087890625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000001p+0, false, - 0x1.00000000000000000001p+0, false, - 0x1.00000000000000000001p+0, false, - 0x1.00000000000000000001p+0, false, - true, - 0x1.00000000000000000001p+0, false, - 0x1.00000000000000000001p+0, false, - 0x1.00000000000000000001p+0, false, - 0x1.00000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000001p+0, false, false, + 0x1.00000000000000000001p+0, false, false, + 0x1.00000000000000000001p+0, false, false, + 0x1.00000000000000000001p+0, false, false, + true, + 0x1.00000000000000000001p+0, false, false, + 0x1.00000000000000000001p+0, false, false, + 0x1.00000000000000000001p+0, false, false, + 0x1.00000000000000000001p+0, false, false), TEST ("1.0000000000000000000000004135903062765138374357043460349814" "26782906055450439453125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000008p+0, false, - 0x1.000000000000000000008p+0, false, - 0x1.000000000000000000008p+0, false, - 0x1.000000000000000000008p+0, false, - true, - 0x1.000000000000000000008p+0, false, - 0x1.000000000000000000008p+0, false, - 0x1.000000000000000000008p+0, false, - 0x1.000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000008p+0, false, false, + 0x1.000000000000000000008p+0, false, false, + 0x1.000000000000000000008p+0, false, false, + 0x1.000000000000000000008p+0, false, false, + true, + 0x1.000000000000000000008p+0, false, false, + 0x1.000000000000000000008p+0, false, false, + 0x1.000000000000000000008p+0, false, false, + 0x1.000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000002067951531382569187178521730174907" "133914530277252197265625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000004p+0, false, - 0x1.000000000000000000004p+0, false, - 0x1.000000000000000000004p+0, false, - 0x1.000000000000000000004p+0, false, - true, - 0x1.000000000000000000004p+0, false, - 0x1.000000000000000000004p+0, false, - 0x1.000000000000000000004p+0, false, - 0x1.000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000004p+0, false, false, + 0x1.000000000000000000004p+0, false, false, + 0x1.000000000000000000004p+0, false, false, + 0x1.000000000000000000004p+0, false, false, + true, + 0x1.000000000000000000004p+0, false, false, + 0x1.000000000000000000004p+0, false, false, + 0x1.000000000000000000004p+0, false, false, + 0x1.000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000001033975765691284593589260865087453" "5669572651386260986328125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000002p+0, false, - 0x1.000000000000000000002p+0, false, - 0x1.000000000000000000002p+0, false, - 0x1.000000000000000000002p+0, false, - true, - 0x1.000000000000000000002p+0, false, - 0x1.000000000000000000002p+0, false, - 0x1.000000000000000000002p+0, false, - 0x1.000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000002p+0, false, false, + 0x1.000000000000000000002p+0, false, false, + 0x1.000000000000000000002p+0, false, false, + 0x1.000000000000000000002p+0, false, false, + true, + 0x1.000000000000000000002p+0, false, false, + 0x1.000000000000000000002p+0, false, false, + 0x1.000000000000000000002p+0, false, false, + 0x1.000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000516987882845642296794630432543726" "78347863256931304931640625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000001p+0, false, - 0x1.000000000000000000001p+0, false, - 0x1.000000000000000000001p+0, false, - 0x1.000000000000000000001p+0, false, - true, - 0x1.000000000000000000001p+0, false, - 0x1.000000000000000000001p+0, false, - 0x1.000000000000000000001p+0, false, - 0x1.000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000001p+0, false, false, + 0x1.000000000000000000001p+0, false, false, + 0x1.000000000000000000001p+0, false, false, + 0x1.000000000000000000001p+0, false, false, + true, + 0x1.000000000000000000001p+0, false, false, + 0x1.000000000000000000001p+0, false, false, + 0x1.000000000000000000001p+0, false, false, + 0x1.000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000258493941422821148397315216271863" "391739316284656524658203125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000008p+0, false, - 0x1.0000000000000000000008p+0, false, - 0x1.0000000000000000000008p+0, false, - 0x1.0000000000000000000008p+0, false, - true, - 0x1.0000000000000000000008p+0, false, - 0x1.0000000000000000000008p+0, false, - 0x1.0000000000000000000008p+0, false, - 0x1.0000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000008p+0, false, false, + 0x1.0000000000000000000008p+0, false, false, + 0x1.0000000000000000000008p+0, false, false, + 0x1.0000000000000000000008p+0, false, false, + true, + 0x1.0000000000000000000008p+0, false, false, + 0x1.0000000000000000000008p+0, false, false, + 0x1.0000000000000000000008p+0, false, false, + 0x1.0000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000000129246970711410574198657608135931" "6958696581423282623291015625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000004p+0, false, - 0x1.0000000000000000000004p+0, false, - 0x1.0000000000000000000004p+0, false, - 0x1.0000000000000000000004p+0, false, - true, - 0x1.0000000000000000000004p+0, false, - 0x1.0000000000000000000004p+0, false, - 0x1.0000000000000000000004p+0, false, - 0x1.0000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000004p+0, false, false, + 0x1.0000000000000000000004p+0, false, false, + 0x1.0000000000000000000004p+0, false, false, + 0x1.0000000000000000000004p+0, false, false, + true, + 0x1.0000000000000000000004p+0, false, false, + 0x1.0000000000000000000004p+0, false, false, + 0x1.0000000000000000000004p+0, false, false, + 0x1.0000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000000064623485355705287099328804067965" "84793482907116413116455078125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000002p+0, false, - 0x1.0000000000000000000002p+0, false, - 0x1.0000000000000000000002p+0, false, - 0x1.0000000000000000000002p+0, false, - true, - 0x1.0000000000000000000002p+0, false, - 0x1.0000000000000000000002p+0, false, - 0x1.0000000000000000000002p+0, false, - 0x1.0000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000002p+0, false, false, + 0x1.0000000000000000000002p+0, false, false, + 0x1.0000000000000000000002p+0, false, false, + 0x1.0000000000000000000002p+0, false, false, + true, + 0x1.0000000000000000000002p+0, false, false, + 0x1.0000000000000000000002p+0, false, false, + 0x1.0000000000000000000002p+0, false, false, + 0x1.0000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000032311742677852643549664402033982" "923967414535582065582275390625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000001p+0, false, - 0x1.0000000000000000000001p+0, false, - 0x1.0000000000000000000001p+0, false, - 0x1.0000000000000000000001p+0, false, - true, - 0x1.0000000000000000000001p+0, false, - 0x1.0000000000000000000001p+0, false, - 0x1.0000000000000000000001p+0, false, - 0x1.0000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000001p+0, false, false, + 0x1.0000000000000000000001p+0, false, false, + 0x1.0000000000000000000001p+0, false, false, + 0x1.0000000000000000000001p+0, false, false, + true, + 0x1.0000000000000000000001p+0, false, false, + 0x1.0000000000000000000001p+0, false, false, + 0x1.0000000000000000000001p+0, false, false, + 0x1.0000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000016155871338926321774832201016991" "4619837072677910327911376953125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000008p+0, false, - 0x1.00000000000000000000008p+0, false, - 0x1.00000000000000000000008p+0, false, - 0x1.00000000000000000000008p+0, false, - true, - 0x1.00000000000000000000008p+0, false, - 0x1.00000000000000000000008p+0, false, - 0x1.00000000000000000000008p+0, false, - 0x1.00000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000008p+0, false, false, + 0x1.00000000000000000000008p+0, false, false, + 0x1.00000000000000000000008p+0, false, false, + 0x1.00000000000000000000008p+0, false, false, + true, + 0x1.00000000000000000000008p+0, false, false, + 0x1.00000000000000000000008p+0, false, false, + 0x1.00000000000000000000008p+0, false, false, + 0x1.00000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000000008077935669463160887416100508495" "73099185363389551639556884765625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000004p+0, false, - 0x1.00000000000000000000004p+0, false, - 0x1.00000000000000000000004p+0, false, - 0x1.00000000000000000000004p+0, false, - true, - 0x1.00000000000000000000004p+0, false, - 0x1.00000000000000000000004p+0, false, - 0x1.00000000000000000000004p+0, false, - 0x1.00000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000004p+0, false, false, + 0x1.00000000000000000000004p+0, false, false, + 0x1.00000000000000000000004p+0, false, false, + 0x1.00000000000000000000004p+0, false, false, + true, + 0x1.00000000000000000000004p+0, false, false, + 0x1.00000000000000000000004p+0, false, false, + 0x1.00000000000000000000004p+0, false, false, + 0x1.00000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000000004038967834731580443708050254247" "865495926816947758197784423828125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000002p+0, false, - 0x1.00000000000000000000002p+0, false, - 0x1.00000000000000000000002p+0, false, - 0x1.00000000000000000000002p+0, false, - true, - 0x1.00000000000000000000002p+0, false, - 0x1.00000000000000000000002p+0, false, - 0x1.00000000000000000000002p+0, false, - 0x1.00000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000002p+0, false, false, + 0x1.00000000000000000000002p+0, false, false, + 0x1.00000000000000000000002p+0, false, false, + 0x1.00000000000000000000002p+0, false, false, + true, + 0x1.00000000000000000000002p+0, false, false, + 0x1.00000000000000000000002p+0, false, false, + 0x1.00000000000000000000002p+0, false, false, + 0x1.00000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000002019483917365790221854025127123" "9327479634084738790988922119140625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000001p+0, false, - 0x1.00000000000000000000001p+0, false, - 0x1.00000000000000000000001p+0, false, - 0x1.00000000000000000000001p+0, false, - true, - 0x1.00000000000000000000001p+0, false, - 0x1.00000000000000000000001p+0, false, - 0x1.00000000000000000000001p+0, false, - 0x1.00000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000001p+0, false, false, + 0x1.00000000000000000000001p+0, false, false, + 0x1.00000000000000000000001p+0, false, false, + 0x1.00000000000000000000001p+0, false, false, + true, + 0x1.00000000000000000000001p+0, false, false, + 0x1.00000000000000000000001p+0, false, false, + 0x1.00000000000000000000001p+0, false, false, + 0x1.00000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000001009741958682895110927012563561" "96637398170423693954944610595703125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000000008p+0, false, - 0x1.000000000000000000000008p+0, false, - 0x1.000000000000000000000008p+0, false, - 0x1.000000000000000000000008p+0, false, - true, - 0x1.000000000000000000000008p+0, false, - 0x1.000000000000000000000008p+0, false, - 0x1.000000000000000000000008p+0, false, - 0x1.000000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000000008p+0, false, false, + 0x1.000000000000000000000008p+0, false, false, + 0x1.000000000000000000000008p+0, false, false, + 0x1.000000000000000000000008p+0, false, false, + true, + 0x1.000000000000000000000008p+0, false, false, + 0x1.000000000000000000000008p+0, false, false, + 0x1.000000000000000000000008p+0, false, false, + 0x1.000000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000000000504870979341447555463506281780" "983186990852118469774723052978515625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000000004p+0, false, - 0x1.000000000000000000000004p+0, false, - 0x1.000000000000000000000004p+0, false, - 0x1.000000000000000000000004p+0, false, - true, - 0x1.000000000000000000000004p+0, false, - 0x1.000000000000000000000004p+0, false, - 0x1.000000000000000000000004p+0, false, - 0x1.000000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000000004p+0, false, false, + 0x1.000000000000000000000004p+0, false, false, + 0x1.000000000000000000000004p+0, false, false, + 0x1.000000000000000000000004p+0, false, false, + true, + 0x1.000000000000000000000004p+0, false, false, + 0x1.000000000000000000000004p+0, false, false, + 0x1.000000000000000000000004p+0, false, false, + 0x1.000000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000000000252435489670723777731753140890" "4915934954260592348873615264892578125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000000002p+0, false, - 0x1.000000000000000000000002p+0, false, - 0x1.000000000000000000000002p+0, false, - 0x1.000000000000000000000002p+0, false, - true, - 0x1.000000000000000000000002p+0, false, - 0x1.000000000000000000000002p+0, false, - 0x1.000000000000000000000002p+0, false, - 0x1.000000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000000002p+0, false, false, + 0x1.000000000000000000000002p+0, false, false, + 0x1.000000000000000000000002p+0, false, false, + 0x1.000000000000000000000002p+0, false, false, + true, + 0x1.000000000000000000000002p+0, false, false, + 0x1.000000000000000000000002p+0, false, false, + 0x1.000000000000000000000002p+0, false, false, + 0x1.000000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000000126217744835361888865876570445" "24579674771302961744368076324462890625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000000001p+0, false, - 0x1.000000000000000000000001p+0, false, - 0x1.000000000000000000000001p+0, false, - 0x1.000000000000000000000001p+0, false, - true, - 0x1.000000000000000000000001p+0, false, - 0x1.000000000000000000000001p+0, false, - 0x1.000000000000000000000001p+0, false, - 0x1.000000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000000001p+0, false, false, + 0x1.000000000000000000000001p+0, false, false, + 0x1.000000000000000000000001p+0, false, false, + 0x1.000000000000000000000001p+0, false, false, + true, + 0x1.000000000000000000000001p+0, false, false, + 0x1.000000000000000000000001p+0, false, false, + 0x1.000000000000000000000001p+0, false, false, + 0x1.000000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000000063108872417680944432938285222" "622898373856514808721840381622314453125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000000008p+0, false, - 0x1.0000000000000000000000008p+0, false, - 0x1.0000000000000000000000008p+0, false, - 0x1.0000000000000000000000008p+0, false, - true, - 0x1.0000000000000000000000008p+0, false, - 0x1.0000000000000000000000008p+0, false, - 0x1.0000000000000000000000008p+0, false, - 0x1.0000000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000008p+0, false, false, + true, + 0x1.0000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000000000031554436208840472216469142611" "3114491869282574043609201908111572265625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000000004p+0, false, - 0x1.0000000000000000000000004p+0, false, - 0x1.0000000000000000000000004p+0, false, - 0x1.0000000000000000000000004p+0, false, - true, - 0x1.0000000000000000000000004p+0, false, - 0x1.0000000000000000000000004p+0, false, - 0x1.0000000000000000000000004p+0, false, - 0x1.0000000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000004p+0, false, false, + true, + 0x1.0000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000000000015777218104420236108234571305" "65572459346412870218046009540557861328125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000000002p+0, false, - 0x1.0000000000000000000000002p+0, false, - 0x1.0000000000000000000000002p+0, false, - 0x1.0000000000000000000000002p+0, false, - true, - 0x1.0000000000000000000000002p+0, false, - 0x1.0000000000000000000000002p+0, false, - 0x1.0000000000000000000000002p+0, false, - 0x1.0000000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000002p+0, false, false, + true, + 0x1.0000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000000007888609052210118054117285652" "827862296732064351090230047702789306640625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.0000000000000000000000001p+0, false, - 0x1.0000000000000000000000001p+0, false, - 0x1.0000000000000000000000001p+0, false, - 0x1.0000000000000000000000001p+0, false, - true, - 0x1.0000000000000000000000001p+0, false, - 0x1.0000000000000000000000001p+0, false, - 0x1.0000000000000000000000001p+0, false, - 0x1.0000000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.0000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000001p+0, false, false, + true, + 0x1.0000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000000003944304526105059027058642826" "4139311483660321755451150238513946533203125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000000008p+0, false, - 0x1.00000000000000000000000008p+0, false, - 0x1.00000000000000000000000008p+0, false, - 0x1.00000000000000000000000008p+0, false, - true, - 0x1.00000000000000000000000008p+0, false, - 0x1.00000000000000000000000008p+0, false, - 0x1.00000000000000000000000008p+0, false, - 0x1.00000000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000000008p+0, false, false, + 0x1.00000000000000000000000008p+0, false, false, + 0x1.00000000000000000000000008p+0, false, false, + 0x1.00000000000000000000000008p+0, false, false, + true, + 0x1.00000000000000000000000008p+0, false, false, + 0x1.00000000000000000000000008p+0, false, false, + 0x1.00000000000000000000000008p+0, false, false, + 0x1.00000000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000000000001972152263052529513529321413" "20696557418301608777255751192569732666015625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000000004p+0, false, - 0x1.00000000000000000000000004p+0, false, - 0x1.00000000000000000000000004p+0, false, - 0x1.00000000000000000000000004p+0, false, - true, - 0x1.00000000000000000000000004p+0, false, - 0x1.00000000000000000000000004p+0, false, - 0x1.00000000000000000000000004p+0, false, - 0x1.00000000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000000004p+0, false, false, + 0x1.00000000000000000000000004p+0, false, false, + 0x1.00000000000000000000000004p+0, false, false, + 0x1.00000000000000000000000004p+0, false, false, + true, + 0x1.00000000000000000000000004p+0, false, false, + 0x1.00000000000000000000000004p+0, false, false, + 0x1.00000000000000000000000004p+0, false, false, + 0x1.00000000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000000000000986076131526264756764660706" "603482787091508043886278755962848663330078125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000000002p+0, false, - 0x1.00000000000000000000000002p+0, false, - 0x1.00000000000000000000000002p+0, false, - 0x1.00000000000000000000000002p+0, false, - true, - 0x1.00000000000000000000000002p+0, false, - 0x1.00000000000000000000000002p+0, false, - 0x1.00000000000000000000000002p+0, false, - 0x1.00000000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000000002p+0, false, false, + 0x1.00000000000000000000000002p+0, false, false, + 0x1.00000000000000000000000002p+0, false, false, + 0x1.00000000000000000000000002p+0, false, false, + true, + 0x1.00000000000000000000000002p+0, false, false, + 0x1.00000000000000000000000002p+0, false, false, + 0x1.00000000000000000000000002p+0, false, false, + 0x1.00000000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000000000493038065763132378382330353" "3017413935457540219431393779814243316650390625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.00000000000000000000000001p+0, false, - 0x1.00000000000000000000000001p+0, false, - 0x1.00000000000000000000000001p+0, false, - 0x1.00000000000000000000000001p+0, false, - true, - 0x1.00000000000000000000000001p+0, false, - 0x1.00000000000000000000000001p+0, false, - 0x1.00000000000000000000000001p+0, false, - 0x1.00000000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.00000000000000000000000001p+0, false, false, + 0x1.00000000000000000000000001p+0, false, false, + 0x1.00000000000000000000000001p+0, false, false, + 0x1.00000000000000000000000001p+0, false, false, + true, + 0x1.00000000000000000000000001p+0, false, false, + 0x1.00000000000000000000000001p+0, false, false, + 0x1.00000000000000000000000001p+0, false, false, + 0x1.00000000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000000000246519032881566189191165176" "65087069677287701097156968899071216583251953125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - true, - 0x1.000000000000000000000000008p+0, false, - 0x1.000000000000000000000000008p+0, false, - 0x1.000000000000000000000000008p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.000000000000000000000000008p+0, false, - 0x1.000000000000000000000000008p+0, false, - 0x1.000000000000000000000000008p+0, false, - 0x1.000000000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + true, + 0x1.000000000000000000000000008p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.000000000000000000000000008p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000000000000123259516440783094595582588" "325435348386438505485784844495356082916259765625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.000000000000000000000000004p+0, false, - 0x1.000000000000000000000000004p+0, false, - 0x1.000000000000000000000000004p+0, false, - 0x1.000000000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.000000000000000000000000004p+0, false, false, + 0x1.000000000000000000000000004p+0, false, false, + 0x1.000000000000000000000000004p+0, false, false, + 0x1.000000000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000000000000061629758220391547297791294" "1627176741932192527428924222476780414581298828125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.000000000000000000000000002p+0, false, - 0x1.000000000000000000000000002p+0, false, - 0x1.000000000000000000000000002p+0, false, - 0x1.000000000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.000000000000000000000000002p+0, false, false, + 0x1.000000000000000000000000002p+0, false, false, + 0x1.000000000000000000000000002p+0, false, false, + 0x1.000000000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000000000030814879110195773648895647" "08135883709660962637144621112383902072906494140625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.000000000000000000000000001p+0, false, - 0x1.000000000000000000000000001p+0, false, - 0x1.000000000000000000000000001p+0, false, - 0x1.000000000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.000000000000000000000000001p+0, false, false, + 0x1.000000000000000000000000001p+0, false, false, + 0x1.000000000000000000000000001p+0, false, false, + 0x1.000000000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000000000015407439555097886824447823" "540679418548304813185723105561919510364532470703125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.0000000000000000000000000008p+0, false, - 0x1.0000000000000000000000000008p+0, false, - 0x1.0000000000000000000000000008p+0, false, - 0x1.0000000000000000000000000008p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.0000000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000000008p+0, false, false, + 0x1.0000000000000000000000000008p+0, false, false), TEST ("1.0000000000000000000000000000000007703719777548943412223911" "7703397092741524065928615527809597551822662353515625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.0000000000000000000000000004p+0, false, - 0x1.0000000000000000000000000004p+0, false, - 0x1.0000000000000000000000000004p+0, false, - 0x1.0000000000000000000000000004p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.0000000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000000004p+0, false, false, + 0x1.0000000000000000000000000004p+0, false, false), TEST ("1.0000000000000000000000000000000003851859888774471706111955" "88516985463707620329643077639047987759113311767578125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.0000000000000000000000000002p+0, false, - 0x1.0000000000000000000000000002p+0, false, - 0x1.0000000000000000000000000002p+0, false, - 0x1.0000000000000000000000000002p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.0000000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000000002p+0, false, false, + 0x1.0000000000000000000000000002p+0, false, false), TEST ("1.0000000000000000000000000000000001925929944387235853055977" "942584927318538101648215388195239938795566558837890625", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - true, - 0x1.0000000000000000000000000001p+0, false, - 0x1.0000000000000000000000000001p+0, false, - 0x1.0000000000000000000000000001p+0, false, - 0x1.0000000000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + true, + 0x1.0000000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000000001p+0, false, false, + 0x1.0000000000000000000000000001p+0, false, false), TEST ("1.0000000000000000000000000000000000962964972193617926527988" "9712924636592690508241076940976199693977832794189453125", false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000001p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000002p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.000000000000000000000000008p+0, false, - false, - 0x1p+0, false, - 0x1p+0, false, - 0x1p+0, false, - 0x1.0000000000000000000000000001p+0, false), + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000001p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000002p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.000000000000000000000000008p+0, false, false, + false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1p+0, false, false, + 0x1.0000000000000000000000000001p+0, false, false), + TEST ("0x30000002222225p-1077", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x1.800000111111p-1024, false, true, + 0x1.8000001111114p-1024, false, true, + 0x1.800000111111p-1024, false, true, + 0x1.8000001111114p-1024, false, true, + true, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + true, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + false, + 0x1.800000111111p-1024, false, true, + 0x1.8000001111114p-1024, false, true, + 0x1.800000111111p-1024, false, true, + 0x1.8000001111114p-1024, false, true, + true, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false, + 0x1.80000011111128p-1024, false, false), + TEST ("0x0.7fffffffffffeap-1022", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + true, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + true, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + false, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + true, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false, + 0x1.ffffffffffffa8p-1024, false, false), + TEST ("0x0.7fffffffffffe9p-1022", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + true, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + true, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + false, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + 0x1.ffffffffffff8p-1024, false, true, + 0x1.ffffffffffffcp-1024, false, true, + true, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false, + 0x1.ffffffffffffa4p-1024, false, false), + TEST ("0x0.7ffffd4p-126", + false, + 0x1.fffffp-128, false, true, + 0x1.fffff8p-128, false, true, + 0x1.fffffp-128, false, true, + 0x1.fffff8p-128, false, true, + true, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + true, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + true, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + true, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + true, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false, + 0x1.fffff5p-128, false, false), + TEST ("0x0.7ffffffffffffffd4p-16382", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.fffffffffffffffp-16384, false, true, + 0x1.fffffffffffffff8p-16384, false, true, + 0x1.fffffffffffffffp-16384, false, true, + 0x1.fffffffffffffff8p-16384, false, true, + false, + 0x1.fffffffffffffff4p-16384, false, true, + 0x1.fffffffffffffff4p-16384, false, true, + 0x1.fffffffffffffff4p-16384, false, true, + 0x1.fffffffffffffff8p-16384, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x1.fffffffffffffff5p-16384, false, false, + 0x1.fffffffffffffff5p-16384, false, false, + 0x1.fffffffffffffff5p-16384, false, false, + 0x1.fffffffffffffff5p-16384, false, false), + TEST ("0x0.7ffffffffffffffd4p-16383", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0xf.ffffffffffffff8p-16388, false, true, + 0xf.ffffffffffffff8p-16388, false, true, + 0xf.ffffffffffffff8p-16388, false, true, + 0x1p-16384, false, true, + false, + 0xf.ffffffffffffff8p-16388, false, true, + 0xf.ffffffffffffffcp-16388, false, true, + 0xf.ffffffffffffff8p-16388, false, true, + 0xf.ffffffffffffffcp-16388, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0xf.ffffffffffffffa8p-16388, false, false, + 0xf.ffffffffffffffa8p-16388, false, false, + 0xf.ffffffffffffffa8p-16388, false, false, + 0xf.ffffffffffffffa8p-16388, false, false), + TEST ("0x0.7ffffffffffffffffffffffffffeap-16382", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.fffffffffffffff8p-16384, false, true, + 0x2p-16384, false, true, + 0x1.fffffffffffffff8p-16384, false, true, + 0x2p-16384, false, true, + false, + 0x1.fffffffffffffffcp-16384, false, true, + 0x2p-16384, false, true, + 0x1.fffffffffffffffcp-16384, false, true, + 0x2p-16384, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.fffffffffffffffffffffffffff8p-16384, false, true, + 0x1.fffffffffffffffffffffffffffcp-16384, false, true, + 0x1.fffffffffffffffffffffffffff8p-16384, false, true, + 0x1.fffffffffffffffffffffffffffcp-16384, false, true), + TEST ("0x0.7000004p-126", + false, + 0x1.cp-128, false, true, + 0x1.cp-128, false, true, + 0x1.cp-128, false, true, + 0x1.c00008p-128, false, true, + true, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + true, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + true, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + true, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + true, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false, + 0x1.c00001p-128, false, false), + TEST ("0x0.70000000000002p-1022", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x1.cp-1024, false, true, + 0x1.cp-1024, false, true, + 0x1.cp-1024, false, true, + 0x1.c000000000004p-1024, false, true, + true, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + true, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + false, + 0x1.cp-1024, false, true, + 0x1.cp-1024, false, true, + 0x1.cp-1024, false, true, + 0x1.c000000000004p-1024, false, true, + true, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false, + 0x1.c0000000000008p-1024, false, false), + TEST ("0x0.70000000000000004p-16382", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.c000000000000008p-16384, false, true, + false, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.c000000000000004p-16384, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0x1.c000000000000001p-16384, false, false, + 0x1.c000000000000001p-16384, false, false, + 0x1.c000000000000001p-16384, false, false, + 0x1.c000000000000001p-16384, false, false), + TEST ("0x0.70000000000000004p-16383", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0xep-16388, false, true, + 0xep-16388, false, true, + 0xep-16388, false, true, + 0xe.000000000000008p-16388, false, true, + false, + 0xep-16388, false, true, + 0xep-16388, false, true, + 0xep-16388, false, true, + 0xe.000000000000004p-16388, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + true, + 0xe.0000000000000008p-16388, false, false, + 0xe.0000000000000008p-16388, false, false, + 0xe.0000000000000008p-16388, false, false, + 0xe.0000000000000008p-16388, false, false), + TEST ("0x0.70000000000000000000000000002p-16382", + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x8p-152, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.c000000000000008p-16384, false, true, + false, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.c000000000000004p-16384, false, true, + false, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x0p+0, false, true, + 0x4p-1076, false, true, + false, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.cp-16384, false, true, + 0x1.c000000000000000000000000004p-16384, false, true), }; diff --git a/stdlib/tst-strtod-round-skeleton.c b/stdlib/tst-strtod-round-skeleton.c index 6fba4b5..be081ba 100644 --- a/stdlib/tst-strtod-round-skeleton.c +++ b/stdlib/tst-strtod-round-skeleton.c @@ -21,6 +21,7 @@ declared in the headers. */ #define _LIBC_TEST 1 #define __STDC_WANT_IEC_60559_TYPES_EXT__ +#include <errno.h> #include <fenv.h> #include <float.h> #include <math.h> @@ -29,6 +30,7 @@ #include <stdlib.h> #include <string.h> #include <math-tests.h> +#include <tininess.h> #include "tst-strtod.h" @@ -138,16 +140,26 @@ gen-tst-strtod-round utility to select the appropriately rounded long double value for a given format. */ #define TEST(s, \ - fx, fd, fdo, fn, fno, fz, fzo, fu, fuo, \ - dx, dd, ddo, dn, dno, dz, dzo, du, duo, \ - ld64ix, ld64id, ld64ido, ld64in, ld64ino, \ - ld64iz, ld64izo, ld64iu, ld64iuo, \ - ld64mx, ld64md, ld64mdo, ld64mn, ld64mno, \ - ld64mz, ld64mzo, ld64mu, ld64muo, \ - ld106x, ld106d, ld106do, ld106n, ld106no, \ - ld106z, ld106zo, ld106u, ld106uo, \ - ld113x, ld113d, ld113do, ld113n, ld113no, \ - ld113z, ld113zo, ld113u, ld113uo) \ + fx, fd, fdo, fdu, fn, fno, fnu, \ + fz, fzo, fzu, fu, fuo, fuu, \ + dx, dd, ddo, ddu, dn, dno, dnu, \ + dz, dzo, dzu, du, duo, duu, \ + ld64ix, ld64id, ld64ido, ld64idu, \ + ld64in, ld64ino, ld64inu, \ + ld64iz, ld64izo, ld64izu, \ + ld64iu, ld64iuo, ld64iuu, \ + ld64mx, ld64md, ld64mdo, ld64mdu, \ + ld64mn, ld64mno, ld64mnu, \ + ld64mz, ld64mzo, ld64mzu, \ + ld64mu, ld64muo, ld64muu, \ + ld106x, ld106d, ld106do, ld106du, \ + ld106n, ld106no, ld106nu, \ + ld106z, ld106zo, ld106zu, \ + ld106u, ld106uo, ld106uu, \ + ld113x, ld113d, ld113do, ld113du, \ + ld113n, ld113no, ld113nu, \ + ld113z, ld113zo, ld113zu, \ + ld113u, ld113uo, ld113uu) \ { \ L_ (s), \ { XNTRY (fx, dx, ld64ix, ld64mx, ld106x, ld113x) }, \ @@ -162,6 +174,12 @@ { XNTRY (fdo, ddo, ld64ido, ld64mdo, ld106do, ld113do) }, \ { XNTRY (fzo, dzo, ld64izo, ld64mzo, ld106zo, ld113zo) }, \ { XNTRY (fuo, duo, ld64iuo, ld64muo, ld106uo, ld113uo) } \ + }, \ + { \ + { XNTRY (fnu, dnu, ld64inu, ld64mnu, ld106nu, ld113nu) }, \ + { XNTRY (fdu, ddu, ld64idu, ld64mdu, ld106du, ld113du) }, \ + { XNTRY (fzu, dzu, ld64izu, ld64mzu, ld106zu, ld113zu) }, \ + { XNTRY (fuu, duu, ld64iuu, ld64muu, ld106uu, ld113uu) } \ } \ } @@ -180,11 +198,17 @@ struct test_overflow STRUCT_FOREACH_FLOAT_BOOL }; +struct test_underflow + { + STRUCT_FOREACH_FLOAT_BOOL + }; + struct test { const CHAR *s; struct test_exactness exact; struct test_results r[4]; struct test_overflow o[4]; + struct test_underflow u[4]; }; /* Include the generated test data. */ @@ -202,10 +226,16 @@ struct test { # define FE_OVERFLOW 0 #endif +#ifndef FE_UNDERFLOW +# define FE_UNDERFLOW 0 +#endif + #define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ { \ feclearexcept (FE_ALL_EXCEPT); \ + errno = 12345; \ FTYPE f = STRTO (FSUF) (s, NULL); \ + int new_errno = errno; \ if (f != expected->FSUF \ || (copysign ## CSUF) (1.0 ## LSUF, f) \ != (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF)) \ @@ -254,6 +284,48 @@ struct test { printf ("ignoring this exception error\n"); \ } \ } \ + if (overflow->FSUF && new_errno != ERANGE) \ + { \ + printf (FNPFXS "to" #FSUF \ + " (" STRM ") left errno == %d," \ + " not %d (ERANGE)\n", \ + s, new_errno, ERANGE); \ + result = 1; \ + } \ + if (FE_UNDERFLOW != 0) \ + { \ + bool underflow_raised \ + = fetestexcept (FE_UNDERFLOW) != 0; \ + if (underflow_raised != underflow->FSUF) \ + { \ + printf (FNPFXS "to" #FSUF \ + " (" STRM ") underflow %d " \ + "not %d\n", s, underflow_raised, \ + underflow->FSUF); \ + if (EXCEPTION_TESTS (FTYPE)) \ + result = 1; \ + else \ + printf ("ignoring this exception error\n"); \ + } \ + } \ + if (underflow->FSUF && new_errno != ERANGE) \ + { \ + printf (FNPFXS "to" #FSUF \ + " (" STRM ") left errno == %d," \ + " not %d (ERANGE)\n", \ + s, new_errno, ERANGE); \ + result = 1; \ + } \ + if (!overflow->FSUF \ + && !underflow->FSUF \ + && new_errno != 12345) \ + { \ + printf (FNPFXS "to" #FSUF \ + " (" STRM ") set errno == %d," \ + " should be unchanged\n", \ + s, new_errno); \ + result = 1; \ + } \ } \ } @@ -261,6 +333,7 @@ static int test_in_one_mode (const CHAR *s, const struct test_results *expected, const struct test_exactness *exact, const struct test_overflow *overflow, + const struct test_underflow *underflow, const char *mode_name, int rnd_mode) { int result = 0; @@ -296,6 +369,7 @@ do_test (void) { result |= test_in_one_mode (tests[i].s, &tests[i].r[modes[0].rnd_i], &tests[i].exact, &tests[i].o[modes[0].rnd_i], + &tests[i].u[modes[0].rnd_i], modes[0].mode_name, modes[0].rnd_mode); for (const struct fetestmodes *m = &modes[1]; m->mode_name != NULL; m++) { @@ -303,7 +377,9 @@ do_test (void) { result |= test_in_one_mode (tests[i].s, &tests[i].r[m->rnd_i], &tests[i].exact, - &tests[i].o[m->rnd_i], m->mode_name, + &tests[i].o[m->rnd_i], + &tests[i].u[m->rnd_i], + m->mode_name, m->rnd_mode); fesetround (save_round_mode); } diff --git a/stdlib/tst-strtod1i.c b/stdlib/tst-strtod1i.c index 9d6bb76..44ae026 100644 --- a/stdlib/tst-strtod1i.c +++ b/stdlib/tst-strtod1i.c @@ -25,60 +25,91 @@ #include <string.h> #include <math.h> -/* Perform a few tests in a locale with thousands separators. */ -static int -do_test (void) -{ - static const struct - { - const char *loc; - const char *str; - double exp; - ptrdiff_t nread; - } tests[] = - { - { "de_DE.UTF-8", "1,5", 1.5, 3 }, - { "de_DE.UTF-8", "1.5", 1.0, 1 }, - { "de_DE.UTF-8", "1.500", 1500.0, 5 }, - { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65, 26 } - }; -#define ntests (sizeof (tests) / sizeof (tests[0])) - size_t n; - int result = 0; - - puts ("\nLocale tests"); +#include "tst-strtod.h" - for (n = 0; n < ntests; ++n) - { - double d; - char *endp; +/* This tests internal interfaces, which are only defined for types + with distinct ABIs, so disable testing for types without distinct + ABIs. */ +#undef IF_FLOAT32 +#define IF_FLOAT32(x) +#undef IF_FLOAT64 +#define IF_FLOAT64(x) +#undef IF_FLOAT32X +#define IF_FLOAT32X(x) +#undef IF_FLOAT64X +#define IF_FLOAT64X(x) +#if !__HAVE_DISTINCT_FLOAT128 +# undef IF_FLOAT128 +# define IF_FLOAT128(x) +#endif - if (setlocale (LC_ALL, tests[n].loc) == NULL) - { - printf ("cannot set locale %s\n", tests[n].loc); - result = 1; - continue; - } +#define ntests (sizeof (tests) / sizeof (tests[0])) - d = __strtod_internal (tests[n].str, &endp, 1); - if (d != tests[n].exp) - { - printf ("strtod(\"%s\") returns %g and not %g\n", - tests[n].str, d, tests[n].exp); - result = 1; - } - else if (endp - tests[n].str != tests[n].nread) - { - printf ("strtod(\"%s\") read %td bytes and not %td\n", - tests[n].str, endp - tests[n].str, tests[n].nread); - result = 1; - } - } +/* Perform a few tests in a locale with thousands separators. */ +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static int \ +test_strto ## FSUF (void) \ +{ \ + static const struct \ + { \ + const char *loc; \ + const char *str; \ + FTYPE exp; \ + ptrdiff_t nread; \ + } tests[] = \ + { \ + { "de_DE.UTF-8", "1,5", 1.5 ## LSUF, 3 }, \ + { "de_DE.UTF-8", "1.5", 1.0 ## LSUF, 1 }, \ + { "de_DE.UTF-8", "1.500", 1500.0 ## LSUF, 5 }, \ + { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65 ## LSUF, 26 } \ + }; \ + size_t n; \ + int result = 0; \ + \ + puts ("\nLocale tests"); \ + \ + for (n = 0; n < ntests; ++n) \ + { \ + FTYPE d; \ + char *endp; \ + \ + if (setlocale (LC_ALL, tests[n].loc) == NULL) \ + { \ + printf ("cannot set locale %s\n", tests[n].loc); \ + result = 1; \ + continue; \ + } \ + \ + d = __strto ## FSUF ## _internal (tests[n].str, &endp, 1); \ + if (d != tests[n].exp) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", d); \ + FTOSTR (buf2, sizeof (buf2), "%g", tests[n].exp); \ + printf ("strto" # FSUF "(\"%s\") returns %s and not %s\n", \ + tests[n].str, buf1, buf2); \ + result = 1; \ + } \ + else if (endp - tests[n].str != tests[n].nread) \ + { \ + printf ("strto" # FSUF "(\"%s\") read %td bytes and not %td\n", \ + tests[n].str, endp - tests[n].str, tests[n].nread); \ + result = 1; \ + } \ + } \ + \ + if (result == 0) \ + puts ("all OK"); \ + \ + return result ? EXIT_FAILURE : EXIT_SUCCESS; \ +} - if (result == 0) - puts ("all OK"); +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) - return result ? EXIT_FAILURE : EXIT_SUCCESS; +static int +do_test (void) +{ + return STRTOD_TEST_FOREACH (test_strto); } #include <support/test-driver.c> diff --git a/stdlib/tst-strtod2.c b/stdlib/tst-strtod2.c index a7df82e..d00bc13 100644 --- a/stdlib/tst-strtod2.c +++ b/stdlib/tst-strtod2.c @@ -1,43 +1,112 @@ +#include <math.h> #include <stdio.h> #include <stdlib.h> -struct test -{ - const char *str; - double result; - size_t offset; -} tests[] = -{ - { "0xy", 0.0, 1 }, - { "0x.y", 0.0, 1 }, - { "0x0.y", 0.0, 4 }, - { "0x.0y", 0.0, 4 }, - { ".y", 0.0, 0 }, - { "0.y", 0.0, 2 }, - { ".0y", 0.0, 2 } -}; +#include "tst-strtod.h" + +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +struct test_strto ## FSUF \ +{ \ + const char *str; \ + FTYPE result; \ + size_t offset; \ +} tests_strto ## FSUF[] = \ +{ \ + { "0xy", 0.0 ## LSUF, 1 }, \ + { "0x.y", 0.0 ## LSUF, 1 }, \ + { "0x0.y", 0.0 ## LSUF, 4 }, \ + { "0x.0y", 0.0 ## LSUF, 4 }, \ + { ".y", 0.0 ## LSUF, 0 }, \ + { "0.y", 0.0 ## LSUF, 2 }, \ + { ".0y", 0.0 ## LSUF, 2 }, \ + { "1.0e", 1.0 ## LSUF, 3 }, \ + { "1.0e+", 1.0 ## LSUF, 3 }, \ + { "1.0e-", 1.0 ## LSUF, 3 }, \ + { "1.0ex", 1.0 ## LSUF, 3 }, \ + { "1.0e+x", 1.0 ## LSUF, 3 }, \ + { "1.0e-x", 1.0 ## LSUF, 3 }, \ + { "0x1p", 1.0 ## LSUF, 3 }, \ + { "0x1p+", 1.0 ## LSUF, 3 }, \ + { "0x1p-", 1.0 ## LSUF, 3 }, \ + { "0x1px", 1.0 ## LSUF, 3 }, \ + { "0x1p+x", 1.0 ## LSUF, 3 }, \ + { "0x1p-x", 1.0 ## LSUF, 3 }, \ + { "", 0.0 ## LSUF, 0 }, \ + { ".", 0.0 ## LSUF, 0 }, \ + { "-", 0.0 ## LSUF, 0 }, \ + { "-.", 0.0 ## LSUF, 0 }, \ + { ".e", 0.0 ## LSUF, 0 }, \ + { "-.e", 0.0 ## LSUF, 0 }, \ + { " \t", 0.0 ## LSUF, 0 }, \ + { " \t.", 0.0 ## LSUF, 0 }, \ + { " \t-", 0.0 ## LSUF, 0 }, \ + { " \t-.", 0.0 ## LSUF, 0 }, \ + { " \t.e", 0.0 ## LSUF, 0 }, \ + { " \t-.e", 0.0 ## LSUF, 0 }, \ + { " \t\f\r\n\v1", 1.0 ## LSUF, 7 }, \ + { " \t\f\r\n\v-1.5e2", -150.0 ## LSUF, 12 }, \ + { "INFx", INFINITY, 3 }, \ + { "infx", INFINITY, 3 }, \ + { "INFINITx", INFINITY, 3 }, \ + { "infinitx", INFINITY, 3 }, \ + { "INFINITYY", INFINITY, 8 }, \ + { "infinityy", INFINITY, 8 }, \ + { "NANx", NAN, 3 }, \ + { "nanx", NAN, 3 }, \ + { "NAN(", NAN, 3 }, \ + { "nan(", NAN, 3 }, \ + { "NAN(x", NAN, 3 }, \ + { "nan(x", NAN, 3 }, \ + { "NAN(x)y", NAN, 6 }, \ + { "nan(x)y", NAN, 6 }, \ + { "NAN(*)y", NAN, 3 }, \ + { "nan(*)y", NAN, 3 } \ +}; \ + \ +static int \ +compare_strto ## FSUF (FTYPE x, FTYPE y) \ +{ \ + if (isnan (x) && isnan (y)) \ + return 1; \ + return x == y; \ +} \ + \ +static int \ +test_strto ## FSUF (void) \ +{ \ + int status = 0; \ + for (size_t i = 0; \ + i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \ + ++i) \ + { \ + char *ep; \ + FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].str, &ep); \ + if (!compare_strto ## FSUF (r, tests_strto ## FSUF[i].result)) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", r); \ + FTOSTR (buf2, sizeof (buf2), "%g", tests_strto ## FSUF[i].result); \ + printf ("test %zu r = %s, expect %s\n", i, buf1, buf2); \ + status = 1; \ + } \ + if (ep != tests_strto ## FSUF[i].str + tests_strto ## FSUF[i].offset) \ + { \ + printf ("test %zu strto" #FSUF \ + " parsed %tu characters, expected %zu\n", \ + i, ep - tests_strto ## FSUF[i].str, \ + tests_strto ## FSUF[i].offset); \ + status = 1; \ + } \ + } \ + return status; \ +} + +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) static int do_test (void) { - int status = 0; - for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i) - { - char *ep; - double r = strtod (tests[i].str, &ep); - if (r != tests[i].result) - { - printf ("test %zu r = %g, expect %g\n", i, r, tests[i].result); - status = 1; - } - if (ep != tests[i].str + tests[i].offset) - { - printf ("test %zu strtod parsed %tu characters, expected %zu\n", - i, ep - tests[i].str, tests[i].offset); - status = 1; - } - } - return status; + return STRTOD_TEST_FOREACH (test_strto); } #define TEST_FUNCTION do_test () diff --git a/stdlib/tst-strtod3.c b/stdlib/tst-strtod3.c index 23abec1..0d662d8 100644 --- a/stdlib/tst-strtod3.c +++ b/stdlib/tst-strtod3.c @@ -3,19 +3,73 @@ #include <stdlib.h> #include <string.h> -static const struct -{ - const char *in; - const char *out; - double expected; -} tests[] = - { - { "000,,,e1", ",,,e1", 0.0 }, - { "000e1", "", 0.0 }, - { "000,1e1", ",1e1", 0.0 } - }; -#define NTESTS (sizeof (tests) / sizeof (tests[0])) +#include "tst-strtod.h" + +/* This tests internal interfaces, which are only defined for types + with distinct ABIs, so disable testing for types without distinct + ABIs. */ +#undef IF_FLOAT32 +#define IF_FLOAT32(x) +#undef IF_FLOAT64 +#define IF_FLOAT64(x) +#undef IF_FLOAT32X +#define IF_FLOAT32X(x) +#undef IF_FLOAT64X +#define IF_FLOAT64X(x) +#if !__HAVE_DISTINCT_FLOAT128 +# undef IF_FLOAT128 +# define IF_FLOAT128(x) +#endif +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static const struct \ +{ \ + const char *in; \ + const char *out; \ + FTYPE expected; \ +} tests_strto ## FSUF[] = \ + { \ + { "000,,,e1", ",,,e1", 0.0 ## LSUF }, \ + { "000e1", "", 0.0 ## LSUF }, \ + { "000,1e1", ",1e1", 0.0 ## LSUF } \ + }; \ + \ +static int \ +test_strto ## FSUF (void) \ +{ \ + int status = 0; \ + \ + for (int i = 0; \ + i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \ + ++i) \ + { \ + char *ep; \ + FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \ + &ep, 1); \ + \ + if (strcmp (ep, tests_strto ## FSUF[i].out) != 0) \ + { \ + printf ("%d: got rest string \"%s\", expected \"%s\"\n", \ + i, ep, tests_strto ## FSUF[i].out); \ + status = 1; \ + } \ + \ + if (r != tests_strto ## FSUF[i].expected) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", r); \ + FTOSTR (buf2, sizeof (buf2), "%g", \ + tests_strto ## FSUF[i].expected); \ + printf ("%d: got wrong results %s, expected %s\n", \ + i, buf1, buf2); \ + status = 1; \ + } \ + } \ + \ + return status; \ +} + +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) static int do_test (void) @@ -26,29 +80,7 @@ do_test (void) return 1; } - int status = 0; - - for (int i = 0; i < NTESTS; ++i) - { - char *ep; - double r = __strtod_internal (tests[i].in, &ep, 1); - - if (strcmp (ep, tests[i].out) != 0) - { - printf ("%d: got rest string \"%s\", expected \"%s\"\n", - i, ep, tests[i].out); - status = 1; - } - - if (r != tests[i].expected) - { - printf ("%d: got wrong results %g, expected %g\n", - i, r, tests[i].expected); - status = 1; - } - } - - return status; + return STRTOD_TEST_FOREACH (test_strto); } #define TEST_FUNCTION do_test () diff --git a/stdlib/tst-strtod4.c b/stdlib/tst-strtod4.c index 6cc4e84..dfd3f05 100644 --- a/stdlib/tst-strtod4.c +++ b/stdlib/tst-strtod4.c @@ -3,22 +3,76 @@ #include <stdlib.h> #include <string.h> +#include "tst-strtod.h" + +/* This tests internal interfaces, which are only defined for types + with distinct ABIs, so disable testing for types without distinct + ABIs. */ +#undef IF_FLOAT32 +#define IF_FLOAT32(x) +#undef IF_FLOAT64 +#define IF_FLOAT64(x) +#undef IF_FLOAT32X +#define IF_FLOAT32X(x) +#undef IF_FLOAT64X +#define IF_FLOAT64X(x) +#if !__HAVE_DISTINCT_FLOAT128 +# undef IF_FLOAT128 +# define IF_FLOAT128(x) +#endif + #define NNBSP "\xe2\x80\xaf" -static const struct -{ - const char *in; - const char *out; - double expected; -} tests[] = - { - { "000"NNBSP"000"NNBSP"000", "", 0.0 }, - { "1"NNBSP"000"NNBSP"000,5x", "x", 1000000.5 }, - /* Bug 30964 */ - { "10"NNBSP NNBSP"200", NNBSP NNBSP"200", 10.0 } - }; -#define NTESTS (sizeof (tests) / sizeof (tests[0])) +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static const struct \ +{ \ + const char *in; \ + const char *out; \ + FTYPE expected; \ +} tests_strto ## FSUF[] = \ + { \ + { "000"NNBSP"000"NNBSP"000", "", 0.0 ## LSUF }, \ + { "1"NNBSP"000"NNBSP"000,5x", "x", 1000000.5 ## LSUF }, \ + /* Bug 30964 */ \ + { "10"NNBSP NNBSP"200", NNBSP NNBSP"200", 10.0 ## LSUF } \ + }; \ + \ +static int \ +test_strto ## FSUF (void) \ +{ \ + int status = 0; \ + \ + for (int i = 0; \ + i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \ + ++i) \ + { \ + char *ep; \ + FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \ + &ep, 1); \ + \ + if (strcmp (ep, tests_strto ## FSUF[i].out) != 0) \ + { \ + printf ("%d: got rest string \"%s\", expected \"%s\"\n", \ + i, ep, tests_strto ## FSUF[i].out); \ + status = 1; \ + } \ + \ + if (r != tests_strto ## FSUF[i].expected) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", r); \ + FTOSTR (buf2, sizeof (buf2), "%g", \ + tests_strto ## FSUF[i].expected); \ + printf ("%d: got wrong results %s, expected %s\n", \ + i, buf1, buf2); \ + status = 1; \ + } \ + } \ + \ + return status; \ +} +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) static int do_test (void) @@ -29,29 +83,7 @@ do_test (void) return 1; } - int status = 0; - - for (int i = 0; i < NTESTS; ++i) - { - char *ep; - double r = __strtod_internal (tests[i].in, &ep, 1); - - if (strcmp (ep, tests[i].out) != 0) - { - printf ("%d: got rest string \"%s\", expected \"%s\"\n", - i, ep, tests[i].out); - status = 1; - } - - if (r != tests[i].expected) - { - printf ("%d: got wrong results %g, expected %g\n", - i, r, tests[i].expected); - status = 1; - } - } - - return status; + return STRTOD_TEST_FOREACH (test_strto); } #define TEST_FUNCTION do_test () diff --git a/stdlib/tst-strtod5.c b/stdlib/tst-strtod5.c index 29153ec..7eb9b3a 100644 --- a/stdlib/tst-strtod5.c +++ b/stdlib/tst-strtod5.c @@ -22,35 +22,75 @@ #include <string.h> #include <math.h> +#include "tst-strtod.h" + #define NBSP "\xc2\xa0" -static const struct -{ - const char *in; - double expected; -} tests[] = - { - { "0", 0.0 }, - { "000", 0.0 }, - { "-0", -0.0 }, - { "-000", -0.0 }, - { "0,", 0.0 }, - { "-0,", -0.0 }, - { "0,0", 0.0 }, - { "-0,0", -0.0 }, - { "0e-10", 0.0 }, - { "-0e-10", -0.0 }, - { "0,e-10", 0.0 }, - { "-0,e-10", -0.0 }, - { "0,0e-10", 0.0 }, - { "-0,0e-10", -0.0 }, - { "0e-1000000", 0.0 }, - { "-0e-1000000", -0.0 }, - { "0,0e-1000000", 0.0 }, - { "-0,0e-1000000", -0.0 }, - }; -#define NTESTS (sizeof (tests) / sizeof (tests[0])) +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static const struct \ +{ \ + const char *in; \ + FTYPE expected; \ +} tests_strto ## FSUF[] = \ + { \ + { "0", 0.0 ## LSUF }, \ + { "000", 0.0 ## LSUF }, \ + { "-0", -0.0 ## LSUF }, \ + { "-000", -0.0 ## LSUF }, \ + { "0,", 0.0 ## LSUF }, \ + { "-0,", -0.0 ## LSUF }, \ + { "0,0", 0.0 ## LSUF }, \ + { "-0,0", -0.0 ## LSUF }, \ + { "0e-10", 0.0 ## LSUF }, \ + { "-0e-10", -0.0 ## LSUF }, \ + { "0,e-10", 0.0 ## LSUF }, \ + { "-0,e-10", -0.0 ## LSUF }, \ + { "0,0e-10", 0.0 ## LSUF }, \ + { "-0,0e-10", -0.0 ## LSUF }, \ + { "0e-1000000", 0.0 ## LSUF }, \ + { "-0e-1000000", -0.0 ## LSUF }, \ + { "0,0e-1000000", 0.0 ## LSUF }, \ + { "-0,0e-1000000", -0.0 ## LSUF }, \ + }; \ + \ + \ +static int \ +test_strto ## FSUF (void) \ +{ \ + int status = 0; \ + \ + for (int i = 0; \ + i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \ + ++i) \ + { \ + char *ep; \ + FTYPE r = strto ## FSUF (tests_strto ## FSUF[i].in, &ep); \ + \ + if (*ep != '\0') \ + { \ + printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep); \ + status = 1; \ + } \ + \ + if (r != tests_strto ## FSUF[i].expected \ + || (copysign ## CSUF (10.0 ## LSUF, r) \ + != copysign ## CSUF (10.0 ## LSUF, \ + tests_strto ## FSUF[i].expected))) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", r); \ + FTOSTR (buf2, sizeof (buf2), "%g", \ + tests_strto ## FSUF[i].expected); \ + printf ("%d: got wrong results %s, expected %s\n", \ + i, buf1, buf2); \ + status = 1; \ + } \ + } \ + \ + return status; \ +} +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) static int do_test (void) @@ -61,29 +101,7 @@ do_test (void) return 1; } - int status = 0; - - for (int i = 0; i < NTESTS; ++i) - { - char *ep; - double r = strtod (tests[i].in, &ep); - - if (*ep != '\0') - { - printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep); - status = 1; - } - - if (r != tests[i].expected - || copysign (10.0, r) != copysign (10.0, tests[i].expected)) - { - printf ("%d: got wrong results %g, expected %g\n", - i, r, tests[i].expected); - status = 1; - } - } - - return status; + return STRTOD_TEST_FOREACH (test_strto); } #include <support/test-driver.c> diff --git a/stdlib/tst-strtod5i.c b/stdlib/tst-strtod5i.c index ee54e34..136aede 100644 --- a/stdlib/tst-strtod5i.c +++ b/stdlib/tst-strtod5i.c @@ -16,52 +16,112 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ +/* Defining _LIBC_TEST ensures long double math functions are + declared in the headers. */ +#define _LIBC_TEST 1 #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> +#include "tst-strtod.h" + +/* This tests internal interfaces, which are only defined for types + with distinct ABIs, so disable testing for types without distinct + ABIs. */ +#undef IF_FLOAT32 +#define IF_FLOAT32(x) +#undef IF_FLOAT64 +#define IF_FLOAT64(x) +#undef IF_FLOAT32X +#define IF_FLOAT32X(x) +#undef IF_FLOAT64X +#define IF_FLOAT64X(x) +#if !__HAVE_DISTINCT_FLOAT128 +# undef IF_FLOAT128 +# define IF_FLOAT128(x) +#endif + #define NNBSP "\xe2\x80\xaf" -static const struct -{ - const char *in; - int group; - double expected; -} tests[] = - { - { "0", 0, 0.0 }, - { "000", 0, 0.0 }, - { "-0", 0, -0.0 }, - { "-000", 0, -0.0 }, - { "0,", 0, 0.0 }, - { "-0,", 0, -0.0 }, - { "0,0", 0, 0.0 }, - { "-0,0", 0, -0.0 }, - { "0e-10", 0, 0.0 }, - { "-0e-10", 0, -0.0 }, - { "0,e-10", 0, 0.0 }, - { "-0,e-10", 0, -0.0 }, - { "0,0e-10", 0, 0.0 }, - { "-0,0e-10", 0, -0.0 }, - { "0e-1000000", 0, 0.0 }, - { "-0e-1000000", 0, -0.0 }, - { "0,0e-1000000", 0, 0.0 }, - { "-0,0e-1000000", 0, -0.0 }, - { "0", 1, 0.0 }, - { "000", 1, 0.0 }, - { "-0", 1, -0.0 }, - { "-000", 1, -0.0 }, - { "0e-10", 1, 0.0 }, - { "-0e-10", 1, -0.0 }, - { "0e-1000000", 1, 0.0 }, - { "-0e-1000000", 1, -0.0 }, - { "000"NNBSP"000"NNBSP"000", 1, 0.0 }, - { "-000"NNBSP"000"NNBSP"000", 1, -0.0 } - }; -#define NTESTS (sizeof (tests) / sizeof (tests[0])) +#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ +static const struct \ +{ \ + const char *in; \ + int group; \ + FTYPE expected; \ +} tests_strto ## FSUF[] = \ + { \ + { "0", 0, 0.0 ## LSUF }, \ + { "000", 0, 0.0 ## LSUF }, \ + { "-0", 0, -0.0 ## LSUF }, \ + { "-000", 0, -0.0 ## LSUF }, \ + { "0,", 0, 0.0 ## LSUF }, \ + { "-0,", 0, -0.0 ## LSUF }, \ + { "0,0", 0, 0.0 ## LSUF }, \ + { "-0,0", 0, -0.0 ## LSUF }, \ + { "0e-10", 0, 0.0 ## LSUF }, \ + { "-0e-10", 0, -0.0 ## LSUF }, \ + { "0,e-10", 0, 0.0 ## LSUF }, \ + { "-0,e-10", 0, -0.0 ## LSUF }, \ + { "0,0e-10", 0, 0.0 ## LSUF }, \ + { "-0,0e-10", 0, -0.0 ## LSUF }, \ + { "0e-1000000", 0, 0.0 ## LSUF }, \ + { "-0e-1000000", 0, -0.0 ## LSUF }, \ + { "0,0e-1000000", 0, 0.0 ## LSUF }, \ + { "-0,0e-1000000", 0, -0.0 ## LSUF }, \ + { "0", 1, 0.0 ## LSUF }, \ + { "000", 1, 0.0 ## LSUF }, \ + { "-0", 1, -0.0 ## LSUF }, \ + { "-000", 1, -0.0 ## LSUF }, \ + { "0e-10", 1, 0.0 ## LSUF }, \ + { "-0e-10", 1, -0.0 ## LSUF }, \ + { "0e-1000000", 1, 0.0 ## LSUF }, \ + { "-0e-1000000", 1, -0.0 ## LSUF }, \ + { "000"NNBSP"000"NNBSP"000", 1, 0.0 ## LSUF }, \ + { "-000"NNBSP"000"NNBSP"000", 1, -0.0 ## LSUF } \ + }; \ + \ +static int \ +test_strto ## FSUF (void) \ +{ \ + int status = 0; \ + \ + for (int i = 0; \ + i < sizeof (tests_strto ## FSUF) / sizeof (tests_strto ## FSUF[0]); \ + ++i) \ + { \ + char *ep; \ + FTYPE r = __strto ## FSUF ## _internal (tests_strto ## FSUF[i].in, \ + &ep, \ + tests_strto ## FSUF[i].group); \ + \ + if (*ep != '\0') \ + { \ + printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep); \ + status = 1; \ + } \ + \ + if (r != tests_strto ## FSUF[i].expected \ + || (copysign ## CSUF (10.0 ## LSUF, r) \ + != copysign ## CSUF (10.0 ## LSUF, \ + tests_strto ## FSUF[i].expected))) \ + { \ + char buf1[FSTRLENMAX], buf2[FSTRLENMAX]; \ + FTOSTR (buf1, sizeof (buf1), "%g", r); \ + FTOSTR (buf2, sizeof (buf2), "%g", \ + tests_strto ## FSUF[i].expected); \ + printf ("%d: got wrong results %s, expected %s\n", \ + i, buf1, buf2); \ + status = 1; \ + } \ + } \ + \ + return status; \ +} +GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) static int do_test (void) @@ -72,29 +132,7 @@ do_test (void) return 1; } - int status = 0; - - for (int i = 0; i < NTESTS; ++i) - { - char *ep; - double r = __strtod_internal (tests[i].in, &ep, tests[i].group); - - if (*ep != '\0') - { - printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep); - status = 1; - } - - if (r != tests[i].expected - || copysign (10.0, r) != copysign (10.0, tests[i].expected)) - { - printf ("%d: got wrong results %g, expected %g\n", - i, r, tests[i].expected); - status = 1; - } - } - - return status; + return STRTOD_TEST_FOREACH (test_strto); } #include <support/test-driver.c> diff --git a/string/Makefile b/string/Makefile index 8f31fa4..1dff405 100644 --- a/string/Makefile +++ b/string/Makefile @@ -184,6 +184,7 @@ tests := \ test-strncpy \ test-strndup \ test-strnlen \ + test-strnlen-nonarray \ test-strpbrk \ test-strrchr \ test-strspn \ @@ -235,7 +236,10 @@ tests-unsupported += $(tests-translation) endif # This test allocates a lot of memory and can run for a long time. -xtests = tst-strcoll-overflow +xtests += tst-strcoll-overflow + +# This test runs for a long time. +xtests += test-strncmp-nonarray # This test needs libdl. ifeq (yes,$(build-shared)) diff --git a/string/strerror_l.c b/string/strerror_l.c index 15cce26..70456e5 100644 --- a/string/strerror_l.c +++ b/string/strerror_l.c @@ -20,7 +20,7 @@ #include <stdio.h> #include <string.h> #include <tls-internal.h> - +#include <libc-internal.h> static const char * translate (const char *str, locale_t loc) @@ -31,6 +31,12 @@ translate (const char *str, locale_t loc) return res; } +static char * +unknown_error (locale_t loc) +{ + return (char *) translate ("Unknown error", loc); +} + /* Return a string describing the errno code in ERRNUM. */ char * @@ -40,18 +46,25 @@ __strerror_l (int errnum, locale_t loc) char *err = (char *) __get_errlist (errnum); if (__glibc_unlikely (err == NULL)) { - struct tls_internal_t *tls_internal = __glibc_tls_internal (); - free (tls_internal->strerror_l_buf); - if (__asprintf (&tls_internal->strerror_l_buf, "%s%d", - translate ("Unknown error ", loc), errnum) > 0) - err = tls_internal->strerror_l_buf; - else + if (__libc_initial) { - /* The memory was freed above. */ - tls_internal->strerror_l_buf = NULL; - /* Provide a fallback translation. */ - err = (char *) translate ("Unknown error", loc); + struct tls_internal_t *tls_internal = __glibc_tls_internal (); + free (tls_internal->strerror_l_buf); + if (__asprintf (&tls_internal->strerror_l_buf, "%s%d", + translate ("Unknown error ", loc), errnum) > 0) + err = tls_internal->strerror_l_buf; + else + { + /* The memory was freed above. */ + tls_internal->strerror_l_buf = NULL; + /* Provide a fallback translation. */ + err = unknown_error (loc); + } } + else + /* Secondary namespaces use a different malloc, so cannot + participate in the buffer management. */ + err = unknown_error (loc); } else err = (char *) translate (err, loc); diff --git a/string/strsignal.c b/string/strsignal.c index 3114601..d9b0365 100644 --- a/string/strsignal.c +++ b/string/strsignal.c @@ -21,6 +21,7 @@ #include <string.h> #include <libintl.h> #include <tls-internal.h> +#include <libc-internal.h> /* Return a string describing the meaning of the signal number SIGNUM. */ char * @@ -30,21 +31,28 @@ strsignal (int signum) if (desc != NULL) return _(desc); - struct tls_internal_t *tls_internal = __glibc_tls_internal (); - free (tls_internal->strsignal_buf); + if (__libc_initial) + { + struct tls_internal_t *tls_internal = __glibc_tls_internal (); + free (tls_internal->strsignal_buf); - int r; + int r; #ifdef SIGRTMIN - if (signum >= SIGRTMIN && signum <= SIGRTMAX) - r = __asprintf (&tls_internal->strsignal_buf, _("Real-time signal %d"), - signum - SIGRTMIN); - else + if (signum >= SIGRTMIN && signum <= SIGRTMAX) + r = __asprintf (&tls_internal->strsignal_buf, _("Real-time signal %d"), + signum - SIGRTMIN); + else #endif - r = __asprintf (&tls_internal->strsignal_buf, _("Unknown signal %d"), - signum); - - if (r == -1) - tls_internal->strsignal_buf = NULL; - - return tls_internal->strsignal_buf; + r = __asprintf (&tls_internal->strsignal_buf, _("Unknown signal %d"), + signum); + + if (r >= 0) + return tls_internal->strsignal_buf; + else + tls_internal->strsignal_buf = NULL; + } + /* Fall through on asprintf error, and for !__libc_initial: + secondary namespaces use a different malloc and cannot + participate in the buffer management. */ + return _("Unknown signal"); } diff --git a/string/test-Xncmp-nonarray.c b/string/test-Xncmp-nonarray.c new file mode 100644 index 0000000..9f3a3ca --- /dev/null +++ b/string/test-Xncmp-nonarray.c @@ -0,0 +1,183 @@ +/* Test non-array inputs to string comparison functions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* This skeleton file is included from string/test-strncmp-nonarray.c and + wcsmbs/test-wcsncmp-nonarray.c to test that reading of the arrays stops + at the first null character. + + TEST_IDENTIFIER must be the test function identifier. TEST_NAME is + the same as a string. + + CHAR must be defined as the character type. */ + +#include <array_length.h> +#include <string.h> +#include <support/check.h> +#include <support/next_to_fault.h> +#include <support/test-driver.h> +#include <sys/param.h> +#include <unistd.h> + +/* Much shorter than test-Xnlen-nonarray.c because of deeply nested loops. */ +enum { buffer_length = 80 }; + +/* The test buffer layout follows what is described test-Xnlen-nonarray.c, + except that there two buffers, left and right. The variables + a_count, zero_count, start_offset are all duplicated. */ + +/* Return the maximum string length for a string that starts at + start_offset. */ +static int +string_length (int a_count, int start_offset) +{ + if (start_offset == buffer_length || start_offset >= a_count) + return 0; + else + return a_count - start_offset; +} + +/* This is the valid maximum length argument computation for + strnlen/wcsnlen. See text-Xnlen-nonarray.c. */ +static int +maximum_length (int start_offset, int zero_count) +{ + if (start_offset == buffer_length) + return 0; + else if (zero_count > 0) + /* Effectively unbounded, but we need to stop fairly low, + otherwise testing takes too long. */ + return buffer_length + 32; + else + return buffer_length - start_offset; +} + +typedef __typeof (TEST_IDENTIFIER) *proto_t; + +#define TEST_MAIN +#include "test-string.h" + +IMPL (TEST_IDENTIFIER, 1) + +static int +test_main (void) +{ + TEST_VERIFY_EXIT (sysconf (_SC_PAGESIZE) >= buffer_length); + test_init (); + + struct support_next_to_fault left_ntf + = support_next_to_fault_allocate (buffer_length * sizeof (CHAR)); + CHAR *left_buffer = (CHAR *) left_ntf.buffer; + struct support_next_to_fault right_ntf + = support_next_to_fault_allocate (buffer_length * sizeof (CHAR)); + CHAR *right_buffer = (CHAR *) right_ntf.buffer; + + FOR_EACH_IMPL (impl, 0) + { + printf ("info: testing %s\n", impl->name); + for (size_t i = 0; i < buffer_length; ++i) + left_buffer[i] = 'A'; + + for (int left_zero_count = 0; left_zero_count <= buffer_length; + ++left_zero_count) + { + if (left_zero_count > 0) + left_buffer[buffer_length - left_zero_count] = 0; + int left_a_count = buffer_length - left_zero_count; + for (size_t i = 0; i < buffer_length; ++i) + right_buffer[i] = 'A'; + for (int right_zero_count = 0; right_zero_count <= buffer_length; + ++right_zero_count) + { + if (right_zero_count > 0) + right_buffer[buffer_length - right_zero_count] = 0; + int right_a_count = buffer_length - right_zero_count; + for (int left_start_offset = 0; + left_start_offset <= buffer_length; + ++left_start_offset) + { + CHAR *left_start_pointer = left_buffer + left_start_offset; + int left_maxlen + = maximum_length (left_start_offset, left_zero_count); + int left_length + = string_length (left_a_count, left_start_offset); + for (int right_start_offset = 0; + right_start_offset <= buffer_length; + ++right_start_offset) + { + CHAR *right_start_pointer + = right_buffer + right_start_offset; + int right_maxlen + = maximum_length (right_start_offset, right_zero_count); + int right_length + = string_length (right_a_count, right_start_offset); + + /* Maximum length is modelled after strnlen/wcsnlen, + and must be valid for both pointer arguments at + the same time. */ + int maxlen = MIN (left_maxlen, right_maxlen); + + for (int length_argument = 0; length_argument <= maxlen; + ++length_argument) + { + if (test_verbose) + { + printf ("left: zero_count=%d" + " a_count=%d start_offset=%d\n", + left_zero_count, left_a_count, + left_start_offset); + printf ("right: zero_count=%d" + " a_count=%d start_offset=%d\n", + right_zero_count, right_a_count, + right_start_offset); + printf ("length argument: %d\n", + length_argument); + } + + /* Effective lengths bounded by length argument. + The effective length determines the + outcome of the comparison. */ + int left_effective + = MIN (left_length, length_argument); + int right_effective + = MIN (right_length, length_argument); + if (left_effective == right_effective) + TEST_COMPARE (CALL (impl, + left_start_pointer, + right_start_pointer, + length_argument), 0); + else if (left_effective < right_effective) + TEST_COMPARE (CALL (impl, + left_start_pointer, + right_start_pointer, + length_argument) < 0, 1); + else + TEST_COMPARE (CALL (impl, + left_start_pointer, + right_start_pointer, + length_argument) > 0, 1); + } + } + } + } + } + } + + return 0; +} + +#include <support/test-driver.c> diff --git a/string/test-Xnlen-nonarray.c b/string/test-Xnlen-nonarray.c new file mode 100644 index 0000000..499bef2 --- /dev/null +++ b/string/test-Xnlen-nonarray.c @@ -0,0 +1,133 @@ +/* Test non-array inputs to string length functions. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* This skeleton file is included from string/test-strnlen-nonarray.c + and wcsmbs/test-wcsnlen-nonarray.c to test that reading of the array + stops at the first null character. + + TEST_IDENTIFIER must be the test function identifier. TEST_NAME is + the same as a string. + + CHAR must be defined as the character type. */ + +#include <array_length.h> +#include <string.h> +#include <support/check.h> +#include <support/next_to_fault.h> +#include <support/test-driver.h> +#include <sys/param.h> +#include <unistd.h> + +typedef __typeof (TEST_IDENTIFIER) *proto_t; + +#define TEST_MAIN +#include "test-string.h" + +IMPL (TEST_IDENTIFIER, 1) + +static int +test_main (void) +{ + enum { buffer_length = 256 }; + TEST_VERIFY_EXIT (sysconf (_SC_PAGESIZE) >= buffer_length); + + test_init (); + + /* Buffer layout: There are a_count 'A' character followed by + zero_count null character, for a total of buffer_length + character: + + AAAAA...AAAAA 00000 ... 00000 (unmapped page follows) + \ / \ / + (a_count) (zero_count) + \___ (buffer_length) ___/ + ^ + | + start_offset + + The buffer length does not change, but a_count (and thus _zero) + and start_offset vary. + + If start_offset == buffer_length, only 0 is a valid length + argument. The result is 0. + + Otherwwise, if zero_count > 0 (if there a null characters in the + buffer), then any length argument is valid. If start_offset < + a_count (i.e., there is a non-null character at start_offset), the + result is the minimum of a_count - start_offset and the length + argument. Otherwise the result is 0. + + Otherwise, there are no null characters before the unmapped page. + The length argument must not be greater than buffer_length - + start_offset, and the result is the length argument. */ + + struct support_next_to_fault ntf + = support_next_to_fault_allocate (buffer_length * sizeof (CHAR)); + CHAR *buffer = (CHAR *) ntf.buffer; + + FOR_EACH_IMPL (impl, 0) + { + printf ("info: testing %s\n", impl->name); + for (size_t i = 0; i < buffer_length; ++i) + buffer[i] = 'A'; + + for (int zero_count = 0; zero_count <= buffer_length; ++zero_count) + { + if (zero_count > 0) + buffer[buffer_length - zero_count] = 0; + int a_count = buffer_length - zero_count; + for (int start_offset = 0; start_offset <= buffer_length; + ++start_offset) + { + CHAR *start_pointer = buffer + start_offset; + if (start_offset == buffer_length) + TEST_COMPARE (CALL (impl, buffer + start_offset, 0), 0); + else if (zero_count > 0) + for (int length_argument = 0; + length_argument <= 2 * buffer_length; + ++length_argument) + { + if (test_verbose) + printf ("zero_count=%d a_count=%d start_offset=%d" + " length_argument=%d\n", + zero_count, a_count, start_offset, + length_argument); + if (start_offset < a_count) + TEST_COMPARE (CALL (impl, start_pointer, length_argument), + MIN (a_count - start_offset, + length_argument)); + else + TEST_COMPARE (CALL (impl, start_pointer, length_argument), + 0); + } + else + for (int length_argument = 0; + length_argument <= buffer_length - start_offset; + ++length_argument) + TEST_COMPARE (CALL (impl, start_pointer, length_argument), + length_argument); + } + } + } + + support_next_to_fault_free (&ntf); + + return 0; +} + +#include <support/test-driver.c> diff --git a/string/test-strchr.c b/string/test-strchr.c index c795eac..72b17af 100644 --- a/string/test-strchr.c +++ b/string/test-strchr.c @@ -255,6 +255,69 @@ check1 (void) check_result (impl, s, c, exp_result); } +static void +check2 (void) +{ + CHAR *s = (CHAR *) (buf1 + getpagesize () - 4 * sizeof (CHAR)); + CHAR *s_begin = (CHAR *) (buf1 + getpagesize () - 64); +#ifndef USE_FOR_STRCHRNUL + CHAR *exp_result = NULL; +#else + CHAR *exp_result = s + 1; +#endif + CHAR val = 0x12; + for (; s_begin != s; ++s_begin) + *s_begin = val; + + s[0] = val + 1; + s[1] = 0; + s[2] = val + 1; + s[3] = val + 1; + + { + FOR_EACH_IMPL (impl, 0) + check_result (impl, s, val, exp_result); + } + s[3] = val; + { + FOR_EACH_IMPL (impl, 0) + check_result (impl, s, val, exp_result); + } + exp_result = s; + s[0] = val; + { + FOR_EACH_IMPL (impl, 0) + check_result (impl, s, val, exp_result); + } + + s[3] = val + 1; + { + FOR_EACH_IMPL (impl, 0) + check_result (impl, s, val, exp_result); + } + + s[0] = val + 1; + s[1] = val + 1; + s[2] = val + 1; + s[3] = val + 1; + s[4] = val; + exp_result = s + 4; + { + FOR_EACH_IMPL (impl, 0) + check_result (impl, s, val, exp_result); + } + s[4] = 0; +#ifndef USE_FOR_STRCHRNUL + exp_result = NULL; +#else + exp_result = s + 4; +#endif + { + FOR_EACH_IMPL (impl, 0) + check_result (impl, s, val, exp_result); + } +} + int test_main (void) { @@ -263,7 +326,7 @@ test_main (void) test_init (); check1 (); - + check2 (); printf ("%20s", ""); FOR_EACH_IMPL (impl, 0) printf ("\t%s", impl->name); diff --git a/string/test-strncmp-nonarray.c b/string/test-strncmp-nonarray.c new file mode 100644 index 0000000..581e52d --- /dev/null +++ b/string/test-strncmp-nonarray.c @@ -0,0 +1,4 @@ +#define TEST_IDENTIFIER strncmp +#define TEST_NAME "strncmp" +typedef char CHAR; +#include "test-Xncmp-nonarray.c" diff --git a/string/test-strnlen-nonarray.c b/string/test-strnlen-nonarray.c new file mode 100644 index 0000000..0ad0575 --- /dev/null +++ b/string/test-strnlen-nonarray.c @@ -0,0 +1,4 @@ +#define TEST_IDENTIFIER strnlen +#define TEST_NAME "strnlen" +typedef char CHAR; +#include "test-Xnlen-nonarray.c" diff --git a/support/check.h b/support/check.h index 711f34b..7ea22c7 100644 --- a/support/check.h +++ b/support/check.h @@ -25,6 +25,11 @@ __BEGIN_DECLS /* Record a test failure, print the failure message to standard output + and pass the result of 1 through. */ +#define FAIL(...) \ + support_print_failure_impl (__FILE__, __LINE__, __VA_ARGS__) + +/* Record a test failure, print the failure message to standard output and return 1. */ #define FAIL_RET(...) \ return support_print_failure_impl (__FILE__, __LINE__, __VA_ARGS__) diff --git a/support/test-driver.c b/support/test-driver.c index f4c3e4d..04ceebc 100644 --- a/support/test-driver.c +++ b/support/test-driver.c @@ -155,6 +155,7 @@ main (int argc, char **argv) { CMDLINE_OPTIONS TEST_DEFAULT_OPTIONS + { 0, } }; test_config.options = &options; #endif diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 50f58a6..259ce2e 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -1200,10 +1200,8 @@ extern void _dl_get_tls_static_info (size_t *sizep, size_t *alignp); extern void _dl_allocate_static_tls (struct link_map *map) attribute_hidden; -/* These are internal entry points to the two halves of _dl_allocate_tls, - only used within rtld.c itself at startup time. */ extern void *_dl_allocate_tls_storage (void) attribute_hidden; -extern void *_dl_allocate_tls_init (void *, bool); +extern void *_dl_allocate_tls_init (void *result, bool main_thread); rtld_hidden_proto (_dl_allocate_tls_init) /* True if the TCB has been set up. */ @@ -1241,13 +1239,7 @@ extern void *_dl_open (const char *name, int mode, const void *caller, extern int _dl_scope_free (void *) attribute_hidden; -/* Add module to slot information data. If DO_ADD is false, only the - required memory is allocated. Must be called with GL - (dl_load_tls_lock) acquired. If the function has already been called - for the link map L with !do_add, then this function will not raise - an exception, otherwise it is possible that it encounters a memory - allocation failure. */ -extern void _dl_add_to_slotinfo (struct link_map *l, bool do_add) +extern bool _dl_add_to_slotinfo (struct link_map *l, bool do_add) attribute_hidden; /* Update slot information data for at least the generation of the @@ -1256,6 +1248,20 @@ extern struct link_map *_dl_update_slotinfo (unsigned long int req_modid, size_t gen) attribute_hidden; +/* The last TLS module ID that is initially loaded, plus 1. TLS + addresses for modules with IDs lower than that can be obtained from + the DTV even if its generation is outdated. */ +extern size_t _dl_tls_initial_modid_limit attribute_hidden attribute_relro; + +/* Compute _dl_tls_initial_modid_limit. To be called after initial + relocation. */ +void _dl_tls_initial_modid_limit_setup (void) attribute_hidden; + +/* Number of threads currently in a TLS update. This is used to + detect reentrant __tls_get_addr calls without a per-thread + flag. */ +extern unsigned int _dl_tls_threads_in_update attribute_hidden; + /* Look up the module's TLS block as for __tls_get_addr, but never touch anything. Return null if it's not allocated yet. */ extern void *_dl_tls_get_addr_soft (struct link_map *l) attribute_hidden; diff --git a/sysdeps/generic/mremap-failure.h b/sysdeps/generic/mremap-failure.h new file mode 100644 index 0000000..bc0d476 --- /dev/null +++ b/sysdeps/generic/mremap-failure.h @@ -0,0 +1,25 @@ +/* mremap failure handling. Generic version. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Return exit value on mremap failure with errno ERR. */ + +static int +mremap_failure_exit (int err) +{ + return EXIT_FAILURE; +} diff --git a/sysdeps/powerpc/powerpc64/le/Makefile b/sysdeps/powerpc/powerpc64/le/Makefile index 5214eb4..ca5e395 100644 --- a/sysdeps/powerpc/powerpc64/le/Makefile +++ b/sysdeps/powerpc/powerpc64/le/Makefile @@ -129,6 +129,10 @@ CFLAGS-tst-strtod-round.c += $(type-float128-CFLAGS) CFLAGS-tst-wcstod-round.c += $(type-float128-CFLAGS) CFLAGS-tst-strtod-nan-locale.c += $(type-float128-CFLAGS) CFLAGS-tst-wcstod-nan-locale.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod1i.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod3.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod4.c += $(type-float128-CFLAGS) +CFLAGS-tst-strtod5i.c += $(type-float128-CFLAGS) CFLAGS-tst-strtod6.c += $(type-float128-CFLAGS) CFLAGS-tst-strfrom.c += $(type-float128-CFLAGS) CFLAGS-tst-strfrom-locale.c += $(type-float128-CFLAGS) diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile index f9efb50..04ea565 100644 --- a/sysdeps/pthread/Makefile +++ b/sysdeps/pthread/Makefile @@ -282,6 +282,10 @@ tests += \ tst-vfork2x \ # tests +tests-2.0 += \ + tst-pthread_kill-exited + # tests-2.0 + tests-time64 += \ tst-abstime-time64 \ tst-cnd-timedwait-time64 \ diff --git a/sysdeps/pthread/tst-setuid3.c b/sysdeps/pthread/tst-setuid3.c index 83f42a0..3845ab0 100644 --- a/sysdeps/pthread/tst-setuid3.c +++ b/sysdeps/pthread/tst-setuid3.c @@ -15,24 +15,19 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#include <stdio.h> #include <errno.h> #include <pthread.h> #include <stdbool.h> #include <unistd.h> +#include <support/check.h> + /* The test must run under a non-privileged user ID. */ static const uid_t test_uid = 1; static pthread_barrier_t barrier1; static pthread_barrier_t barrier2; -#define FAIL(fmt, ...) \ - do { printf ("FAIL: " fmt "\n", __VA_ARGS__); _exit (1); } while (0) - -#define FAIL_ERR(fmt, ...) \ - do { printf ("FAIL: " fmt ": %m\n", __VA_ARGS__); _exit (1); } while (0) - /* True if x is not a successful return code from pthread_barrier_wait. */ static inline bool is_invalid_barrier_ret (int x) @@ -45,10 +40,10 @@ thread_func (void *ctx __attribute__ ((unused))) { int ret = pthread_barrier_wait (&barrier1); if (is_invalid_barrier_ret (ret)) - FAIL ("pthread_barrier_wait (barrier1) (on thread): %d", ret); + FAIL_EXIT1 ("pthread_barrier_wait (barrier1) (on thread): %d", ret); ret = pthread_barrier_wait (&barrier2); if (is_invalid_barrier_ret (ret)) - FAIL ("pthread_barrier_wait (barrier2) (on thread): %d", ret); + FAIL_EXIT1 ("pthread_barrier_wait (barrier2) (on thread): %d", ret); return NULL; } @@ -59,13 +54,13 @@ setuid_failure (int phase) switch (ret) { case 0: - FAIL ("setuid succeeded unexpectedly in phase %d", phase); + FAIL_EXIT1 ("setuid succeeded unexpectedly in phase %d", phase); case -1: if (errno != EPERM) - FAIL_ERR ("setuid phase %d", phase); + FAIL_EXIT1 ("setuid phase %d: %m", phase); break; default: - FAIL ("invalid setuid return value in phase %d: %d", phase, ret); + FAIL_EXIT1 ("invalid setuid return value in phase %d: %d", phase, ret); } } @@ -74,42 +69,42 @@ do_test (void) { if (getuid () == 0) if (setuid (test_uid) != 0) - FAIL_ERR ("setuid (%u)", (unsigned) test_uid); + FAIL_EXIT1 ("setuid (%u): %m", (unsigned) test_uid); if (setuid (getuid ())) - FAIL_ERR ("setuid (%s)", "getuid ()"); + FAIL_EXIT1 ("setuid (%s): %m", "getuid ()"); setuid_failure (1); int ret = pthread_barrier_init (&barrier1, NULL, 2); if (ret != 0) - FAIL ("pthread_barrier_init (barrier1): %d", ret); + FAIL_EXIT1 ("pthread_barrier_init (barrier1): %d", ret); ret = pthread_barrier_init (&barrier2, NULL, 2); if (ret != 0) - FAIL ("pthread_barrier_init (barrier2): %d", ret); + FAIL_EXIT1 ("pthread_barrier_init (barrier2): %d", ret); pthread_t thread; ret = pthread_create (&thread, NULL, thread_func, NULL); if (ret != 0) - FAIL ("pthread_create: %d", ret); + FAIL_EXIT1 ("pthread_create: %d", ret); /* Ensure that the thread is running properly. */ ret = pthread_barrier_wait (&barrier1); if (is_invalid_barrier_ret (ret)) - FAIL ("pthread_barrier_wait (barrier1): %d", ret); + FAIL_EXIT1 ("pthread_barrier_wait (barrier1): %d", ret); setuid_failure (2); /* Check success case. */ if (setuid (getuid ()) != 0) - FAIL_ERR ("setuid (%s)", "getuid ()"); + FAIL_EXIT1 ("setuid (%s): %m", "getuid ()"); /* Shutdown. */ ret = pthread_barrier_wait (&barrier2); if (is_invalid_barrier_ret (ret)) - FAIL ("pthread_barrier_wait (barrier2): %d", ret); + FAIL_EXIT1 ("pthread_barrier_wait (barrier2): %d", ret); ret = pthread_join (thread, NULL); if (ret != 0) - FAIL ("pthread_join: %d", ret); + FAIL_EXIT1 ("pthread_join: %d", ret); return 0; } diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 6ab9b90..eee91c7 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -205,6 +205,7 @@ tests += \ tst-getauxval \ tst-gettid \ tst-gettid-kill \ + tst-linux-mremap1 \ tst-memfd_create \ tst-misalign-clone \ tst-mlock2 \ diff --git a/sysdeps/unix/sysv/linux/mremap-failure.h b/sysdeps/unix/sysv/linux/mremap-failure.h new file mode 100644 index 0000000..c99ab30 --- /dev/null +++ b/sysdeps/unix/sysv/linux/mremap-failure.h @@ -0,0 +1,30 @@ +/* mremap failure handling. Linux version. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <support/check.h> + +/* Return exit value on mremap failure with errno ERR. */ + +static int +mremap_failure_exit (int err) +{ + if (err != EINVAL) + return EXIT_FAILURE; + + return EXIT_UNSUPPORTED; +} diff --git a/sysdeps/unix/sysv/linux/mremap.c b/sysdeps/unix/sysv/linux/mremap.c index 4f77079..1ada5c1 100644 --- a/sysdeps/unix/sysv/linux/mremap.c +++ b/sysdeps/unix/sysv/linux/mremap.c @@ -20,6 +20,12 @@ #include <sysdep.h> #include <stdarg.h> #include <stddef.h> +#include <errno.h> + +#define MREMAP_KNOWN_BITS \ + (MREMAP_MAYMOVE \ + | MREMAP_FIXED \ + | MREMAP_DONTUNMAP) void * __mremap (void *addr, size_t old_len, size_t new_len, int flags, ...) @@ -27,7 +33,13 @@ __mremap (void *addr, size_t old_len, size_t new_len, int flags, ...) va_list va; void *new_addr = NULL; - if (flags & MREMAP_FIXED) + if (flags & ~(MREMAP_KNOWN_BITS)) + { + __set_errno (EINVAL); + return MAP_FAILED; + } + + if (flags & (MREMAP_FIXED | MREMAP_DONTUNMAP)) { va_start (va, flags); new_addr = va_arg (va, void *); diff --git a/sysdeps/unix/sysv/linux/tst-linux-mremap1.c b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c new file mode 100644 index 0000000..408e8af --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c @@ -0,0 +1,63 @@ +/* Test mremap with MREMAP_DONTUNMAP. + Copyright (C) 2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <sys/mman.h> +#include <support/xstdlib.h> +#include <support/xunistd.h> +#include <support/check.h> +#include <support/test-driver.h> +#include <mremap-failure.h> + +static int +do_test (void) +{ + size_t old_size = getpagesize (); + size_t new_size = old_size; + char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1); + old_addr[0] = 1; + old_addr[old_size - 1] = 2; + + /* Create an available 64-page mmap region. */ + size_t fixed_size = old_size * 64; + char *fixed_addr = xmmap (NULL, fixed_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1); + xmunmap (fixed_addr, fixed_size); + + /* Add 3 * pagesize. */ + fixed_size += 3 * old_size; + + /* Test MREMAP_DONTUNMAP. It should return FIXED_ADDR created above. */ + char *new_addr = mremap (old_addr, old_size, new_size, + MREMAP_DONTUNMAP | MREMAP_MAYMOVE, + fixed_addr); + if (new_addr == MAP_FAILED) + return mremap_failure_exit (errno); + TEST_VERIFY_EXIT (fixed_addr == new_addr); + old_addr[0] = 3; + old_addr[old_size - 1] = 4; + new_addr[0] = 1; + new_addr[new_size - 1] = 2; + xmunmap (new_addr, new_size); + xmunmap (old_addr, old_size); + + return 0; +} + +#include <support/test-driver.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/dl-cet.h b/sysdeps/unix/sysv/linux/x86_64/dl-cet.h index 1fe3133..b4f7e6c 100644 --- a/sysdeps/unix/sysv/linux/x86_64/dl-cet.h +++ b/sysdeps/unix/sysv/linux/x86_64/dl-cet.h @@ -92,9 +92,9 @@ dl_cet_ibt_enabled (void) # Pass GL(dl_x86_feature_1) to _dl_cet_setup_features.\n\ movl %edx, %edi\n\ # Align stack for the _dl_cet_setup_features call.\n\ - andq $-16, %rsp\n\ + and $-16, %" RSP_LP "\n\ call _dl_cet_setup_features\n\ # Restore %rax and %rsp from %r12 and %r13.\n\ - movq %r12, %rax\n\ - movq %r13, %rsp\n\ + mov %" R12_LP ", %" RAX_LP "\n\ + mov %" R13_LP ", %" RSP_LP "\n\ " diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h index b9db8bc..645e858 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h +++ b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h @@ -151,6 +151,7 @@ #define __NR_lsetxattr 1073742013 #define __NR_lstat 1073741830 #define __NR_madvise 1073741852 +#define __NR_map_shadow_stack 1073742277 #define __NR_mbind 1073742061 #define __NR_membarrier 1073742148 #define __NR_memfd_create 1073742143 diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h b/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h index 9812416..47fa8af 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h +++ b/sysdeps/unix/sysv/linux/x86_64/x32/fixup-asm-unistd.h @@ -15,6 +15,10 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#ifndef __NR_map_shadow_stack +# define __NR_map_shadow_stack 1073742277 +#endif + /* X32 uses the same 64-bit syscall interface for set_thread_area. */ #ifndef __NR_set_thread_area # define __NR_set_thread_area 1073742029 diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h index ff5d45f..899f565 100644 --- a/sysdeps/x86_64/dl-machine.h +++ b/sysdeps/x86_64/dl-machine.h @@ -139,37 +139,37 @@ elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], .globl _start\n\ .globl _dl_start_user\n\ _start:\n\ - movq %rsp, %rdi\n\ + mov %" RSP_LP ", %" RDI_LP "\n\ call _dl_start\n\ _dl_start_user:\n\ # Save the user entry point address in %r12.\n\ - movq %rax, %r12\n\ + mov %" RAX_LP ", %" R12_LP "\n\ # Save %rsp value in %r13.\n\ - movq %rsp, %r13\n\ + mov %" RSP_LP ", % " R13_LP "\n\ "\ RTLD_START_ENABLE_X86_FEATURES \ "\ # Read the original argument count.\n\ - movq (%rsp), %rdx\n\ + mov (%rsp), %" RDX_LP "\n\ # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\n\ # argc -> rsi\n\ - movq %rdx, %rsi\n\ + mov %" RDX_LP ", %" RSI_LP "\n\ # And align stack for the _dl_init call. \n\ - andq $-16, %rsp\n\ + and $-16, %" RSP_LP "\n\ # _dl_loaded -> rdi\n\ - movq _rtld_local(%rip), %rdi\n\ + mov _rtld_local(%rip), %" RDI_LP "\n\ # env -> rcx\n\ - leaq 16(%r13,%rdx,8), %rcx\n\ + lea 2*" LP_SIZE "(%r13,%rdx," LP_SIZE "), %" RCX_LP "\n\ # argv -> rdx\n\ - leaq 8(%r13), %rdx\n\ + lea " LP_SIZE "(%r13), %" RDX_LP "\n\ # Clear %rbp to mark outermost frame obviously even for constructors.\n\ xorl %ebp, %ebp\n\ # Call the function to run the initializers.\n\ call _dl_init\n\ # Pass our finalizer function to the user in %rdx, as per ELF ABI.\n\ - leaq _dl_fini(%rip), %rdx\n\ + lea _dl_fini(%rip), %" RDX_LP "\n\ # And make sure %rsp points to argc stored on the stack.\n\ - movq %r13, %rsp\n\ + mov %" R13_LP ", %" RSP_LP "\n\ # Jump to the user's entry point.\n\ jmp *%r12\n\ .previous\n\ @@ -234,8 +234,13 @@ elf_machine_plt_value (struct link_map *map, const ElfW(Rela) *reloc, /* Names of the architecture-specific auditing callback functions. */ +#ifdef __LP64__ #define ARCH_LA_PLTENTER x86_64_gnu_pltenter #define ARCH_LA_PLTEXIT x86_64_gnu_pltexit +#else +#define ARCH_LA_PLTENTER x32_gnu_pltenter +#define ARCH_LA_PLTEXIT x32_gnu_pltexit +#endif #endif /* !dl_machine_h */ diff --git a/sysdeps/x86_64/dl-tls.c b/sysdeps/x86_64/dl-tls.c index 869023b..b3c1e4f 100644 --- a/sysdeps/x86_64/dl-tls.c +++ b/sysdeps/x86_64/dl-tls.c @@ -41,7 +41,10 @@ __tls_get_addr_slow (GET_ADDR_ARGS) dtv_t *dtv = THREAD_DTV (); size_t gen = atomic_load_acquire (&GL(dl_tls_generation)); - if (__glibc_unlikely (dtv[0].counter != gen)) + if (__glibc_unlikely (dtv[0].counter != gen) + /* See comment in __tls_get_addr in elf/dl-tls.c. */ + && !(_dl_tls_allocate_active () + && GET_ADDR_MODULE < _dl_tls_initial_modid_limit)) return update_get_addr (GET_ADDR_PARAM, gen); return tls_get_addr_tail (GET_ADDR_PARAM, dtv, NULL); diff --git a/sysdeps/x86_64/multiarch/strchr-evex-base.S b/sysdeps/x86_64/multiarch/strchr-evex-base.S index 04e2c0e..3a0b7c9 100644 --- a/sysdeps/x86_64/multiarch/strchr-evex-base.S +++ b/sysdeps/x86_64/multiarch/strchr-evex-base.S @@ -124,13 +124,13 @@ L(page_cross): VPCMPNE %VMM(1), %VMM(0), %k1 VPTEST %VMM(1), %VMM(1), %k0{%k1} KMOV %k0, %VRAX -# ifdef USE_AS_WCSCHR + sar %cl, %VRAX +#ifdef USE_AS_WCSCHR sub $VEC_MATCH_MASK, %VRAX -# else +#else inc %VRAX -# endif +#endif /* Ignore number of character for alignment adjustment. */ - shr %cl, %VRAX jz L(align_more) bsf %VRAX, %VRAX diff --git a/sysdeps/x86_64/x32/dl-machine.h b/sysdeps/x86_64/x32/dl-machine.h deleted file mode 100644 index c35cee9..0000000 --- a/sysdeps/x86_64/x32/dl-machine.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. x32 version. - Copyright (C) 2012-2024 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -/* Must allow <sysdeps/x86_64/dl-machine.h> to be included more than once. - See #ifdef RESOLVE_MAP in sysdeps/x86_64/dl-machine.h. */ -#include <sysdeps/x86_64/dl-machine.h> - -#ifndef _X32_DL_MACHINE_H -#define _X32_DL_MACHINE_H - -#undef ARCH_LA_PLTENTER -#undef ARCH_LA_PLTEXIT -#undef RTLD_START - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER x32_gnu_pltenter -#define ARCH_LA_PLTEXIT x32_gnu_pltexit - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ -#define RTLD_START asm ("\n\ -.text\n\ - .p2align 4\n\ -.globl _start\n\ -.globl _dl_start_user\n\ -_start:\n\ - movl %esp, %edi\n\ - call _dl_start\n\ -_dl_start_user:\n\ - # Save the user entry point address in %r12.\n\ - movl %eax, %r12d\n\ - # Read the original argument count.\n\ - movl (%rsp), %edx\n\ - # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env)\n\ - # argc -> rsi\n\ - movl %edx, %esi\n\ - # Save %rsp value in %r13.\n\ - movl %esp, %r13d\n\ - # And align stack for the _dl_init call.\n\ - and $-16, %esp\n\ - # _dl_loaded -> rdi\n\ - movl _rtld_local(%rip), %edi\n\ - # env -> rcx\n\ - lea 8(%r13,%rdx,4), %ecx\n\ - # argv -> rdx\n\ - lea 4(%r13), %edx\n\ - # Clear %rbp to mark outermost frame obviously even for constructors.\n\ - xorl %ebp, %ebp\n\ - # Call the function to run the initializers.\n\ - call _dl_init\n\ - # Pass our finalizer function to the user in %rdx, as per ELF ABI.\n\ - lea _dl_fini(%rip), %edx\n\ - # And make sure %rsp points to argc stored on the stack.\n\ - movl %r13d, %esp\n\ - # Jump to the user's entry point.\n\ - jmp *%r12\n\ -.previous\n\ -"); - -#endif /* !_X32_DL_MACHINE_H */ diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 65173e2..6eb38c2 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -160,6 +160,7 @@ tests := \ test-wcsncmp \ test-wcsncpy \ test-wcsnlen \ + test-wcsnlen-nonarray \ test-wcspbrk \ test-wcsrchr \ test-wcsspn \ @@ -204,6 +205,10 @@ tests := \ wcsmbs-tst1 \ # tests +# This test runs for a long time. +xtests += test-wcsncmp-nonarray + + include ../Rules ifeq ($(run-built-tests),yes) diff --git a/wcsmbs/bits/wchar2.h b/wcsmbs/bits/wchar2.h index 49f19bc..c863b60 100644 --- a/wcsmbs/bits/wchar2.h +++ b/wcsmbs/bits/wchar2.h @@ -59,18 +59,18 @@ __NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n)) __fortify_function wchar_t * __NTH (wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) { - size_t sz = __glibc_objsize (__dest); - if (sz != (size_t) -1) - return __wcscpy_chk (__dest, __src, sz / sizeof (wchar_t)); + size_t __sz = __glibc_objsize (__dest); + if (__sz != (size_t) -1) + return __wcscpy_chk (__dest, __src, __sz / sizeof (wchar_t)); return __wcscpy_alias (__dest, __src); } __fortify_function wchar_t * __NTH (wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) { - size_t sz = __glibc_objsize (__dest); - if (sz != (size_t) -1) - return __wcpcpy_chk (__dest, __src, sz / sizeof (wchar_t)); + size_t __sz = __glibc_objsize (__dest); + if (__sz != (size_t) -1) + return __wcpcpy_chk (__dest, __src, __sz / sizeof (wchar_t)); return __wcpcpy_alias (__dest, __src); } @@ -95,9 +95,9 @@ __NTH (wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, __fortify_function wchar_t * __NTH (wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src)) { - size_t sz = __glibc_objsize (__dest); - if (sz != (size_t) -1) - return __wcscat_chk (__dest, __src, sz / sizeof (wchar_t)); + size_t __sz = __glibc_objsize (__dest); + if (__sz != (size_t) -1) + return __wcscat_chk (__dest, __src, __sz / sizeof (wchar_t)); return __wcscat_alias (__dest, __src); } @@ -105,9 +105,9 @@ __fortify_function wchar_t * __NTH (wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n)) { - size_t sz = __glibc_objsize (__dest); - if (sz != (size_t) -1) - return __wcsncat_chk (__dest, __src, __n, sz / sizeof (wchar_t)); + size_t __sz = __glibc_objsize (__dest); + if (__sz != (size_t) -1) + return __wcsncat_chk (__dest, __src, __n, __sz / sizeof (wchar_t)); return __wcsncat_alias (__dest, __src, __n); } @@ -144,10 +144,10 @@ __fortify_function int __NTH (swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...)) { - size_t sz = __glibc_objsize (__s); - if (sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1) + size_t __sz = __glibc_objsize (__s); + if (__sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1) return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, - sz / sizeof (wchar_t), __fmt, __va_arg_pack ()); + __sz / sizeof (wchar_t), __fmt, __va_arg_pack ()); return __swprintf_alias (__s, __n, __fmt, __va_arg_pack ()); } #elif !defined __cplusplus @@ -163,10 +163,10 @@ __fortify_function int __NTH (vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap)) { - size_t sz = __glibc_objsize (__s); - if (sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1) + size_t __sz = __glibc_objsize (__s); + if (__sz != (size_t) -1 || __USE_FORTIFY_LEVEL > 1) return __vswprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, - sz / sizeof (wchar_t), __fmt, __ap); + __sz / sizeof (wchar_t), __fmt, __ap); return __vswprintf_alias (__s, __n, __fmt, __ap); } @@ -210,25 +210,25 @@ vfwprintf (__FILE *__restrict __stream, __fortify_function __wur wchar_t * fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) { - size_t sz = __glibc_objsize (__s); - if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), sz)) + size_t __sz = __glibc_objsize (__s); + if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), __sz)) return __fgetws_alias (__s, __n, __stream); - if (__glibc_unsafe_len (__n, sizeof (wchar_t), sz)) - return __fgetws_chk_warn (__s, sz / sizeof (wchar_t), __n, __stream); - return __fgetws_chk (__s, sz / sizeof (wchar_t), __n, __stream); + if (__glibc_unsafe_len (__n, sizeof (wchar_t), __sz)) + return __fgetws_chk_warn (__s, __sz / sizeof (wchar_t), __n, __stream); + return __fgetws_chk (__s, __sz / sizeof (wchar_t), __n, __stream); } #ifdef __USE_GNU __fortify_function __wur wchar_t * fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) { - size_t sz = __glibc_objsize (__s); - if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), sz)) + size_t __sz = __glibc_objsize (__s); + if (__glibc_safe_or_unknown_len (__n, sizeof (wchar_t), __sz)) return __fgetws_unlocked_alias (__s, __n, __stream); - if (__glibc_unsafe_len (__n, sizeof (wchar_t), sz)) - return __fgetws_unlocked_chk_warn (__s, sz / sizeof (wchar_t), __n, + if (__glibc_unsafe_len (__n, sizeof (wchar_t), __sz)) + return __fgetws_unlocked_chk_warn (__s, __sz / sizeof (wchar_t), __n, __stream); - return __fgetws_unlocked_chk (__s, sz / sizeof (wchar_t), __n, __stream); + return __fgetws_unlocked_chk (__s, __sz / sizeof (wchar_t), __n, __stream); } #endif diff --git a/wcsmbs/test-wcsncmp-nonarray.c b/wcsmbs/test-wcsncmp-nonarray.c new file mode 100644 index 0000000..1ad9ebd --- /dev/null +++ b/wcsmbs/test-wcsncmp-nonarray.c @@ -0,0 +1,5 @@ +#include <wchar.h> +#define TEST_IDENTIFIER wcsncmp +#define TEST_NAME "wcsncmp" +typedef wchar_t CHAR; +#include "../string/test-Xncmp-nonarray.c" diff --git a/wcsmbs/test-wcsnlen-nonarray.c b/wcsmbs/test-wcsnlen-nonarray.c new file mode 100644 index 0000000..a4b21fe --- /dev/null +++ b/wcsmbs/test-wcsnlen-nonarray.c @@ -0,0 +1,5 @@ +#include <wchar.h> +#define TEST_IDENTIFIER wcsnlen +#define TEST_NAME "wcsnlen" +typedef wchar_t CHAR; +#include "../string/test-Xnlen-nonarray.c" |