/mou/
/ser/
/targetutil/
+/testwrk/
/tgi/
/wrk/
--- /dev/null
+
+# toplevel makefile for the regression tests
+
+MAKE := make --no-print-dir
+
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
+
+ifdef CMD_EXE
+ RM := del /f
+ EXE := .exe
+ MKDIR = mkdir
+ RMDIR = rmdir
+else
+ RM := rm -f
+ EXE :=
+ MKDIR = mkdir -p
+ RMDIR = rmdir
+endif
+
+WORKDIR := ../testwrk
+
+.PHONY: dotests clean
+
+all: dotests
+
+$(WORKDIR):
+ @$(MKDIR) $(WORKDIR)
+
+$(WORKDIR)/bdiff$(EXE): $(WORKDIR)
+ @$(CC) -o $(WORKDIR)/bdiff$(EXE) bdiff.c
+
+dotests: $(WORKDIR)/bdiff$(EXE)
+ @$(MAKE) -C val clean all
+ @$(MAKE) -C ref clean all
+ @$(MAKE) -C err clean all
+ @$(MAKE) -C misc clean all
+
+continue: $(WORKDIR)/bdiff$(EXE)
+ @$(MAKE) -C val all
+ @$(MAKE) -C ref all
+ @$(MAKE) -C err all
+ @$(MAKE) -C misc all
+
+clean:
+ @$(MAKE) -C val clean
+ @$(MAKE) -C ref clean
+ @$(MAKE) -C err clean
+ @$(MAKE) -C misc clean
+ @$(RM) $(WORKDIR)/bdiff$(EXE)
+ @$(RMDIR) $(WORKDIR)
--- /dev/null
+
+// minimal tool to compare two binaries
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+ FILE *f1, *f2;
+ if (argc < 3) {
+ return EXIT_FAILURE;
+ }
+ f1 = fopen(argv[1], "rb");
+ f2 = fopen(argv[2], "rb");
+ if ((f1 == NULL) || (f2 == NULL)) {
+ return EXIT_FAILURE;
+ }
+ for(;;) {
+ if (feof(f1) && feof(f2)) {
+ return EXIT_SUCCESS;
+ } else if (feof(f1) || feof(f2)) {
+ return EXIT_FAILURE;
+ }
+ if (fgetc(f1) != fgetc(f2)) {
+ return EXIT_FAILURE;
+ }
+ }
+}
--- /dev/null
+
+# makefile for the tests that MUST NOT compile
+
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
+
+CC65FLAGS = -t sim6502
+
+CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
+
+ifdef CMD_EXE
+RM := del /f
+else
+RM := rm -f
+endif
+
+WORKDIR := ./../../testwrk
+
+.PHONY: all clean
+
+SOURCES := $(wildcard *.c)
+TESTS := $(SOURCES:%.c=$(WORKDIR)/%.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.o.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.os.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.or.prg)
+
+all: $(TESTS)
+
+$(WORKDIR)/%.prg: %.c
+ ! $(CL65) $(CC65FLAGS) $< -o $@
+$(WORKDIR)/%.o.prg: %.c
+ ! $(CL65) -O $(CC65FLAGS) $< -o $@
+$(WORKDIR)/%.os.prg: %.c
+ ! $(CL65) -Os $(CC65FLAGS) $< -o $@
+$(WORKDIR)/%.osi.prg: %.c
+ ! $(CL65) -Osi $(CC65FLAGS) $< -o $@
+$(WORKDIR)/%.osir.prg: %.c
+ ! $(CL65) -Osir $(CC65FLAGS) $< -o $@
+$(WORKDIR)/%.oi.prg: %.c
+ ! $(CL65) -Oi $(CC65FLAGS) $< -o $@
+$(WORKDIR)/%.oir.prg: %.c
+ ! $(CL65) -Oir $(CC65FLAGS) $< -o $@
+$(WORKDIR)/%.or.prg: %.c
+ ! $(CL65) -Or $(CC65FLAGS) $< -o $@
+clean:
+ @$(RM) $(TESTS)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.o)
--- /dev/null
+
+# makefile for the remaining tests that need special care in one way or another
+
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
+
+CC65FLAGS = -t sim6502
+SIM65FLAGS = -x 200000000
+
+CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
+SIM65 := $(if $(wildcard ../../bin/sim65*),../../bin/sim65,sim65)
+
+ifdef CMD_EXE
+RM := del /f
+else
+RM := rm -f
+endif
+
+WORKDIR := ./../../testwrk
+
+DIFF := $(WORKDIR)/bdiff
+
+.PHONY: all clean
+
+SOURCES := $(wildcard *.c)
+TESTS := $(SOURCES:%.c=$(WORKDIR)/%.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.o.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.os.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.or.prg)
+
+# FIXME: actually use/build differently optimized programs here
+
+all: $(TESTS)
+
+# should compile, but then hangs in an endless loop
+$(WORKDIR)/endless%prg: endless.c
+ $(CL65) $(CC65FLAGS) $< -o $@
+ ! $(SIM65) $(SIM65FLAGS) $@
+
+# these need reference data that cant be generated by a host compiled program
+# in a useful way
+$(WORKDIR)/limits%prg: limits.c
+ $(CL65) $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/limits.out
+ $(DIFF) $(WORKDIR)/limits.out limits.ref
+
+# the rest are tests that fail currently for one reason or another
+$(WORKDIR)/fields%prg: fields.c
+ @echo "FIXME: " $@ "will currently fail"
+ $(CL65) $(CC65FLAGS) $< -o $@
+ -$(SIM65) $(SIM65FLAGS) $@
+$(WORKDIR)/sitest%prg: sitest.c
+ @echo "FIXME: " $@ "will currently fail"
+ -$(CL65) $(CC65FLAGS) $< -o $@
+ -$(SIM65) $(SIM65FLAGS) $@
+
+clean:
+ @$(RM) $(TESTS)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.o)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.out)
+
+
--- /dev/null
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define NO_OLD_FUNC_DECL
+#define NO_TYPELESS_INT
+#define NO_TYPELESS_INT_PTR
+#define MAIN_RETURNS_INT
+#define NO_IMPLICIT_FUNC_PROTOTYPES
+#define NO_FLOATS
+#define NO_WCHAR
+#define NO_EMPTY_FUNC_ARGS
+#define NO_SLOPPY_STRUCT_INIT
+#define NO_FUNCS_TAKE_STRUCTS
+#define NO_FUNCS_RETURN_STRUCTS
+#define CAST_STRUCT_PTR
+#define NO_TYPELESS_STRUCT_PTR
+#define NO_IMPLICIT_FUNCPTR_CONV
+#define SIZEOF_INT_16BIT
+#define SIZEOF_LONG_32BIT
+#define UNSIGNED_CHARS
+#define UNSIGNED_BITFIELDS
--- /dev/null
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(void)
+{
+ printf("entering endless loop\n");
+ for(;;) {
+ ;
+ }
+ printf("error: should not come here\n");
+ return EXIT_FAILURE;
+}
--- /dev/null
+/*
+ !!DESCRIPTION!! bitfield test
+ !!ORIGIN!! LCC 4.1 Testsuite
+ !!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
+*/
+
+#include "common.h"
+
+#ifdef NO_BITFIELDS
+
+main()
+{
+ printf("NO_BITFIELDS\n\r");
+}
+
+#else
+
+#ifdef SIZEOF_INT_16BIT
+
+#ifdef REFCC
+#include <stdint.h>
+struct foo {
+ int16_t a;
+ char b;
+ int16_t x : 12, y : 4;
+ int16_t zz : 1, : 0, : 4, z : 3;
+ char c;
+} x = { 1, 2, 3, 4, 5, 6 };
+
+struct baz { uint16_t a:2, b:4, c:16;} y = { 7, 8, 9};
+int16_t i = 8;
+
+#else
+
+struct foo {
+ int a;
+ char b;
+ int x : 12, y : 4;
+ int zz : 1, : 0, : 4, z : 3;
+ char c;
+} x = { 1, 2, 3, 4, 5, 6 };
+
+struct baz { unsigned int a:2, b:4, c:16;} y = { 7, 8, 9};
+int i = 8;
+#endif
+
+#else
+struct foo {
+ int a;
+ char b;
+ int x : 12, y : 4, : 0, : 4, z : 3;
+ char c;
+} x = { 1, 2, 3, 4, 5, 6 };
+
+struct baz { unsigned int a:2, b:4, c:32;} y = { 7, 8, 9};
+int i = 16;
+#endif
+
+#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
+f1(struct baz *p);
+f2(struct baz *p);
+#endif
+
+main()
+{
+ printf("x = %d b:%d %d %d %d c:%d\n", x.a, x.b, x.x, x.y, x.z, x.c);
+ printf("y = %d b:%d c:%d\n", y.a, y.b, y.c);
+ x.y = i;
+ x.z = 070;
+ printf("x = %d b:%d %d %d %d c:%d\n", x.a, x.b, x.x, x.y, x.z, x.c);
+ y.a = 2;
+ y.c = i;
+ printf("y = %d b:%d c:%d\n", y.a, y.b, y.c);
+#ifdef CAST_STRUCT_PTR
+ f2((struct baz *)&x);
+#else
+ f2(&x);
+#endif
+ return 0;
+}
+
+f1(struct baz *p) {
+ p->a = p->b = 0;
+ if (p->b)
+ printf("p->b != 0!\n");
+ p->a = 0x3; p->b = 0xf;
+ printf("p->a = 0x%x, p->b = 0x%x\n", p->a, p->b);
+}
+f2(struct baz *p) {
+ p->a = (i==0);
+ p->b = (f1(p),0);
+}
+
+#endif
--- /dev/null
+/*
+ !!DESCRIPTION!! display type limits
+ !!ORIGIN!! LCC 4.1 Testsuite
+ !!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
+*/
+
+#include <stdio.h>
+#include <limits.h>
+
+#define SSHRT_MAX SHRT_MAX
+#define SINT_MAX INT_MAX
+#define SLONG_MAX LONG_MAX
+
+#define UCHAR_MIN 0
+#define USHRT_MIN 0
+#define SSHRT_MIN SHRT_MIN
+#define UINT_MIN 0
+#define SINT_MIN INT_MIN
+#define ULONG_MIN 0l
+#define SLONG_MIN LONG_MIN
+
+int main(void) {
+ printf("CHAR_MAX: 0x%08x=%d\n", CHAR_MAX, CHAR_MAX);
+ printf("UCHAR_MAX: 0x%08x=%d\n", UCHAR_MAX, UCHAR_MAX);
+ printf("SCHAR_MAX: 0x%08x=%d\n", SCHAR_MAX, SCHAR_MAX);
+
+ printf("SHRT_MAX: 0x%08x=%d\n", SHRT_MAX, SHRT_MAX);
+ printf("USHRT_MAX: 0x%08x=%d\n", USHRT_MAX, USHRT_MAX);
+ printf("SSHRT_MAX: 0x%08x=%d\n", SSHRT_MAX, SSHRT_MAX);
+
+ printf("INT_MAX: 0x%08x=%d\n", INT_MAX, INT_MAX);
+ printf("UINT_MAX: 0x%08x=%d\n", UINT_MAX, UINT_MAX);
+ printf("SINT_MAX: 0x%08x=%d\n", SINT_MAX, SINT_MAX);
+
+ printf("LONG_MAX: 0x%08lx=%ld\n", LONG_MAX, LONG_MAX);
+ printf("ULONG_MAX: 0x%08lx=%ld\n", ULONG_MAX, ULONG_MAX);
+ printf("SLONG_MAX: 0x%08lx=%ld\n", SLONG_MAX, SLONG_MAX);
+
+ printf("CHAR_MIN: 0x%08x=%d\n", CHAR_MIN, CHAR_MIN);
+ printf("UCHAR_MIN: 0x%08x=%d\n", UCHAR_MIN, UCHAR_MIN);
+ printf("SCHAR_MIN: 0x%08x=%d\n", SCHAR_MIN, SCHAR_MIN);
+
+ printf("SHRT_MIN: 0x%08x=%d\n", SHRT_MIN, SHRT_MIN);
+ printf("USHRT_MIN: 0x%08x=%d\n", USHRT_MIN, USHRT_MIN);
+ printf("SSHRT_MIN: 0x%08x=%d\n", SSHRT_MIN, SSHRT_MIN);
+
+ printf("INT_MIN: 0x%08x=%d\n", INT_MIN, INT_MIN);
+ printf("UINT_MIN: 0x%08x=%d\n", UINT_MIN, UINT_MIN);
+ printf("SINT_MIN: 0x%08x=%d\n", SINT_MIN, SINT_MIN);
+
+ printf("LONG_MIN: 0x%08lx=%ld\n", LONG_MIN, LONG_MIN);
+ printf("ULONG_MIN: 0x%08lx=%ld\n", ULONG_MIN, ULONG_MIN);
+ printf("SLONG_MIN: 0x%08lx=%ld\n", SLONG_MIN, SLONG_MIN);
+
+ return 0;
+}
--- /dev/null
+CHAR_MAX: 0x000000ff=255
+UCHAR_MAX: 0x000000ff=255
+SCHAR_MAX: 0x0000007f=127
+SHRT_MAX: 0x00007fff=32767
+USHRT_MAX: 0x0000ffff=-1
+SSHRT_MAX: 0x00007fff=32767
+INT_MAX: 0x00007fff=32767
+UINT_MAX: 0x0000ffff=-1
+SINT_MAX: 0x00007fff=32767
+LONG_MAX: 0x7fffffff=2147483647
+ULONG_MAX: 0xffffffff=-1
+SLONG_MAX: 0x7fffffff=2147483647
+CHAR_MIN: 0x00000000=0
+UCHAR_MIN: 0x00000000=0
+SCHAR_MIN: 0x0000ff80=-128
+SHRT_MIN: 0x00008000=-32768
+USHRT_MIN: 0x00000000=0
+SSHRT_MIN: 0x00008000=-32768
+INT_MIN: 0x00008000=-32768
+UINT_MIN: 0x00000000=0
+SINT_MIN: 0x00008000=-32768
+LONG_MIN: 0x80000000=-2147483648
+ULONG_MIN: 0x00000000=0
+SLONG_MIN: 0x80000000=-2147483648
--- /dev/null
+/*
+ !!DESCRIPTION!! C99 WCHAR test
+ !!ORIGIN!!
+ !!LICENCE!! public domain
+*/
+
+/*
+ sitest -- exercise features of C99 <stdint.h> and <inttypes.h>
+
+ This source code has been placed into the PUBLIC DOMAIN by its author.
+
+ last edit: 1999/11/05 gwyn@arl.mil
+
+ Tries to accommodate pre-C99 versions of <inttypes.h>.
+
+ Takes advantage of __Q8_* symbols defined by a particular
+ implementation of <stdint.h>, but doesn't require them.
+
+ NOTE: This is not a thorough validation test of the facilities.
+*/
+
+#define NO_INTERNAL_WCHAR
+/*#define STANDALONE*/
+
+#include <errno.h>
+#include <limits.h> /* for CHAR_BIT */
+#include <stdio.h>
+#include <stddef.h> /* for ptrdiff_t */
+#include <stdlib.h>
+#include <string.h>
+
+#if !defined(STANDARD_C99) && !defined(STANDARD_CC65)
+
+#error "this test checks C99 features, which are not available in the selected standard."
+
+#else
+
+#ifdef NO_WCHAR
+
+#warn "this test checks C99 features, but NO_WCHAR is defined so the test will most definetly fails."
+
+#endif
+
+#include <inttypes.h> /* embeds <stdint.h> */
+
+#include <signal.h> /* for sig_atomic_t */
+
+#if defined(INTMAX_MAX) /* <inttypes.h> has C99 features */
+#include <wchar.h>
+#endif
+
+#include <inttypes.h> /* test idempotency */
+
+#ifdef STANDALONE
+
+FILE *outfile=NULL;
+#define opentest(x) outfile=stdout;
+#define closetest(x)
+
+#else
+
+#endif
+
+#if __STDC_VERSION__ >= 199901
+#ifndef __Q8_QT
+#define __Q8_QT long long
+#endif
+#endif
+
+#ifdef PRIdMAX
+#define HAVE_PRIdMAX
+#ifndef __Q8_MT
+#define __Q8_MT intmax_t
+#endif
+#else
+#ifdef PRIdLEAST64
+#ifndef __Q8_MT
+#define __Q8_MT int_least64_t
+#endif
+#define PRIdMAX PRIdLEAST64
+#else
+#ifndef __Q8_MT
+#define __Q8_MT long
+#endif
+#define PRIdMAX "ld"
+#endif
+#endif
+
+#ifdef PRIuMAX
+#define HAVE_PRIuMAX
+#define U__Q8_MT uintmax_t
+#else
+#ifdef PRIuLEAST64
+#define U__Q8_MT uint_least64_t
+#define PRIuMAX PRIuLEAST64
+#else
+#define U__Q8_MT unsigned long
+#define PRIuMAX "lu"
+#endif
+#endif
+
+#define STR_SUB(s) # s
+#define STRINGIZE(s) STR_SUB(s) /* extra level to expand argument */
+
+#if defined(SCNo32) || defined(PRIo32)
+static int32_t int32;
+#endif
+static int_least16_t intl16;
+static uint_least16_t uintl16;
+static uint_fast16_t uintf16;
+static intmax_t intmax;
+static uintmax_t uintmax;
+
+int
+main() {
+ int status = 0; /* exit status to be returned */
+
+
+ /* <stdint.h> features: */
+
+ printf("CHAR_BIT=%u\n", (unsigned)CHAR_BIT );
+ printf("sizeof(char)=%u\n", (unsigned)sizeof(char)); /* s.b. 1 */
+ printf("sizeof(short)=%u\n", (unsigned)sizeof(short));
+ printf("sizeof(int)=%u\n", (unsigned)sizeof(int));
+ printf("sizeof(long)=%u\n", (unsigned)sizeof(long));
+#ifdef __Q8_QT
+ printf("sizeof(long long)=%u\n", (unsigned)sizeof(__Q8_QT));
+#else
+ printf("*** long long isn't defined ***\n");
+#endif
+ printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
+ printf("sizeof(ptrdiff_t)=%u\n", (unsigned)sizeof(ptrdiff_t));
+ printf("sizeof(size_t)=%u\n", (unsigned)sizeof(size_t));
+ printf("sizeof(sig_atomic_t)=%u\n", (unsigned)sizeof(sig_atomic_t));
+ printf("sizeof(wchar_t)=%u\n", (unsigned)sizeof(wchar_t));
+#if defined(WINT_MAX) || __STDC_VERSION__ >= 199901
+ printf("sizeof(wint_t)=%u\n", (unsigned)sizeof(wint_t));
+#else
+ printf("*** wint_t isn't defined ***\n");
+ status = EXIT_FAILURE;
+#endif
+#ifdef INT8_MAX
+ printf("sizeof(int8_t)=%u\n", (unsigned)sizeof(int8_t));
+ printf("sizeof(uint8_t)=%u\n", (unsigned)sizeof(uint8_t));
+#endif
+#ifdef INT9_MAX
+ printf("sizeof(int9_t)=%u\n", (unsigned)sizeof(int9_t));
+ printf("sizeof(uint9_t)=%u\n", (unsigned)sizeof(uint9_t));
+#endif
+#ifdef INT12_MAX
+ printf("sizeof(int12_t)=%u\n", (unsigned)sizeof(int12_t));
+ printf("sizeof(uint12_t)=%u\n", (unsigned)sizeof(uint12_t));
+#endif
+#ifdef INT16_MAX
+ printf("sizeof(int16_t)=%u\n", (unsigned)sizeof(int16_t));
+ printf("sizeof(uint16_t)=%u\n", (unsigned)sizeof(uint16_t));
+#endif
+#ifdef INT18_MAX
+ printf("sizeof(int18_t)=%u\n", (unsigned)sizeof(int18_t));
+ printf("sizeof(uint18_t)=%u\n", (unsigned)sizeof(uint18_t));
+#endif
+#ifdef INT24_MAX
+ printf("sizeof(int24_t)=%u\n", (unsigned)sizeof(int24_t));
+ printf("sizeof(uint24_t)=%u\n", (unsigned)sizeof(uint24_t));
+#endif
+#ifdef INT32_MAX
+ printf("sizeof(int32_t)=%u\n", (unsigned)sizeof(int32_t));
+ printf("sizeof(uint32_t)=%u\n", (unsigned)sizeof(uint32_t));
+#endif
+#ifdef INT36_MAX
+ printf("sizeof(int36_t)=%u\n", (unsigned)sizeof(int36_t));
+ printf("sizeof(uint36_t)=%u\n", (unsigned)sizeof(uint36_t));
+#endif
+#ifdef INT40_MAX
+ printf("sizeof(int40_t)=%u\n", (unsigned)sizeof(int40_t));
+ printf("sizeof(uint40_t)=%u\n", (unsigned)sizeof(uint40_t));
+#endif
+#ifdef INT48_MAX
+ printf("sizeof(int48_t)=%u\n", (unsigned)sizeof(int48_t));
+ printf("sizeof(uint48_t)=%u\n", (unsigned)sizeof(uint48_t));
+#endif
+#ifdef INT60_MAX
+ printf("sizeof(int60_t)=%u\n", (unsigned)sizeof(int60_t));
+ printf("sizeof(uint60_t)=%u\n", (unsigned)sizeof(uint60_t));
+#endif
+#ifdef INT64_MAX
+ printf("sizeof(int64_t)=%u\n", (unsigned)sizeof(int64_t));
+ printf("sizeof(uint64_t)=%u\n", (unsigned)sizeof(uint64_t));
+#endif
+#ifdef INT72_MAX
+ printf("sizeof(int72_t)=%u\n", (unsigned)sizeof(int72_t));
+ printf("sizeof(uint72_t)=%u\n", (unsigned)sizeof(uint72_t));
+#endif
+#ifdef INT128_MAX
+ printf("sizeof(int128_t)=%u\n", (unsigned)sizeof(int128_t));
+ printf("sizeof(uint128_t)=%u\n", (unsigned)sizeof(uint128_t));
+#endif
+ printf("sizeof(int_least8_t)=%u\n", (unsigned)sizeof(int_least8_t));
+ printf("sizeof(uint_least8_t)=%u\n", (unsigned)sizeof(uint_least8_t));
+ printf("sizeof(int_least16_t)=%u\n", (unsigned)sizeof(int_least16_t));
+ printf("sizeof(uint_least16_t)=%u\n", (unsigned)sizeof(uint_least16_t));
+ printf("sizeof(int_least32_t)=%u\n", (unsigned)sizeof(int_least32_t));
+ printf("sizeof(uint_least32_t)=%u\n", (unsigned)sizeof(uint_least32_t));
+#ifdef INT_LEAST64_MAX
+ printf("sizeof(int_least64_t)=%u\n", (unsigned)sizeof(int_least64_t));
+ printf("sizeof(uint_least64_t)=%u\n", (unsigned)sizeof(uint_least64_t));
+#else
+ printf("*** uint_least64_t isn't defined ***\n");
+ status = EXIT_FAILURE;
+#endif
+#ifdef INT_LEAST128_MAX
+ printf("sizeof(int_least128_t)=%u\n", (unsigned)sizeof(int_least128_t));
+ printf("sizeof(uint_least128_t)=%u\n",
+ (unsigned)sizeof(uint_least128_t));
+#endif
+ printf("sizeof(int_fast8_t)=%u\n", (unsigned)sizeof(int_fast8_t));
+ printf("sizeof(uint_fast8_t)=%u\n", (unsigned)sizeof(uint_fast8_t));
+ printf("sizeof(int_fast16_t)=%u\n", (unsigned)sizeof(int_fast16_t));
+ printf("sizeof(uint_fast16_t)=%u\n", (unsigned)sizeof(uint_fast16_t));
+ printf("sizeof(int_fast32_t)=%u\n", (unsigned)sizeof(int_fast32_t));
+ printf("sizeof(uint_fast32_t)=%u\n", (unsigned)sizeof(uint_fast32_t));
+#ifdef INT_FAST64_MAX
+ printf("sizeof(int_fast64_t)=%u\n", (unsigned)sizeof(int_fast64_t));
+ printf("sizeof(uint_fast64_t)=%u\n", (unsigned)sizeof(uint_fast64_t));
+#else
+ printf("*** int_fast64_t isn't defined ***\n");
+ status = EXIT_FAILURE;
+#endif
+#ifdef INT_FAST128_MAX
+ printf("sizeof(int_fast128_t)=%u\n", (unsigned)sizeof(int_fast128_t));
+ printf("sizeof(uint_fast128_t)=%u\n", (unsigned)sizeof(uint_fast128_t));
+#endif
+#if defined(INTPTR_MAX)
+ printf("sizeof(intptr_t)=%u\n", (unsigned)sizeof(intptr_t));
+#if defined(UINTPTR_MAX)
+ printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
+#else
+ printf("*** intptr_t is defined but uintptr_t isn't ***\n");
+ status = EXIT_FAILURE;
+#endif
+#elif defined(UINTPTR_MAX)
+ printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
+ printf("*** uintptr_t is defined but intptr_t isn't ***\n");
+ status = EXIT_FAILURE;
+#else
+ printf("*** neither intptr_t nor uintptr_t is defined ***\n");
+ status = EXIT_FAILURE;
+#endif
+#ifdef INTMAX_MAX
+ printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
+ printf("sizeof(uintmax_t)=%u\n", (unsigned)sizeof(uintmax_t));
+#else
+ printf("*** intmax_t isn't defined ***\n");
+ status = EXIT_FAILURE;
+#endif
+
+#ifdef INT8_MAX
+ printf("INT8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT8_MIN);
+ printf("INT8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT8_MAX);
+ printf("UINT8_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT8_MAX);
+#endif
+#ifdef INT9_MAX
+ printf("INT9_MIN=%"PRIdMAX"\n", (__Q8_MT)INT9_MIN);
+ printf("INT9_MAX=%"PRIdMAX"\n", (__Q8_MT)INT9_MAX);
+ printf("UINT9_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT9_MAX);
+#endif
+#ifdef INT12_MAX
+ printf("INT12_MIN=%"PRIdMAX"\n", (__Q8_MT)INT12_MIN);
+ printf("INT12_MAX=%"PRIdMAX"\n", (__Q8_MT)INT12_MAX);
+ printf("UINT12_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT12_MAX);
+#endif
+#ifdef INT16_MAX
+ printf("INT16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT16_MIN);
+ printf("INT16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT16_MAX);
+ printf("UINT16_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT16_MAX);
+#endif
+#ifdef INT18_MAX
+ printf("INT18_MIN=%"PRIdMAX"\n", (__Q8_MT)INT18_MIN);
+ printf("INT18_MAX=%"PRIdMAX"\n", (__Q8_MT)INT18_MAX);
+ printf("UINT18_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT18_MAX);
+#endif
+#ifdef INT24_MAX
+ printf("INT24_MIN=%"PRIdMAX"\n", (__Q8_MT)INT24_MIN);
+ printf("INT24_MAX=%"PRIdMAX"\n", (__Q8_MT)INT24_MAX);
+ printf("UINT24_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT24_MAX);
+#endif
+#ifdef INT32_MAX
+ printf("INT32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT32_MIN);
+ printf("INT32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT32_MAX);
+ printf("UINT32_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT32_MAX);
+#endif
+#ifdef INT36_MAX
+ printf("INT36_MIN=%"PRIdMAX"\n", (__Q8_MT)INT36_MIN);
+ printf("INT36_MAX=%"PRIdMAX"\n", (__Q8_MT)INT36_MAX);
+ printf("UINT36_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT36_MAX);
+#endif
+#ifdef INT40_MAX
+ printf("INT40_MIN=%"PRIdMAX"\n", (__Q8_MT)INT40_MIN);
+ printf("INT40_MAX=%"PRIdMAX"\n", (__Q8_MT)INT40_MAX);
+ printf("UINT40_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT40_MAX);
+#endif
+#ifdef INT48_MAX
+ printf("INT48_MIN=%"PRIdMAX"\n", (__Q8_MT)INT48_MIN);
+ printf("INT48_MAX=%"PRIdMAX"\n", (__Q8_MT)INT48_MAX);
+ printf("UINT48_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT48_MAX);
+#endif
+#ifdef INT60_MAX
+ printf("INT60_MIN=%"PRIdMAX"\n", (__Q8_MT)INT60_MIN);
+ printf("INT60_MAX=%"PRIdMAX"\n", (__Q8_MT)INT60_MAX);
+ printf("UINT60_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT60_MAX);
+#endif
+#ifdef INT64_MAX
+ printf("INT64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT64_MIN);
+ printf("INT64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT64_MAX);
+ printf("UINT64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT64_MAX);
+#endif
+#ifdef INT72_MAX
+ printf("INT72_MIN=%"PRIdMAX"\n", (__Q8_MT)INT72_MIN);
+ printf("INT72_MAX=%"PRIdMAX"\n", (__Q8_MT)INT72_MAX);
+ printf("UINT72_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT72_MAX);
+#endif
+#ifdef INT128_MAX
+ printf("INT128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT128_MIN);
+ printf("INT128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT128_MAX);
+ printf("UINT128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT128_MAX);
+#endif
+ printf("INT_LEAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MIN);
+ printf("INT_LEAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MAX);
+ printf("UINT_LEAST8_MAX=%"PRIuMAX"\n",
+ (U__Q8_MT)UINT_LEAST8_MAX);
+ printf("INT_LEAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MIN);
+ printf("INT_LEAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MAX);
+ printf("UINT_LEAST16_MAX=%"PRIuMAX"\n",
+ (U__Q8_MT)UINT_LEAST16_MAX);
+ printf("INT_LEAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MIN);
+ printf("INT_LEAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MAX);
+ printf("UINT_LEAST32_MAX=%"PRIuMAX"\n",
+ (U__Q8_MT)UINT_LEAST32_MAX);
+#ifdef INT_LEAST64_MAX
+ printf("INT_LEAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MIN);
+ printf("INT_LEAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MAX);
+ printf("UINT_LEAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST64_MAX);
+#endif
+#ifdef INT_LEAST128_MAX
+ printf("INT_LEAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MIN);
+ printf("INT_LEAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MAX);
+ printf("UINT_LEAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST128_MAX);
+#endif
+ printf("INT_FAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MIN);
+ printf("INT_FAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MAX);
+ printf("UINT_FAST8_MAX=%"PRIuMAX"\n",
+ (U__Q8_MT)UINT_FAST8_MAX);
+ printf("INT_FAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MIN);
+ printf("INT_FAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MAX);
+ printf("UINT_FAST16_MAX=%"PRIuMAX"\n",
+ (U__Q8_MT)UINT_FAST16_MAX);
+ printf("INT_FAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MIN);
+ printf("INT_FAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MAX);
+ printf("UINT_FAST32_MAX=%"PRIuMAX"\n",
+ (U__Q8_MT)UINT_FAST32_MAX);
+#ifdef INT_FAST64_MAX
+ printf("INT_FAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MIN);
+ printf("INT_FAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MAX);
+ printf("UINT_FAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST64_MAX);
+#endif
+#ifdef INT_FAST128_MAX
+ printf("INT_FAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MIN);
+ printf("INT_FAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MAX);
+ printf("UINT_FAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST128_MAX);
+#endif
+#ifdef INTPTR_MAX
+ printf("INTPTR_MIN=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MIN);
+ printf("INTPTR_MAX=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MAX);
+#endif
+#ifdef UINTPTR_MAX
+ printf("UINTPTR_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTPTR_MAX);
+#endif
+#ifdef INTMAX_MAX
+ printf("INTMAX_MIN=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MIN);
+ printf("INTMAX_MAX=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MAX);
+ printf("UINTMAX_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTMAX_MAX);
+#endif
+#ifdef PTRDIFF_MAX
+ printf("PTRDIFF_MIN=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MIN);
+ printf("PTRDIFF_MAX=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MAX);
+#endif
+#ifdef SIG_ATOMIC_MAX
+#if SIG_ATOMIC_MIN < 0
+ printf("SIG_ATOMIC_MIN=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MIN);
+ printf("SIG_ATOMIC_MAX=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MAX);
+#else
+ printf("SIG_ATOMIC_MIN=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MIN);
+ printf("SIG_ATOMIC_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MAX);
+#endif
+#endif
+#ifdef SIZE_MAX
+ printf("SIZE_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIZE_MAX);
+#endif
+
+#ifdef WCHAR_MAX
+#if WCHAR_MIN < 0
+ printf("WCHAR_MIN=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MIN);
+ printf("WCHAR_MAX=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MAX);
+#else
+ printf("WCHAR_MIN=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MIN);
+ printf("WCHAR_MAX=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MAX);
+#endif
+#endif
+#ifdef WINT_MAX
+#if WINT_MIN < 0
+ printf("WINT_MIN=%"PRIdMAX"\n", (__Q8_MT)WINT_MIN);
+ printf("WINT_MAX=%"PRIdMAX"\n", (__Q8_MT)WINT_MAX);
+#else
+ printf("WINT_MIN=%"PRIuMAX"\n", (U__Q8_MT)WINT_MIN);
+ printf("WINT_MAX=%"PRIuMAX"\n", (U__Q8_MT)WINT_MAX);
+#endif
+#endif
+
+ /*
+ 7.18.4 Macros for integer constants
+ */
+
+ /* INTn_C for n=8 and 16 were at one point unimplementable
+ on most platforms, so they're treated as "optional": */
+#ifdef INT8_C
+ if ( INT8_C(-123) != -123 )
+ printf("*** INT8_C(-123) produced %"PRIdMAX" ***\n",
+ (__Q8_MT)INT8_C(-123)
+ );
+ if ( UINT8_C(123) != 123 )
+ printf("*** UINT8_C(123) produced %"PRIuMAX" ***\n",
+ (U__Q8_MT)UINT8_C(123)
+ );
+#endif
+#ifdef INT16_C
+ if ( INT16_C(-12345) != -12345 )
+ printf("*** INT16_C(-12345) produced %"PRIdMAX" ***\n",
+ (__Q8_MT)INT16_C(-12345)
+ );
+ if ( UINT16_C(12345) != 12345 )
+ printf("*** UINT16_C(12345) produced %"PRIuMAX" ***\n",
+ (U__Q8_MT)UINT16_C(12345)
+ );
+#endif
+ if ( INT32_C(-123456789) != -123456789 )
+ printf("*** INT32_C(-123456789) produced %"PRIdMAX" ***\n",
+ (__Q8_MT)INT32_C(-123456789)
+ );
+ if ( UINT32_C(123456789) != 123456789 )
+ printf("*** UINT32_C(123456789) produced %"PRIuMAX" ***\n",
+ (U__Q8_MT)UINT32_C(123456789)
+ );
+#ifdef INT_LEAST64_MAX
+ if ( INT64_C(-1234567890123456789) != -1234567890123456789 )
+ printf("*** INT64_C(-1234567890123456789) produced %"PRIdMAX
+ " ***\n",
+ (__Q8_MT)INT64_C(-1234567890123456789)
+ );
+ if ( UINT64_C(1234567890123456789) != 1234567890123456789 )
+ printf("*** UINT64_C(1234567890123456789) produced %"PRIuMAX
+ " ***\n",
+ (U__Q8_MT)UINT64_C(1234567890123456789)
+ );
+#endif
+#ifdef INTMAX_MAX
+ if ( INTMAX_C(-1234567890123456789) != -1234567890123456789 )
+ printf("*** INTMAX_C(-1234567890123456789) produced %"PRIdMAX
+ " ***\n",
+ (__Q8_MT)INTMAX_C(-1234567890123456789)
+ );
+ if ( UINTMAX_C(1234567890123456789) != 1234567890123456789 )
+ printf("*** UINTMAX_C(1234567890123456789) produced %"PRIuMAX
+ " ***\n",
+ (U__Q8_MT)UINTMAX_C(1234567890123456789)
+ );
+#endif
+
+ /* <inttypes.h> features: */
+
+#if __STDC_VERSION__ >= 199901
+ printf("sizeof(imaxdiv_t)=%u\n", (unsigned)sizeof(imaxdiv_t));
+#endif
+
+ /*
+ 7.8.1 Macros for format specifiers
+ */
+
+ {
+ /* scanf these strings */
+ static const char in_dn[] = "Z119bZ";
+ static const char in_dmo[] = "Z-0119bZ";
+ static const char in_dspx[] = "Z \t\n +0X119bZ";
+ static const char in_dsmx[] = "Z \t\n -0x119bZ";
+ static const char in_dsn[] = "Z \t\n 119bZ";
+ static const char in_dp[] = "Z+119bZ";
+ static const char in_dpx[] = "Z+0X119bz";
+
+ /* sprintf into this */
+ static char buffer[1024];
+
+#if 1
+
+#define SCAN(buf,fs,var,exp) if ( sscanf(buf, "Z%" fs, &var) != 1 ) \
+ { \
+ printf("***%s=",fs, STR_SUB(fs) \
+ " failed ***\n" \
+ ); \
+ status = EXIT_FAILURE; \
+ } \
+ else if ( var != (exp) ) \
+ { \
+ printf("***%s=",fs, STR_SUB(fs) \
+ " should be: " STR_SUB(exp) \
+ ", was: %" fs " ***\n", var \
+ ); \
+ status = EXIT_FAILURE; \
+ } \
+ else /* for trailing semicolon */
+
+#define PRINT(fs,var,exp) if ( sprintf(buffer, "%" fs, var ) <= 0 ) \
+ { \
+ printf("***%s=",fs, STR_SUB(fs) \
+ " failed ***\n" \
+ ); \
+ status = EXIT_FAILURE; \
+ } \
+ else if ( strcmp(buffer, STR_SUB(exp)) != 0 ) \
+ { \
+ printf("***%s=",fs, STR_SUB(fs) \
+ " should be: " STR_SUB(exp) \
+ ", was: %s ***\n", buffer \
+ ); \
+ status = EXIT_FAILURE; \
+ } \
+ else /* for trailing semicolon */
+
+#else
+
+#define SCAN(buf,fs,var,exp)
+#define PRINT(fs,var,exp)
+
+#endif
+
+#ifdef SCNo32
+
+ SCAN(in_dn, SCNo32, int32, 9);
+
+#endif
+#ifdef PRIo32
+ PRINT(PRIo32, int32, 11);
+#endif
+ SCAN(in_dmo, SCNiLEAST16, intl16, -9);
+ SCAN(in_dspx, SCNdLEAST16, intl16, 0);
+ SCAN(in_dsmx, SCNiLEAST16, intl16, -4507);
+ PRINT(PRIdLEAST16, intl16, -4507);
+ PRINT(PRIiLEAST16, intl16, -4507);
+ SCAN(in_dsn, SCNxLEAST16, uintl16, 4507);
+ PRINT(PRIoLEAST16, uintl16, 10633);
+ PRINT(PRIuLEAST16, uintl16, 4507);
+ PRINT(PRIxLEAST16, uintl16, 119b);
+ PRINT(PRIXLEAST16, uintl16, 119B);
+ SCAN(in_dp, SCNxFAST16, uintf16, 4507);
+ PRINT(PRIxFAST16, uintf16, 119b);
+#ifdef SCNdMAX
+ SCAN(in_dp, SCNdMAX, intmax, 119);
+#endif
+#ifdef PRIiMAX
+ PRINT(PRIiMAX, intmax, 119);
+#endif
+#ifdef SCNoMAX
+ SCAN(in_dpx, SCNoMAX, uintmax, 0);
+#endif
+#ifdef PRIxMAX
+ PRINT(PRIxMAX, uintmax, 0);
+#endif
+ /* Obviously there should be a much larger battery of such tests. */
+ }
+
+#if defined(INTMAX_MAX) /* <inttypes.h> has C99 features */
+ /*
+ 7.8.2 Functions for greatest-width integer types
+ */
+
+ {
+ static struct
+ {
+ intmax_t input;
+ intmax_t expect;
+ } abs_data[] =
+ {
+#ifdef INT8_MAX
+ { INT8_MAX, INT8_MAX, },
+ { -INT8_MAX, INT8_MAX, },
+ { UINT8_MAX, UINT8_MAX, },
+#endif
+
+#if 0
+
+#ifdef INT16_MAX
+ { INT16_MAX, INT16_MAX, },
+ { -INT16_MAX, INT16_MAX, },
+ { UINT16_MAX, UINT16_MAX, },
+#endif
+#ifdef INT32_MAX
+ { INT32_MAX, INT32_MAX, },
+ { -INT32_MAX, INT32_MAX, },
+#ifdef INT_LEAST64_MAX /* else might support only 32 bits */
+ { UINT32_MAX, UINT32_MAX, },
+#endif
+#endif
+#ifdef INT64_MAX
+ { INT64_MAX, INT64_MAX, },
+ { -INT64_MAX, INT64_MAX, },
+#endif
+ { INT_LEAST8_MAX, INT_LEAST8_MAX, },
+ { -INT_LEAST8_MAX, INT_LEAST8_MAX, },
+ { UINT_LEAST8_MAX, UINT_LEAST8_MAX, },
+ { INT_LEAST16_MAX, INT_LEAST16_MAX, },
+ { -INT_LEAST16_MAX, INT_LEAST16_MAX, },
+ { UINT_LEAST16_MAX, UINT_LEAST16_MAX, },
+ { INT_LEAST32_MAX, INT_LEAST32_MAX, },
+ { -INT_LEAST32_MAX, INT_LEAST32_MAX, },
+#ifdef INT_LEAST64_MAX
+ { UINT_LEAST32_MAX, UINT_LEAST32_MAX, },
+ { INT_LEAST64_MAX, INT_LEAST64_MAX, },
+ { -INT_LEAST64_MAX, INT_LEAST64_MAX, },
+#endif
+ { INT_FAST8_MAX, INT_FAST8_MAX, },
+ { -INT_FAST8_MAX, INT_FAST8_MAX, },
+ { UINT_FAST8_MAX, UINT_FAST8_MAX, },
+ { INT_FAST16_MAX, INT_FAST16_MAX, },
+ { -INT_FAST16_MAX, INT_FAST16_MAX, },
+ { UINT_FAST16_MAX, UINT_FAST16_MAX, },
+ { INT_FAST32_MAX, INT_FAST32_MAX, },
+ { -INT_FAST32_MAX, INT_FAST32_MAX, },
+#ifdef INT_FAST64_MAX
+ { UINT_FAST32_MAX, UINT_FAST32_MAX, },
+ { INT_FAST64_MAX, INT_FAST64_MAX, },
+ { -INT_FAST64_MAX, INT_FAST64_MAX, },
+#endif
+#ifdef INTPTR_MAX
+ { INTPTR_MAX, INTPTR_MAX, },
+ { -INTPTR_MAX, INTPTR_MAX, },
+#endif
+#ifdef UINTPTR_MAX
+ { UINTPTR_MAX, UINTPTR_MAX, },
+#endif
+ { INTMAX_MAX, INTMAX_MAX, },
+#ifdef PTRDIFF_MAX
+ { PTRDIFF_MAX, PTRDIFF_MAX, },
+#endif
+#ifdef SIG_ATOMIC_MAX
+ { SIG_ATOMIC_MAX, SIG_ATOMIC_MAX, },
+#if SIG_ATOMIC_MIN < 0
+ { -SIG_ATOMIC_MAX, SIG_ATOMIC_MAX, },
+#endif
+#endif
+#ifdef SIZE_MAX
+ { SIZE_MAX, SIZE_MAX, },
+#endif
+#ifdef WCHAR_MAX
+ { WCHAR_MAX, WCHAR_MAX, },
+#if WCHAR_MIN < 0
+ { -WCHAR_MAX, WCHAR_MAX, },
+#endif
+#endif
+#ifdef WINT_MAX
+ { WINT_MAX, WINT_MAX, },
+#if WINT_MIN < 0
+ { -WINT_MAX, WINT_MAX, },
+#endif
+#endif
+ { 127, 127, },
+ { -127, 127, },
+ { 128, 128, },
+ { -127-1, 128, },
+ { 255, 255, },
+ { -256+1, 255, },
+ { 256, 256, },
+ { -256, 256, },
+ { 32767, 32767, },
+ { -32767, 32767, },
+ { 32768, 32768, },
+ { -32767-1, 32768, },
+ { 65535, 65535, },
+ { -65536+1, 65535, },
+ { 65536, 65536, },
+ { -65536, 65536, },
+ { 2147483647, 2147483647, },
+ { -2147483647, 2147483647, },
+ { 2147483648, 2147483648, },
+ { -2147483647-1, 2147483648, },
+#ifdef INT_LEAST64_MAX /* else might support only 32 bits */
+ { 4294967295, 4294967295, },
+ { -4294967296+1, 4294967295, },
+ { 4294967296, 4294967296, },
+ { -4294967296, 4294967296, },
+ { 9223372036854775807, 9223372036854775807, },
+ { -9223372036854775807, 9223372036854775807, },
+ { 1234567890123456789, 1234567890123456789, },
+ { -1234567890123456789, 1234567890123456789, },
+#endif
+ { 1, 1, },
+ { -1, 1, },
+ { 2, 2, },
+ { -2, 2, },
+ { 10, 10, },
+ { -10, 10, },
+ { 16, 16, },
+ { -16, 16, },
+#endif
+ /* Other test cases can be added here. */
+ { 0, 0 /* terminates the list */ },
+ }, *adp = abs_data;
+
+ do {
+ if ( (intmax = imaxabs(adp->input)) != adp->expect )
+ {
+ printf("*** imaxabs(%"PRIdMAX") failed; should be: %"
+ PRIdMAX", was: %"PRIdMAX" ***\n",
+ adp->input, adp->expect, intmax
+ );
+ status = EXIT_FAILURE;
+ }
+// } while ( adp++->input != 0 );
+ } while ( (adp++)->input != 0 );
+ }
+
+ {
+ imaxdiv_t result;
+ static struct
+ {
+ intmax_t numer;
+ intmax_t denom;
+ intmax_t exp_quot;
+ intmax_t exp_rem;
+ } div_data[] =
+ {
+ { 0, 1, 0, 0, },
+#if 0
+ { 0, -1, 0, 0, },
+ { 0, 2, 0, 0, },
+ { 0, -2, 0, 0, },
+ { 0, 5, 0, 0, },
+ { 0, -5, 0, 0, },
+ { 1, 1, 1, 0, },
+ { 1, -1, -1, 0, },
+ { 1, 2, 0, 1, },
+ { 1, -2, 0, 1, },
+ { 1, 5, 0, 1, },
+ { 1, -5, 0, 1, },
+ { -1, 1, -1, 0, },
+ { -1, -1, 1, 0, },
+ { -1, 2, 0, -1, },
+ { -1, -2, 0, -1, },
+ { -1, 5, 0, -1, },
+ { -1, -5, 0, -1, },
+ { 2, 1, 2, 0, },
+ { 2, -1, -2, 0, },
+ { 2, 2, 1, 0, },
+ { 2, -2, -1, 0, },
+ { 2, 5, 0, 2, },
+ { 2, -5, 0, 2, },
+ { -2, 1, -2, 0, },
+ { -2, -1, 2, 0, },
+ { -2, 2, -1, 0, },
+ { -2, -2, 1, 0, },
+ { -2, 5, 0, -2, },
+ { -2, -5, 0, -2, },
+ { 17, 5, 3, 2, },
+ { -17, -5, 3, -2, },
+ { 17, -5, -3, 2, },
+ { -17, 5, -3, -2, },
+ { 2147483647, 1, 2147483647, 0, },
+ { -2147483647, 1, -2147483647, 0, },
+ { 2147483648, 1, 2147483648, 0, },
+ { -2147483647-1, 1, -2147483647-1, 0, },
+ { 2147483647, 2, 1073741823, 1, },
+ { -2147483647, 2, -1073741823, -1, },
+ { 2147483648, 2, 1073741824, 0, },
+ { -2147483647-1, 2, -1073741824, 0, },
+#ifdef INT_LEAST64_MAX /* else might support only 32 bits */
+ { 4294967295, 1, 4294967295, 0, },
+ { -4294967296+1, 1, -4294967296+1, 0, },
+ { 4294967296, 1, 4294967296, 0, },
+ { -4294967296, 1, -4294967296, 0, },
+ { 4294967295, -1, -4294967296+1, 0, },
+ { -4294967296+1, -1, 4294967295, 0, },
+ { 4294967296, -1, -4294967296, 0, },
+ { -4294967296, -1, 4294967296, 0, },
+ { 4294967295, 2, 2147483647, 1, },
+ { -4294967296+1, 2, -2147483647, -1, },
+ { 4294967296, 2, 2147483648, 0, },
+ { -4294967296, 2, -2147483647-1, 0, },
+ { 4294967295, 2147483647, 2, 1, },
+ { -4294967296+1, 2147483647, -2, -1, },
+ { 4294967296, 2147483647, 2, 2, },
+ { -4294967296, 2147483647, -2, -2, },
+ { 4294967295, -2147483647, -2, 1, },
+ { -4294967296+1, -2147483647, 2, -1, },
+ { 4294967296, -2147483647, -2, 2, },
+ { -4294967296, -2147483647, 2, -2, },
+ { 4294967295, 2147483648, 1, 2147483647, },
+ { -4294967296+1, 2147483648, -1, -2147483647, },
+ { 4294967296, 2147483648, 2, 0, },
+ { -4294967296, 2147483648, -2, 0, },
+ { 4294967295, -2147483647-1, -1, 2147483647, },
+ { -4294967296+1, -2147483647-1, 1, -2147483647,},
+ { 4294967296, -2147483647-1, -2, 0, },
+ { -4294967296, -2147483647-1, 2, 0, },
+ { 9223372036854775807, 1, 9223372036854775807, 0, },
+ { -9223372036854775807, 1, -9223372036854775807, 0, },
+ { 9223372036854775807, 2, 4611686018427387903, 1, },
+ { -9223372036854775807, 2, -4611686018427387903, -1, },
+#endif
+#endif
+ /* There should be a much larger battery of such tests. */
+ { 0, 0, 0, 0 }, /* 0 denom terminates the list */
+ }, *ddp;
+
+#if 0
+ for ( ddp = div_data; ddp->denom != 0; ++ddp )
+ if ( (result = imaxdiv(ddp->numer, ddp->denom)).quot
+ != ddp->exp_quot || result.rem != ddp->exp_rem
+ ) {
+// printf("*** imaxdiv(%"PRIdMAX",%"PRIdMAX
+// ") failed; should be: (%"PRIdMAX",%"PRIdMAX
+// "), was: (%"PRIdMAX",%"PRIdMAX") ***\n",
+// ddp->numer, ddp->denom, ddp->exp_quot,
+// ddp->exp_rem, result.quot, result.rem
+// );
+ printf("err:imaxdiv(%"PRIdMAX",%"PRIdMAX
+ ") = (%"PRIdMAX",%"PRIdMAX
+ "), is: (%"PRIdMAX",%"PRIdMAX")\n",
+ ddp->numer, ddp->denom, ddp->exp_quot,
+ ddp->exp_rem, result.quot, result.rem
+ );
+ status = EXIT_FAILURE;
+ }
+#endif
+ }
+
+ {
+ char *endptr;
+ wchar_t *wendptr;
+ static char saved[64]; /* holds copy of input string */
+ static wchar_t wnptr[64]; /* holds wide copy of test string */
+ static int warned; /* "warned for null endptr" flag */
+ register int i;
+ static struct
+ {
+ char * nptr;
+ int base;
+ intmax_t exp_val;
+ int exp_len;
+ } str_data[] =
+ {
+ { "", 0, 0, 0, },
+ { "", 2, 0, 0, },
+ { "", 8, 0, 0, },
+ { "", 9, 0, 0, },
+ { "", 10, 0, 0, },
+ { "", 16, 0, 0, },
+ { "", 36, 0, 0, },
+ { "0", 0, 0, 1, },
+ { "0", 2, 0, 1, },
+ { "0", 8, 0, 1, },
+ { "0", 9, 0, 1, },
+ { "0", 10, 0, 1, },
+ { "0", 16, 0, 1, },
+ { "0", 36, 0, 1, },
+ { "+0", 0, 0, 2, },
+ { "+0", 2, 0, 2, },
+ { "+0", 8, 0, 2, },
+ { "+0", 9, 0, 2, },
+ { "+0", 10, 0, 2, },
+ { "+0", 16, 0, 2, },
+ { "+0", 36, 0, 2, },
+ { "-0", 0, 0, 2, },
+ { "-0", 2, 0, 2, },
+ { "-0", 8, 0, 2, },
+ { "-0", 9, 0, 2, },
+ { "-0", 10, 0, 2, },
+ { "-0", 16, 0, 2, },
+ { "-0", 36, 0, 2, },
+ { "Inf", 0, 0, 0, },
+ { "Inf", 2, 0, 0, },
+ { "Inf", 8, 0, 0, },
+ { "Inf", 9, 0, 0, },
+ { "Inf", 10, 0, 0, },
+ { "Inf", 16, 0, 0, },
+ { "Inf", 36, 24171, 3, },
+ { "+Inf", 0, 0, 0, },
+ { "+Inf", 2, 0, 0, },
+ { "+Inf", 8, 0, 0, },
+ { "+Inf", 9, 0, 0, },
+ { "+Inf", 10, 0, 0, },
+ { "+Inf", 16, 0, 0, },
+ { "+Inf", 36, 24171, 4, },
+ { "-Inf", 0, 0, 0, },
+ { "-Inf", 2, 0, 0, },
+ { "-Inf", 8, 0, 0, },
+ { "-Inf", 9, 0, 0, },
+ { "-Inf", 10, 0, 0, },
+ { "-Inf", 16, 0, 0, },
+ { "-Inf", 36, -24171, 4, },
+ { "inf", 0, 0, 0, },
+ { "inf", 2, 0, 0, },
+ { "inf", 8, 0, 0, },
+ { "inf", 9, 0, 0, },
+ { "inf", 10, 0, 0, },
+ { "inf", 16, 0, 0, },
+ { "inf", 36, 24171, 3, },
+ { "+inf", 0, 0, 0, },
+ { "+inf", 2, 0, 0, },
+ { "+inf", 8, 0, 0, },
+ { "+inf", 9, 0, 0, },
+ { "+inf", 10, 0, 0, },
+ { "+inf", 16, 0, 0, },
+ { "+inf", 36, 24171, 4, },
+ { "-inf", 0, 0, 0, },
+ { "-inf", 2, 0, 0, },
+ { "-inf", 8, 0, 0, },
+ { "-inf", 9, 0, 0, },
+ { "-inf", 10, 0, 0, },
+ { "-inf", 16, 0, 0, },
+ { "-inf", 36, -24171, 4, },
+ { "119b8Z", 0, 119, 3, },
+ { "119bZ", 0, 119, 3, },
+ { "-0119bZ", 0, -9, 4, },
+ { " \t\n 0X119bZ", 0, 4507, 10, },
+ { " \t\n +0X119bZ", 0, 4507, 11, },
+ { " \t\n -0x119bZ", 0, -4507, 11, },
+ { " \t\n 119bZ", 0, 119, 7, },
+ { "+119bZ", 0, 119, 4, },
+ { "+0X119bz", 0, 4507, 7, },
+ { "119b8Z", 2, 3, 2, },
+ { "119bZ", 2, 3, 2, },
+ { "-0119bZ", 2, -3, 4, },
+ { " \t\n 0X119bZ", 2, 0, 5, },
+ { " \t\n +0X119bZ", 2, 0, 6, },
+ { " \t\n -0x119bZ", 2, 0, 6, },
+ { " \t\n 119bZ", 2, 3, 6, },
+ { "+119bZ", 2, 3, 3, },
+ { "+0X119bz", 2, 0, 2, },
+ { "119b8Z", 8, 9, 2, },
+ { "119bZ", 8, 9, 2, },
+ { "-0119bZ", 8, -9, 4, },
+ { " \t\n 0X119bZ", 8, 0, 5, },
+ { " \t\n +0X119bZ", 8, 0, 6, },
+ { " \t\n -0x119bZ", 8, 0, 6, },
+ { " \t\n 119bZ", 8, 9, 6, },
+ { "+119bZ", 8, 9, 3, },
+ { "+0X119bz", 8, 0, 2, },
+ { "119b8Z", 9, 10, 2, },
+ { "119bZ", 9, 10, 2, },
+ { "-0119bZ", 9, -10, 4, },
+ { " \t\n 0X119bZ", 9, 0, 5, },
+ { " \t\n +0X119bZ", 9, 0, 6, },
+ { " \t\n -0x119bZ", 9, 0, 6, },
+ { " \t\n 119bZ", 9, 10, 6, },
+ { "+119bZ", 9, 10, 3, },
+ { "+0X119bz", 9, 0, 2, },
+ { "119b8Z", 10, 119, 3, },
+ { "119bZ", 10, 119, 3, },
+ { "-0119bZ", 10, -119, 5, },
+ { " \t\n 0X119bZ", 10, 0, 5, },
+ { " \t\n +0X119bZ", 10, 0, 6, },
+ { " \t\n -0x119bZ", 10, 0, 6, },
+ { " \t\n 119bZ", 10, 119, 7, },
+ { "+119bZ", 10, 119, 4, },
+ { "+0X119bz", 10, 0, 2, },
+ { "119b8Z", 16, 72120, 5, },
+ { "119bZ", 16, 4507, 4, },
+ { "-0119bZ", 16, -4507, 6, },
+ { " \t\n 0X119bZ", 16, 4507, 10, },
+ { " \t\n +0X119bZ", 16, 4507, 11, },
+ { " \t\n -0x119bZ", 16, -4507, 11, },
+ { " \t\n 119bZ", 16, 4507,8, },
+ { "+119bZ", 16, 4507, 5, },
+ { "+0X119bz", 16, 4507, 7, },
+ { "119b8Z", 36, 62580275, 6, },
+ { "119bZ", 36, 1738367, 5, },
+ { "-0119bZ", 36, -1738367, 7, },
+ { " \t\n 0X119bZ", 36, 1997122175, 11, },
+ { " \t\n +0X119bZ", 36, 1997122175, 12, },
+ { " \t\n -0x119bZ", 36, -1997122175, 12, },
+ { " \t\n 119bZ", 36, 1738367, 9, },
+ { "+119bZ", 36, 1738367, 6, },
+ { "+0X119bz", 36, 1997122175, 8, },
+ /* There should be a much larger battery of such tests. */
+ { "127", 0, 127, 3, },
+ { "-127", 0, -127, 4, },
+ { "128", 0, 128, 3, },
+ { "-128", 0, -127-1, 4, },
+ { "255", 0, 255, 3, },
+ { "-255", 0, -255, 4, },
+ { "256", 0, 256, 3, },
+ { "-256", 0, -255-1, 4, },
+ { "32767", 0, 32767, 5, },
+ { "-32767", 0, -32767, 6, },
+ { "32768", 0, 32768, 5, },
+ { "-32768", 0, -32767-1, 6, },
+ { "65535", 0, 65535, 5, },
+ { "-65535", 0, -65536+1, 6, },
+ { "65536", 0, 65536, 5, },
+ { "-65536", 0, -65536, 6, },
+ { "2147483647", 0, 2147483647, 10, },
+ { "-2147483647", 0, -2147483647, 11, },
+ { "2147483648", 0, 2147483648, 10, },
+ { "-2147483648", 0, -2147483647-1, 11, },
+ { "4294967295", 0, 4294967295, 10, },
+ { "-4294967295", 0, -4294967296+1, 11, },
+ { "4294967296", 0, 4294967296, 10, },
+ { "-4294967296", 0, -4294967296, 11, },
+ { "9223372036854775807", 0, 9223372036854775807, 19, },
+ { "-9223372036854775807", 0, -9223372036854775807, 20, },
+ { "1234567890123456789", 0, 1234567890123456789, 19, },
+ { "-1234567890123456789", 0, -1234567890123456789, 20, },
+ { "1", 0, 1, 1, },
+ { "-1", 0, -1, 2, },
+ { "2", 0, 2, 1, },
+ { "-2", 0, -2, 2, },
+ { "10", 0, 10, 2, },
+ { "-10", 0, -10, 3, },
+ { "16", 0, 16, 2, },
+ { "-16", 0, -16, 3, },
+ /* Other test cases can be added here. */
+ { NULL, 0, 0, 0 }, /* terminates the list */
+ }, *sdp;
+
+ for ( sdp = str_data; sdp->nptr != NULL ; ++sdp )
+ {
+ /*
+ 7.8.2.3 The strtoimax and strtoumax functions
+ */
+
+ strcpy(saved, sdp->nptr);
+
+ errno = 0; /* shouldn't be changed */
+
+ if ( (intmax = strtoimax(sdp->nptr, &endptr, sdp->base))
+ != sdp->exp_val
+ ) {
+ int save = errno;
+
+ printf("*** strtoimax(%s,,%d) failed; should be: %"
+ PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
+ sdp->base, sdp->exp_val, intmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+ else if ( endptr != sdp->nptr + sdp->exp_len )
+ {
+ int save = errno;
+
+ printf("*** strtoimax(%s,,%d) returned wrong endptr"
+ " ***\n", sdp->nptr, sdp->base
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ printf("*** strtoimax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( strcmp(sdp->nptr, saved) != 0 )
+ {
+ printf("*** strtoimax modified its input ***\n");
+ status = EXIT_FAILURE;
+ strcpy(saved, sdp->nptr);
+ }
+
+ if ( sdp->exp_val >= 0 ) /* else some sign extension */
+ {
+ errno = 0; /* shouldn't be changed */
+
+ if ( (uintmax = strtoumax(sdp->nptr, &endptr, sdp->base
+ )
+ ) != sdp->exp_val
+ ) {
+ int save = errno;
+
+ printf("*** strtoumax(%s,,%d) failed; "
+ "should be: %"PRIuMAX", was: %"PRIuMAX
+ " ***\n", sdp->nptr, sdp->base,
+ sdp->exp_val, uintmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+ else if ( endptr != sdp->nptr + sdp->exp_len )
+ {
+ int save = errno;
+
+ printf("*** strtoumax(%s,,%d) returned wrong "
+ "endptr ***\n", sdp->nptr, sdp->base
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ printf("*** strtoumax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( strcmp(sdp->nptr, saved) != 0 )
+ {
+ printf("*** strtoumax"
+ " modified its input ***\n"
+ );
+ status = EXIT_FAILURE;
+ strcpy(saved, sdp->nptr);
+ }
+ }
+
+ /* tests for null endptr */
+
+#define WARN() if (!warned) warned = 1, printf("*** Using null endptr: ***\n")
+
+ warned = 0;
+ errno = 0; /* shouldn't be changed */
+
+ if ( (intmax = strtoimax(sdp->nptr, (char **)NULL, sdp->base))
+ != sdp->exp_val
+ ) {
+ int save = errno;
+
+ WARN();
+ printf("*** strtoimax(%s,NULL,%d) failed; "
+ "should be: %"PRIdMAX", was: %"PRIdMAX" ***\n",
+ sdp->nptr, sdp->base, sdp->exp_val, intmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ WARN();
+ printf("*** strtoimax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( strcmp(sdp->nptr, saved) != 0 )
+ {
+ WARN();
+ printf("*** strtoimax modified its input ***\n");
+ status = EXIT_FAILURE;
+ strcpy(saved, sdp->nptr);
+ }
+
+ if ( sdp->exp_val >= 0 ) /* else some sign extension */
+ {
+ errno = 0; /* shouldn't be changed */
+
+ if ( (uintmax = strtoumax(sdp->nptr, (char **)NULL,
+ sdp->base
+ )
+ ) != sdp->exp_val
+ ) {
+ int save = errno;
+
+ WARN();
+ printf("*** strtoumax(%s,NULL,%d) failed; "
+ "should be: %"PRIuMAX", was: %"PRIuMAX
+ " ***\n", sdp->nptr, sdp->base,
+ sdp->exp_val, uintmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ WARN();
+ printf("*** strtoumax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( strcmp(sdp->nptr, saved) != 0 )
+ {
+ WARN();
+ printf("*** strtoumax"
+ " modified its input ***\n"
+ );
+ status = EXIT_FAILURE;
+ strcpy(saved, sdp->nptr);
+ }
+ }
+
+ /*
+ 7.8.2.4 The wcstoimax and wcstoumax functions
+ */
+
+ for ( i = 0; i < 64; ++i )
+ if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
+ break;
+
+ errno = 0; /* shouldn't be changed */
+
+ if ( (intmax = wcstoimax(wnptr, &wendptr, sdp->base))
+ != sdp->exp_val
+ ) {
+ int save = errno;
+
+ printf("*** wcstoimax(%s,,%d) failed; should be: %"
+ PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
+ sdp->base, sdp->exp_val, intmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+ else if ( wendptr != wnptr + sdp->exp_len )
+ {
+ int save = errno;
+
+ printf("*** wcstoimax(%s,,%d) returned wrong endptr"
+ " ***\n", sdp->nptr, sdp->base
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ printf("*** wcstoimax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ for ( i = 0; i < 64; ++i )
+ if ( wnptr[i] != sdp->nptr[i] )
+ {
+ printf("*** wcstoimax modified its input ***\n"
+ );
+ status = EXIT_FAILURE;
+
+ for ( ; i < 64; ++i )
+ if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
+ break;
+
+ break;
+ }
+ else if ( wnptr[i] == '\0' )
+ break;
+
+ if ( sdp->exp_val >= 0 ) /* else some sign extension */
+ {
+ errno = 0; /* shouldn't be changed */
+
+ if ( (uintmax = wcstoumax(wnptr, &wendptr, sdp->base)
+ ) != sdp->exp_val
+ ) {
+ int save = errno;
+
+ printf("*** wcstoumax(%s,,%d) failed; "
+ "should be: %"PRIuMAX", was: %"PRIuMAX
+ " ***\n", sdp->nptr, sdp->base,
+ sdp->exp_val, uintmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+ else if ( wendptr != wnptr + sdp->exp_len )
+ {
+ int save = errno;
+
+ printf("*** wcstoumax(%s,,%d) returned wrong "
+ "endptr ***\n", sdp->nptr, sdp->base
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ printf("*** wcstoumax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ for ( i = 0; i < 64; ++i )
+ if ( wnptr[i] != sdp->nptr[i] )
+ {
+ printf("*** wcstoumax"
+ " modified its input ***\n"
+ );
+ status = EXIT_FAILURE;
+
+ for ( ; i < 64; ++i )
+ if ( (wnptr[i] = sdp->nptr[i])
+ == '\0'
+ )
+ break;
+
+ break;
+ }
+ else if ( wnptr[i] == '\0' )
+ break;
+ }
+
+ /* tests for null endptr */
+
+ warned = 0;
+ errno = 0; /* shouldn't be changed */
+
+ if ( (intmax = wcstoimax(wnptr, (wchar_t **)NULL, sdp->base))
+ != sdp->exp_val
+ ) {
+ int save = errno;
+
+ WARN();
+ printf("*** wcstoimax(%s,NULL,%d) failed; should be: %"
+ PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
+ sdp->base, sdp->exp_val, intmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ WARN();
+ printf("*** wcstoimax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ for ( i = 0; i < 64; ++i )
+ if ( wnptr[i] != sdp->nptr[i] )
+ {
+ WARN();
+ printf("*** wcstoimax modified its input ***\n"
+ );
+ status = EXIT_FAILURE;
+
+ for ( ; i < 64; ++i )
+ if ( (wnptr[i] = sdp->nptr[i])
+ == '\0'
+ )
+ break;
+
+ break;
+ }
+ else if ( wnptr[i] == '\0' )
+ break;
+
+ if ( sdp->exp_val >= 0 ) /* else some sign extension */
+ {
+ errno = 0; /* shouldn't be changed */
+
+ if ( (uintmax = wcstoumax(wnptr, (wchar_t **)NULL,
+ sdp->base
+ )
+ ) != sdp->exp_val
+ ) {
+ int save = errno;
+
+ WARN();
+ printf("*** wcstoumax(%s,NULL,%d) failed; "
+ "should be: %"PRIuMAX", was: %"PRIuMAX
+ " ***\n", sdp->nptr, sdp->base,
+ sdp->exp_val, uintmax
+ );
+ status = EXIT_FAILURE;
+ errno = save;
+ }
+
+ if ( errno != 0 )
+ {
+ WARN();
+ printf("*** wcstoumax modified errno ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ for ( i = 0; i < 64; ++i )
+ if ( wnptr[i] != sdp->nptr[i] )
+ {
+ WARN();
+ printf("*** wcstoumax"
+ " modified its input ***\n"
+ );
+ status = EXIT_FAILURE;
+
+ for ( ; i < 64; ++i )
+ if ( (wnptr[i] = sdp->nptr[i])
+ == '\0'
+ )
+ break;
+
+ break;
+ }
+ else if ( wnptr[i] == '\0' )
+ break;
+ }
+ }
+
+ /*
+ 7.8.2.3 The strtoimax and strtoumax functions (continued)
+ */
+
+ if ( (intmax = strtoimax("1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890",
+ &endptr, 0
+ )
+ ) != INTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** strtoimax failed overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (intmax = strtoimax("+1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890",
+ &endptr, 0
+ )
+ ) != INTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** strtoimax failed +overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (intmax = strtoimax("-1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890",
+ &endptr, 0
+ )
+ ) != INTMAX_MIN || errno != ERANGE
+ ) {
+ printf("*** strtoimax failed -overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (uintmax = strtoumax("1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890",
+ &endptr, 0
+ )
+ ) != UINTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** strtoumax failed overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (uintmax = strtoumax("+1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890",
+ &endptr, 0
+ )
+ ) != UINTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** strtoumax failed +overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (uintmax = strtoumax("-1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890",
+ &endptr, 0
+ )
+ ) != UINTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** strtoumax failed -overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ /*
+ 7.8.2.4 The wcstoimax and wcstoumax functions (continued)
+ */
+
+#ifdef NO_INTERNAL_WCHAR
+ printf("NO_INTERNAL_WCHAR\n");
+#else
+
+ if ( (intmax = wcstoimax(L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890",
+ &wendptr, 0
+ )
+ ) != INTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** wcstoimax failed overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (intmax = wcstoimax(L"+1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890",
+ &wendptr, 0
+ )
+ ) != INTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** wcstoimax failed +overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (intmax = wcstoimax(L"-1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890",
+ &wendptr, 0
+ )
+ ) != INTMAX_MIN || errno != ERANGE
+ ) {
+ printf("*** wcstoimax failed -overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (uintmax = wcstoumax(L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890",
+ &wendptr, 0
+ )
+ ) != UINTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** wcstoumax failed overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (uintmax = wcstoumax(L"+1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890",
+ &wendptr, 0
+ )
+ ) != UINTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** wcstoumax failed +overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+
+ if ( (uintmax = wcstoumax(L"-1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890"
+ L"1234567890123456789012345678901234567890",
+ &wendptr, 0
+ )
+ ) != UINTMAX_MAX || errno != ERANGE
+ ) {
+ printf("*** wcstoumax failed -overflow test ***\n");
+ status = EXIT_FAILURE;
+ }
+#endif // NO_INTERNAL_WCHAR
+ }
+#endif /* defined(INTMAX_MAX) */
+
+ if ( status != 0 )
+ printf("sitest failed.\n");
+
+ return status;
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+This directory contains test code for automatic regression testing of the CC65
+compiler.
+
+
+/val - the bulk of tests are contained here, individual tests should exit with
+ an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error
+
+/ref - these tests produce output that must be compared with reference output
+
+/err - contains tests that MUST NOT compile
+
+/misc - a few tests that need special care of some sort
+
+
+to run the tests use "make" in this (top) directory, the makefile should exit
+with no error.
+
+when a test failed you can use "make continue" to run further tests
+
+--------------------------------------------------------------------------------
+
+TODO:
+
+- reduce usage of "common.h" to a minimum
+- convert more tests from using reference output to returning an exit code
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include <stdio.h>
+
int up[15], down[15], rows[8], x[8];
void queens(int c);
void print(void);
--- /dev/null
+
+# makefile for the regression tests that generate output which has to be
+# compared with reference output
+
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
+
+CC65FLAGS = -t sim6502
+SIM65FLAGS = -x 200000000
+
+CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
+SIM65 := $(if $(wildcard ../../bin/sim65*),../../bin/sim65,sim65)
+
+ifdef CMD_EXE
+RM := del /f
+else
+RM := rm -f
+endif
+
+WORKDIR := ./../../testwrk
+
+DIFF := $(WORKDIR)/bdiff
+
+CFLAGS := -O2 -Wall -W -Wextra -fwrapv -fno-strict-overflow
+
+.PHONY: all clean
+
+REFS := $(patsubst %.c,$(WORKDIR)/%.ref,$(wildcard *.c))
+
+SOURCES := $(wildcard *.c)
+TESTS := $(SOURCES:%.c=$(WORKDIR)/%.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.o.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.os.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.or.prg)
+
+all: $(REFS) $(TESTS)
+
+$(WORKDIR)/%.ref: %.c
+ $(CC) $(CFLAGS) $< -o $(WORKDIR)/$*.host
+ $(WORKDIR)/$*.host > $@
+
+$(WORKDIR)/%.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+$(WORKDIR)/%.o.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) -O $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+$(WORKDIR)/%.os.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) -Os $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+$(WORKDIR)/%.osi.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) -Osi $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+$(WORKDIR)/%.osir.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) -Osir $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+$(WORKDIR)/%.oi.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) -Oi $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+$(WORKDIR)/%.oir.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) -Oir $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+$(WORKDIR)/%.or.prg: %.c $(WORKDIR)/%.ref
+ $(CL65) -Or $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/$*.out
+ $(DIFF) $(WORKDIR)/$*.out $(WORKDIR)/$*.ref
+
+clean:
+ @$(RM) $(TESTS)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.o)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.out)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.ref)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.host)
!!AUTHOR!!
*/
+#include <stdio.h>
+
long a; /* must be static life */
long b; /* must be static life */
Best, Oliver
*/
+#include <stdio.h>
+
void f(void){struct{int i;}d;}
struct{void(*p)(void);}s={f};
!!AUTHOR!!
*/
+#include <stdio.h>
+
/*
cc65 doesn't compile this, if i use the "-O"-option.
but it works with "while(!0)"; instead of "for(;;);"
!!AUTHOR!!
*/
+#include <stdio.h>
+
/*
there is a bug in the preprocessor (i think) ... the following works
(compiles) correctly:
!!AUTHOR!!
*/
+#include "common.h"
+
struct Record {
struct Record *PtrComp;
int x;
!!AUTHOR!! Oliver Schmidt
*/
+#include <stdio.h>
+
/*
After spending a "little" time I finally succeeded in isolating an
(maybe THE) optimizer bug causing Contiki to fail.
*/
+#include <stdio.h>
+
int foo=0,bar=2;
int main(void)
!!AUTHOR!! Johan Kotlinski
*/
+#include <stdio.h>
+
/*
This produces the compiler error "test.c(9): Error: Assignment to const"
Shouldn't be an error, should it? baz is const, bar isn't.
!!AUTHOR!! Johan Kotlinski
*/
+#include <stdio.h>
+
/*
...gives "test.c(2): Error: Variable `foo' has unknown size" using -Cl.
Is it really unknown?
test2 and test3 will result in an endless loop (SVN version: 4974M)
*/
+#include <stdio.h>
+
#define OPENTEST()
#define CLOSETEST()
cf - print character frequencies
*/
+#include "common.h"
+
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
+FILE *in;
+
#define INFILE "cf.in"
+#define GETCHAR() fgetc(in)
#ifndef NO_FLOATS
float f[0x100];
signed cutoff;
#endif
+ in = fopen(INFILE, "rb");
+ if (in == NULL) {
+ return EXIT_FAILURE;
+ }
+
if (argc <= 1)
#ifndef NO_FLOATS
cutoff = 0.0;
#endif
}
}
-
+ fclose(in);
return 0;
}
--- /dev/null
+start cf.input >
+The sky above the port was the color of television, tuned
+to a dead channel.
+"It's not like I'm using," Case heard someone say, as he
+shouldered his way through the crowd around the door of the
+Chat. "It's like my body's developed this massive drug deficiency."
+It was a Sprawl voice and a Sprawl joke. The Chatsubo
+was a bar for professional expatriates; you could drink there
+for a week and never hear two words in Japanese.
+Ratz was tending bar, his prosthetic arm jerking monotonously
+as he filled a tray of glasses with draft Kirin. He saw
+Case and smiled, his teeth a web work of East European steel
+and brown decay. Case found a place at the bar, between the
+unlikely tan on one of Lonny Zone's whores and the crisp naval
+uniform of a tall African whose cheekbones were ridged with
+Joe boys," Ratz said, shoving a draft across the bar with his
+good hand. "Maybe some business with you, Case?"
+Case shrugged. The girl to his right giggled and nudged
+< end cf.input
!!LICENCE!! Public Domain
*/
+#include "common.h"
#include <limits.h>
#include <ctype.h>
--- /dev/null
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define NO_OLD_FUNC_DECL
+#define NO_TYPELESS_INT
+#define NO_TYPELESS_INT_PTR
+#define MAIN_RETURNS_INT
+#define NO_IMPLICIT_FUNC_PROTOTYPES
+#define NO_FLOATS
+#define NO_WCHAR
+#define NO_EMPTY_FUNC_ARGS
+#define NO_SLOPPY_STRUCT_INIT
+#define NO_FUNCS_TAKE_STRUCTS
+#define NO_FUNCS_RETURN_STRUCTS
+#define CAST_STRUCT_PTR
+#define NO_TYPELESS_STRUCT_PTR
+#define NO_IMPLICIT_FUNCPTR_CONV
+#define SIZEOF_INT_16BIT
+#define SIZEOF_LONG_32BIT
+#define UNSIGNED_CHARS
+#define UNSIGNED_BITFIELDS
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+#include <stdio.h>
+
signed char c;
signed short s;
signed int i;
+++ /dev/null
-/*
- !!DESCRIPTION!! bitfield test
- !!ORIGIN!! LCC 4.1 Testsuite
- !!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#ifdef NO_BITFIELDS
-
-main()
-{
- printf("NO_BITFIELDS\n\r");
-}
-
-#else
-
-#ifdef SIZEOF_INT_16BIT
-
-#ifdef REFCC
-#include <stdint.h>
-struct foo {
- int16_t a;
- char b;
- int16_t x : 12, y : 4;
- int16_t zz : 1, : 0, : 4, z : 3;
- char c;
-} x = { 1, 2, 3, 4, 5, 6 };
-
-struct baz { uint16_t a:2, b:4, c:16;} y = { 7, 8, 9};
-int16_t i = 8;
-
-#else
-
-struct foo {
- int a;
- char b;
- int x : 12, y : 4;
- int zz : 1, : 0, : 4, z : 3;
- char c;
-} x = { 1, 2, 3, 4, 5, 6 };
-
-struct baz { unsigned int a:2, b:4, c:16;} y = { 7, 8, 9};
-int i = 8;
-#endif
-
-#else
-struct foo {
- int a;
- char b;
- int x : 12, y : 4, : 0, : 4, z : 3;
- char c;
-} x = { 1, 2, 3, 4, 5, 6 };
-
-struct baz { unsigned int a:2, b:4, c:32;} y = { 7, 8, 9};
-int i = 16;
-#endif
-
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-f1(struct baz *p);
-f2(struct baz *p);
-#endif
-
-main()
-{
- printf("x = %d b:%d %d %d %d c:%d\n", x.a, x.b, x.x, x.y, x.z, x.c);
- printf("y = %d b:%d c:%d\n", y.a, y.b, y.c);
- x.y = i;
- x.z = 070;
- printf("x = %d b:%d %d %d %d c:%d\n", x.a, x.b, x.x, x.y, x.z, x.c);
- y.a = 2;
- y.c = i;
- printf("y = %d b:%d c:%d\n", y.a, y.b, y.c);
-#ifdef CAST_STRUCT_PTR
- f2((struct baz *)&x);
-#else
- f2(&x);
-#endif
- return 0;
-}
-
-f1(struct baz *p) {
- p->a = p->b = 0;
- if (p->b)
- printf("p->b != 0!\n");
- p->a = 0x3; p->b = 0xf;
- printf("p->a = 0x%x, p->b = 0x%x\n", p->a, p->b);
-}
-f2(struct baz *p) {
- p->a = (i==0);
- p->b = (f1(p),0);
-}
-
-#endif
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC\r
*/\r
\r
+#include "common.h"\r
/* todo: add back conditional stuff here ! */\r
\r
typedef struct { int codes[3]; char name[6]; } Word;\r
\r
-#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
-
+#ifdef NO_IMPLICIT_FUNC_PROTOTYPES\r
+\r
#ifdef NO_OLD_FUNC_DECL\r
f();\r
void g(Word *p);\r
\r
/*int x[][5] = { 1, 2, 3, 4, 0, { 5, 6 }, { 7 } };*/\r
int x[][5] = { {1, 2, 3, 4, 0 }, { 5, 6 }, { 7 } };\r
-int *y[] = { x[0], x[1], x[2], 0 };
-
+int *y[] = { x[0], x[1], x[2], 0 };\r
+\r
main()\r
{\r
int i, j;\r
+++ /dev/null
-/*
- !!DESCRIPTION!! display type limits
- !!ORIGIN!! LCC 4.1 Testsuite
- !!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
-*/
-
-#include <stdio.h>
-#include <limits.h>
-
-#define SSHRT_MAX SHRT_MAX
-#define SINT_MAX INT_MAX
-#define SLONG_MAX LONG_MAX
-
-#define UCHAR_MIN 0
-#define USHRT_MIN 0
-#define SSHRT_MIN SHRT_MIN
-#define UINT_MIN 0
-#define SINT_MIN INT_MIN
-#define ULONG_MIN 0l
-#define SLONG_MIN LONG_MIN
-
-int main(void) {
- printf("CHAR_MAX: 0x%08x=%d\n", CHAR_MAX, CHAR_MAX);
- printf("UCHAR_MAX: 0x%08x=%d\n", UCHAR_MAX, UCHAR_MAX);
- printf("SCHAR_MAX: 0x%08x=%d\n", SCHAR_MAX, SCHAR_MAX);
-
- printf("SHRT_MAX: 0x%08x=%d\n", SHRT_MAX, SHRT_MAX);
- printf("USHRT_MAX: 0x%08x=%d\n", USHRT_MAX, USHRT_MAX);
- printf("SSHRT_MAX: 0x%08x=%d\n", SSHRT_MAX, SSHRT_MAX);
-
- printf("INT_MAX: 0x%08x=%d\n", INT_MAX, INT_MAX);
- printf("UINT_MAX: 0x%08x=%d\n", UINT_MAX, UINT_MAX);
- printf("SINT_MAX: 0x%08x=%d\n", SINT_MAX, SINT_MAX);
-
- printf("LONG_MAX: 0x%08lx=%ld\n", LONG_MAX, LONG_MAX);
- printf("ULONG_MAX: 0x%08lx=%ld\n", ULONG_MAX, ULONG_MAX);
- printf("SLONG_MAX: 0x%08lx=%ld\n", SLONG_MAX, SLONG_MAX);
-
- printf("CHAR_MIN: 0x%08x=%d\n", CHAR_MIN, CHAR_MIN);
- printf("UCHAR_MIN: 0x%08x=%d\n", UCHAR_MIN, UCHAR_MIN);
- printf("SCHAR_MIN: 0x%08x=%d\n", SCHAR_MIN, SCHAR_MIN);
-
- printf("SHRT_MIN: 0x%08x=%d\n", SHRT_MIN, SHRT_MIN);
- printf("USHRT_MIN: 0x%08x=%d\n", USHRT_MIN, USHRT_MIN);
- printf("SSHRT_MIN: 0x%08x=%d\n", SSHRT_MIN, SSHRT_MIN);
-
- printf("INT_MIN: 0x%08x=%d\n", INT_MIN, INT_MIN);
- printf("UINT_MIN: 0x%08x=%d\n", UINT_MIN, UINT_MIN);
- printf("SINT_MIN: 0x%08x=%d\n", SINT_MIN, SINT_MIN);
-
- printf("LONG_MIN: 0x%08lx=%ld\n", LONG_MIN, LONG_MIN);
- printf("ULONG_MIN: 0x%08lx=%ld\n", ULONG_MIN, ULONG_MIN);
- printf("SLONG_MIN: 0x%08lx=%ld\n", SLONG_MIN, SLONG_MIN);
-
- return 0;
-}
!!AUTHOR!! Groepaz/Hitmen
*/
+#include <stdio.h>
+
int main(void)
{
#if 1
!!LICENCE!! GPL (?), read COPYING.GPL
*/
+#include "common.h"
+
/*
* Sample OTCC C example. You can uncomment the first line and install
* otcc in /usr/local/bin to make otcc scripts !
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
#ifdef NO_FLOATS
main()
{
printf("NO_FLOATS\n\r");
+ return 0;
}
#else
!!LICENCE!! public domain\r
*/\r
\r
+#include "common.h"\r
#include <stdio.h>\r
\r
/*\r
cc65 seems to have problems here aswell ;/\r
*/\r
\r
-int main(void) {
+int main(void) {\r
test1();\r
test2();\r
test30();\r
test31();\r
/* test32(); */\r
- return 0;
+ return 0;\r
}\r
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
#include <stdio.h>
int main(void)
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
#include <stdarg.h>
#ifndef NO_FUNCS_TAKE_STRUCTS
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
typedef struct point { int x,y; } point;
typedef struct rect { point pt1, pt2; } rect;
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
#include <limits.h>
#ifdef NO_IMPLICIT_FUNC_PROTOTYPES
#define MAXWORDS 250
+FILE *in;
+#define getchar() fgetc(in)
+
struct node
{
int count; /* frequency count */
struct node *root;
char word[20];
+ in = fopen("wf1.in","rb");
+ if (in == NULL) {
+ return EXIT_FAILURE;
+ }
+
root = 0;
next = 0;
while (getword(word))
lookup(word, &root)->count++;
tprint(root);
+ fclose(in);
return 0;
}
--- /dev/null
+The sky above the port was the color of television, tuned
+to a dead channel.
+"It's not like I'm using," Case heard someone say, as he
+shouldered his way through the crowd around the door of the
+Chat. "It's like my body's developed this massive drug deficiency."
+It was a Sprawl voice and a Sprawl joke. The Chatsubo
+was a bar for professional expatriates; you could drink there
+for a week and never hear two words in Japanese.
+Ratz was tending bar, his prosthetic arm jerking monotonously
+as he filled a tray of glasses with draft Kirin. He saw
+Case and smiled, his teeth a web work of East European steel
+and brown decay. Case found a place at the bar, between the
+unlikely tan on one of Lonny Zone's whores and the crisp naval
+uniform of a tall African whose cheekbones were ridged with
+Joe boys," Ratz said, shoving a draft across the bar with his
+good hand. "Maybe some business with you, Case?"
+Case shrugged. The girl to his right giggled and nudged
/*#define STANDALONE*/
+#include "common.h"
+
#ifndef YACCDBG
#include <stdio.h>
#endif
+FILE *infile, *outfile;
+#define getchar() fgetc(infile)
+
/* hack the original tables to work with both petscii and ascii */
#define CHARSETHACK
extern char *yysptr, yysbuf[];
int yytchar;
-/*FILE *yyin ={stdin}, *yyout ={stdout};*/
#define yyin infile
#define yyout outfile
main()
{
printf("main start\n");
+ infile = fopen("yacc.in","rb");
+ if (infile == NULL) {
+ return EXIT_FAILURE;
+ }
+ outfile = stdout;
yyparse();
+ fclose(infile);
printf("main end\n");
return 0;
}
--- /dev/null
+x=(e+1)*3/(3+7)
+
+
!!AUTHOR!! Groepaz/Hitmen
*/
+#include <stdio.h>
+
# define YYTYPE char
struct yywork
{
--- /dev/null
+
+# makefile for the regression tests that return an error code on failure
+
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
+
+CC65FLAGS = -t sim6502
+SIM65FLAGS = -x 200000000
+
+CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65)
+SIM65 := $(if $(wildcard ../../bin/sim65*),../../bin/sim65,sim65)
+
+ifdef CMD_EXE
+RM := del /f
+else
+RM := rm -f
+endif
+
+WORKDIR := ./../../testwrk
+
+.PHONY: all clean
+
+SOURCES := $(wildcard *.c)
+TESTS := $(SOURCES:%.c=$(WORKDIR)/%.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.o.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.os.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.osir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oi.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oir.prg)
+TESTS += $(SOURCES:%.c=$(WORKDIR)/%.or.prg)
+
+all: $(TESTS)
+
+$(WORKDIR)/%.prg: %.c
+ $(CL65) $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+$(WORKDIR)/%.o.prg: %.c
+ $(CL65) -O $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+$(WORKDIR)/%.os.prg: %.c
+ $(CL65) -Os $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+$(WORKDIR)/%.osi.prg: %.c
+ $(CL65) -Osi $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+$(WORKDIR)/%.osir.prg: %.c
+ $(CL65) -Osir $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+$(WORKDIR)/%.oi.prg: %.c
+ $(CL65) -Oi $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+$(WORKDIR)/%.oir.prg: %.c
+ $(CL65) -Oir $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+$(WORKDIR)/%.or.prg: %.c
+ $(CL65) -Or $(CC65FLAGS) $< -o $@
+ $(SIM65) $(SIM65FLAGS) $@
+
+clean:
+ @$(RM) $(TESTS)
+ @$(RM) $(SOURCES:%.c=$(WORKDIR)/%.o)
!!LICENCE!! GPL, read COPYING.GPL
*/
+#include "common.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
!!AUTHOR!! Johan Kotlinski
*/
+#include <stdio.h>
#include <assert.h>
struct {
--- /dev/null
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define NO_OLD_FUNC_DECL
+#define NO_TYPELESS_INT
+#define NO_TYPELESS_INT_PTR
+#define MAIN_RETURNS_INT
+#define NO_IMPLICIT_FUNC_PROTOTYPES
+#define NO_FLOATS
+#define NO_WCHAR
+#define NO_EMPTY_FUNC_ARGS
+#define NO_SLOPPY_STRUCT_INIT
+#define NO_FUNCS_TAKE_STRUCTS
+#define NO_FUNCS_RETURN_STRUCTS
+#define CAST_STRUCT_PTR
+#define NO_TYPELESS_STRUCT_PTR
+#define NO_IMPLICIT_FUNCPTR_CONV
+#define SIZEOF_INT_16BIT
+#define SIZEOF_LONG_32BIT
+#define UNSIGNED_CHARS
+#define UNSIGNED_BITFIELDS
unsigned char failures = 0;
unsigned char dummy = 0;
-#ifdef SUPPORT_BIT_TYPES
-bit bit0 = 0;
-#endif
int int0 = 0;
int int1 = 0;
char char0 = 0;
printf("(long0 != -1)\n");
if(long0 != -1)
{
- LOG_ERROR(1);
failures++;
}
printf("(long0 > 0)\n");
if(long0 > 0)
{
- LOG_ERROR(1);
failures++;
}
printf("(long1 < 0)\n");
if(long1 < 0)
{
- LOG_ERROR(1);
failures++;
}
/*
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
#ifndef CQ26_INCLUDED
struct defs {
int cbits; /* No. of bits per char */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
int crc; /* Cumulative return code */
char rfs[8]; /* Return from section */
-/*#include "cq26.c"*/ /* hardware check */
+#define CQ26_INCLUDED
+/*
+ section s26, which pokes around at the hardware
+ trying to figure out the characteristics of the machine that
+ it is running on, saves information that is subsequently
+ used by sections s626, s72, and s757. If this program is
+ to be broken up into smallish pieces, say for running on
+ a microcomputer, take care to see that s26 is called before
+ calling any of the latter three sections.
+*/
+
+/*
+ 2.6 Hardware Characteristics
+*/
+
+#ifndef NO_OLD_FUNC_DECL
+s26(pd0)
+struct defs *pd0;
+{
+#else
+s26(struct defs *pd0) {
+#endif
+ static char qs26[8] = "s26 ";
+ char *ps, *pt;
+ char c0, c1;
+ #ifndef NO_FLOATS
+ float temp, one, delta;
+ double tempd, oned;
+ #endif
+ static char s[] = "%3d bits in %ss.\n";
+ static char s2[] = "%e is the least number that can be added to 1. (%s).\n";
+
+ ps = qs26;
+ pt = pd0->rfs;
+
+ while(*pt++ = *ps++);
+
+ /* Here, we shake the machinery a little to see what falls
+ out. First, we find out how many bits are in a char. */
+
+ pd0->cbits = 0;
+ c0 = 0;
+ c1 = 1;
+
+ while(c0 != c1) {
+ c1 = c1<<1;
+ pd0->cbits = pd0->cbits+1;
+ }
+ /* That information lets us determine the size of everything else. */
+
+ pd0->ibits = pd0->cbits * sizeof(int);
+ pd0->sbits = pd0->cbits * sizeof(short);
+ pd0->lbits = pd0->cbits * sizeof(long);
+ pd0->ubits = pd0->cbits * sizeof(unsigned);
+ #ifndef NO_FLOATS
+ pd0->fbits = pd0->cbits * sizeof(float);
+ pd0->dbits = pd0->cbits * sizeof(double);
+ #endif
+
+ /* We have now almost reconstructed the table in section 2.6, the
+ exception being the range of the floating point hardware.
+ Now there are just so many ways to conjure up a floating point
+ representation system that it's damned near impossible to guess
+ what's going on by writing a program to interpret bit patterns.
+ Further, the information isn't all that useful, if we consider
+ the fact that machines that won't handle numbers between 10**30
+ and 10**-30 are very hard to find, and that people playing with
+ numbers outside that range have a lot more to worry about than
+ just the capacity of the characteristic.
+
+ A much more useful measure is the precision, which can be ex-
+ pressed in terms of the smallest number that can be added to
+ 1. without loss of significance. We calculate that here, for
+ float and double. */
+
+#ifndef NO_FLOATS
+ one = 1.;
+ delta = 1.;
+ temp = 0.;
+ while(temp != one) {
+ temp = one+delta;
+ delta = delta/2.;
+ }
+ pd0->fprec = delta * 4.;
+ oned = 1.;
+ delta = 1.;
+ tempd = 0.;
+ while(tempd != oned) {
+ tempd = oned+delta;
+ delta = delta/2.;
+ }
+ pd0->dprec = delta * 4.;
+#endif
+
+ /* Now, if anyone's interested, we publish the results. */
+
+#ifndef CQ26_INCLUDED
+ if(pd0->flgm != 0) {
+ printf(s,pd0->cbits,"char");
+ printf(s,pd0->ibits,"int");
+ printf(s,pd0->sbits,"short");
+ printf(s,pd0->lbits,"long");
+ printf(s,pd0->ubits,"unsigned");
+ printf(s,pd0->fbits,"float");
+ printf(s,pd0->dbits,"double");
+ #ifndef NO_FLOATS
+ printf(s2,pd0->fprec,"float");
+ printf(s2,pd0->dprec,"double");
+ #else
+ printf("NO_FLOATS\n");
+ #endif
+ }
+#endif
+ /* Since we are only exploring and perhaps reporting, but not
+ testing any features, we cannot return an error code. */
+
+ return 0;
+}
int extvar;
target = ~0U;
mask = 1;
+ printf("sizeof target: %08x pd0->cbits: %08x\n", sizeof target, pd0->cbits);
+ printf("mask: %08x target: %08x\n", mask, target);
for(j=0; j<(sizeof target)*pd0->cbits; j++){
mask = mask⌖
target = target>>1;
+ printf("mask: %08x target: %08x\n", mask, target);
}
if(mask != 1 || target != 0){
int section(int j,void* pd0){
#endif
switch(j){
- case 0: return s4(pd0);
+ case 0: return s26(pd0);
+ case 1: return s4(pd0);
}
}
-#define cq_sections 1
+#define cq_sections 2
/*
C REFERENCE MANUAL (main)
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
/*include "cq26.c"*/ /* hardware check */
struct defs {
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
!!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/
+#include "common.h"
+
struct defs {
int cbits; /* No. of bits per char */
int ibits; /* int */
+++ /dev/null
-/*
- !!DESCRIPTION!! C99 WCHAR test
- !!ORIGIN!!
- !!LICENCE!! public domain
-*/
-
-/*
- sitest -- exercise features of C99 <stdint.h> and <inttypes.h>
-
- This source code has been placed into the PUBLIC DOMAIN by its author.
-
- last edit: 1999/11/05 gwyn@arl.mil
-
- Tries to accommodate pre-C99 versions of <inttypes.h>.
-
- Takes advantage of __Q8_* symbols defined by a particular
- implementation of <stdint.h>, but doesn't require them.
-
- NOTE: This is not a thorough validation test of the facilities.
-*/
-
-#define NO_INTERNAL_WCHAR
-/*#define STANDALONE*/
-
-#include <errno.h>
-#include <limits.h> /* for CHAR_BIT */
-#include <stdio.h>
-#include <stddef.h> /* for ptrdiff_t */
-#include <stdlib.h>
-#include <string.h>
-
-#if !defined(STANDARD_C99) && !defined(STANDARD_CC65)
-
-#error "this test checks C99 features, which are not available in the selected standard."
-
-#else
-
-#ifdef NO_WCHAR
-
-#warn "this test checks C99 features, but NO_WCHAR is defined so the test will most definetly fails."
-
-#endif
-
-#include <inttypes.h> /* embeds <stdint.h> */
-
-#include <signal.h> /* for sig_atomic_t */
-
-#if defined(INTMAX_MAX) /* <inttypes.h> has C99 features */
-#include <wchar.h>
-#endif
-
-#include <inttypes.h> /* test idempotency */
-
-#ifdef STANDALONE
-
-FILE *outfile=NULL;
-#define opentest(x) outfile=stdout;
-#define closetest(x)
-
-#else
-
-#endif
-
-#if __STDC_VERSION__ >= 199901
-#ifndef __Q8_QT
-#define __Q8_QT long long
-#endif
-#endif
-
-#ifdef PRIdMAX
-#define HAVE_PRIdMAX
-#ifndef __Q8_MT
-#define __Q8_MT intmax_t
-#endif
-#else
-#ifdef PRIdLEAST64
-#ifndef __Q8_MT
-#define __Q8_MT int_least64_t
-#endif
-#define PRIdMAX PRIdLEAST64
-#else
-#ifndef __Q8_MT
-#define __Q8_MT long
-#endif
-#define PRIdMAX "ld"
-#endif
-#endif
-
-#ifdef PRIuMAX
-#define HAVE_PRIuMAX
-#define U__Q8_MT uintmax_t
-#else
-#ifdef PRIuLEAST64
-#define U__Q8_MT uint_least64_t
-#define PRIuMAX PRIuLEAST64
-#else
-#define U__Q8_MT unsigned long
-#define PRIuMAX "lu"
-#endif
-#endif
-
-#define STR_SUB(s) # s
-#define STRINGIZE(s) STR_SUB(s) /* extra level to expand argument */
-
-#if defined(SCNo32) || defined(PRIo32)
-static int32_t int32;
-#endif
-static int_least16_t intl16;
-static uint_least16_t uintl16;
-static uint_fast16_t uintf16;
-static intmax_t intmax;
-static uintmax_t uintmax;
-
-int
-main() {
- int status = 0; /* exit status to be returned */
-
-
- /* <stdint.h> features: */
-
- printf("CHAR_BIT=%u\n", (unsigned)CHAR_BIT );
- printf("sizeof(char)=%u\n", (unsigned)sizeof(char)); /* s.b. 1 */
- printf("sizeof(short)=%u\n", (unsigned)sizeof(short));
- printf("sizeof(int)=%u\n", (unsigned)sizeof(int));
- printf("sizeof(long)=%u\n", (unsigned)sizeof(long));
-#ifdef __Q8_QT
- printf("sizeof(long long)=%u\n", (unsigned)sizeof(__Q8_QT));
-#else
- printf("*** long long isn't defined ***\n");
-#endif
- printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
- printf("sizeof(ptrdiff_t)=%u\n", (unsigned)sizeof(ptrdiff_t));
- printf("sizeof(size_t)=%u\n", (unsigned)sizeof(size_t));
- printf("sizeof(sig_atomic_t)=%u\n", (unsigned)sizeof(sig_atomic_t));
- printf("sizeof(wchar_t)=%u\n", (unsigned)sizeof(wchar_t));
-#if defined(WINT_MAX) || __STDC_VERSION__ >= 199901
- printf("sizeof(wint_t)=%u\n", (unsigned)sizeof(wint_t));
-#else
- printf("*** wint_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INT8_MAX
- printf("sizeof(int8_t)=%u\n", (unsigned)sizeof(int8_t));
- printf("sizeof(uint8_t)=%u\n", (unsigned)sizeof(uint8_t));
-#endif
-#ifdef INT9_MAX
- printf("sizeof(int9_t)=%u\n", (unsigned)sizeof(int9_t));
- printf("sizeof(uint9_t)=%u\n", (unsigned)sizeof(uint9_t));
-#endif
-#ifdef INT12_MAX
- printf("sizeof(int12_t)=%u\n", (unsigned)sizeof(int12_t));
- printf("sizeof(uint12_t)=%u\n", (unsigned)sizeof(uint12_t));
-#endif
-#ifdef INT16_MAX
- printf("sizeof(int16_t)=%u\n", (unsigned)sizeof(int16_t));
- printf("sizeof(uint16_t)=%u\n", (unsigned)sizeof(uint16_t));
-#endif
-#ifdef INT18_MAX
- printf("sizeof(int18_t)=%u\n", (unsigned)sizeof(int18_t));
- printf("sizeof(uint18_t)=%u\n", (unsigned)sizeof(uint18_t));
-#endif
-#ifdef INT24_MAX
- printf("sizeof(int24_t)=%u\n", (unsigned)sizeof(int24_t));
- printf("sizeof(uint24_t)=%u\n", (unsigned)sizeof(uint24_t));
-#endif
-#ifdef INT32_MAX
- printf("sizeof(int32_t)=%u\n", (unsigned)sizeof(int32_t));
- printf("sizeof(uint32_t)=%u\n", (unsigned)sizeof(uint32_t));
-#endif
-#ifdef INT36_MAX
- printf("sizeof(int36_t)=%u\n", (unsigned)sizeof(int36_t));
- printf("sizeof(uint36_t)=%u\n", (unsigned)sizeof(uint36_t));
-#endif
-#ifdef INT40_MAX
- printf("sizeof(int40_t)=%u\n", (unsigned)sizeof(int40_t));
- printf("sizeof(uint40_t)=%u\n", (unsigned)sizeof(uint40_t));
-#endif
-#ifdef INT48_MAX
- printf("sizeof(int48_t)=%u\n", (unsigned)sizeof(int48_t));
- printf("sizeof(uint48_t)=%u\n", (unsigned)sizeof(uint48_t));
-#endif
-#ifdef INT60_MAX
- printf("sizeof(int60_t)=%u\n", (unsigned)sizeof(int60_t));
- printf("sizeof(uint60_t)=%u\n", (unsigned)sizeof(uint60_t));
-#endif
-#ifdef INT64_MAX
- printf("sizeof(int64_t)=%u\n", (unsigned)sizeof(int64_t));
- printf("sizeof(uint64_t)=%u\n", (unsigned)sizeof(uint64_t));
-#endif
-#ifdef INT72_MAX
- printf("sizeof(int72_t)=%u\n", (unsigned)sizeof(int72_t));
- printf("sizeof(uint72_t)=%u\n", (unsigned)sizeof(uint72_t));
-#endif
-#ifdef INT128_MAX
- printf("sizeof(int128_t)=%u\n", (unsigned)sizeof(int128_t));
- printf("sizeof(uint128_t)=%u\n", (unsigned)sizeof(uint128_t));
-#endif
- printf("sizeof(int_least8_t)=%u\n", (unsigned)sizeof(int_least8_t));
- printf("sizeof(uint_least8_t)=%u\n", (unsigned)sizeof(uint_least8_t));
- printf("sizeof(int_least16_t)=%u\n", (unsigned)sizeof(int_least16_t));
- printf("sizeof(uint_least16_t)=%u\n", (unsigned)sizeof(uint_least16_t));
- printf("sizeof(int_least32_t)=%u\n", (unsigned)sizeof(int_least32_t));
- printf("sizeof(uint_least32_t)=%u\n", (unsigned)sizeof(uint_least32_t));
-#ifdef INT_LEAST64_MAX
- printf("sizeof(int_least64_t)=%u\n", (unsigned)sizeof(int_least64_t));
- printf("sizeof(uint_least64_t)=%u\n", (unsigned)sizeof(uint_least64_t));
-#else
- printf("*** uint_least64_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INT_LEAST128_MAX
- printf("sizeof(int_least128_t)=%u\n", (unsigned)sizeof(int_least128_t));
- printf("sizeof(uint_least128_t)=%u\n",
- (unsigned)sizeof(uint_least128_t));
-#endif
- printf("sizeof(int_fast8_t)=%u\n", (unsigned)sizeof(int_fast8_t));
- printf("sizeof(uint_fast8_t)=%u\n", (unsigned)sizeof(uint_fast8_t));
- printf("sizeof(int_fast16_t)=%u\n", (unsigned)sizeof(int_fast16_t));
- printf("sizeof(uint_fast16_t)=%u\n", (unsigned)sizeof(uint_fast16_t));
- printf("sizeof(int_fast32_t)=%u\n", (unsigned)sizeof(int_fast32_t));
- printf("sizeof(uint_fast32_t)=%u\n", (unsigned)sizeof(uint_fast32_t));
-#ifdef INT_FAST64_MAX
- printf("sizeof(int_fast64_t)=%u\n", (unsigned)sizeof(int_fast64_t));
- printf("sizeof(uint_fast64_t)=%u\n", (unsigned)sizeof(uint_fast64_t));
-#else
- printf("*** int_fast64_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INT_FAST128_MAX
- printf("sizeof(int_fast128_t)=%u\n", (unsigned)sizeof(int_fast128_t));
- printf("sizeof(uint_fast128_t)=%u\n", (unsigned)sizeof(uint_fast128_t));
-#endif
-#if defined(INTPTR_MAX)
- printf("sizeof(intptr_t)=%u\n", (unsigned)sizeof(intptr_t));
-#if defined(UINTPTR_MAX)
- printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
-#else
- printf("*** intptr_t is defined but uintptr_t isn't ***\n");
- status = EXIT_FAILURE;
-#endif
-#elif defined(UINTPTR_MAX)
- printf("sizeof(uintptr_t)=%u\n", (unsigned)sizeof(uintptr_t));
- printf("*** uintptr_t is defined but intptr_t isn't ***\n");
- status = EXIT_FAILURE;
-#else
- printf("*** neither intptr_t nor uintptr_t is defined ***\n");
- status = EXIT_FAILURE;
-#endif
-#ifdef INTMAX_MAX
- printf("sizeof(intmax_t)=%u\n", (unsigned)sizeof(intmax_t));
- printf("sizeof(uintmax_t)=%u\n", (unsigned)sizeof(uintmax_t));
-#else
- printf("*** intmax_t isn't defined ***\n");
- status = EXIT_FAILURE;
-#endif
-
-#ifdef INT8_MAX
- printf("INT8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT8_MIN);
- printf("INT8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT8_MAX);
- printf("UINT8_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT8_MAX);
-#endif
-#ifdef INT9_MAX
- printf("INT9_MIN=%"PRIdMAX"\n", (__Q8_MT)INT9_MIN);
- printf("INT9_MAX=%"PRIdMAX"\n", (__Q8_MT)INT9_MAX);
- printf("UINT9_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT9_MAX);
-#endif
-#ifdef INT12_MAX
- printf("INT12_MIN=%"PRIdMAX"\n", (__Q8_MT)INT12_MIN);
- printf("INT12_MAX=%"PRIdMAX"\n", (__Q8_MT)INT12_MAX);
- printf("UINT12_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT12_MAX);
-#endif
-#ifdef INT16_MAX
- printf("INT16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT16_MIN);
- printf("INT16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT16_MAX);
- printf("UINT16_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT16_MAX);
-#endif
-#ifdef INT18_MAX
- printf("INT18_MIN=%"PRIdMAX"\n", (__Q8_MT)INT18_MIN);
- printf("INT18_MAX=%"PRIdMAX"\n", (__Q8_MT)INT18_MAX);
- printf("UINT18_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT18_MAX);
-#endif
-#ifdef INT24_MAX
- printf("INT24_MIN=%"PRIdMAX"\n", (__Q8_MT)INT24_MIN);
- printf("INT24_MAX=%"PRIdMAX"\n", (__Q8_MT)INT24_MAX);
- printf("UINT24_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT24_MAX);
-#endif
-#ifdef INT32_MAX
- printf("INT32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT32_MIN);
- printf("INT32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT32_MAX);
- printf("UINT32_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT32_MAX);
-#endif
-#ifdef INT36_MAX
- printf("INT36_MIN=%"PRIdMAX"\n", (__Q8_MT)INT36_MIN);
- printf("INT36_MAX=%"PRIdMAX"\n", (__Q8_MT)INT36_MAX);
- printf("UINT36_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT36_MAX);
-#endif
-#ifdef INT40_MAX
- printf("INT40_MIN=%"PRIdMAX"\n", (__Q8_MT)INT40_MIN);
- printf("INT40_MAX=%"PRIdMAX"\n", (__Q8_MT)INT40_MAX);
- printf("UINT40_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT40_MAX);
-#endif
-#ifdef INT48_MAX
- printf("INT48_MIN=%"PRIdMAX"\n", (__Q8_MT)INT48_MIN);
- printf("INT48_MAX=%"PRIdMAX"\n", (__Q8_MT)INT48_MAX);
- printf("UINT48_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT48_MAX);
-#endif
-#ifdef INT60_MAX
- printf("INT60_MIN=%"PRIdMAX"\n", (__Q8_MT)INT60_MIN);
- printf("INT60_MAX=%"PRIdMAX"\n", (__Q8_MT)INT60_MAX);
- printf("UINT60_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT60_MAX);
-#endif
-#ifdef INT64_MAX
- printf("INT64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT64_MIN);
- printf("INT64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT64_MAX);
- printf("UINT64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT64_MAX);
-#endif
-#ifdef INT72_MAX
- printf("INT72_MIN=%"PRIdMAX"\n", (__Q8_MT)INT72_MIN);
- printf("INT72_MAX=%"PRIdMAX"\n", (__Q8_MT)INT72_MAX);
- printf("UINT72_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT72_MAX);
-#endif
-#ifdef INT128_MAX
- printf("INT128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT128_MIN);
- printf("INT128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT128_MAX);
- printf("UINT128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT128_MAX);
-#endif
- printf("INT_LEAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MIN);
- printf("INT_LEAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST8_MAX);
- printf("UINT_LEAST8_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_LEAST8_MAX);
- printf("INT_LEAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MIN);
- printf("INT_LEAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST16_MAX);
- printf("UINT_LEAST16_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_LEAST16_MAX);
- printf("INT_LEAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MIN);
- printf("INT_LEAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST32_MAX);
- printf("UINT_LEAST32_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_LEAST32_MAX);
-#ifdef INT_LEAST64_MAX
- printf("INT_LEAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MIN);
- printf("INT_LEAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST64_MAX);
- printf("UINT_LEAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST64_MAX);
-#endif
-#ifdef INT_LEAST128_MAX
- printf("INT_LEAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MIN);
- printf("INT_LEAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_LEAST128_MAX);
- printf("UINT_LEAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_LEAST128_MAX);
-#endif
- printf("INT_FAST8_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MIN);
- printf("INT_FAST8_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST8_MAX);
- printf("UINT_FAST8_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_FAST8_MAX);
- printf("INT_FAST16_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MIN);
- printf("INT_FAST16_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST16_MAX);
- printf("UINT_FAST16_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_FAST16_MAX);
- printf("INT_FAST32_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MIN);
- printf("INT_FAST32_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST32_MAX);
- printf("UINT_FAST32_MAX=%"PRIuMAX"\n",
- (U__Q8_MT)UINT_FAST32_MAX);
-#ifdef INT_FAST64_MAX
- printf("INT_FAST64_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MIN);
- printf("INT_FAST64_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST64_MAX);
- printf("UINT_FAST64_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST64_MAX);
-#endif
-#ifdef INT_FAST128_MAX
- printf("INT_FAST128_MIN=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MIN);
- printf("INT_FAST128_MAX=%"PRIdMAX"\n", (__Q8_MT)INT_FAST128_MAX);
- printf("UINT_FAST128_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINT_FAST128_MAX);
-#endif
-#ifdef INTPTR_MAX
- printf("INTPTR_MIN=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MIN);
- printf("INTPTR_MAX=%"PRIdMAX"\n", (__Q8_MT)INTPTR_MAX);
-#endif
-#ifdef UINTPTR_MAX
- printf("UINTPTR_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTPTR_MAX);
-#endif
-#ifdef INTMAX_MAX
- printf("INTMAX_MIN=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MIN);
- printf("INTMAX_MAX=%"PRIdMAX"\n", (__Q8_MT)INTMAX_MAX);
- printf("UINTMAX_MAX=%"PRIuMAX"\n", (U__Q8_MT)UINTMAX_MAX);
-#endif
-#ifdef PTRDIFF_MAX
- printf("PTRDIFF_MIN=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MIN);
- printf("PTRDIFF_MAX=%"PRIdMAX"\n", (__Q8_MT)PTRDIFF_MAX);
-#endif
-#ifdef SIG_ATOMIC_MAX
-#if SIG_ATOMIC_MIN < 0
- printf("SIG_ATOMIC_MIN=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MIN);
- printf("SIG_ATOMIC_MAX=%"PRIdMAX"\n", (__Q8_MT)SIG_ATOMIC_MAX);
-#else
- printf("SIG_ATOMIC_MIN=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MIN);
- printf("SIG_ATOMIC_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIG_ATOMIC_MAX);
-#endif
-#endif
-#ifdef SIZE_MAX
- printf("SIZE_MAX=%"PRIuMAX"\n", (U__Q8_MT)SIZE_MAX);
-#endif
-
-#ifdef WCHAR_MAX
-#if WCHAR_MIN < 0
- printf("WCHAR_MIN=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MIN);
- printf("WCHAR_MAX=%"PRIdMAX"\n", (__Q8_MT)WCHAR_MAX);
-#else
- printf("WCHAR_MIN=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MIN);
- printf("WCHAR_MAX=%"PRIuMAX"\n", (U__Q8_MT)WCHAR_MAX);
-#endif
-#endif
-#ifdef WINT_MAX
-#if WINT_MIN < 0
- printf("WINT_MIN=%"PRIdMAX"\n", (__Q8_MT)WINT_MIN);
- printf("WINT_MAX=%"PRIdMAX"\n", (__Q8_MT)WINT_MAX);
-#else
- printf("WINT_MIN=%"PRIuMAX"\n", (U__Q8_MT)WINT_MIN);
- printf("WINT_MAX=%"PRIuMAX"\n", (U__Q8_MT)WINT_MAX);
-#endif
-#endif
-
- /*
- 7.18.4 Macros for integer constants
- */
-
- /* INTn_C for n=8 and 16 were at one point unimplementable
- on most platforms, so they're treated as "optional": */
-#ifdef INT8_C
- if ( INT8_C(-123) != -123 )
- printf("*** INT8_C(-123) produced %"PRIdMAX" ***\n",
- (__Q8_MT)INT8_C(-123)
- );
- if ( UINT8_C(123) != 123 )
- printf("*** UINT8_C(123) produced %"PRIuMAX" ***\n",
- (U__Q8_MT)UINT8_C(123)
- );
-#endif
-#ifdef INT16_C
- if ( INT16_C(-12345) != -12345 )
- printf("*** INT16_C(-12345) produced %"PRIdMAX" ***\n",
- (__Q8_MT)INT16_C(-12345)
- );
- if ( UINT16_C(12345) != 12345 )
- printf("*** UINT16_C(12345) produced %"PRIuMAX" ***\n",
- (U__Q8_MT)UINT16_C(12345)
- );
-#endif
- if ( INT32_C(-123456789) != -123456789 )
- printf("*** INT32_C(-123456789) produced %"PRIdMAX" ***\n",
- (__Q8_MT)INT32_C(-123456789)
- );
- if ( UINT32_C(123456789) != 123456789 )
- printf("*** UINT32_C(123456789) produced %"PRIuMAX" ***\n",
- (U__Q8_MT)UINT32_C(123456789)
- );
-#ifdef INT_LEAST64_MAX
- if ( INT64_C(-1234567890123456789) != -1234567890123456789 )
- printf("*** INT64_C(-1234567890123456789) produced %"PRIdMAX
- " ***\n",
- (__Q8_MT)INT64_C(-1234567890123456789)
- );
- if ( UINT64_C(1234567890123456789) != 1234567890123456789 )
- printf("*** UINT64_C(1234567890123456789) produced %"PRIuMAX
- " ***\n",
- (U__Q8_MT)UINT64_C(1234567890123456789)
- );
-#endif
-#ifdef INTMAX_MAX
- if ( INTMAX_C(-1234567890123456789) != -1234567890123456789 )
- printf("*** INTMAX_C(-1234567890123456789) produced %"PRIdMAX
- " ***\n",
- (__Q8_MT)INTMAX_C(-1234567890123456789)
- );
- if ( UINTMAX_C(1234567890123456789) != 1234567890123456789 )
- printf("*** UINTMAX_C(1234567890123456789) produced %"PRIuMAX
- " ***\n",
- (U__Q8_MT)UINTMAX_C(1234567890123456789)
- );
-#endif
-
- /* <inttypes.h> features: */
-
-#if __STDC_VERSION__ >= 199901
- printf("sizeof(imaxdiv_t)=%u\n", (unsigned)sizeof(imaxdiv_t));
-#endif
-
- /*
- 7.8.1 Macros for format specifiers
- */
-
- {
- /* scanf these strings */
- static const char in_dn[] = "Z119bZ";
- static const char in_dmo[] = "Z-0119bZ";
- static const char in_dspx[] = "Z \t\n +0X119bZ";
- static const char in_dsmx[] = "Z \t\n -0x119bZ";
- static const char in_dsn[] = "Z \t\n 119bZ";
- static const char in_dp[] = "Z+119bZ";
- static const char in_dpx[] = "Z+0X119bz";
-
- /* sprintf into this */
- static char buffer[1024];
-
-#if 1
-
-#define SCAN(buf,fs,var,exp) if ( sscanf(buf, "Z%" fs, &var) != 1 ) \
- { \
- printf("***%s=",fs, STR_SUB(fs) \
- " failed ***\n" \
- ); \
- status = EXIT_FAILURE; \
- } \
- else if ( var != (exp) ) \
- { \
- printf("***%s=",fs, STR_SUB(fs) \
- " should be: " STR_SUB(exp) \
- ", was: %" fs " ***\n", var \
- ); \
- status = EXIT_FAILURE; \
- } \
- else /* for trailing semicolon */
-
-#define PRINT(fs,var,exp) if ( sprintf(buffer, "%" fs, var ) <= 0 ) \
- { \
- printf("***%s=",fs, STR_SUB(fs) \
- " failed ***\n" \
- ); \
- status = EXIT_FAILURE; \
- } \
- else if ( strcmp(buffer, STR_SUB(exp)) != 0 ) \
- { \
- printf("***%s=",fs, STR_SUB(fs) \
- " should be: " STR_SUB(exp) \
- ", was: %s ***\n", buffer \
- ); \
- status = EXIT_FAILURE; \
- } \
- else /* for trailing semicolon */
-
-#else
-
-#define SCAN(buf,fs,var,exp)
-#define PRINT(fs,var,exp)
-
-#endif
-
-#ifdef SCNo32
-
- SCAN(in_dn, SCNo32, int32, 9);
-
-#endif
-#ifdef PRIo32
- PRINT(PRIo32, int32, 11);
-#endif
- SCAN(in_dmo, SCNiLEAST16, intl16, -9);
- SCAN(in_dspx, SCNdLEAST16, intl16, 0);
- SCAN(in_dsmx, SCNiLEAST16, intl16, -4507);
- PRINT(PRIdLEAST16, intl16, -4507);
- PRINT(PRIiLEAST16, intl16, -4507);
- SCAN(in_dsn, SCNxLEAST16, uintl16, 4507);
- PRINT(PRIoLEAST16, uintl16, 10633);
- PRINT(PRIuLEAST16, uintl16, 4507);
- PRINT(PRIxLEAST16, uintl16, 119b);
- PRINT(PRIXLEAST16, uintl16, 119B);
- SCAN(in_dp, SCNxFAST16, uintf16, 4507);
- PRINT(PRIxFAST16, uintf16, 119b);
-#ifdef SCNdMAX
- SCAN(in_dp, SCNdMAX, intmax, 119);
-#endif
-#ifdef PRIiMAX
- PRINT(PRIiMAX, intmax, 119);
-#endif
-#ifdef SCNoMAX
- SCAN(in_dpx, SCNoMAX, uintmax, 0);
-#endif
-#ifdef PRIxMAX
- PRINT(PRIxMAX, uintmax, 0);
-#endif
- /* Obviously there should be a much larger battery of such tests. */
- }
-
-#if defined(INTMAX_MAX) /* <inttypes.h> has C99 features */
- /*
- 7.8.2 Functions for greatest-width integer types
- */
-
- {
- static struct
- {
- intmax_t input;
- intmax_t expect;
- } abs_data[] =
- {
-#ifdef INT8_MAX
- { INT8_MAX, INT8_MAX, },
- { -INT8_MAX, INT8_MAX, },
- { UINT8_MAX, UINT8_MAX, },
-#endif
-
-#if 0
-
-#ifdef INT16_MAX
- { INT16_MAX, INT16_MAX, },
- { -INT16_MAX, INT16_MAX, },
- { UINT16_MAX, UINT16_MAX, },
-#endif
-#ifdef INT32_MAX
- { INT32_MAX, INT32_MAX, },
- { -INT32_MAX, INT32_MAX, },
-#ifdef INT_LEAST64_MAX /* else might support only 32 bits */
- { UINT32_MAX, UINT32_MAX, },
-#endif
-#endif
-#ifdef INT64_MAX
- { INT64_MAX, INT64_MAX, },
- { -INT64_MAX, INT64_MAX, },
-#endif
- { INT_LEAST8_MAX, INT_LEAST8_MAX, },
- { -INT_LEAST8_MAX, INT_LEAST8_MAX, },
- { UINT_LEAST8_MAX, UINT_LEAST8_MAX, },
- { INT_LEAST16_MAX, INT_LEAST16_MAX, },
- { -INT_LEAST16_MAX, INT_LEAST16_MAX, },
- { UINT_LEAST16_MAX, UINT_LEAST16_MAX, },
- { INT_LEAST32_MAX, INT_LEAST32_MAX, },
- { -INT_LEAST32_MAX, INT_LEAST32_MAX, },
-#ifdef INT_LEAST64_MAX
- { UINT_LEAST32_MAX, UINT_LEAST32_MAX, },
- { INT_LEAST64_MAX, INT_LEAST64_MAX, },
- { -INT_LEAST64_MAX, INT_LEAST64_MAX, },
-#endif
- { INT_FAST8_MAX, INT_FAST8_MAX, },
- { -INT_FAST8_MAX, INT_FAST8_MAX, },
- { UINT_FAST8_MAX, UINT_FAST8_MAX, },
- { INT_FAST16_MAX, INT_FAST16_MAX, },
- { -INT_FAST16_MAX, INT_FAST16_MAX, },
- { UINT_FAST16_MAX, UINT_FAST16_MAX, },
- { INT_FAST32_MAX, INT_FAST32_MAX, },
- { -INT_FAST32_MAX, INT_FAST32_MAX, },
-#ifdef INT_FAST64_MAX
- { UINT_FAST32_MAX, UINT_FAST32_MAX, },
- { INT_FAST64_MAX, INT_FAST64_MAX, },
- { -INT_FAST64_MAX, INT_FAST64_MAX, },
-#endif
-#ifdef INTPTR_MAX
- { INTPTR_MAX, INTPTR_MAX, },
- { -INTPTR_MAX, INTPTR_MAX, },
-#endif
-#ifdef UINTPTR_MAX
- { UINTPTR_MAX, UINTPTR_MAX, },
-#endif
- { INTMAX_MAX, INTMAX_MAX, },
-#ifdef PTRDIFF_MAX
- { PTRDIFF_MAX, PTRDIFF_MAX, },
-#endif
-#ifdef SIG_ATOMIC_MAX
- { SIG_ATOMIC_MAX, SIG_ATOMIC_MAX, },
-#if SIG_ATOMIC_MIN < 0
- { -SIG_ATOMIC_MAX, SIG_ATOMIC_MAX, },
-#endif
-#endif
-#ifdef SIZE_MAX
- { SIZE_MAX, SIZE_MAX, },
-#endif
-#ifdef WCHAR_MAX
- { WCHAR_MAX, WCHAR_MAX, },
-#if WCHAR_MIN < 0
- { -WCHAR_MAX, WCHAR_MAX, },
-#endif
-#endif
-#ifdef WINT_MAX
- { WINT_MAX, WINT_MAX, },
-#if WINT_MIN < 0
- { -WINT_MAX, WINT_MAX, },
-#endif
-#endif
- { 127, 127, },
- { -127, 127, },
- { 128, 128, },
- { -127-1, 128, },
- { 255, 255, },
- { -256+1, 255, },
- { 256, 256, },
- { -256, 256, },
- { 32767, 32767, },
- { -32767, 32767, },
- { 32768, 32768, },
- { -32767-1, 32768, },
- { 65535, 65535, },
- { -65536+1, 65535, },
- { 65536, 65536, },
- { -65536, 65536, },
- { 2147483647, 2147483647, },
- { -2147483647, 2147483647, },
- { 2147483648, 2147483648, },
- { -2147483647-1, 2147483648, },
-#ifdef INT_LEAST64_MAX /* else might support only 32 bits */
- { 4294967295, 4294967295, },
- { -4294967296+1, 4294967295, },
- { 4294967296, 4294967296, },
- { -4294967296, 4294967296, },
- { 9223372036854775807, 9223372036854775807, },
- { -9223372036854775807, 9223372036854775807, },
- { 1234567890123456789, 1234567890123456789, },
- { -1234567890123456789, 1234567890123456789, },
-#endif
- { 1, 1, },
- { -1, 1, },
- { 2, 2, },
- { -2, 2, },
- { 10, 10, },
- { -10, 10, },
- { 16, 16, },
- { -16, 16, },
-#endif
- /* Other test cases can be added here. */
- { 0, 0 /* terminates the list */ },
- }, *adp = abs_data;
-
- do {
- if ( (intmax = imaxabs(adp->input)) != adp->expect )
- {
- printf("*** imaxabs(%"PRIdMAX") failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n",
- adp->input, adp->expect, intmax
- );
- status = EXIT_FAILURE;
- }
-// } while ( adp++->input != 0 );
- } while ( (adp++)->input != 0 );
- }
-
- {
- imaxdiv_t result;
- static struct
- {
- intmax_t numer;
- intmax_t denom;
- intmax_t exp_quot;
- intmax_t exp_rem;
- } div_data[] =
- {
- { 0, 1, 0, 0, },
-#if 0
- { 0, -1, 0, 0, },
- { 0, 2, 0, 0, },
- { 0, -2, 0, 0, },
- { 0, 5, 0, 0, },
- { 0, -5, 0, 0, },
- { 1, 1, 1, 0, },
- { 1, -1, -1, 0, },
- { 1, 2, 0, 1, },
- { 1, -2, 0, 1, },
- { 1, 5, 0, 1, },
- { 1, -5, 0, 1, },
- { -1, 1, -1, 0, },
- { -1, -1, 1, 0, },
- { -1, 2, 0, -1, },
- { -1, -2, 0, -1, },
- { -1, 5, 0, -1, },
- { -1, -5, 0, -1, },
- { 2, 1, 2, 0, },
- { 2, -1, -2, 0, },
- { 2, 2, 1, 0, },
- { 2, -2, -1, 0, },
- { 2, 5, 0, 2, },
- { 2, -5, 0, 2, },
- { -2, 1, -2, 0, },
- { -2, -1, 2, 0, },
- { -2, 2, -1, 0, },
- { -2, -2, 1, 0, },
- { -2, 5, 0, -2, },
- { -2, -5, 0, -2, },
- { 17, 5, 3, 2, },
- { -17, -5, 3, -2, },
- { 17, -5, -3, 2, },
- { -17, 5, -3, -2, },
- { 2147483647, 1, 2147483647, 0, },
- { -2147483647, 1, -2147483647, 0, },
- { 2147483648, 1, 2147483648, 0, },
- { -2147483647-1, 1, -2147483647-1, 0, },
- { 2147483647, 2, 1073741823, 1, },
- { -2147483647, 2, -1073741823, -1, },
- { 2147483648, 2, 1073741824, 0, },
- { -2147483647-1, 2, -1073741824, 0, },
-#ifdef INT_LEAST64_MAX /* else might support only 32 bits */
- { 4294967295, 1, 4294967295, 0, },
- { -4294967296+1, 1, -4294967296+1, 0, },
- { 4294967296, 1, 4294967296, 0, },
- { -4294967296, 1, -4294967296, 0, },
- { 4294967295, -1, -4294967296+1, 0, },
- { -4294967296+1, -1, 4294967295, 0, },
- { 4294967296, -1, -4294967296, 0, },
- { -4294967296, -1, 4294967296, 0, },
- { 4294967295, 2, 2147483647, 1, },
- { -4294967296+1, 2, -2147483647, -1, },
- { 4294967296, 2, 2147483648, 0, },
- { -4294967296, 2, -2147483647-1, 0, },
- { 4294967295, 2147483647, 2, 1, },
- { -4294967296+1, 2147483647, -2, -1, },
- { 4294967296, 2147483647, 2, 2, },
- { -4294967296, 2147483647, -2, -2, },
- { 4294967295, -2147483647, -2, 1, },
- { -4294967296+1, -2147483647, 2, -1, },
- { 4294967296, -2147483647, -2, 2, },
- { -4294967296, -2147483647, 2, -2, },
- { 4294967295, 2147483648, 1, 2147483647, },
- { -4294967296+1, 2147483648, -1, -2147483647, },
- { 4294967296, 2147483648, 2, 0, },
- { -4294967296, 2147483648, -2, 0, },
- { 4294967295, -2147483647-1, -1, 2147483647, },
- { -4294967296+1, -2147483647-1, 1, -2147483647,},
- { 4294967296, -2147483647-1, -2, 0, },
- { -4294967296, -2147483647-1, 2, 0, },
- { 9223372036854775807, 1, 9223372036854775807, 0, },
- { -9223372036854775807, 1, -9223372036854775807, 0, },
- { 9223372036854775807, 2, 4611686018427387903, 1, },
- { -9223372036854775807, 2, -4611686018427387903, -1, },
-#endif
-#endif
- /* There should be a much larger battery of such tests. */
- { 0, 0, 0, 0 }, /* 0 denom terminates the list */
- }, *ddp;
-
-#if 0
- for ( ddp = div_data; ddp->denom != 0; ++ddp )
- if ( (result = imaxdiv(ddp->numer, ddp->denom)).quot
- != ddp->exp_quot || result.rem != ddp->exp_rem
- ) {
-// printf("*** imaxdiv(%"PRIdMAX",%"PRIdMAX
-// ") failed; should be: (%"PRIdMAX",%"PRIdMAX
-// "), was: (%"PRIdMAX",%"PRIdMAX") ***\n",
-// ddp->numer, ddp->denom, ddp->exp_quot,
-// ddp->exp_rem, result.quot, result.rem
-// );
- printf("err:imaxdiv(%"PRIdMAX",%"PRIdMAX
- ") = (%"PRIdMAX",%"PRIdMAX
- "), is: (%"PRIdMAX",%"PRIdMAX")\n",
- ddp->numer, ddp->denom, ddp->exp_quot,
- ddp->exp_rem, result.quot, result.rem
- );
- status = EXIT_FAILURE;
- }
-#endif
- }
-
- {
- char *endptr;
- wchar_t *wendptr;
- static char saved[64]; /* holds copy of input string */
- static wchar_t wnptr[64]; /* holds wide copy of test string */
- static int warned; /* "warned for null endptr" flag */
- register int i;
- static struct
- {
- char * nptr;
- int base;
- intmax_t exp_val;
- int exp_len;
- } str_data[] =
- {
- { "", 0, 0, 0, },
- { "", 2, 0, 0, },
- { "", 8, 0, 0, },
- { "", 9, 0, 0, },
- { "", 10, 0, 0, },
- { "", 16, 0, 0, },
- { "", 36, 0, 0, },
- { "0", 0, 0, 1, },
- { "0", 2, 0, 1, },
- { "0", 8, 0, 1, },
- { "0", 9, 0, 1, },
- { "0", 10, 0, 1, },
- { "0", 16, 0, 1, },
- { "0", 36, 0, 1, },
- { "+0", 0, 0, 2, },
- { "+0", 2, 0, 2, },
- { "+0", 8, 0, 2, },
- { "+0", 9, 0, 2, },
- { "+0", 10, 0, 2, },
- { "+0", 16, 0, 2, },
- { "+0", 36, 0, 2, },
- { "-0", 0, 0, 2, },
- { "-0", 2, 0, 2, },
- { "-0", 8, 0, 2, },
- { "-0", 9, 0, 2, },
- { "-0", 10, 0, 2, },
- { "-0", 16, 0, 2, },
- { "-0", 36, 0, 2, },
- { "Inf", 0, 0, 0, },
- { "Inf", 2, 0, 0, },
- { "Inf", 8, 0, 0, },
- { "Inf", 9, 0, 0, },
- { "Inf", 10, 0, 0, },
- { "Inf", 16, 0, 0, },
- { "Inf", 36, 24171, 3, },
- { "+Inf", 0, 0, 0, },
- { "+Inf", 2, 0, 0, },
- { "+Inf", 8, 0, 0, },
- { "+Inf", 9, 0, 0, },
- { "+Inf", 10, 0, 0, },
- { "+Inf", 16, 0, 0, },
- { "+Inf", 36, 24171, 4, },
- { "-Inf", 0, 0, 0, },
- { "-Inf", 2, 0, 0, },
- { "-Inf", 8, 0, 0, },
- { "-Inf", 9, 0, 0, },
- { "-Inf", 10, 0, 0, },
- { "-Inf", 16, 0, 0, },
- { "-Inf", 36, -24171, 4, },
- { "inf", 0, 0, 0, },
- { "inf", 2, 0, 0, },
- { "inf", 8, 0, 0, },
- { "inf", 9, 0, 0, },
- { "inf", 10, 0, 0, },
- { "inf", 16, 0, 0, },
- { "inf", 36, 24171, 3, },
- { "+inf", 0, 0, 0, },
- { "+inf", 2, 0, 0, },
- { "+inf", 8, 0, 0, },
- { "+inf", 9, 0, 0, },
- { "+inf", 10, 0, 0, },
- { "+inf", 16, 0, 0, },
- { "+inf", 36, 24171, 4, },
- { "-inf", 0, 0, 0, },
- { "-inf", 2, 0, 0, },
- { "-inf", 8, 0, 0, },
- { "-inf", 9, 0, 0, },
- { "-inf", 10, 0, 0, },
- { "-inf", 16, 0, 0, },
- { "-inf", 36, -24171, 4, },
- { "119b8Z", 0, 119, 3, },
- { "119bZ", 0, 119, 3, },
- { "-0119bZ", 0, -9, 4, },
- { " \t\n 0X119bZ", 0, 4507, 10, },
- { " \t\n +0X119bZ", 0, 4507, 11, },
- { " \t\n -0x119bZ", 0, -4507, 11, },
- { " \t\n 119bZ", 0, 119, 7, },
- { "+119bZ", 0, 119, 4, },
- { "+0X119bz", 0, 4507, 7, },
- { "119b8Z", 2, 3, 2, },
- { "119bZ", 2, 3, 2, },
- { "-0119bZ", 2, -3, 4, },
- { " \t\n 0X119bZ", 2, 0, 5, },
- { " \t\n +0X119bZ", 2, 0, 6, },
- { " \t\n -0x119bZ", 2, 0, 6, },
- { " \t\n 119bZ", 2, 3, 6, },
- { "+119bZ", 2, 3, 3, },
- { "+0X119bz", 2, 0, 2, },
- { "119b8Z", 8, 9, 2, },
- { "119bZ", 8, 9, 2, },
- { "-0119bZ", 8, -9, 4, },
- { " \t\n 0X119bZ", 8, 0, 5, },
- { " \t\n +0X119bZ", 8, 0, 6, },
- { " \t\n -0x119bZ", 8, 0, 6, },
- { " \t\n 119bZ", 8, 9, 6, },
- { "+119bZ", 8, 9, 3, },
- { "+0X119bz", 8, 0, 2, },
- { "119b8Z", 9, 10, 2, },
- { "119bZ", 9, 10, 2, },
- { "-0119bZ", 9, -10, 4, },
- { " \t\n 0X119bZ", 9, 0, 5, },
- { " \t\n +0X119bZ", 9, 0, 6, },
- { " \t\n -0x119bZ", 9, 0, 6, },
- { " \t\n 119bZ", 9, 10, 6, },
- { "+119bZ", 9, 10, 3, },
- { "+0X119bz", 9, 0, 2, },
- { "119b8Z", 10, 119, 3, },
- { "119bZ", 10, 119, 3, },
- { "-0119bZ", 10, -119, 5, },
- { " \t\n 0X119bZ", 10, 0, 5, },
- { " \t\n +0X119bZ", 10, 0, 6, },
- { " \t\n -0x119bZ", 10, 0, 6, },
- { " \t\n 119bZ", 10, 119, 7, },
- { "+119bZ", 10, 119, 4, },
- { "+0X119bz", 10, 0, 2, },
- { "119b8Z", 16, 72120, 5, },
- { "119bZ", 16, 4507, 4, },
- { "-0119bZ", 16, -4507, 6, },
- { " \t\n 0X119bZ", 16, 4507, 10, },
- { " \t\n +0X119bZ", 16, 4507, 11, },
- { " \t\n -0x119bZ", 16, -4507, 11, },
- { " \t\n 119bZ", 16, 4507,8, },
- { "+119bZ", 16, 4507, 5, },
- { "+0X119bz", 16, 4507, 7, },
- { "119b8Z", 36, 62580275, 6, },
- { "119bZ", 36, 1738367, 5, },
- { "-0119bZ", 36, -1738367, 7, },
- { " \t\n 0X119bZ", 36, 1997122175, 11, },
- { " \t\n +0X119bZ", 36, 1997122175, 12, },
- { " \t\n -0x119bZ", 36, -1997122175, 12, },
- { " \t\n 119bZ", 36, 1738367, 9, },
- { "+119bZ", 36, 1738367, 6, },
- { "+0X119bz", 36, 1997122175, 8, },
- /* There should be a much larger battery of such tests. */
- { "127", 0, 127, 3, },
- { "-127", 0, -127, 4, },
- { "128", 0, 128, 3, },
- { "-128", 0, -127-1, 4, },
- { "255", 0, 255, 3, },
- { "-255", 0, -255, 4, },
- { "256", 0, 256, 3, },
- { "-256", 0, -255-1, 4, },
- { "32767", 0, 32767, 5, },
- { "-32767", 0, -32767, 6, },
- { "32768", 0, 32768, 5, },
- { "-32768", 0, -32767-1, 6, },
- { "65535", 0, 65535, 5, },
- { "-65535", 0, -65536+1, 6, },
- { "65536", 0, 65536, 5, },
- { "-65536", 0, -65536, 6, },
- { "2147483647", 0, 2147483647, 10, },
- { "-2147483647", 0, -2147483647, 11, },
- { "2147483648", 0, 2147483648, 10, },
- { "-2147483648", 0, -2147483647-1, 11, },
- { "4294967295", 0, 4294967295, 10, },
- { "-4294967295", 0, -4294967296+1, 11, },
- { "4294967296", 0, 4294967296, 10, },
- { "-4294967296", 0, -4294967296, 11, },
- { "9223372036854775807", 0, 9223372036854775807, 19, },
- { "-9223372036854775807", 0, -9223372036854775807, 20, },
- { "1234567890123456789", 0, 1234567890123456789, 19, },
- { "-1234567890123456789", 0, -1234567890123456789, 20, },
- { "1", 0, 1, 1, },
- { "-1", 0, -1, 2, },
- { "2", 0, 2, 1, },
- { "-2", 0, -2, 2, },
- { "10", 0, 10, 2, },
- { "-10", 0, -10, 3, },
- { "16", 0, 16, 2, },
- { "-16", 0, -16, 3, },
- /* Other test cases can be added here. */
- { NULL, 0, 0, 0 }, /* terminates the list */
- }, *sdp;
-
- for ( sdp = str_data; sdp->nptr != NULL ; ++sdp )
- {
- /*
- 7.8.2.3 The strtoimax and strtoumax functions
- */
-
- strcpy(saved, sdp->nptr);
-
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = strtoimax(sdp->nptr, &endptr, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** strtoimax(%s,,%d) failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
- sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( endptr != sdp->nptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** strtoimax(%s,,%d) returned wrong endptr"
- " ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** strtoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- printf("*** strtoimax modified its input ***\n");
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = strtoumax(sdp->nptr, &endptr, sdp->base
- )
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** strtoumax(%s,,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( endptr != sdp->nptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** strtoumax(%s,,%d) returned wrong "
- "endptr ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** strtoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- printf("*** strtoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
- }
-
- /* tests for null endptr */
-
-#define WARN() if (!warned) warned = 1, printf("*** Using null endptr: ***\n")
-
- warned = 0;
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = strtoimax(sdp->nptr, (char **)NULL, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** strtoimax(%s,NULL,%d) failed; "
- "should be: %"PRIdMAX", was: %"PRIdMAX" ***\n",
- sdp->nptr, sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** strtoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- WARN();
- printf("*** strtoimax modified its input ***\n");
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = strtoumax(sdp->nptr, (char **)NULL,
- sdp->base
- )
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** strtoumax(%s,NULL,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** strtoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( strcmp(sdp->nptr, saved) != 0 )
- {
- WARN();
- printf("*** strtoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
- strcpy(saved, sdp->nptr);
- }
- }
-
- /*
- 7.8.2.4 The wcstoimax and wcstoumax functions
- */
-
- for ( i = 0; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
- break;
-
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = wcstoimax(wnptr, &wendptr, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** wcstoimax(%s,,%d) failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
- sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( wendptr != wnptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** wcstoimax(%s,,%d) returned wrong endptr"
- " ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** wcstoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- printf("*** wcstoimax modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i]) == '\0' )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = wcstoumax(wnptr, &wendptr, sdp->base)
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- printf("*** wcstoumax(%s,,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
- else if ( wendptr != wnptr + sdp->exp_len )
- {
- int save = errno;
-
- printf("*** wcstoumax(%s,,%d) returned wrong "
- "endptr ***\n", sdp->nptr, sdp->base
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- printf("*** wcstoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- printf("*** wcstoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i])
- == '\0'
- )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
- }
-
- /* tests for null endptr */
-
- warned = 0;
- errno = 0; /* shouldn't be changed */
-
- if ( (intmax = wcstoimax(wnptr, (wchar_t **)NULL, sdp->base))
- != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** wcstoimax(%s,NULL,%d) failed; should be: %"
- PRIdMAX", was: %"PRIdMAX" ***\n", sdp->nptr,
- sdp->base, sdp->exp_val, intmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** wcstoimax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- WARN();
- printf("*** wcstoimax modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i])
- == '\0'
- )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
-
- if ( sdp->exp_val >= 0 ) /* else some sign extension */
- {
- errno = 0; /* shouldn't be changed */
-
- if ( (uintmax = wcstoumax(wnptr, (wchar_t **)NULL,
- sdp->base
- )
- ) != sdp->exp_val
- ) {
- int save = errno;
-
- WARN();
- printf("*** wcstoumax(%s,NULL,%d) failed; "
- "should be: %"PRIuMAX", was: %"PRIuMAX
- " ***\n", sdp->nptr, sdp->base,
- sdp->exp_val, uintmax
- );
- status = EXIT_FAILURE;
- errno = save;
- }
-
- if ( errno != 0 )
- {
- WARN();
- printf("*** wcstoumax modified errno ***\n");
- status = EXIT_FAILURE;
- }
-
- for ( i = 0; i < 64; ++i )
- if ( wnptr[i] != sdp->nptr[i] )
- {
- WARN();
- printf("*** wcstoumax"
- " modified its input ***\n"
- );
- status = EXIT_FAILURE;
-
- for ( ; i < 64; ++i )
- if ( (wnptr[i] = sdp->nptr[i])
- == '\0'
- )
- break;
-
- break;
- }
- else if ( wnptr[i] == '\0' )
- break;
- }
- }
-
- /*
- 7.8.2.3 The strtoimax and strtoumax functions (continued)
- */
-
- if ( (intmax = strtoimax("1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoimax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = strtoimax("+1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoimax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = strtoimax("-1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != INTMAX_MIN || errno != ERANGE
- ) {
- printf("*** strtoimax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = strtoumax("1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoumax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = strtoumax("+1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoumax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = strtoumax("-1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890",
- &endptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** strtoumax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- /*
- 7.8.2.4 The wcstoimax and wcstoumax functions (continued)
- */
-
-#ifdef NO_INTERNAL_WCHAR
- printf("NO_INTERNAL_WCHAR\n");
-#else
-
- if ( (intmax = wcstoimax(L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoimax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = wcstoimax(L"+1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != INTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoimax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (intmax = wcstoimax(L"-1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != INTMAX_MIN || errno != ERANGE
- ) {
- printf("*** wcstoimax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = wcstoumax(L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoumax failed overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = wcstoumax(L"+1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoumax failed +overflow test ***\n");
- status = EXIT_FAILURE;
- }
-
- if ( (uintmax = wcstoumax(L"-1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890"
- L"1234567890123456789012345678901234567890",
- &wendptr, 0
- )
- ) != UINTMAX_MAX || errno != ERANGE
- ) {
- printf("*** wcstoumax failed -overflow test ***\n");
- status = EXIT_FAILURE;
- }
-#endif // NO_INTERNAL_WCHAR
- }
-#endif /* defined(INTMAX_MAX) */
-
- if ( status != 0 )
- printf("sitest failed.\n");
-
- return status;
-}
-
-#endif
\ No newline at end of file