From 221a08e7dc58d82d58d8eccf7ac8d8fd21e649c1 Mon Sep 17 00:00:00 2001 From: nilspolek Date: Sun, 28 Jan 2024 10:54:17 +0100 Subject: [PATCH] testing --- bigint/Makefile | 22 - bigint/README | 92 --- bigint/build/bin/testbip | Bin 72952 -> 0 bytes bigint/build/include/bigint.h | 60 -- bigint/build/include/support.h | 15 - bigint/build/lib/libbigint.a | Bin 27544 -> 0 bytes bigint/src/Makefile | 26 - bigint/src/bigint.c | 987 ------------------------- bigint/src/bigint.h | 60 -- bigint/src/bigint.o | Bin 27160 -> 0 bytes bigint/src/libbigint.a | Bin 27544 -> 0 bytes bigint/src/support.h | 15 - bigint/tst/Makefile | 28 - bigint/tst/support.c | 58 -- bigint/tst/support.o | Bin 3536 -> 0 bytes bigint/tst/testbip | Bin 72952 -> 0 bytes bigint/tst/testbip.c | 1253 -------------------------------- bigint/tst/testbip.o | Bin 44472 -> 0 bytes njvm.o | Bin 53680 -> 53680 bytes 19 files changed, 2616 deletions(-) delete mode 100644 bigint/Makefile delete mode 100644 bigint/README delete mode 100755 bigint/build/bin/testbip delete mode 100644 bigint/build/include/bigint.h delete mode 100644 bigint/build/include/support.h delete mode 100644 bigint/build/lib/libbigint.a delete mode 100644 bigint/src/Makefile delete mode 100644 bigint/src/bigint.c delete mode 100644 bigint/src/bigint.h delete mode 100644 bigint/src/bigint.o delete mode 100644 bigint/src/libbigint.a delete mode 100644 bigint/src/support.h delete mode 100644 bigint/tst/Makefile delete mode 100644 bigint/tst/support.c delete mode 100644 bigint/tst/support.o delete mode 100755 bigint/tst/testbip delete mode 100644 bigint/tst/testbip.c delete mode 100644 bigint/tst/testbip.o diff --git a/bigint/Makefile b/bigint/Makefile deleted file mode 100644 index 0e1dac6..0000000 --- a/bigint/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# -# Makefile for big integer library and test -# - -DIRS = src tst - -all: clean - for i in $(DIRS) ; do \ - $(MAKE) -C $$i install ; \ - done - -clean: - for i in $(DIRS) ; do \ - $(MAKE) -C $$i clean ; \ - done - rm -rf ./build - rm -f *~ - -dist: clean - (cd .. ; \ - tar -cvf bigint.tar bigint ; \ - gzip -f bigint.tar) diff --git a/bigint/README b/bigint/README deleted file mode 100644 index 0f0534d..0000000 --- a/bigint/README +++ /dev/null @@ -1,92 +0,0 @@ -The "bigint" Package -==================== - -1. What is it? --------------- - -This package implements a multiple-precision integer arithmetic package, -i.e., a collection of functions which can calculate with integers having -arbitrarily many digits. The algorithms are taken from [D. Knuth: The -Art of Computer Programming, Vol. 2, Seminumerical Algorithms], the -implementation language is C. - - -2. "Multiple Precision" - how does it work? -------------------------------------------- - -Each integer number is represented as an array of digits. The array -is large enough to hold the number of digits necessary to represent -the number. Each digit occupies a single byte, so the number base of -this representation is 256. Addition, subtraction, and multiplication -work as we all have learned it: perform the desired operation digit -by digit, starting from the least significant digit, and observing -any "carries" from one place to the next higher one. Division is a -little bit more complicated because there is a certain amount of -guesswork involved. Knuth gives a formal treatment of this guesswork. - - -3. How do I use it? -------------------- - -Because every big integer may have a differently sized array to hold -its digits, these structures are dynamically allocated on the heap of -the C runtime system, and accessed by pointers. If you want to perform -an arithmetic operation on one or two big integers, you have to load -the corresponding pointers into a structure called BIP ("Big Integer -Processor"), and call the arithmetic function. When the function has -returned, the pointer to the result of the operation can be found in -another component of the BIP. The following functions are available: - - int bigSgn(void); /* sign */ - int bigCmp(void); /* comparison */ - void bigNeg(void); /* negation */ - void bigAdd(void); /* addition */ - void bigSub(void); /* subtraction */ - void bigMul(void); /* multiplication */ - void bigDiv(void); /* division */ - void bigFromInt(int n); /* conversion int --> big */ - int bigToInt(void); /* conversion big --> int */ - void bigRead(FILE *in); /* read a big integer */ - void bigPrint(FILE *out); /* print a big integer */ - void bigDump(FILE *out, BigObjRef bigObjRef); /* dump a big integer */ - -Some of these functions accept or return ordinary integers. For the -exact definition of each function's interface, please see the comments -in the function's source. - - -4. What else is needed? ------------------------ - -The library tries to detect fatal errors in using its functions (e.g., -null pointers to operands) as well as internal errors (which "cannot -happen"). In either case a user-supplied error routine is called, which -is supposed to print an error message and then to terminate the program. - -The library does not attempt to manage memory. For this purpose, it -relies on a user-supplied function "void* newPrimObject(int dataSize)", -which should allocate sufficiently many bytes and return a pointer to -a created object. In addition, the library needs to access a data field -- that implements the size-as-needed cocept - within the created object, -to actualy manage the data structures that represent the values of the -integer number. For this, the following function can be used: - -void * getPrimObjectDataPointer(void * obj){ - ObjRef oo = ((ObjRef) (obj)); - return oo->data; -} - -This function must also be a user-supplied function that must be -implemented by the program that wants to use this library. - -For details about these three user-supplied functions take a look in -the file "support.c" in the directory "tst". - - -5. What is in the directory "tst"? ----------------------------------- - -Well, you may have guessed it already: these are test cases for the -library. You can learn how to link against the library by inspecting -the "Makefile" for the tests, and you can find a simple implementation -of the support library. diff --git a/bigint/build/bin/testbip b/bigint/build/bin/testbip deleted file mode 100755 index 02f1195ac14732a2717e31f2bb3994bf1634b85f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72952 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

ykNZTRFA>v8Df*z#@K(rk0gACaa< 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 diff --git a/bigint/build/include/bigint.h b/bigint/build/include/bigint.h deleted file mode 100644 index b93d88e..0000000 --- a/bigint/build/include/bigint.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * bigint.h -- big integer library - */ - - -#ifndef _BIGINT_H_ -#define _BIGINT_H_ - - -/* object representation */ -typedef void* BigObjRef; - - -#include - - -typedef struct { - int nd; /* number of digits; array may be bigger */ - /* nd = 0 exactly when number = 0 */ - unsigned char sign; /* one of BIG_NEGATIVE or BIG_POSITIVE */ - /* zero always has BIG_POSITIVE here */ - unsigned char digits[1]; /* the digits proper; number base is 256 */ - /* LS digit first; MS digit is not zero */ -} Big; - -#include "support.h" - - -/* big integer processor registers */ - -typedef struct { - BigObjRef op1; /* first (or single) operand */ - BigObjRef op2; /* second operand (if present) */ - BigObjRef res; /* result of operation */ - BigObjRef rem; /* remainder in case of division */ -} BIP; - -extern BIP bip; /* registers of the processor */ - - -/* big integer processor functions */ - -int bigSgn(void); /* sign */ -int bigCmp(void); /* comparison */ -void bigNeg(void); /* negation */ -void bigAdd(void); /* addition */ -void bigSub(void); /* subtraction */ -void bigMul(void); /* multiplication */ -void bigDiv(void); /* division */ - -void bigFromInt(int n); /* conversion int --> big */ -int bigToInt(void); /* conversion big --> int */ - -void bigRead(FILE *in); /* read a big integer */ -void bigPrint(FILE *out); /* print a big integer */ - -void bigDump(FILE *out, BigObjRef bigObjRef); /* dump a big integer object */ - - -#endif /* _BIGINT_H_ */ diff --git a/bigint/build/include/support.h b/bigint/build/include/support.h deleted file mode 100644 index 8e4455e..0000000 --- a/bigint/build/include/support.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * support.h -- object representation and support functions - */ - - -#ifndef _SUPPORT_H_ -#define _SUPPORT_H_ - -/* support functions */ - -void fatalError(char *msg); /* print a message and exit */ -void * newPrimObject(int dataSize); /* create a new primitive object */ -void * getPrimObjectDataPointer(void * primObject); - -#endif /* _SUPPORT_H_ */ diff --git a/bigint/build/lib/libbigint.a b/bigint/build/lib/libbigint.a deleted file mode 100644 index 01ff5790d3725a84b9548db7f9744e9635bd4f0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27544 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 diff --git a/bigint/src/Makefile b/bigint/src/Makefile deleted file mode 100644 index 6973380..0000000 --- a/bigint/src/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# -# Makefile for big integer library -# - -BUILD = ../build - -CC = gcc -CFLAGS = -g -Wall - -all: support.h bigint.h libbigint.a - -install: all - mkdir -p $(BUILD)/include - cp support.h $(BUILD)/include - cp bigint.h $(BUILD)/include - mkdir -p $(BUILD)/lib - cp libbigint.a $(BUILD)/lib - -libbigint.a: bigint.o - ar -crs libbigint.a bigint.o - -bigint.o: bigint.c bigint.h support.h - $(CC) $(CFLAGS) -o bigint.o -c bigint.c - -clean: - rm -f *~ bigint.o libbigint.a diff --git a/bigint/src/bigint.c b/bigint/src/bigint.c deleted file mode 100644 index 90aa5ab..0000000 --- a/bigint/src/bigint.c +++ /dev/null @@ -1,987 +0,0 @@ -/* - * bigint.c -- big integer library - */ - - -#include -#include - -#include "bigint.h" - -/**************************************************************/ - -/* debugging */ - - -#define DIV_CHK_01 0 -#define DIV_CHK_02 0 -#define DIV_CHK_03 0 -#define DIV_CHK_04 0 -#define DIV_CHK_05 0 -#define DIV_CHK_06 0 -#define DIV_CHK_07 0 -#define DIV_CHK_08 0 -#define DIV_CHK_09 0 -#define DIV_CHK_10 0 -#define DIV_CHK_11 0 - - -/**************************************************************/ - -/* big integer representation */ - - -#define BIG_NEGATIVE ((unsigned char) 0) -#define BIG_POSITIVE ((unsigned char) 1) - - -#define BIG_PTR(bigObjRef) ((Big *) (getPrimObjectDataPointer(bigObjRef))) -#define GET_ND(bigObjRef) (BIG_PTR(bigObjRef)->nd) -#define SET_ND(bigObjRef, val) (BIG_PTR(bigObjRef)->nd = (val)) -#define GET_SIGN(bigObjRef) (BIG_PTR(bigObjRef)->sign) -#define SET_SIGN(bigObjRef, val) (BIG_PTR(bigObjRef)->sign = (val)) -#define GET_DIGIT(bigObjRef, i) (BIG_PTR(bigObjRef)->digits[i]) -#define SET_DIGIT(bigObjRef, i, val) (BIG_PTR(bigObjRef)->digits[i] = (val)) - - -/**************************************************************/ - -/* global data */ - - -/* - * registers of the big integer processor - */ -BIP bip = { - NULL, /* op1 */ - NULL, /* op2 */ - NULL, /* res */ - NULL, /* rem */ -}; - - -/**************************************************************/ - - -/* - * construct a new big integer object - * - * number of digits is given by parameter - * a reference to a proper object is returned - * but no component of the big integer is set - * - * ATTENTION: All object references stored in - * places other than the bip registers may become - * invalid as soon as this function is called! - */ -static BigObjRef newBig(int nd) { - int dataSize; - BigObjRef bigObjRef; - - dataSize = sizeof(int) + 1 + nd; - bigObjRef = newPrimObject(dataSize); - return bigObjRef; -} - - -/**************************************************************/ - -/* big integer unsigned arithmetic */ - - -/* - * exchange bip.op1 and bip.op2 - */ -static void bigXchg(void) { - BigObjRef tmp; - - tmp = bip.op1; - bip.op1 = bip.op2; - bip.op2 = tmp; -} - - -/* - * big integer unsigned comparison - * - * operands in bip.op1 and bip.op2 - * result is < 0, = 0, or > 0 if and only if the - * same relation holds for bip.op1 and bip.op2 - */ -static int bigUcmp(void) { - int nd1; - int nd2; - int diff; - - /* compare sizes */ - nd1 = GET_ND(bip.op1); - nd2 = GET_ND(bip.op2); - if (nd1 != nd2) { - /* sizes are different: we know the bigger number */ - return nd1 - nd2; - } - /* sizes are equal: we must look at the digits */ - while (nd1--) { - diff = (int) GET_DIGIT(bip.op1, nd1) - - (int) GET_DIGIT(bip.op2, nd1); - if (diff != 0) { - return diff; - } - } - /* the numbers are equal */ - return 0; -} - - -/* - * big integer unsigned addition - * - * operands in bip.op1 and bip.op2 - * result in bip.res - */ -static void bigUadd(void) { - int nd1; - int nd2; - int i; - unsigned short carry; - unsigned short aux; - int xchgFlag; - - /* make sure op1 has at least as many digits as op2 */ - nd1 = GET_ND(bip.op1); - nd2 = GET_ND(bip.op2); - if (nd1 < nd2) { - /* exchange operands */ - bigXchg(); - i = nd1; - nd1 = nd2; - nd2 = i; - xchgFlag = 1; - } else { - /* don't exchange operands */ - xchgFlag = 0; - } - /* allocate result */ - bip.res = newBig(nd1 + 1); - /* copy op2 to result */ - for (i = 0; i < nd2; i++) { - SET_DIGIT(bip.res, i, GET_DIGIT(bip.op2, i)); - } - /* fill result with 0 up to size of op1 */ - for (; i < nd1; i++) { - SET_DIGIT(bip.res, i, 0); - } - /* res = op1 + res */ - carry = 0x00; - for (i = 0; i < nd1; i++) { - aux = (unsigned short) GET_DIGIT(bip.op1, i) + - (unsigned short) GET_DIGIT(bip.res, i) + - carry; - SET_DIGIT(bip.res, i, aux & 0xFF); - carry = aux >> 8; - } - SET_DIGIT(bip.res, i, carry); - /* determine actual size of result */ - i = nd1 + 1; - while (--i >= 0 && GET_DIGIT(bip.res, i) == 0) ; - SET_ND(bip.res, i + 1); - /* restore operands */ - if (xchgFlag) { - bigXchg(); - } -} - - -/* - * big integer unsigned subtraction - * - * operands in bip.op1 and bip.op2 - * result in bip.res, must not be negative - */ -static void bigUsub(void) { - int nd1; - int nd2; - int i; - unsigned short carry; - unsigned short aux; - - /* op1 must have at least as many digits as op2 */ - nd1 = GET_ND(bip.op1); - nd2 = GET_ND(bip.op2); - if (nd1 < nd2) { - /* unsigned subtraction would yield negative result */ - fatalError("internal library error #1 - THIS SHOULD NEVER HAPPEN!"); - } - /* allocate result */ - bip.res = newBig(nd1); - /* copy op2 to result */ - for (i = 0; i < nd2; i++) { - SET_DIGIT(bip.res, i, GET_DIGIT(bip.op2, i)); - } - /* fill result with 0 up to size of op1 */ - for (; i < nd1; i++) { - SET_DIGIT(bip.res, i, 0); - } - /* res = op1 - res */ - carry = 0x01; - for (i = 0; i < nd1; i++) { - aux = (unsigned short) GET_DIGIT(bip.op1, i) - - (unsigned short) GET_DIGIT(bip.res, i) + - carry + 0xFF; - SET_DIGIT(bip.res, i, aux & 0xFF); - carry = aux >> 8; - } - if (carry != 0x01) { - /* unsigned subtraction would yield negative result */ - fatalError("internal library error #2 - THIS SHOULD NEVER HAPPEN!"); - } - /* determine actual size of result */ - i = nd1; - while (--i >= 0 && GET_DIGIT(bip.res, i) == 0) ; - SET_ND(bip.res, i + 1); -} - - -/* - * big integer unsigned multiplication - * - * operands in bip.op1 and bip.op2 - * result in bip.res - */ -static void bigUmul(void) { - int nd1; - int nd2; - int i, j, k; - unsigned short carry; - unsigned short aux; - - /* get sizes of operands */ - nd1 = GET_ND(bip.op1); - nd2 = GET_ND(bip.op2); - /* allocate result */ - bip.res = newBig(nd1 + nd2); - /* reset lower nd1 digits of result */ - for (i = 0; i < nd1; i++) { - SET_DIGIT(bip.res, i, 0); - } - /* res = op1 * op2 */ - for (j = 0; j < nd2; j++) { - carry = 0x00; - for (k = j, i = 0; i < nd1; k++, i++) { - aux = (unsigned short) GET_DIGIT(bip.op1, i) * - (unsigned short) GET_DIGIT(bip.op2, j) + - (unsigned short) GET_DIGIT(bip.res, k) + - carry; - SET_DIGIT(bip.res, k, aux & 0xFF); - carry = aux >> 8; - } - SET_DIGIT(bip.res, k, carry); - } - /* determine actual size of result */ - i = nd1 + nd2; - while (--i >= 0 && GET_DIGIT(bip.res, i) == 0) ; - SET_ND(bip.res, i + 1); -} - - -/* - * big integer unsigned division by single digit divisor - * - * dividend in bip.rem, divisor in parameter - * quotient in bip.rem, remainder is returned - */ -static unsigned char bigUdiv1(unsigned char divisor) { - BigObjRef tmp; - int nd; - int i; - unsigned short d, r; - unsigned short aux; - - /* get size of dividend */ - nd = GET_ND(bip.rem); - /* check for division by zero */ - d = (unsigned short) divisor; - if (d == 0) { - fatalError("internal library error #3 - THIS SHOULD NEVER HAPPEN!"); - } - /* allocate result */ - tmp = newBig(nd); - /* tmp = dividend / divisor, r = dividend % divisor */ - r = 0; - for (i = nd - 1; i >= 0; i--) { - aux = (r << 8) | (unsigned short) GET_DIGIT(bip.rem, i); - SET_DIGIT(tmp, i, aux / d); - r = aux % d; - } - /* determine actual size of quotient */ - i = nd; - while (--i >= 0 && GET_DIGIT(tmp, i) == 0) ; - SET_ND(tmp, i + 1); - /* store quotient */ - bip.rem = tmp; - /* return remainder */ - return (unsigned char) r; -} - - -/* - * big integer unsigned division - * - * dividend in bip.op1, divisor in bip.op2 - * quotient in bip.res, remainder in bip.rem - */ -static void bigUdiv(void) { - BigObjRef tmp; - int nd1; - int nd2; - int nd3; - int i, j, k, l; - unsigned char r; - unsigned short scale; - unsigned short carry; - unsigned short aux; - unsigned short qhat; - unsigned short v1, v2; - unsigned short uj0, uj1, uj2, two; - - /* get sizes of operands */ - nd1 = GET_ND(bip.op1); - nd2 = GET_ND(bip.op2); - /* check for division by zero */ - if (nd2 == 0) { - fatalError("division by zero"); - } - /* check for small dividend */ - if (bigUcmp() < 0) { - /* res = 0 */ - bip.res = newBig(0); - SET_ND(bip.res, 0); - /* rem = op1; BUT THIS HAS TO BE A COPY! */ - bip.rem = newBig(nd1); - for (i = 0; i < nd1; i++) { - SET_DIGIT(bip.rem, i, GET_DIGIT(bip.op1, i)); - } - SET_ND(bip.rem, nd1); - return; - } - /* check for single digit divisor */ - if (nd2 == 1) { - /* yes - use simple division by single digit divisor */ - bip.rem = bip.op1; - r = bigUdiv1(GET_DIGIT(bip.op2, 0)); - bip.res = bip.rem; - if (r == 0) { - bip.rem = newBig(0); - SET_ND(bip.rem, 0); - } else { - bip.rem = newBig(1); - SET_ND(bip.rem, 1); - SET_DIGIT(bip.rem, 0, r); - } - return; - } - /* - * now for the general case - */ -#if DIV_CHK_01 - printf("div_chk #01: division, general case\n"); - printf(" dividend = "); - bigDump(stdout, bip.op1); - printf("\n"); - printf(" divisor = "); - bigDump(stdout, bip.op2); - printf("\n"); -#endif - /* determine scale factor for normalization */ - scale = (unsigned short) 256 / - ((unsigned short) GET_DIGIT(bip.op2, nd2 - 1) + 1); -#if DIV_CHK_02 - printf("div_chk #02: scale factor = %02X\n", scale); -#endif - /* normalize dividend, result is in bip.rem */ - bip.rem = newBig(nd1 + 1); - carry = 0x00; - for (i = 0; i < nd1; i++) { - aux = (unsigned short) GET_DIGIT(bip.op1, i) * scale + - carry; - SET_DIGIT(bip.rem, i, aux & 0xFF); - carry = aux >> 8; - } - SET_DIGIT(bip.rem, i, carry); - SET_ND(bip.rem, nd1 + 1); -#if DIV_CHK_03 - printf("div_chk #03: normalized dividend = "); - bigDump(stdout, bip.rem); - printf("\n"); -#endif - /* normalize divisor, result is in bip.res */ - bip.res = newBig(nd2); - carry = 0x00; - for (i = 0; i < nd2; i++) { - aux = (unsigned short) GET_DIGIT(bip.op2, i) * scale + - carry; - SET_DIGIT(bip.res, i, aux & 0xFF); - carry = aux >> 8; - } - if (carry != 0x00) { - /* overflow in divisor normalization */ - fatalError("internal library error #4 - THIS SHOULD NEVER HAPPEN!"); - } - SET_ND(bip.res, nd2); -#if DIV_CHK_04 - printf("div_chk #04: normalized divisor = "); - bigDump(stdout, bip.res); - printf("\n"); -#endif - /* allocate quotient */ - nd3 = nd1 - nd2 + 1; - tmp = newBig(nd3); - /* extract the two most significand digits of divisor */ - v1 = (unsigned short) GET_DIGIT(bip.res, nd2 - 1); - v2 = (unsigned short) GET_DIGIT(bip.res, nd2 - 2); - /* loop on digits of dividend and compute digits of quotient */ - /* j is index into dividend, k is index into quotient */ - for (j = nd1, k = nd3 - 1; k >= 0; j--, k--) { -#if DIV_CHK_05 - printf("div_chk #05: j = %d, k = %d\n", j, k); -#endif - /* calculate qhat */ - uj0 = (unsigned short) GET_DIGIT(bip.rem, j); - uj1 = (unsigned short) GET_DIGIT(bip.rem, j - 1); - uj2 = (unsigned short) GET_DIGIT(bip.rem, j - 2); - two = (uj0 << 8) | uj1; - if (uj0 == v1) { - qhat = (unsigned short) 255; -#if DIV_CHK_06 - printf("div_chk #06a: qhat = %02X\n", qhat); -#endif - } else { - qhat = two / v1; -#if DIV_CHK_06 - printf("div_chk #06b: qhat = %02X\n", qhat); -#endif - } - while (qhat * v2 > (((two - qhat * v1) << 8) | uj2)) { - qhat--; -#if DIV_CHK_07 - printf("div_chk #07: qhat decremented, is now %02X\n", qhat); -#endif - } - /* multiply and subtract */ - /* l is index into dividend, i is index into divisor */ - carry = 0xFF; - for (l = j - nd2, i = 0; i < nd2; l++, i++) { - aux = (unsigned short) GET_DIGIT(bip.rem, l) - - (unsigned short) GET_DIGIT(bip.res, i) * qhat + - carry + 0xFE01; - SET_DIGIT(bip.rem, l, aux & 0xFF); - carry = aux >> 8; - } - aux = (unsigned short) GET_DIGIT(bip.rem, l) + - carry + 0xFE01; - SET_DIGIT(bip.rem, l, aux & 0xFF); - carry = aux >> 8; -#if DIV_CHK_08 - printf("div_chk #08: remainder = "); - bigDump(stdout, bip.rem); - printf("\n"); -#endif - /* test remainder and possibly add back */ - if (carry != 0xFF) { - /* qhat is one too large */ - qhat--; -#if DIV_CHK_09 - printf("div_chk #09: qhat final correction, is now %02X\n", qhat); -#endif - /* add back */ - /* l is index into dividend, i is index into divisor */ - carry = 0x00; - for (l = j - nd2, i = 0; i < nd2; l++, i++) { - aux = (unsigned short) GET_DIGIT(bip.rem, l) + - (unsigned short) GET_DIGIT(bip.res, i) + - carry; - SET_DIGIT(bip.rem, l, aux & 0xFF); - carry = aux >> 8; - } - aux = (unsigned short) GET_DIGIT(bip.rem, l) + - carry; - SET_DIGIT(bip.rem, l, aux & 0xFF); - carry = aux >> 8; - if (carry != 0x01) { - /* missing carry in add-back sum */ - fatalError("internal library error #5 - THIS SHOULD NEVER HAPPEN!"); - } -#if DIV_CHK_10 - printf("div_chk #10: remainder = "); - bigDump(stdout, bip.rem); - printf("\n"); -#endif - } - /* store quotient digit */ - SET_DIGIT(tmp, k, qhat); -#if DIV_CHK_11 - printf("div_chk #11: quotient digit = %02X\n", qhat); -#endif - } - /* finish quotient */ - i = nd3; - while (--i >= 0 && GET_DIGIT(tmp, i) == 0) ; - SET_ND(tmp, i + 1); - bip.res = tmp; - /* finish and unnormalize remainder */ - i = nd1 + 1; - while (--i >= 0 && GET_DIGIT(bip.rem, i) == 0) ; - SET_ND(bip.rem, i + 1); - r = bigUdiv1(scale); - if (r != 0) { - /* non-zero remainder in unnormalization */ - fatalError("internal library error #6 - THIS SHOULD NEVER HAPPEN!"); - } -} - - -/**************************************************************/ - -/* nil reference exception */ - - -static void nilRefException(void) { - fatalError("big integer library detected illegal nil reference"); -} - - -/**************************************************************/ - -/* big integer arithmetic */ - - -/* - * big integer sign - * - * operand in bip.op1 - * result is < 0, = 0, or > 0 if and only if - * the same relation holds for bip.op1 - */ -int bigSgn(void) { - if (bip.op1 == NULL) { - nilRefException(); - } - if (GET_ND(bip.op1) == 0) { - return 0; - } - if (GET_SIGN(bip.op1) == BIG_POSITIVE) { - return 1; - } else { - return -1; - } -} - - -/* - * big integer comparison - * - * operands in bip.op1 and bip.op2 - * result is < 0, = 0, or > 0 if and only if the - * same relation holds for bip.op1 and bip.op2 - */ -int bigCmp(void) { - if (bip.op1 == NULL || - bip.op2 == NULL) { - nilRefException(); - } - if (GET_SIGN(bip.op1) == BIG_POSITIVE) { - if (GET_SIGN(bip.op2) == BIG_POSITIVE) { - /* op1 >= 0 and op2 >= 0 */ - return bigUcmp(); - } else { - /* op1 >= 0 and op2 < 0 */ - return 1; - } - } else { - if (GET_SIGN(bip.op2) == BIG_POSITIVE) { - /* op1 < 0 and op2 >= 0 */ - return -1; - } else { - /* op1 < 0 and op2 < 0 */ - return -bigUcmp(); - } - } -} - - -/* - * big integer negation - * - * operand in bip.op1 - * result in bip.res - */ -void bigNeg(void) { - int nd; - int i; - - if (bip.op1 == NULL) { - nilRefException(); - } - /* make copy of operand */ - nd = GET_ND(bip.op1); - bip.res = newBig(nd); - for (i = 0; i < nd; i++) { - SET_DIGIT(bip.res, i, GET_DIGIT(bip.op1, i)); - } - SET_ND(bip.res, nd); - /* store inverted sign */ - if (GET_SIGN(bip.op1) == BIG_NEGATIVE || nd == 0) { - SET_SIGN(bip.res, BIG_POSITIVE); - } else { - SET_SIGN(bip.res, BIG_NEGATIVE); - } -} - - -/* - * big integer addition - * - * operands in bip.op1 and bip.op2 - * result in bip.res - */ -void bigAdd(void) { - if (bip.op1 == NULL || - bip.op2 == NULL) { - nilRefException(); - } - if (GET_SIGN(bip.op1) == BIG_POSITIVE) { - if (GET_SIGN(bip.op2) == BIG_POSITIVE) { - /* op1 >= 0 and op2 >= 0 */ - bigUadd(); - SET_SIGN(bip.res, BIG_POSITIVE); - } else { - /* op1 >= 0 and op2 < 0 */ - if (bigUcmp() >= 0) { - /* |op1| >= |op2| */ - bigUsub(); - SET_SIGN(bip.res, BIG_POSITIVE); - } else { - /* |op1| < |op2| */ - bigXchg(); - bigUsub(); - SET_SIGN(bip.res, BIG_NEGATIVE); - bigXchg(); - } - } - } else { - if (GET_SIGN(bip.op2) == BIG_POSITIVE) { - /* op1 < 0 and op2 >= 0 */ - if (bigUcmp() <= 0) { - /* |op1| <= |op2| */ - bigXchg(); - bigUsub(); - SET_SIGN(bip.res, BIG_POSITIVE); - bigXchg(); - } else { - /* |op1| > |op2| */ - bigUsub(); - SET_SIGN(bip.res, BIG_NEGATIVE); - } - } else { - /* op1 < 0 and op2 < 0 */ - bigUadd(); - SET_SIGN(bip.res, BIG_NEGATIVE); - } - } -} - - -/* - * big integer subtraction - * - * operands in bip.op1 and bip.op2 - * result in bip.res - */ -void bigSub(void) { - if (bip.op1 == NULL || - bip.op2 == NULL) { - nilRefException(); - } - if (GET_SIGN(bip.op1) == BIG_POSITIVE) { - if (GET_SIGN(bip.op2) == BIG_POSITIVE) { - /* op1 >= 0 and op2 >= 0 */ - if (bigUcmp() >= 0) { - /* |op1| >= |op2| */ - bigUsub(); - SET_SIGN(bip.res, BIG_POSITIVE); - } else { - /* |op1| < |op2| */ - bigXchg(); - bigUsub(); - SET_SIGN(bip.res, BIG_NEGATIVE); - bigXchg(); - } - } else { - /* op1 >= 0 and op2 < 0 */ - bigUadd(); - SET_SIGN(bip.res, BIG_POSITIVE); - } - } else { - if (GET_SIGN(bip.op2) == BIG_POSITIVE) { - /* op1 < 0 and op2 >= 0 */ - bigUadd(); - SET_SIGN(bip.res, BIG_NEGATIVE); - } else { - /* op1 < 0 and op2 < 0 */ - if (bigUcmp() <= 0) { - /* |op1| <= |op2| */ - bigXchg(); - bigUsub(); - SET_SIGN(bip.res, BIG_POSITIVE); - bigXchg(); - } else { - /* |op1| > |op2| */ - bigUsub(); - SET_SIGN(bip.res, BIG_NEGATIVE); - } - } - } -} - - -/* - * big integer multiplication - * - * operands in bip.op1 and bip.op2 - * result in bip.res - */ -void bigMul(void) { - if (bip.op1 == NULL || - bip.op2 == NULL) { - nilRefException(); - } - bigUmul(); - if (GET_SIGN(bip.op1) == GET_SIGN(bip.op2) || GET_ND(bip.res) == 0) { - SET_SIGN(bip.res, BIG_POSITIVE); - } else { - SET_SIGN(bip.res, BIG_NEGATIVE); - } -} - - -/* - * big integer division, truncating towards zero - * - * dividend in bip.op1, divisor in bip.op2 - * quotient in bip.res, remainder in bip.rem - */ -void bigDiv(void) { - if (bip.op1 == NULL || - bip.op2 == NULL) { - nilRefException(); - } - bigUdiv(); - if (GET_SIGN(bip.op1) == GET_SIGN(bip.op2) || GET_ND(bip.res) == 0) { - SET_SIGN(bip.res, BIG_POSITIVE); - } else { - SET_SIGN(bip.res, BIG_NEGATIVE); - } - if (GET_SIGN(bip.op1) == BIG_POSITIVE || GET_ND(bip.rem) == 0) { - SET_SIGN(bip.rem, BIG_POSITIVE); - } else { - SET_SIGN(bip.rem, BIG_NEGATIVE); - } -} - - -/**************************************************************/ - -/* big integer conversions */ - - -/* - * conversion int --> big - * - * operand in parameter - * result in bip.res - */ -void bigFromInt(int n) { - int i; - - bip.res = newBig(sizeof(int)); - if (n < 0) { - n = -n; - SET_SIGN(bip.res, BIG_NEGATIVE); - } else { - SET_SIGN(bip.res, BIG_POSITIVE); - } - for (i = 0; i < sizeof(int); i++) { - SET_DIGIT(bip.res, i, n & 0xFF); - n >>= 8; - } - while (--i >= 0 && GET_DIGIT(bip.res, i) == 0) ; - SET_ND(bip.res, i + 1); -} - - -/* - * conversion big --> int - * - * operand in bip.op1 - * result is returned - */ -int bigToInt(void) { - int nd; - int i; - int res; - - if (bip.op1 == NULL) { - nilRefException(); - } - nd = GET_ND(bip.op1); - if (nd > 4 || - (nd == 4 && GET_DIGIT(bip.op1, 3) >= 0x80)) { - fatalError("big integer too big for conversion to int"); - } - res = 0; - for (i = nd - 1; i >= 0; i--) { - res <<= 8; - res |= (unsigned int) GET_DIGIT(bip.op1, i); - } - if (GET_SIGN(bip.op1) == BIG_NEGATIVE) { - res = -res; - } - return res; -} - - -/**************************************************************/ - -/* big integer I/O */ - - -/* - * read a big integer - * - * stream to read from in parameter - * result in bip.res - */ -void bigRead(FILE *in) { - int c; - int positive; - - c = fgetc(in); - while (isspace(c)) { - c = fgetc(in); - } - if (c == '-') { - positive = 0; - c = fgetc(in); - } else { - positive = 1; - if (c == '+') { - c = fgetc(in); - } - } - if (!isdigit(c)) { - fatalError("no digits in input"); - } - bigFromInt(10); - bip.rem = bip.res; - bigFromInt(0); - while (isdigit(c)) { - bip.op1 = bip.res; - bip.op2 = bip.rem; - bigUmul(); - bip.op1 = bip.res; - bigFromInt(c - '0'); - bip.op2 = bip.res; - bigUadd(); - c = fgetc(in); - } - ungetc(c, in); - if (positive || GET_ND(bip.res) == 0) { - SET_SIGN(bip.res, BIG_POSITIVE); - } else { - SET_SIGN(bip.res, BIG_NEGATIVE); - } -} - - -/* - * print a big integer - * - * stream to write to in parameter - * number to print in bip.op1 - */ -void bigPrint(FILE *out) { - int nd; - unsigned char r; - int skipZero; - - if (bip.op1 == NULL) { - nilRefException(); - } - nd = GET_ND(bip.op1); - if (nd == 0) { - fprintf(out, "0"); - return; - } - if (GET_SIGN(bip.op1) == BIG_NEGATIVE) { - fprintf(out, "-"); - } - /* number of digits in base 10 = number of digits - in base 256 * log10(256), and log10(256) < 2.5 */ - nd = 2 * nd + nd / 2; - bip.rem = bip.op1; - bigFromInt(10); - bip.op2 = bip.res; - bigFromInt(1); - while (nd != 0) { - bip.op1 = bip.res; - bigUmul(); - nd--; - } - bip.op1 = bip.rem; - bip.op2 = bip.res; - skipZero = 1; - do { - bigUdiv(); - if (GET_ND(bip.res) == 0) { - if (!skipZero) { - fprintf(out, "0"); - } - } else { - if (GET_ND(bip.res) != 1) { - fatalError("internal library error #7 - THIS SHOULD NEVER HAPPEN!"); - } - fprintf(out, "%c", GET_DIGIT(bip.res, 0) + '0'); - skipZero = 0; - } - bip.op1 = bip.rem; - bip.rem = bip.op2; - r = bigUdiv1(10); - bip.op2 = bip.rem; - } while (r == 0); -} - - -/**************************************************************/ - -/* debugging */ - - -/* - * dump a big integer object - */ -void bigDump(FILE *out, BigObjRef bigObjRef) { - int nd; - unsigned char sign; - int i; - - if (bigObjRef == NULL) { - nilRefException(); - } - nd = GET_ND(bigObjRef); - sign = GET_SIGN(bigObjRef); - fprintf(out, "[%d %c", nd, sign == BIG_POSITIVE ? '+' : '-'); - for (i = 0; i < nd; i++) { - fprintf(out, " %02X", GET_DIGIT(bigObjRef, i)); - } - fprintf(out, "]"); -} diff --git a/bigint/src/bigint.h b/bigint/src/bigint.h deleted file mode 100644 index b93d88e..0000000 --- a/bigint/src/bigint.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * bigint.h -- big integer library - */ - - -#ifndef _BIGINT_H_ -#define _BIGINT_H_ - - -/* object representation */ -typedef void* BigObjRef; - - -#include - - -typedef struct { - int nd; /* number of digits; array may be bigger */ - /* nd = 0 exactly when number = 0 */ - unsigned char sign; /* one of BIG_NEGATIVE or BIG_POSITIVE */ - /* zero always has BIG_POSITIVE here */ - unsigned char digits[1]; /* the digits proper; number base is 256 */ - /* LS digit first; MS digit is not zero */ -} Big; - -#include "support.h" - - -/* big integer processor registers */ - -typedef struct { - BigObjRef op1; /* first (or single) operand */ - BigObjRef op2; /* second operand (if present) */ - BigObjRef res; /* result of operation */ - BigObjRef rem; /* remainder in case of division */ -} BIP; - -extern BIP bip; /* registers of the processor */ - - -/* big integer processor functions */ - -int bigSgn(void); /* sign */ -int bigCmp(void); /* comparison */ -void bigNeg(void); /* negation */ -void bigAdd(void); /* addition */ -void bigSub(void); /* subtraction */ -void bigMul(void); /* multiplication */ -void bigDiv(void); /* division */ - -void bigFromInt(int n); /* conversion int --> big */ -int bigToInt(void); /* conversion big --> int */ - -void bigRead(FILE *in); /* read a big integer */ -void bigPrint(FILE *out); /* print a big integer */ - -void bigDump(FILE *out, BigObjRef bigObjRef); /* dump a big integer object */ - - -#endif /* _BIGINT_H_ */ diff --git a/bigint/src/bigint.o b/bigint/src/bigint.o deleted file mode 100644 index 4e68f95420ef573ae35b673fe7cf9a26ca89ff9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27160 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 z zQ1H`0RIPvB1ku2H5X7Z|(*(nUO7Jj*D7RN|yWo1krGnE0!-7iiFzQ7zuvc)q;CjKO zg3|=Uf&g7^tmt_On2Ot8UqOQOHerlmJ{oR+akXCZ?e{=?g|^@K{6T2@y-ud+x8LV5 zo~hq{kMpYNw?Eo?R%rX1t?!Dw{k{g-y1e~fW~<2CUvxc28n^vkY=1aaLd^ov5*3T=NYcfHW|*KyN?w!aqRmz%85 z{yy#!q3ti?CJ1eR1NSs(#E|`s;g==f+RLBRr6za%e>0B5#{S^h@2l<k!oB8(pqeq2i99@M&U*Cm=eo~rKTAB^;h{6nH&@8 NO6jtbVi{Z`{|`kcCL90& diff --git a/bigint/src/libbigint.a b/bigint/src/libbigint.a deleted file mode 100644 index 01ff5790d3725a84b9548db7f9744e9635bd4f0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27544 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 diff --git a/bigint/src/support.h b/bigint/src/support.h deleted file mode 100644 index 8e4455e..0000000 --- a/bigint/src/support.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * support.h -- object representation and support functions - */ - - -#ifndef _SUPPORT_H_ -#define _SUPPORT_H_ - -/* support functions */ - -void fatalError(char *msg); /* print a message and exit */ -void * newPrimObject(int dataSize); /* create a new primitive object */ -void * getPrimObjectDataPointer(void * primObject); - -#endif /* _SUPPORT_H_ */ diff --git a/bigint/tst/Makefile b/bigint/tst/Makefile deleted file mode 100644 index 67ca0eb..0000000 --- a/bigint/tst/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# -# Makefile for big integer test -# - -BUILD = ../build - -CC = gcc -CFLAGS = -g -Wall -I$(BUILD)/include -LDFLAGS = -g -Wall -L$(BUILD)/lib -LDLIBS = -lbigint - -all: testbip - -install: all - mkdir -p $(BUILD)/bin - cp testbip $(BUILD)/bin - -testbip: testbip.o support.o - $(CC) $(LDFLAGS) -o testbip testbip.o support.o $(LDLIBS) - -testbip.o: testbip.c - $(CC) $(CFLAGS) -o testbip.o -c testbip.c - -support.o: support.c - $(CC) $(CFLAGS) -o support.o -c support.c - -clean: - rm -f *~ testbip.o support.o testbip diff --git a/bigint/tst/support.c b/bigint/tst/support.c deleted file mode 100644 index f8ae80d..0000000 --- a/bigint/tst/support.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * support.c -- support functions for big integer library - */ - - -#include -#include -#include - -#include "support.h" - -typedef struct ObjRef{ - bool brokenHeart; - struct ObjRef *forward_pointer; - unsigned int size; - unsigned char data[1]; -} *ObjRef; - - -/* - * This routine is called in case a fatal error has occurred. - * It should print the error message and terminate the program. - */ -void fatalError(char *msg) { - printf("Fatal error: %s\n", msg); - exit(1); -} - - -/* - * This function is called whenever a new primitive object with - * a certain amount of internal memory is needed. It should return - * an object reference to a regular object, which contains a freely - * usable memory area of at least the requested size (measured in - * bytes). The memory area need not be initialized in any way. - * - * Note that this function may move all objects in memory at will - * (due to, e.g., garbage collection), as long as the pointers in - * the global "bip" structure point to the correct objects when - * the function returns. - */ -void * newPrimObject(int dataSize) { - ObjRef bigObjRef; - int size = sizeof(unsigned int) + dataSize * sizeof(unsigned char); - bigObjRef = malloc(size); - bigObjRef->size = size; - if (bigObjRef == NULL) { - fatalError("newPrimObject() got no memory"); - } - bigObjRef->size = size; - return bigObjRef; -} - -void * getPrimObjectDataPointer(void * obj){ - ObjRef oo = ((ObjRef) (obj)); - return oo->data; -} - diff --git a/bigint/tst/support.o b/bigint/tst/support.o deleted file mode 100644 index 2ad0cc021555cc0eac87223aa52c5fcd4a80cdab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3536 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

ykNZTRFA>v8Df*z#@K(rk0gACaa< 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 diff --git a/bigint/tst/testbip.c b/bigint/tst/testbip.c deleted file mode 100644 index 7c65754..0000000 --- a/bigint/tst/testbip.c +++ /dev/null @@ -1,1253 +0,0 @@ -/* - * testbip.c -- test the big integer processor - */ - - -#include -#include -#include - -#include "bigint.h" - -typedef struct { - unsigned int size; /* byte count of payload data */ - unsigned char data[1]; /* payload data, size as needed */ -} *ObjRef; - -/**************************************************************/ - - -void dump(char *prefix, ObjRef x, char *suffix) { - if (prefix != NULL && *prefix != '\0') { - printf("%s", prefix); - } - bigDump(stdout, x); - if (suffix != NULL && *suffix != '\0') { - printf("%s", suffix); - } -} - - -/**************************************************************/ - - -void test00(void) { - bigFromInt(0); - dump("+0x00000000 = ", bip.res, "\n"); - - bigFromInt(1); - dump("+0x00000001 = ", bip.res, "\n"); - - bigFromInt(2); - dump("+0x00000002 = ", bip.res, "\n"); - - bigFromInt(0x12); - dump("+0x00000012 = ", bip.res, "\n"); - - bigFromInt(0x123); - dump("+0x00000123 = ", bip.res, "\n"); - - bigFromInt(0x1234); - dump("+0x00001234 = ", bip.res, "\n"); - - bigFromInt(0x12345); - dump("+0x00012345 = ", bip.res, "\n"); - - bigFromInt(0x123456); - dump("+0x00123456 = ", bip.res, "\n"); - - bigFromInt(0x1234567); - dump("+0x01234567 = ", bip.res, "\n"); - - bigFromInt(0x12345678); - dump("+0x12345678 = ", bip.res, "\n"); - - bigFromInt(-0); - dump("-0x00000000 = ", bip.res, "\n"); - - bigFromInt(-1); - dump("-0x00000001 = ", bip.res, "\n"); - - bigFromInt(-2); - dump("-0x00000002 = ", bip.res, "\n"); - - bigFromInt(-0x12); - dump("-0x00000012 = ", bip.res, "\n"); - - bigFromInt(-0x123); - dump("-0x00000123 = ", bip.res, "\n"); - - bigFromInt(-0x1234); - dump("-0x00001234 = ", bip.res, "\n"); - - bigFromInt(-0x12345); - dump("-0x00012345 = ", bip.res, "\n"); - - bigFromInt(-0x123456); - dump("-0x00123456 = ", bip.res, "\n"); - - bigFromInt(-0x1234567); - dump("-0x01234567 = ", bip.res, "\n"); - - bigFromInt(-0x12345678); - dump("-0x12345678 = ", bip.res, "\n"); -} - - -/**************************************************************/ - - -void test01(void) { - bigFromInt(0); - bip.op1 = bip.res; - printf("sign(+0x00000000) = %d\n", bigSgn()); - - bigFromInt(1); - bip.op1 = bip.res; - printf("sign(+0x00000001) = %d\n", bigSgn()); - - bigFromInt(2); - bip.op1 = bip.res; - printf("sign(+0x00000002) = %d\n", bigSgn()); - - bigFromInt(0x12); - bip.op1 = bip.res; - printf("sign(+0x00000012) = %d\n", bigSgn()); - - bigFromInt(0x123); - bip.op1 = bip.res; - printf("sign(+0x00000123) = %d\n", bigSgn()); - - bigFromInt(0x1234); - bip.op1 = bip.res; - printf("sign(+0x00001234) = %d\n", bigSgn()); - - bigFromInt(0x12345); - bip.op1 = bip.res; - printf("sign(+0x00012345) = %d\n", bigSgn()); - - bigFromInt(0x123456); - bip.op1 = bip.res; - printf("sign(+0x00123456) = %d\n", bigSgn()); - - bigFromInt(0x1234567); - bip.op1 = bip.res; - printf("sign(+0x01234567) = %d\n", bigSgn()); - - bigFromInt(0x12345678); - bip.op1 = bip.res; - printf("sign(+0x12345678) = %d\n", bigSgn()); - - bigFromInt(-0); - bip.op1 = bip.res; - printf("sign(-0x00000000) = %d\n", bigSgn()); - - bigFromInt(-1); - bip.op1 = bip.res; - printf("sign(-0x00000001) = %d\n", bigSgn()); - - bigFromInt(-2); - bip.op1 = bip.res; - printf("sign(-0x00000002) = %d\n", bigSgn()); - - bigFromInt(-0x12); - bip.op1 = bip.res; - printf("sign(-0x00000012) = %d\n", bigSgn()); - - bigFromInt(-0x123); - bip.op1 = bip.res; - printf("sign(-0x00000123) = %d\n", bigSgn()); - - bigFromInt(-0x1234); - bip.op1 = bip.res; - printf("sign(-0x00001234) = %d\n", bigSgn()); - - bigFromInt(-0x12345); - bip.op1 = bip.res; - printf("sign(-0x00012345) = %d\n", bigSgn()); - - bigFromInt(-0x123456); - bip.op1 = bip.res; - printf("sign(-0x00123456) = %d\n", bigSgn()); - - bigFromInt(-0x1234567); - bip.op1 = bip.res; - printf("sign(-0x01234567) = %d\n", bigSgn()); - - bigFromInt(-0x12345678); - bip.op1 = bip.res; - printf("sign(-0x12345678) = %d\n", bigSgn()); -} - - -/**************************************************************/ - - -void test02(void) { - int m[7]; - ObjRef n[7]; - int i, j; - int res; - - m[0] = 0; - bigFromInt(m[0]); - n[0] = bip.res; - printf("n[0] = %d\n", m[0]); - - m[1] = 100; - bigFromInt(m[1]); - n[1] = bip.res; - printf("n[1] = %d\n", m[1]); - - m[2] = -100; - bigFromInt(m[2]); - n[2] = bip.res; - printf("n[2] = %d\n", m[2]); - - m[3] = 101; - bigFromInt(m[3]); - n[3] = bip.res; - printf("n[3] = %d\n", m[3]); - - m[4] = -101; - bigFromInt(m[4]); - n[4] = bip.res; - printf("n[4] = %d\n", m[4]); - - m[5] = 12345678; - bigFromInt(m[5]); - n[5] = bip.res; - printf("n[5] = %d\n", m[5]); - - m[6] = -12345678; - bigFromInt(m[6]); - n[6] = bip.res; - printf("n[6] = %d\n", m[6]); - - for (i = 0; i < 7; i++) { - for (j = 0; j < 7; j++) { - printf("%12d ", m[i]); - bip.op1 = n[i]; - bip.op2 = n[j]; - res = bigCmp(); - if (res < 0) { - printf("<"); - } else - if (res > 0) { - printf(">"); - } else { - printf("="); - } - printf(" %12d", m[j]); - printf("\n"); - } - } -} - - -/**************************************************************/ - - -void test03(void) { - bigFromInt(0); - bip.op1 = bip.res; - bigNeg(); - dump("+n = ", bip.op1, "\n"); - dump("-n = ", bip.res, "\n"); - - bigFromInt(1); - bip.op1 = bip.res; - bigNeg(); - dump("+n = ", bip.op1, "\n"); - dump("-n = ", bip.res, "\n"); - - bigFromInt(-1); - bip.op1 = bip.res; - bigNeg(); - dump("+n = ", bip.op1, "\n"); - dump("-n = ", bip.res, "\n"); - - bigFromInt(0x12345678); - bip.op1 = bip.res; - bigNeg(); - dump("+n = ", bip.op1, "\n"); - dump("-n = ", bip.res, "\n"); - - bigFromInt(-0x12345678); - bip.op1 = bip.res; - bigNeg(); - dump("+n = ", bip.op1, "\n"); - dump("-n = ", bip.res, "\n"); -} - - -/**************************************************************/ - - -void test04(void) { - int m[6]; - ObjRef n[6]; - int i, j; - - m[0] = +0x12345679; - m[1] = +0x12345678; - m[2] = +0x12345677; - m[3] = -0x12345677; - m[4] = -0x12345678; - m[5] = -0x12345679; - - for (i = 0; i < 6; i++) { - bigFromInt(m[i]); - n[i] = bip.res; - } - - for (i = 0; i < 6; i++) { - for (j = 0; j < 6; j++) { - bip.op1 = n[i]; - bip.op2 = n[j]; - bigAdd(); - printf("%12d + %12d = ", m[i], m[j]); - dump("", bip.res, "\n"); - } - } -} - - -/**************************************************************/ - - -void test05(void) { - int m[5]; - ObjRef n[5]; - int i, j; - - m[0] = +0x12345678; - m[1] = +1; - m[2] = 0; - m[3] = -1; - m[4] = -0x12345678; - - for (i = 0; i < 5; i++) { - bigFromInt(m[i]); - n[i] = bip.res; - } - - for (i = 0; i < 5; i++) { - for (j = 0; j < 5; j++) { - bip.op1 = n[i]; - bip.op2 = n[j]; - bigAdd(); - printf("%12d + %12d = ", m[i], m[j]); - dump("", bip.res, "\n"); - } - } -} - - -/**************************************************************/ - - -void test06(void) { - int m[6]; - ObjRef n[6]; - int i, j; - - m[0] = +0x12345679; - m[1] = +0x12345678; - m[2] = +0x12345677; - m[3] = -0x12345677; - m[4] = -0x12345678; - m[5] = -0x12345679; - - for (i = 0; i < 6; i++) { - bigFromInt(m[i]); - n[i] = bip.res; - } - - for (i = 0; i < 6; i++) { - for (j = 0; j < 6; j++) { - bip.op1 = n[i]; - bip.op2 = n[j]; - bigSub(); - printf("%12d - %12d = ", m[i], m[j]); - dump("", bip.res, "\n"); - } - } -} - - -/**************************************************************/ - - -void test07(void) { - int m[5]; - ObjRef n[5]; - int i, j; - - m[0] = +0x12345678; - m[1] = +1; - m[2] = 0; - m[3] = -1; - m[4] = -0x12345678; - - for (i = 0; i < 5; i++) { - bigFromInt(m[i]); - n[i] = bip.res; - } - - for (i = 0; i < 5; i++) { - for (j = 0; j < 5; j++) { - bip.op1 = n[i]; - bip.op2 = n[j]; - bigSub(); - printf("%12d - %12d = ", m[i], m[j]); - dump("", bip.res, "\n"); - } - } -} - - -/**************************************************************/ - - -void test08(void) { - int i; - - bigFromInt(1); - for (i = 1; i < 100; i++) { - bip.op1 = bip.res; - bip.op2 = bip.res; - bigAdd(); - printf("2 ^ %2d = ", i); - dump("", bip.res, "\n"); - } -} - - -/**************************************************************/ - - -void test09(void) { - int i, j; - - bigFromInt(2); - bip.op2 = bip.res; - for (i = 1; i < 10; i++) { - bip.res = bip.op2; - for (j = 1; j < i * i; j++) { - bip.op1 = bip.res; - bigMul(); - } - printf("2 ^ (%d ^ 2) = ", i); - dump("", bip.res, "\n"); - } -} - - -/**************************************************************/ - - -void factorial(int n) { - bigFromInt(1); - while (n > 0) { - bip.op1 = bip.res; - bigFromInt(n); - bip.op2 = bip.res; - bigMul(); - n--; - } -} - - -void test10(void) { - int i; - - for (i = 0; i < 100; i++) { - factorial(i); - printf("%2d! = ", i); - dump("", bip.res, "\n"); - } -} - - -/**************************************************************/ - - -void test11(void) { - int n, m; - - n = 5; - m = 0; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); -} - - -/**************************************************************/ - - -void test12(void) { - int n, m; - - n = 12; - m = 12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12345677; - m = 12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12; - m = 12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345677; - m = 12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12; - m = -12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12345677; - m = -12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12; - m = -12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345677; - m = -12345678; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); -} - - -/**************************************************************/ - - -void test13(void) { - int n, m; - - n = 12345678; - m = 1; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12345678; - m = 17; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12345678; - m = 255; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345678; - m = 1; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345678; - m = 17; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345678; - m = 255; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12345678; - m = -1; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12345678; - m = -17; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = 12345678; - m = -255; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345678; - m = -1; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345678; - m = -17; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - n = -12345678; - m = -255; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); -} - - -/**************************************************************/ - - -void test14(void) { - int n, m; - ObjRef dividend; - ObjRef divisor; - int ok; - - printf("divisor"); - for (m = 0; m < 256; m++) { - if (m % 8 == 0) { - printf("\n%3d to %3d: ", m, m + 7); - } - if (m == 0) { - printf(" "); - fflush(stdout); - continue; - } - bigFromInt(m); - divisor = bip.res; - ok = 1; - for (n = 0; n < (1 << 18); n++) { - bigFromInt(n); - dividend = bip.res; - bip.op1 = dividend; - bip.op2 = divisor; - bigDiv(); - bip.op1 = bip.res; - bigMul(); - free(bip.op1); - bip.op1 = bip.res; - bip.op2 = bip.rem; - bigAdd(); - free(bip.op1); - free(bip.op2); - bip.op1 = bip.res; - bip.op2 = dividend; - if (bigCmp() != 0) { - ok = 0; - } - free(bip.op1); - free(dividend); - } - free(divisor); - printf("%c", ok ? '.' : '?'); - fflush(stdout); - } - printf("\n"); -} - - -/**************************************************************/ - - -void test15(void) { - int n, m; - - n = 123456789; - m = (0xFF << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x80 << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x7F << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x55 << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x2F << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x18 << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x0A << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x03 << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x02 << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); - - printf("--------------------------------------------------\n"); - - n = 123456789; - m = (0x01 << 16) + 0x1234; - bigFromInt(n); - bip.op1 = bip.res; - bigFromInt(m); - bip.op2 = bip.res; - bigDiv(); - printf("%12d / %12d = ", n, m); - dump("", bip.res, "\n"); - printf("%12d %% %12d = ", n, m); - dump("", bip.rem, "\n"); -} - - -/**************************************************************/ - - -void test16(void) { - int n1, n2, n3, m; - - n1 = 0x12345678; - n2 = 0x66554433; - n3 = 12; - bigFromInt(n1); - bip.op1 = bip.res; - bigFromInt(n2); - bip.op2 = bip.res; - bigMul(); - bip.op1 = bip.res; - bigFromInt(n3); - bip.op2 = bip.res; - bigMul(); - bip.op1 = bip.res; - m = 0x5764; - bigFromInt(m); - bip.op2 = bip.res; - dump("", bip.op1, " / "); - dump("", bip.op2, " =\n"); - bigDiv(); - dump("", bip.res, " R. "); - dump("", bip.rem, "\n"); - bip.op1 = bip.res; - bigMul(); - bip.op1 = bip.res; - bip.op2 = bip.rem; - bigAdd(); - dump("quotient * divisor + remainder =\n", bip.res, "\n"); -} - - -/**************************************************************/ - - -void test17(void) { - /* prepare two big integers with 8 and 4 digits, respectively */ - bigFromInt(0x11111111); - bip.op1 = bip.res; - bip.op2 = bip.res; - bigMul(); - bip.op1 = bip.res; - /* set all 8 digits of dividend */ - ((ObjRef) bip.op1)->data[5 + 0] = 0xF2; - ((ObjRef) bip.op1)->data[5 + 1] = 0xFB; - ((ObjRef) bip.op1)->data[5 + 2] = 0xE3; - ((ObjRef) bip.op1)->data[5 + 3] = 0x46; - ((ObjRef) bip.op1)->data[5 + 4] = 0x7C; - ((ObjRef) bip.op1)->data[5 + 5] = 0xC2; - ((ObjRef) bip.op1)->data[5 + 6] = 0x54; - ((ObjRef) bip.op1)->data[5 + 7] = 0xF8; - /* set )all 4 digits of divisor */ - ((ObjRef) bip.op2)->data[5 + 0] = 0x1B; - ((ObjRef) bip.op2)->data[5 + 1] = 0xE8; - ((ObjRef) bip.op2)->data[5 + 2] = 0xE7; - ((ObjRef) bip.op2)->data[5 + 3] = 0x8D; - /* divide */ - dump("", bip.op1, " / "); - dump("", bip.op2, " =\n"); - bigDiv(); - dump("", bip.res, " R. "); - dump("", bip.rem, "\n"); - /* verify */ - bip.op1 = bip.res; - bigMul(); - bip.op1 = bip.res; - bip.op2 = bip.rem; - bigAdd(); - dump("quotient * divisor + remainder =\n", bip.res, "\n"); -} - - -/**************************************************************/ - - -void test18(void) { - /* prepare two big integers with 8 and 4 digits, respectively */ - bigFromInt(0x11111111); - bip.op1 = bip.res; - bip.op2 = bip.res; - bigMul(); - bip.op1 = bip.res; - /* set all 8 digits of dividend */ - ((ObjRef) bip.op1)->data[5 + 0] = 0x4D; - ((ObjRef) bip.op1)->data[5 + 1] = 0xCC; - ((ObjRef) bip.op1)->data[5 + 2] = 0x8C; - ((ObjRef) bip.op1)->data[5 + 3] = 0x18; - ((ObjRef) bip.op1)->data[5 + 4] = 0x34; - ((ObjRef) bip.op1)->data[5 + 5] = 0xDF; - ((ObjRef) bip.op1)->data[5 + 6] = 0x1D; - ((ObjRef) bip.op1)->data[5 + 7] = 0xFD; - /* set all 4 digits of divisor */ - ((ObjRef) bip.op2)->data[5 + 0] = 0x69; - ((ObjRef) bip.op2)->data[5 + 1] = 0xF4; - ((ObjRef) bip.op2)->data[5 + 2] = 0x94; - ((ObjRef) bip.op2)->data[5 + 3] = 0x37; - /* divide */ - dump("", bip.op1, " / "); - dump("", bip.op2, " =\n"); - bigDiv(); - dump("", bip.res, " R. "); - dump("", bip.rem, "\n"); - /* verify */ - bip.op1 = bip.res; - bigMul(); - bip.op1 = bip.res; - bip.op2 = bip.rem; - bigAdd(); - dump("quotient * divisor + remainder =\n", bip.res, "\n"); -} - - -/**************************************************************/ - - -void test19(void) { - int n, m; - - n = 0x7FFFFFFF; - bigFromInt(n); - bip.op1 = bip.res; - m = bigToInt(); - printf("%12d = %12d\n", n, m); - - n = 0x00000001; - bigFromInt(n); - bip.op1 = bip.res; - m = bigToInt(); - printf("%12d = %12d\n", n, m); - - n = 0x00000000; - bigFromInt(n); - bip.op1 = bip.res; - m = bigToInt(); - printf("%12d = %12d\n", n, m); - - n = -0x00000001; - bigFromInt(n); - bip.op1 = bip.res; - m = bigToInt(); - printf("%12d = %12d\n", n, m); - - n = -0x7FFFFFFF; - bigFromInt(n); - bip.op1 = bip.res; - m = bigToInt(); - printf("%12d = %12d\n", n, m); -} - - -/**************************************************************/ - - -void test20(void) { - printf("please enter a number: "); - fflush(stdout); - bigRead(stdin); - dump("", bip.res, "\n"); -} - - -/**************************************************************/ - - -void test21(void) { - bigFromInt(0); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(1); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(-1); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(0x1234); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(-0x1234); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(0x186A0); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(-0x186A0); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(0x12345678); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(-0x12345678); - dump("", bip.res, " = "); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); - - bigFromInt(987654321); - bip.op1 = bip.res; - bip.op2 = bip.res; - bigMul(); - bip.op1 = bip.res; - bip.op2 = bip.res; - bigMul(); - dump("", bip.res, " =\n"); - bip.op1 = bip.res; - bigPrint(stdout); - printf("\n"); -} - - -/**************************************************************/ - - -typedef struct { - void (*func)(void); - char *explanation; -} TestFunc; - - -TestFunc tests[] = { - { test00, "representation" }, - { test01, "sign" }, - { test02, "comparison" }, - { test03, "negation" }, - { test04, "addition, equal sizes" }, - { test05, "addition, different sizes" }, - { test06, "subtraction, equal sizes" }, - { test07, "subtraction, different sizes" }, - { test08, "2^n by addition" }, - { test09, "2^(n^2) by multiplication" }, - { test10, "factorial" }, - { test11, "division by zero" }, - { test12, "division, small dividend" }, - { test13, "division, single digit divisor" }, - { test14, "division, systematic test of simple cases" }, - { test15, "division, general case, different scale factors" }, - { test16, "division, general case, qhat (first guess)" }, - { test17, "division, general case, qhat (decremented twice)" }, - { test18, "division, general case, qhat (final correction)" }, - { test19, "conversion big --> int" }, - { test20, "read from file" }, - { test21, "print to file" }, -}; - -int numTests = sizeof(tests) / sizeof(tests[0]); - - -/**************************************************************/ - - -void usage(char *myself) { - int i; - - printf("Usage: %s \n", myself); - printf("valid test numbers are:\n"); - for (i = 0; i < numTests; i++) { - printf(" %2d: %s\n", i, tests[i].explanation); - } - exit(1); -} - - -int main(int argc, char *argv[]) { - int testNumber; - char *endp; - - if (argc != 2) { - usage(argv[0]); - } - testNumber = strtol(argv[1], &endp, 0); - if (*endp != '\0') { - usage(argv[0]); - } - if (testNumber < 0 || testNumber >= numTests) { - usage(argv[0]); - } - printf("Test %d: %s\n", testNumber, tests[testNumber].explanation); - (*tests[testNumber].func)(); - return 0; -} diff --git a/bigint/tst/testbip.o b/bigint/tst/testbip.o deleted file mode 100644 index 8acdffdc8b2ccfee22e4b6e2727cac1ccb105978..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44472 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 diff --git a/njvm.o b/njvm.o index 649cde959824589b1afb100038d55d7c00d44127..9c3f0c4099bc43bd914daa2494f61bf54de586af 100644 GIT binary patch delta 19 Zcmdn6n0W&br3bPYTbUSc&JJ{K002xs2Oj_c delta 19 Zcmdn6n0W&br3bPYS{WE^&JJ{K002xE2O0nX