From c6116ffdbcc88a3f5fe07f019666dc6c02860469 Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 30 Jun 2019 10:56:24 +0200 Subject: [PATCH 01/15] add basic tests --- tests/all_tests.nim | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/tests/all_tests.nim b/tests/all_tests.nim index 4fd69ac..8525e47 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -8,6 +8,37 @@ import unittest, ../decimal/decimal -suite "Mock compile test": - test "Nim-decimal and its wrapped library compiles": - discard +suite "Basic Arithmetic": + test "Set Decimal from string": + let s = "1.23456" + var d = newDecimal(s) + check $d == s + test "Set Decimal from int": + let s = 123456 + var d = newDecimal(s) + let correct = "123456" + check $d == correct + test "Decimal Addition": + var a = newDecimal("1.2") + var b = newDecimal("3.5") + var c = a + b + let correct = "4.7" + check $c == correct + test "Decimal Subtraction": + var a = newDecimal("1.2") + var b = newDecimal("3.5") + var c = a - b + let correct = "-2.3" + check $c == correct + test "Decimal Multiplication": + var a = newDecimal("1.2") + var b = newDecimal("3.5") + var c = a * b + let correct = "4.20" + check $c == correct + test "Decimal Division": + var a = newDecimal("6.25") + var b = newDecimal("2.5") + var c = a / b + let correct = "2.5" + check $c == correct From 19a0ef05f5bff461de8275e43f95956809450513 Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 30 Jun 2019 10:56:42 +0200 Subject: [PATCH 02/15] implement some of the high level api --- decimal/decimal.nim | 90 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index 914fa86..125de87 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -6,3 +6,93 @@ # at your option. This file may not be copied, modified, or distributed except according to those terms. import decimal_lowlevel + +type + DecimalType = ptr mpd_t + +const + DEFAULT_PREC = MPD_RDIGITS * 2 + DEFAULT_EMAX = when (sizeof(int) == 8): 999999999999999999 else: 425000000 + DEFAULT_EMIN = when (sizeof(int) == 8): -999999999999999999 else: -425000000 + +var CTX: mpd_context_t +var CTX_ADDR = addr CTX +mpd_defaultcontext(CTX_ADDR) + +proc setPrec*(prec: int) = + if 0 < prec: + let success = mpd_qsetprec(CTX_ADDR, prec) + if success == 0: + echo "Bad prec" + +proc `$`*(s: DecimalType): cstring = mpd_to_sci(s, 0) + +proc initDecimal*(): DecimalType = mpd_new(CTX_ADDR) + +proc newDecimal*(s: string): DecimalType = + result = mpd_new(CTX_ADDR) + mpd_set_string(result, s, CTX_ADDR) + +proc newDecimal*(s: int64): DecimalType = + result = mpd_new(CTX_ADDR) + mpd_set_i64(result, s, CTX_ADDR) + +proc newDecimal*(s: int32): DecimalType = + result = mpd_new(CTX_ADDR) + mpd_set_i32(result, s, CTX_ADDR) + +proc clone*(b: DecimalType): DecimalType = + result = initDecimal() + mpd_copy(result, b, CTX_ADDR) + +proc `+`*(a, b: DecimalType): DecimalType = + result = initDecimal() + mpd_add(result, a, b, CTX_ADDR) + +proc `+=`*(a, b: DecimalType) = + mpd_add(a, a, b, CTX_ADDR) + +proc `-`*(a, b: DecimalType): DecimalType = + result = initDecimal() + mpd_sub(result, a, b, CTX_ADDR) + +proc `-=`*(a, b: DecimalType) = + mpd_sub(a, a, b, CTX_ADDR) + +proc `*`*(a, b: DecimalType): DecimalType = + result = initDecimal() + mpd_mul(result, a, b, CTX_ADDR) + +proc `*=`*(a, b: DecimalType) = + mpd_mul(a, a, b, CTX_ADDR) + +proc `/`*(a, b: DecimalType): DecimalType = + result = initDecimal() + mpd_div(result, a, b, CTX_ADDR) + +proc `/=`*(a, b: DecimalType) = + mpd_div(a, a, b, CTX_ADDR) + +proc `^`*(a, b: DecimalType): DecimalType = + result = initDecimal() + mpd_pow(result, a, b, CTX_ADDR) + +proc divint*(a, b: DecimalType): DecimalType = + result = initDecimal() + mpd_divint(result, a, b, CTX_ADDR) + +proc rem*(a, b: DecimalType): DecimalType = + result = initDecimal() + mpd_rem(result, a, b, CTX_ADDR) + +proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = + let q = initDecimal() + let r = initDecimal() + mpd_divmod(q, r, a, b, CTX_ADDR) + result = (q, r) + + +proc exp*(a: DecimalType): DecimalType = + result = initDecimal() + mpd_exp(result, a, CTX_ADDR) + From 29e11acc4d0cbad1de5675fec55a2fd806e62173 Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 30 Jun 2019 18:05:48 +0200 Subject: [PATCH 03/15] rename initDecimal to newDecimal --- decimal/decimal.nim | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index 125de87..d286fe1 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -27,7 +27,7 @@ proc setPrec*(prec: int) = proc `$`*(s: DecimalType): cstring = mpd_to_sci(s, 0) -proc initDecimal*(): DecimalType = mpd_new(CTX_ADDR) +proc newDecimal*(): DecimalType = mpd_new(CTX_ADDR) proc newDecimal*(s: string): DecimalType = result = mpd_new(CTX_ADDR) @@ -42,57 +42,57 @@ proc newDecimal*(s: int32): DecimalType = mpd_set_i32(result, s, CTX_ADDR) proc clone*(b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_copy(result, b, CTX_ADDR) proc `+`*(a, b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_add(result, a, b, CTX_ADDR) proc `+=`*(a, b: DecimalType) = mpd_add(a, a, b, CTX_ADDR) proc `-`*(a, b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_sub(result, a, b, CTX_ADDR) proc `-=`*(a, b: DecimalType) = mpd_sub(a, a, b, CTX_ADDR) proc `*`*(a, b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_mul(result, a, b, CTX_ADDR) proc `*=`*(a, b: DecimalType) = mpd_mul(a, a, b, CTX_ADDR) proc `/`*(a, b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_div(result, a, b, CTX_ADDR) proc `/=`*(a, b: DecimalType) = mpd_div(a, a, b, CTX_ADDR) proc `^`*(a, b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_pow(result, a, b, CTX_ADDR) proc divint*(a, b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_divint(result, a, b, CTX_ADDR) proc rem*(a, b: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_rem(result, a, b, CTX_ADDR) proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = - let q = initDecimal() - let r = initDecimal() + let q = newDecimal() + let r = newDecimal() mpd_divmod(q, r, a, b, CTX_ADDR) result = (q, r) proc exp*(a: DecimalType): DecimalType = - result = initDecimal() + result = newDecimal() mpd_exp(result, a, CTX_ADDR) From fc2d63fb08b813313b092324c86bf6070b7100be Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 30 Jun 2019 18:12:47 +0200 Subject: [PATCH 04/15] add // operator for divint --- decimal/decimal.nim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index d286fe1..4746a4d 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -8,7 +8,7 @@ import decimal_lowlevel type - DecimalType = ptr mpd_t + DecimalType = ref[ptr mpd_t] const DEFAULT_PREC = MPD_RDIGITS * 2 @@ -81,6 +81,10 @@ proc divint*(a, b: DecimalType): DecimalType = result = newDecimal() mpd_divint(result, a, b, CTX_ADDR) +proc `//`*(a, b: DecimalType): DecimalType = + result = newDecimal() + mpd_divint(result, a, b, CTX_ADDR) + proc rem*(a, b: DecimalType): DecimalType = result = newDecimal() mpd_rem(result, a, b, CTX_ADDR) From a7736b93fb46d190903687c4c897435ec4cf2c36 Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 30 Jun 2019 23:32:01 +0200 Subject: [PATCH 05/15] add init Decimal test --- tests/all_tests.nim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/all_tests.nim b/tests/all_tests.nim index 8525e47..843ea98 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -9,6 +9,8 @@ import unittest, ../decimal/decimal suite "Basic Arithmetic": + test "init Decimal": + var d = newDecimal() test "Set Decimal from string": let s = "1.23456" var d = newDecimal(s) From bcfc29259e8ae774a3447627629ff67228ec5a80 Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 30 Jun 2019 23:33:18 +0200 Subject: [PATCH 06/15] make DecimalType ref[ptr mpd_t] and use quiet proc --- decimal/decimal.nim | 74 +++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index 4746a4d..f42e5de 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -9,6 +9,7 @@ import decimal_lowlevel type DecimalType = ref[ptr mpd_t] + DecimalError = object of Exception const DEFAULT_PREC = MPD_RDIGITS * 2 @@ -23,80 +24,101 @@ proc setPrec*(prec: int) = if 0 < prec: let success = mpd_qsetprec(CTX_ADDR, prec) if success == 0: - echo "Bad prec" + raise newException(DecimalError, "Couldn't set precision") -proc `$`*(s: DecimalType): cstring = mpd_to_sci(s, 0) +proc `$`*(s: DecimalType): cstring = mpd_to_sci(s[], 0) -proc newDecimal*(): DecimalType = mpd_new(CTX_ADDR) +proc newDecimal*(): DecimalType = + new[ptr mpd_t](result) + result[] = mpd_qnew() proc newDecimal*(s: string): DecimalType = - result = mpd_new(CTX_ADDR) - mpd_set_string(result, s, CTX_ADDR) + new[ptr mpd_t](result) + result[] = mpd_qnew() + mpd_set_string(result[], s, CTX_ADDR) proc newDecimal*(s: int64): DecimalType = - result = mpd_new(CTX_ADDR) - mpd_set_i64(result, s, CTX_ADDR) + new[ptr mpd_t](result) + result[] = mpd_qnew() + mpd_set_i64(result[], s, CTX_ADDR) proc newDecimal*(s: int32): DecimalType = - result = mpd_new(CTX_ADDR) - mpd_set_i32(result, s, CTX_ADDR) + result[] = mpd_qnew() + mpd_set_i32(result[], s, CTX_ADDR) proc clone*(b: DecimalType): DecimalType = result = newDecimal() - mpd_copy(result, b, CTX_ADDR) + var status: uint32 + let success = mpd_qcopy(result[], b[], addr status) + if success == 0: + raise newException(DecimalError, "Decimal failed to copy") proc `+`*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_add(result, a, b, CTX_ADDR) + mpd_qadd(result[], a[], b[], CTX_ADDR, addr status) proc `+=`*(a, b: DecimalType) = - mpd_add(a, a, b, CTX_ADDR) + var status: uint32 + mpd_qadd(a[], a[], b[], CTX_ADDR, addr status) proc `-`*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_sub(result, a, b, CTX_ADDR) + mpd_qsub(result[], a[], b[], CTX_ADDR, addr status) proc `-=`*(a, b: DecimalType) = - mpd_sub(a, a, b, CTX_ADDR) + var status: uint32 + mpd_qsub(a[], a[], b[], CTX_ADDR, addr status) proc `*`*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_mul(result, a, b, CTX_ADDR) + mpd_qmul(result[], a[], b[], CTX_ADDR, addr status) proc `*=`*(a, b: DecimalType) = - mpd_mul(a, a, b, CTX_ADDR) + var status: uint32 + mpd_qmul(a[], a[], b[], CTX_ADDR, addr status) proc `/`*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_div(result, a, b, CTX_ADDR) + mpd_qdiv(result[], a[], b[], CTX_ADDR, addr status) proc `/=`*(a, b: DecimalType) = - mpd_div(a, a, b, CTX_ADDR) + var status: uint32 + mpd_qdiv(a[], a[], b[], CTX_ADDR, addr status) proc `^`*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_pow(result, a, b, CTX_ADDR) + mpd_qpow(result[], a[], b[], CTX_ADDR, addr status) proc divint*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_divint(result, a, b, CTX_ADDR) + mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) proc `//`*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_divint(result, a, b, CTX_ADDR) + mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) proc rem*(a, b: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_rem(result, a, b, CTX_ADDR) + mpd_qrem(result[], a[], b[], CTX_ADDR, addr status) proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = - let q = newDecimal() - let r = newDecimal() - mpd_divmod(q, r, a, b, CTX_ADDR) + var status: uint32 + var q = newDecimal() + var r = newDecimal() + mpd_qdivmod(q[], r[], a[], b[], CTX_ADDR, addr status) result = (q, r) proc exp*(a: DecimalType): DecimalType = + var status: uint32 result = newDecimal() - mpd_exp(result, a, CTX_ADDR) + mpd_qexp(result[], a[], CTX_ADDR, addr status) From f791321d5c9a04956745adc577d8013137cf0445 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 1 Jul 2019 11:05:31 +0200 Subject: [PATCH 07/15] add more tests --- tests/all_tests.nim | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/all_tests.nim b/tests/all_tests.nim index 843ea98..bfca8c8 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -44,3 +44,34 @@ suite "Basic Arithmetic": var c = a / b let correct = "2.5" check $c == correct + test "Decimal Power 1": + var a = newDecimal("2.5") + var b = newDecimal("2") + var c = a ^ b + check $c == "6.25" + test "Decimal Power 2": + var a = newDecimal("81") + var b = newDecimal("0.5") + var c = a ^ b + check $c == "9.0000000000000000000000000000000000000" + test "Decimal divint": + let a = newDecimal("11") + let b = newDecimal("3") + let c = a // b + check $c == "3" + test "Decimal rem": + let a = newDecimal("11") + let b = newDecimal("3") + let c = rem(a, b) + check $c == "2" + test "Decimal divmod": + let a = newDecimal("11") + let b = newDecimal("3") + let (q, r) = divmod(a, b) + check $q == "3" + check $r == "2" + test "Decimal exp": + let a = newDecimal("2") + let c = exp(a) + check $c == "7.3890560989306502272304274605750078132" + From 8c6cdfcaa9b04f12cd8e8fb04c358a2ba901f72d Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 2 Jul 2019 18:28:55 +0200 Subject: [PATCH 08/15] add high level API and make it nimble installable --- .gitignore | 2 +- decimal.nimble | 2 +- decimal/decimal.nim | 124 ------ src/decimal.nim | 361 ++++++++++++++++++ {decimal => src/decimal}/decimal_lowlevel.nim | 8 +- {decimal => src}/mpdecimal_wrapper/README.md | 0 .../mpdecimal_wrapper/genSources.sh | 0 .../mpdecimal_wrapper/generated/basearith.c | 0 .../mpdecimal_wrapper/generated/basearith.h | 0 .../mpdecimal_wrapper/generated/bench.c | 0 .../mpdecimal_wrapper/generated/bits.h | 0 .../mpdecimal_wrapper/generated/config.h | 0 .../mpdecimal_wrapper/generated/constants.c | 0 .../mpdecimal_wrapper/generated/constants.h | 0 .../mpdecimal_wrapper/generated/context.c | 0 .../mpdecimal_wrapper/generated/convolute.c | 0 .../mpdecimal_wrapper/generated/convolute.h | 0 .../mpdecimal_wrapper/generated/crt.c | 0 .../mpdecimal_wrapper/generated/crt.h | 0 .../mpdecimal_wrapper/generated/difradix2.c | 0 .../mpdecimal_wrapper/generated/difradix2.h | 0 .../mpdecimal_wrapper/generated/fnt.c | 0 .../mpdecimal_wrapper/generated/fnt.h | 0 .../mpdecimal_wrapper/generated/fourstep.c | 0 .../mpdecimal_wrapper/generated/fourstep.h | 0 .../mpdecimal_wrapper/generated/io.c | 0 .../mpdecimal_wrapper/generated/io.h | 0 .../mpdecimal_wrapper/generated/memory.c | 0 .../mpdecimal_wrapper/generated/memory.h | 0 .../mpdecimal_wrapper/generated/mpdecimal.c | 0 .../mpdecimal_wrapper/generated/mpdecimal.h | 0 .../generated/mpdecimal32vc.h | 0 .../generated/mpdecimal64vc.h | 0 .../mpdecimal_wrapper/generated/mpsignal.c | 0 .../generated/numbertheory.c | 0 .../generated/numbertheory.h | 0 .../mpdecimal_wrapper/generated/sixstep.c | 0 .../mpdecimal_wrapper/generated/sixstep.h | 0 .../mpdecimal_wrapper/generated/transpose.c | 0 .../mpdecimal_wrapper/generated/transpose.h | 0 .../mpdecimal_wrapper/generated/typearith.h | 0 .../mpdecimal_wrapper/generated/umodarith.h | 0 .../mpdecimal_wrapper/generated/vccompat.h | 0 .../mpdecimal_wrapper/generated/vcstdint.h | 0 .../mpdecimal_sources/.hg_archival.txt | 0 .../mpdecimal_sources/CHANGELOG.txt | 0 .../mpdecimal_sources/COMPILERS.txt | 0 .../mpdecimal_sources/INSTALL.txt | 0 .../mpdecimal_sources/LICENSE.txt | 0 .../mpdecimal_sources/Makefile.in | 0 .../mpdecimal_sources/README.txt | 0 .../mpdecimal_sources/config.guess | 0 .../mpdecimal_sources/config.h.in | 0 .../mpdecimal_sources/config.sub | 0 .../mpdecimal_sources/configure | 0 .../mpdecimal_sources/configure.ac | 0 .../mpdecimal_sources/doc/LICENSE.txt | 0 .../doc/_static/ajax-loader.gif | Bin .../mpdecimal_sources/doc/_static/basic.css | 0 .../doc/_static/comment-bright.png | Bin .../doc/_static/comment-close.png | Bin .../mpdecimal_sources/doc/_static/comment.png | Bin .../mpdecimal_sources/doc/_static/default.css | 0 .../mpdecimal_sources/doc/_static/doctools.js | 0 .../doc/_static/down-pressed.png | Bin .../mpdecimal_sources/doc/_static/down.png | Bin .../mpdecimal_sources/doc/_static/file.png | Bin .../mpdecimal_sources/doc/_static/jquery.js | 0 .../mpdecimal_sources/doc/_static/minus.png | Bin .../doc/_static/mpdecimal-doc.css | 0 .../mpdecimal_sources/doc/_static/plus.png | Bin .../doc/_static/pygments.css | 0 .../doc/_static/searchtools.js | 0 .../mpdecimal_sources/doc/_static/sidebar.js | 0 .../doc/_static/underscore.js | 0 .../doc/_static/up-pressed.png | Bin .../mpdecimal_sources/doc/_static/up.png | Bin .../doc/_static/websupport.js | 0 .../mpdecimal_sources/doc/arithmetic.html | 0 .../mpdecimal_sources/doc/assign-convert.html | 0 .../mpdecimal_sources/doc/attributes.html | 0 .../mpdecimal_sources/doc/context.html | 0 .../mpdecimal_sources/doc/decimals.html | 0 .../mpdecimal_sources/doc/functions.html | 0 .../mpdecimal_sources/doc/index.html | 0 .../mpdecimal_sources/doc/memory.html | 0 .../mpdecimal_sources/doc/objects.inv | Bin .../mpdecimal_sources/doc/search.html | 0 .../mpdecimal_sources/doc/searchindex.js | 0 .../mpdecimal_sources/doc/various.html | 0 .../mpdecimal_sources/examples/README.txt | 0 .../mpdecimal_sources/examples/compare.c | 0 .../mpdecimal_sources/examples/div.c | 0 .../mpdecimal_sources/examples/divmod.c | 0 .../mpdecimal_sources/examples/multiply.c | 0 .../mpdecimal_sources/examples/pow.c | 0 .../mpdecimal_sources/examples/powmod.c | 0 .../mpdecimal_sources/examples/shift.c | 0 .../mpdecimal_sources/examples/sqrt.c | 0 .../mpdecimal_sources/install-sh | 0 .../libmpdec/.objs/README.txt | 0 .../mpdecimal_sources/libmpdec/Makefile.in | 0 .../mpdecimal_sources/libmpdec/Makefile.vc | 0 .../mpdecimal_sources/libmpdec/README.txt | 0 .../mpdecimal_sources/libmpdec/basearith.c | 0 .../mpdecimal_sources/libmpdec/basearith.h | 0 .../mpdecimal_sources/libmpdec/bench.c | 0 .../mpdecimal_sources/libmpdec/bits.h | 0 .../mpdecimal_sources/libmpdec/constants.c | 0 .../mpdecimal_sources/libmpdec/constants.h | 0 .../mpdecimal_sources/libmpdec/context.c | 0 .../mpdecimal_sources/libmpdec/convolute.c | 0 .../mpdecimal_sources/libmpdec/convolute.h | 0 .../mpdecimal_sources/libmpdec/crt.c | 0 .../mpdecimal_sources/libmpdec/crt.h | 0 .../mpdecimal_sources/libmpdec/difradix2.c | 0 .../mpdecimal_sources/libmpdec/difradix2.h | 0 .../mpdecimal_sources/libmpdec/fnt.c | 0 .../mpdecimal_sources/libmpdec/fnt.h | 0 .../mpdecimal_sources/libmpdec/fourstep.c | 0 .../mpdecimal_sources/libmpdec/fourstep.h | 0 .../mpdecimal_sources/libmpdec/io.c | 0 .../mpdecimal_sources/libmpdec/io.h | 0 .../libmpdec/literature/REFERENCES.txt | 0 .../libmpdec/literature/bignum.txt | 0 .../libmpdec/literature/fnt.py | 0 .../libmpdec/literature/matrix-transform.txt | 0 .../libmpdec/literature/mulmod-64.txt | 0 .../libmpdec/literature/mulmod-ppro.txt | 0 .../libmpdec/literature/six-step.txt | 0 .../libmpdec/literature/umodarith.lisp | 0 .../mpdecimal_sources/libmpdec/memory.c | 0 .../mpdecimal_sources/libmpdec/memory.h | 0 .../mpdecimal_sources/libmpdec/mpdecimal.c | 0 .../mpdecimal_sources/libmpdec/mpdecimal.h.in | 0 .../libmpdec/mpdecimal32vc.h | 0 .../libmpdec/mpdecimal64vc.h | 0 .../mpdecimal_sources/libmpdec/mpsignal.c | 0 .../mpdecimal_sources/libmpdec/numbertheory.c | 0 .../mpdecimal_sources/libmpdec/numbertheory.h | 0 .../mpdecimal_sources/libmpdec/sixstep.c | 0 .../mpdecimal_sources/libmpdec/sixstep.h | 0 .../mpdecimal_sources/libmpdec/transpose.c | 0 .../mpdecimal_sources/libmpdec/transpose.h | 0 .../mpdecimal_sources/libmpdec/typearith.h | 0 .../mpdecimal_sources/libmpdec/umodarith.h | 0 .../mpdecimal_sources/libmpdec/vccompat.h | 0 .../mpdecimal_sources/libmpdec/vcdiv64.asm | 0 .../mpdecimal_sources/libmpdec/vcstdint.h | 0 .../mpdecimal_sources/tests/Makefile.in | 0 .../mpdecimal_sources/tests/Makefile.vc | 0 .../mpdecimal_sources/tests/README.txt | 0 .../tests/additional.decTest | 0 .../mpdecimal_sources/tests/gettests.sh | 0 .../mpdecimal_sources/tests/malloc_fail.c | 0 .../mpdecimal_sources/tests/malloc_fail.h | 0 .../mpdecimal_sources/tests/mptest.h | 0 .../mpdecimal_sources/tests/official.decTest | 0 .../mpdecimal_sources/tests/runshort.sh | 0 .../mpdecimal_sources/tests/runshort_alloc.sh | 0 .../mpdecimal_sources/tests/runtest.c | 0 .../tests/testdata_dist/baseconv.decTest | 0 .../tests/testdata_dist/binop_eq.decTest | 0 .../tests/testdata_dist/cov.decTest | 0 .../tests/testdata_dist/divmod.decTest | 0 .../tests/testdata_dist/divmod_eq.decTest | 0 .../tests/testdata_dist/extra.decTest | 0 .../tests/testdata_dist/fma_eq.decTest | 0 .../tests/testdata_dist/format.decTest | 0 .../tests/testdata_dist/getint.decTest | 0 .../tests/testdata_dist/invroot.decTest | 0 .../tests/testdata_dist/largeint.decTest | 0 .../tests/testdata_dist/powmod.decTest | 0 .../tests/testdata_dist/powmod_eq.decTest | 0 .../tests/testdata_dist/shiftlr.decTest | 0 .../tests/testdata_dist/testruntest.decTest | 0 .../mpdecimal_sources/tools/release.sh | 0 .../mpdecimal_sources/tools/replace.sh | 0 .../mpdecimal_sources/tools/todos.sh | 0 .../mpdecimal_sources/vcbuild/README.txt | 0 .../mpdecimal_sources/vcbuild/gettests.bat | 0 .../mpdecimal_sources/vcbuild/runtest32.bat | 0 .../mpdecimal_sources/vcbuild/runtest64.bat | 0 .../mpdecimal_sources/vcbuild/vcbuild32.bat | 0 .../mpdecimal_sources/vcbuild/vcbuild64.bat | 0 .../mpdecimal_sources/vcbuild/vcclean.bat | 0 .../mpdecimal_sources/vcbuild/vcdistclean.bat | 0 tests/all_tests.nim | 54 ++- 188 files changed, 418 insertions(+), 133 deletions(-) delete mode 100644 decimal/decimal.nim create mode 100644 src/decimal.nim rename {decimal => src/decimal}/decimal_lowlevel.nim (99%) rename {decimal => src}/mpdecimal_wrapper/README.md (100%) rename {decimal => src}/mpdecimal_wrapper/genSources.sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/generated/basearith.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/basearith.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/bench.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/bits.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/config.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/constants.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/constants.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/context.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/convolute.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/convolute.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/crt.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/crt.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/difradix2.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/difradix2.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/fnt.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/fnt.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/fourstep.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/fourstep.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/io.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/io.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/memory.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/memory.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/mpdecimal.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/mpdecimal.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/mpdecimal32vc.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/mpdecimal64vc.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/mpsignal.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/numbertheory.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/numbertheory.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/sixstep.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/sixstep.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/transpose.c (100%) rename {decimal => src}/mpdecimal_wrapper/generated/transpose.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/typearith.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/umodarith.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/vccompat.h (100%) rename {decimal => src}/mpdecimal_wrapper/generated/vcstdint.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/Makefile.in (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/README.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/config.guess (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/config.h.in (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/config.sub (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/configure (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/configure.ac (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/context.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/index.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/search.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/doc/various.html (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/div.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/install-sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt (100%) rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat (100%) mode change 100755 => 100644 rename {decimal => src}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat (100%) mode change 100755 => 100644 diff --git a/.gitignore b/.gitignore index ef56d28..b3c7e17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ nimcache/ - +.vscode/ # Executables shall be put in an ignored build/ directory # Ignore dynamic, static libs and libtool archive files build/ diff --git a/decimal.nimble b/decimal.nimble index bde7ed7..d06917a 100644 --- a/decimal.nimble +++ b/decimal.nimble @@ -1,4 +1,4 @@ -packageName = "Decimal" +packageName = "decimal" version = "0.0.1" author = "Status Research & Development GmbH" description = "A correctly-rounded arbitrary precision decimal floating point arithmetic library" diff --git a/decimal/decimal.nim b/decimal/decimal.nim deleted file mode 100644 index f42e5de..0000000 --- a/decimal/decimal.nim +++ /dev/null @@ -1,124 +0,0 @@ -# Decimal -# Copyright (c) 2018 Status Research & Development GmbH -# Licensed and distributed under either of -# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). -# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). -# at your option. This file may not be copied, modified, or distributed except according to those terms. - -import decimal_lowlevel - -type - DecimalType = ref[ptr mpd_t] - DecimalError = object of Exception - -const - DEFAULT_PREC = MPD_RDIGITS * 2 - DEFAULT_EMAX = when (sizeof(int) == 8): 999999999999999999 else: 425000000 - DEFAULT_EMIN = when (sizeof(int) == 8): -999999999999999999 else: -425000000 - -var CTX: mpd_context_t -var CTX_ADDR = addr CTX -mpd_defaultcontext(CTX_ADDR) - -proc setPrec*(prec: int) = - if 0 < prec: - let success = mpd_qsetprec(CTX_ADDR, prec) - if success == 0: - raise newException(DecimalError, "Couldn't set precision") - -proc `$`*(s: DecimalType): cstring = mpd_to_sci(s[], 0) - -proc newDecimal*(): DecimalType = - new[ptr mpd_t](result) - result[] = mpd_qnew() - -proc newDecimal*(s: string): DecimalType = - new[ptr mpd_t](result) - result[] = mpd_qnew() - mpd_set_string(result[], s, CTX_ADDR) - -proc newDecimal*(s: int64): DecimalType = - new[ptr mpd_t](result) - result[] = mpd_qnew() - mpd_set_i64(result[], s, CTX_ADDR) - -proc newDecimal*(s: int32): DecimalType = - result[] = mpd_qnew() - mpd_set_i32(result[], s, CTX_ADDR) - -proc clone*(b: DecimalType): DecimalType = - result = newDecimal() - var status: uint32 - let success = mpd_qcopy(result[], b[], addr status) - if success == 0: - raise newException(DecimalError, "Decimal failed to copy") - -proc `+`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qadd(result[], a[], b[], CTX_ADDR, addr status) - -proc `+=`*(a, b: DecimalType) = - var status: uint32 - mpd_qadd(a[], a[], b[], CTX_ADDR, addr status) - -proc `-`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qsub(result[], a[], b[], CTX_ADDR, addr status) - -proc `-=`*(a, b: DecimalType) = - var status: uint32 - mpd_qsub(a[], a[], b[], CTX_ADDR, addr status) - -proc `*`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qmul(result[], a[], b[], CTX_ADDR, addr status) - -proc `*=`*(a, b: DecimalType) = - var status: uint32 - mpd_qmul(a[], a[], b[], CTX_ADDR, addr status) - -proc `/`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qdiv(result[], a[], b[], CTX_ADDR, addr status) - -proc `/=`*(a, b: DecimalType) = - var status: uint32 - mpd_qdiv(a[], a[], b[], CTX_ADDR, addr status) - -proc `^`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qpow(result[], a[], b[], CTX_ADDR, addr status) - -proc divint*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) - -proc `//`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) - -proc rem*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qrem(result[], a[], b[], CTX_ADDR, addr status) - -proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = - var status: uint32 - var q = newDecimal() - var r = newDecimal() - mpd_qdivmod(q[], r[], a[], b[], CTX_ADDR, addr status) - result = (q, r) - - -proc exp*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qexp(result[], a[], CTX_ADDR, addr status) - diff --git a/src/decimal.nim b/src/decimal.nim new file mode 100644 index 0000000..7f37da6 --- /dev/null +++ b/src/decimal.nim @@ -0,0 +1,361 @@ +# Decimal +# Copyright (c) 2018 Status Research & Development GmbH +# Licensed and distributed under either of +# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). +# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). +# at your option. This file may not be copied, modified, or distributed except according to those terms. + +import decimal/decimal_lowlevel + +type + DecimalType* = ref[ptr mpd_t] + DecimalError* = object of Exception + +const + DEFAULT_PREC = MPD_RDIGITS * 2 + DEFAULT_EMAX = when (sizeof(int) == 8): 999999999999999999 else: 425000000 + DEFAULT_EMIN = when (sizeof(int) == 8): -999999999999999999 else: -425000000 + +var CTX: mpd_context_t +var CTX_ADDR = addr CTX +mpd_defaultcontext(CTX_ADDR) + +proc setPrec*(prec: mpd_ssize_t) = + if 0 < prec: + let success = mpd_qsetprec(CTX_ADDR, prec) + if success == 0: + raise newException(DecimalError, "Couldn't set precision") + +proc `$`*(s: DecimalType): string = + $mpd_to_sci(s[], 0) + +proc newDecimal*(): DecimalType = + new result + result[] = mpd_qnew() + +proc newDecimal*(s: string): DecimalType = + new result + result[] = mpd_qnew() + mpd_set_string(result[], s, CTX_ADDR) + +proc newDecimal*(s: int64): DecimalType = + new result + result[] = mpd_qnew() + mpd_set_i64(result[], s, CTX_ADDR) + +proc newDecimal*(s: int32): DecimalType = + new result + result[] = mpd_qnew() + mpd_set_i32(result[], s, CTX_ADDR) + +proc clone*(b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + let success = mpd_qcopy(result[], b[], addr status) + if success == 0: + raise newException(DecimalError, "Decimal failed to copy") + +# Operators + +proc `+`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qadd(result[], a[], b[], CTX_ADDR, addr status) + +template `+`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a + newDecimal($b) + +template `+`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) + b + +proc `+=`*(a, b: DecimalType) = + var status: uint32 + mpd_qadd(a[], a[], b[], CTX_ADDR, addr status) + +template `+=`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a += newDecimal($b) + + + +proc `-`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qsub(result[], a[], b[], CTX_ADDR, addr status) + +template `-`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a - newDecimal($b) + +template `-`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) - b + +proc `-=`*(a, b: DecimalType) = + var status: uint32 + mpd_qsub(a[], a[], b[], CTX_ADDR, addr status) + +template `-=`*[T: SomeNumber](a: DecimalType, b: T) = + a -= newDecimal($b) + + +proc `*`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmul(result[], a[], b[], CTX_ADDR, addr status) + +template `*`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) * b + +template `*`*[T: SomeNumber](a: DecimalType, b: T): untyped = + newDecimal($b) * a + +proc `*=`*(a, b: DecimalType) = + var status: uint32 + mpd_qmul(a[], a[], b[], CTX_ADDR, addr status) + +template `*=`*[T: SomeNumber](a: DecimalType, b: T) = + a *= newDecimal($b) + + + +proc `/`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qdiv(result[], a[], b[], CTX_ADDR, addr status) + +template `/`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a / newDecimal($b) + +proc `/=`*(a, b: DecimalType) = + var status: uint32 + mpd_qdiv(a[], a[], b[], CTX_ADDR, addr status) + +template `/=`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a /= newDecimal($b) + + + +proc `//`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) + +template `//`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a // newDecimal($b) + +proc `^`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qpow(result[], a[], b[], CTX_ADDR, addr status) + +template `^`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a ^ newDecimal($b) + +proc `==`*(a, b: DecimalType): bool = + var status: uint32 + let cmp = mpd_qcmp(a[], b[], addr status) + if cmp == 0: + return true + else: + return false + +template `==`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a == newDecimal($b) + +template `==`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) == b + +proc `<`*(a, b: DecimalType): bool = + var status: uint32 + let cmp = mpd_qcmp(a[], b[], addr status) + if cmp == -1: + return true + else: + return false + +template `<`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a < newDecimal($b) +template `<`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) < b + +proc `<=`*(a, b: DecimalType): bool = + let less_cmp = a < b + if less_cmp: return true + let equal_cmp = a == b + if equal_cmp: return true + return false +template `<=`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a <= newDecimal($b) +template `<=`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) <= b + + + +proc divint*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) + +proc rem*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qrem(result[], a[], b[], CTX_ADDR, addr status) + +proc rem_near*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qrem_near(result[], a[], b[], CTX_ADDR, addr status) + +proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = + var status: uint32 + var q = newDecimal() + var r = newDecimal() + mpd_qdivmod(q[], r[], a[], b[], CTX_ADDR, addr status) + result = (q, r) + +proc fma*(a, b, c: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qfma(result[], a[], b[], c[], CTX_ADDR, addr status) + + +# Math functions + +proc exp*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qexp(result[], a[], CTX_ADDR, addr status) + +proc ln*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qln(result[], a[], CTX_ADDR, addr status) + +proc log10*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qlog10(result[], a[], CTX_ADDR, addr status) + +proc sqrt*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qsqrt(result[], a[], CTX_ADDR, addr status) + +proc invroot*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qinvroot(result[], a[], CTX_ADDR, addr status) + + + +proc `-`*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qminus(result[], a[], CTX_ADDR, addr status) + +proc plus*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qplus(result[], a[], CTX_ADDR, addr status) + +proc abs*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qabs(result[], a[], CTX_ADDR, addr status) + + + +proc max*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmax(result[], a[], b[], CTX_ADDR, addr status) + +proc max_mag*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmax_mag(result[], a[], b[], CTX_ADDR, addr status) + +proc min*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmin(result[], a[], b[], CTX_ADDR, addr status) + +proc min_mag*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmin_mag(result[], a[], b[], CTX_ADDR, addr status) + +proc next_plus*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qnext_plus(result[], a[], CTX_ADDR, addr status) + +proc next_minus*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qnext_minus(result[], a[], CTX_ADDR, addr status) + +proc next_toward*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qnext_toward(result[], a[], b[], CTX_ADDR, addr status) + +proc quantize*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qquantize(result[], a[], b[], CTX_ADDR, addr status) + +proc rescale*(a: DecimalType, b: mpd_ssize_t): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qrescale(result[], a[], b, CTX_ADDR, addr status) + +proc same_quantum*(a, b: DecimalType): bool = + let cmp = mpd_same_quantum(a[], b[]) + if cmp == 1: + return true + else: + return false + +proc reduce*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qreduce(result[], a[], CTX_ADDR, addr status) + +proc round_to_intx*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qround_to_intx(result[], a[], CTX_ADDR, addr status) + +proc round_to_int*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qround_to_int(result[], a[], CTX_ADDR, addr status) + +proc floor*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qfloor(result[], a[], CTX_ADDR, addr status) + +proc ceil*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qceil(result[], a[], CTX_ADDR, addr status) + +proc truncate*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qtrunc(result[], a[], CTX_ADDR, addr status) + +proc logb*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qlogb(result[], a[], CTX_ADDR, addr status) + +proc scaleb*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qscaleb(result[], a[], b[], CTX_ADDR, addr status) + +proc powmod*(base, exp, modulus: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qpowmod(result[], base[], exp[], modulus[], CTX_ADDR, addr status) \ No newline at end of file diff --git a/decimal/decimal_lowlevel.nim b/src/decimal/decimal_lowlevel.nim similarity index 99% rename from decimal/decimal_lowlevel.nim rename to src/decimal/decimal_lowlevel.nim index 348ae85..bca5d49 100644 --- a/decimal/decimal_lowlevel.nim +++ b/src/decimal/decimal_lowlevel.nim @@ -4,11 +4,11 @@ # * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). # at your option. This file may not be copied, modified, or distributed except according to those terms. - -import strutils, macros, ospaths +import os +import strutils, macros from os import DirSep, walkFiles -const cSourcesPath = currentSourcePath.rsplit(DirSep, 1)[0] & "/mpdecimal_wrapper/generated" +const cSourcesPath = currentSourcePath.rsplit(DirSep, 1)[0] & "/../mpdecimal_wrapper/generated" const cHeader = csourcesPath / "mpdecimal.h" {.passC: "-I" & cSourcesPath .} @@ -56,7 +56,7 @@ macro compileFilesFromDir(path: static[string], fileNameBody: untyped): untyped ) # Order is important -compileFilesFromDir("mpdecimal_wrapper/generated/"): +compileFilesFromDir("/../mpdecimal_wrapper/generated/"): "basearith.c" "context.c" "constants.c" diff --git a/decimal/mpdecimal_wrapper/README.md b/src/mpdecimal_wrapper/README.md similarity index 100% rename from decimal/mpdecimal_wrapper/README.md rename to src/mpdecimal_wrapper/README.md diff --git a/decimal/mpdecimal_wrapper/genSources.sh b/src/mpdecimal_wrapper/genSources.sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/genSources.sh rename to src/mpdecimal_wrapper/genSources.sh diff --git a/decimal/mpdecimal_wrapper/generated/basearith.c b/src/mpdecimal_wrapper/generated/basearith.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/basearith.c rename to src/mpdecimal_wrapper/generated/basearith.c diff --git a/decimal/mpdecimal_wrapper/generated/basearith.h b/src/mpdecimal_wrapper/generated/basearith.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/basearith.h rename to src/mpdecimal_wrapper/generated/basearith.h diff --git a/decimal/mpdecimal_wrapper/generated/bench.c b/src/mpdecimal_wrapper/generated/bench.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/bench.c rename to src/mpdecimal_wrapper/generated/bench.c diff --git a/decimal/mpdecimal_wrapper/generated/bits.h b/src/mpdecimal_wrapper/generated/bits.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/bits.h rename to src/mpdecimal_wrapper/generated/bits.h diff --git a/decimal/mpdecimal_wrapper/generated/config.h b/src/mpdecimal_wrapper/generated/config.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/config.h rename to src/mpdecimal_wrapper/generated/config.h diff --git a/decimal/mpdecimal_wrapper/generated/constants.c b/src/mpdecimal_wrapper/generated/constants.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/constants.c rename to src/mpdecimal_wrapper/generated/constants.c diff --git a/decimal/mpdecimal_wrapper/generated/constants.h b/src/mpdecimal_wrapper/generated/constants.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/constants.h rename to src/mpdecimal_wrapper/generated/constants.h diff --git a/decimal/mpdecimal_wrapper/generated/context.c b/src/mpdecimal_wrapper/generated/context.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/context.c rename to src/mpdecimal_wrapper/generated/context.c diff --git a/decimal/mpdecimal_wrapper/generated/convolute.c b/src/mpdecimal_wrapper/generated/convolute.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/convolute.c rename to src/mpdecimal_wrapper/generated/convolute.c diff --git a/decimal/mpdecimal_wrapper/generated/convolute.h b/src/mpdecimal_wrapper/generated/convolute.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/convolute.h rename to src/mpdecimal_wrapper/generated/convolute.h diff --git a/decimal/mpdecimal_wrapper/generated/crt.c b/src/mpdecimal_wrapper/generated/crt.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/crt.c rename to src/mpdecimal_wrapper/generated/crt.c diff --git a/decimal/mpdecimal_wrapper/generated/crt.h b/src/mpdecimal_wrapper/generated/crt.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/crt.h rename to src/mpdecimal_wrapper/generated/crt.h diff --git a/decimal/mpdecimal_wrapper/generated/difradix2.c b/src/mpdecimal_wrapper/generated/difradix2.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/difradix2.c rename to src/mpdecimal_wrapper/generated/difradix2.c diff --git a/decimal/mpdecimal_wrapper/generated/difradix2.h b/src/mpdecimal_wrapper/generated/difradix2.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/difradix2.h rename to src/mpdecimal_wrapper/generated/difradix2.h diff --git a/decimal/mpdecimal_wrapper/generated/fnt.c b/src/mpdecimal_wrapper/generated/fnt.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/fnt.c rename to src/mpdecimal_wrapper/generated/fnt.c diff --git a/decimal/mpdecimal_wrapper/generated/fnt.h b/src/mpdecimal_wrapper/generated/fnt.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/fnt.h rename to src/mpdecimal_wrapper/generated/fnt.h diff --git a/decimal/mpdecimal_wrapper/generated/fourstep.c b/src/mpdecimal_wrapper/generated/fourstep.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/fourstep.c rename to src/mpdecimal_wrapper/generated/fourstep.c diff --git a/decimal/mpdecimal_wrapper/generated/fourstep.h b/src/mpdecimal_wrapper/generated/fourstep.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/fourstep.h rename to src/mpdecimal_wrapper/generated/fourstep.h diff --git a/decimal/mpdecimal_wrapper/generated/io.c b/src/mpdecimal_wrapper/generated/io.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/io.c rename to src/mpdecimal_wrapper/generated/io.c diff --git a/decimal/mpdecimal_wrapper/generated/io.h b/src/mpdecimal_wrapper/generated/io.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/io.h rename to src/mpdecimal_wrapper/generated/io.h diff --git a/decimal/mpdecimal_wrapper/generated/memory.c b/src/mpdecimal_wrapper/generated/memory.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/memory.c rename to src/mpdecimal_wrapper/generated/memory.c diff --git a/decimal/mpdecimal_wrapper/generated/memory.h b/src/mpdecimal_wrapper/generated/memory.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/memory.h rename to src/mpdecimal_wrapper/generated/memory.h diff --git a/decimal/mpdecimal_wrapper/generated/mpdecimal.c b/src/mpdecimal_wrapper/generated/mpdecimal.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/mpdecimal.c rename to src/mpdecimal_wrapper/generated/mpdecimal.c diff --git a/decimal/mpdecimal_wrapper/generated/mpdecimal.h b/src/mpdecimal_wrapper/generated/mpdecimal.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/mpdecimal.h rename to src/mpdecimal_wrapper/generated/mpdecimal.h diff --git a/decimal/mpdecimal_wrapper/generated/mpdecimal32vc.h b/src/mpdecimal_wrapper/generated/mpdecimal32vc.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/mpdecimal32vc.h rename to src/mpdecimal_wrapper/generated/mpdecimal32vc.h diff --git a/decimal/mpdecimal_wrapper/generated/mpdecimal64vc.h b/src/mpdecimal_wrapper/generated/mpdecimal64vc.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/mpdecimal64vc.h rename to src/mpdecimal_wrapper/generated/mpdecimal64vc.h diff --git a/decimal/mpdecimal_wrapper/generated/mpsignal.c b/src/mpdecimal_wrapper/generated/mpsignal.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/mpsignal.c rename to src/mpdecimal_wrapper/generated/mpsignal.c diff --git a/decimal/mpdecimal_wrapper/generated/numbertheory.c b/src/mpdecimal_wrapper/generated/numbertheory.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/numbertheory.c rename to src/mpdecimal_wrapper/generated/numbertheory.c diff --git a/decimal/mpdecimal_wrapper/generated/numbertheory.h b/src/mpdecimal_wrapper/generated/numbertheory.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/numbertheory.h rename to src/mpdecimal_wrapper/generated/numbertheory.h diff --git a/decimal/mpdecimal_wrapper/generated/sixstep.c b/src/mpdecimal_wrapper/generated/sixstep.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/sixstep.c rename to src/mpdecimal_wrapper/generated/sixstep.c diff --git a/decimal/mpdecimal_wrapper/generated/sixstep.h b/src/mpdecimal_wrapper/generated/sixstep.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/sixstep.h rename to src/mpdecimal_wrapper/generated/sixstep.h diff --git a/decimal/mpdecimal_wrapper/generated/transpose.c b/src/mpdecimal_wrapper/generated/transpose.c similarity index 100% rename from decimal/mpdecimal_wrapper/generated/transpose.c rename to src/mpdecimal_wrapper/generated/transpose.c diff --git a/decimal/mpdecimal_wrapper/generated/transpose.h b/src/mpdecimal_wrapper/generated/transpose.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/transpose.h rename to src/mpdecimal_wrapper/generated/transpose.h diff --git a/decimal/mpdecimal_wrapper/generated/typearith.h b/src/mpdecimal_wrapper/generated/typearith.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/typearith.h rename to src/mpdecimal_wrapper/generated/typearith.h diff --git a/decimal/mpdecimal_wrapper/generated/umodarith.h b/src/mpdecimal_wrapper/generated/umodarith.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/umodarith.h rename to src/mpdecimal_wrapper/generated/umodarith.h diff --git a/decimal/mpdecimal_wrapper/generated/vccompat.h b/src/mpdecimal_wrapper/generated/vccompat.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/vccompat.h rename to src/mpdecimal_wrapper/generated/vccompat.h diff --git a/decimal/mpdecimal_wrapper/generated/vcstdint.h b/src/mpdecimal_wrapper/generated/vcstdint.h similarity index 100% rename from decimal/mpdecimal_wrapper/generated/vcstdint.h rename to src/mpdecimal_wrapper/generated/vcstdint.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt b/src/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt b/src/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt b/src/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt b/src/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt b/src/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/Makefile.in b/src/mpdecimal_wrapper/mpdecimal_sources/Makefile.in similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/Makefile.in rename to src/mpdecimal_wrapper/mpdecimal_sources/Makefile.in diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/README.txt b/src/mpdecimal_wrapper/mpdecimal_sources/README.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/README.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/README.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/config.guess b/src/mpdecimal_wrapper/mpdecimal_sources/config.guess old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/config.guess rename to src/mpdecimal_wrapper/mpdecimal_sources/config.guess diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/config.h.in b/src/mpdecimal_wrapper/mpdecimal_sources/config.h.in similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/config.h.in rename to src/mpdecimal_wrapper/mpdecimal_sources/config.h.in diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/config.sub b/src/mpdecimal_wrapper/mpdecimal_sources/config.sub old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/config.sub rename to src/mpdecimal_wrapper/mpdecimal_sources/config.sub diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/configure b/src/mpdecimal_wrapper/mpdecimal_sources/configure old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/configure rename to src/mpdecimal_wrapper/mpdecimal_sources/configure diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/configure.ac b/src/mpdecimal_wrapper/mpdecimal_sources/configure.ac similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/configure.ac rename to src/mpdecimal_wrapper/mpdecimal_sources/configure.ac diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt b/src/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js b/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/context.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/context.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/context.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/context.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/index.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/index.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/index.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/index.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv b/src/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/search.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/search.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/search.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/search.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js b/src/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/various.html b/src/mpdecimal_wrapper/mpdecimal_sources/doc/various.html similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/doc/various.html rename to src/mpdecimal_wrapper/mpdecimal_sources/doc/various.html diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt b/src/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/div.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/div.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/div.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/div.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c b/src/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c rename to src/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/install-sh b/src/mpdecimal_wrapper/mpdecimal_sources/install-sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/install-sh rename to src/mpdecimal_wrapper/mpdecimal_sources/install-sh diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h b/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h rename to src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in b/src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc b/src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt b/src/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh b/src/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c b/src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h b/src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h b/src/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh b/src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh b/src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c b/src/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest b/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest rename to src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh b/src/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh rename to src/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh b/src/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh rename to src/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh b/src/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh rename to src/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat diff --git a/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat b/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat old mode 100755 new mode 100644 similarity index 100% rename from decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat rename to src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat diff --git a/tests/all_tests.nim b/tests/all_tests.nim index bfca8c8..41834c9 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -6,7 +6,7 @@ # at your option. This file may not be copied, modified, or distributed except according to those terms. import unittest, - ../decimal/decimal + ../src/decimal suite "Basic Arithmetic": test "init Decimal": @@ -20,12 +20,36 @@ suite "Basic Arithmetic": var d = newDecimal(s) let correct = "123456" check $d == correct + test "Decimal Addition": var a = newDecimal("1.2") var b = newDecimal("3.5") - var c = a + b + var c1 = a + b + var c2 = b + a let correct = "4.7" - check $c == correct + check $c1 == correct + check $c2 == correct + test "Decimal inplace Addition": + var a = newDecimal("1.2") + var b = newDecimal("3.6") + a += b + let correct = "4.8" + check $a == correct + test "Decimal-Int Addition": + var a = newDecimal("1.2") + var b = 5 + var c1 = a + b + var c2 = b + a + let correct = "6.2" + check $c1 == correct + check $c2 == correct + test "Decimal-Int inplace Addition": + var a = newDecimal("1.2") + var b = 4 + a += b + let correct = "5.2" + check $a == correct + test "Decimal Subtraction": var a = newDecimal("1.2") var b = newDecimal("3.5") @@ -38,12 +62,35 @@ suite "Basic Arithmetic": var c = a * b let correct = "4.20" check $c == correct + test "Decimal Division": var a = newDecimal("6.25") var b = newDecimal("2.5") var c = a / b let correct = "2.5" check $c == correct + test "Decimal-Int Division": + var a = newDecimal("10") + var b = 5 + var c = a / b + let correct = "2" + check $c == correct + + test "Decimal ==": + var a = newDecimal("6.25") + var b = newDecimal("2.5") + check a == a + check (a == b) == false + test "Decimal <": + var a = newDecimal("6.25") + var b = newDecimal("2.5") + check b < a + check (a < b) == false + test "Decimal >": + var a = newDecimal("6.25") + var b = newDecimal("2.5") + check a > b + check (b > a) == false test "Decimal Power 1": var a = newDecimal("2.5") var b = newDecimal("2") @@ -75,3 +122,4 @@ suite "Basic Arithmetic": let c = exp(a) check $c == "7.3890560989306502272304274605750078132" + From 3e72b8e2626b307ac987268176e59da487f93c7a Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 18 Jul 2019 20:56:08 +0200 Subject: [PATCH 09/15] Revert "add high level API and make it nimble installable" This reverts commit 8c6cdfcaa9b04f12cd8e8fb04c358a2ba901f72d. --- .gitignore | 2 +- decimal.nimble | 2 +- decimal/decimal.nim | 124 ++++++ {src/decimal => decimal}/decimal_lowlevel.nim | 8 +- {src => decimal}/mpdecimal_wrapper/README.md | 0 .../mpdecimal_wrapper/genSources.sh | 0 .../mpdecimal_wrapper/generated/basearith.c | 0 .../mpdecimal_wrapper/generated/basearith.h | 0 .../mpdecimal_wrapper/generated/bench.c | 0 .../mpdecimal_wrapper/generated/bits.h | 0 .../mpdecimal_wrapper/generated/config.h | 0 .../mpdecimal_wrapper/generated/constants.c | 0 .../mpdecimal_wrapper/generated/constants.h | 0 .../mpdecimal_wrapper/generated/context.c | 0 .../mpdecimal_wrapper/generated/convolute.c | 0 .../mpdecimal_wrapper/generated/convolute.h | 0 .../mpdecimal_wrapper/generated/crt.c | 0 .../mpdecimal_wrapper/generated/crt.h | 0 .../mpdecimal_wrapper/generated/difradix2.c | 0 .../mpdecimal_wrapper/generated/difradix2.h | 0 .../mpdecimal_wrapper/generated/fnt.c | 0 .../mpdecimal_wrapper/generated/fnt.h | 0 .../mpdecimal_wrapper/generated/fourstep.c | 0 .../mpdecimal_wrapper/generated/fourstep.h | 0 .../mpdecimal_wrapper/generated/io.c | 0 .../mpdecimal_wrapper/generated/io.h | 0 .../mpdecimal_wrapper/generated/memory.c | 0 .../mpdecimal_wrapper/generated/memory.h | 0 .../mpdecimal_wrapper/generated/mpdecimal.c | 0 .../mpdecimal_wrapper/generated/mpdecimal.h | 0 .../generated/mpdecimal32vc.h | 0 .../generated/mpdecimal64vc.h | 0 .../mpdecimal_wrapper/generated/mpsignal.c | 0 .../generated/numbertheory.c | 0 .../generated/numbertheory.h | 0 .../mpdecimal_wrapper/generated/sixstep.c | 0 .../mpdecimal_wrapper/generated/sixstep.h | 0 .../mpdecimal_wrapper/generated/transpose.c | 0 .../mpdecimal_wrapper/generated/transpose.h | 0 .../mpdecimal_wrapper/generated/typearith.h | 0 .../mpdecimal_wrapper/generated/umodarith.h | 0 .../mpdecimal_wrapper/generated/vccompat.h | 0 .../mpdecimal_wrapper/generated/vcstdint.h | 0 .../mpdecimal_sources/.hg_archival.txt | 0 .../mpdecimal_sources/CHANGELOG.txt | 0 .../mpdecimal_sources/COMPILERS.txt | 0 .../mpdecimal_sources/INSTALL.txt | 0 .../mpdecimal_sources/LICENSE.txt | 0 .../mpdecimal_sources/Makefile.in | 0 .../mpdecimal_sources/README.txt | 0 .../mpdecimal_sources/config.guess | 0 .../mpdecimal_sources/config.h.in | 0 .../mpdecimal_sources/config.sub | 0 .../mpdecimal_sources/configure | 0 .../mpdecimal_sources/configure.ac | 0 .../mpdecimal_sources/doc/LICENSE.txt | 0 .../doc/_static/ajax-loader.gif | Bin .../mpdecimal_sources/doc/_static/basic.css | 0 .../doc/_static/comment-bright.png | Bin .../doc/_static/comment-close.png | Bin .../mpdecimal_sources/doc/_static/comment.png | Bin .../mpdecimal_sources/doc/_static/default.css | 0 .../mpdecimal_sources/doc/_static/doctools.js | 0 .../doc/_static/down-pressed.png | Bin .../mpdecimal_sources/doc/_static/down.png | Bin .../mpdecimal_sources/doc/_static/file.png | Bin .../mpdecimal_sources/doc/_static/jquery.js | 0 .../mpdecimal_sources/doc/_static/minus.png | Bin .../doc/_static/mpdecimal-doc.css | 0 .../mpdecimal_sources/doc/_static/plus.png | Bin .../doc/_static/pygments.css | 0 .../doc/_static/searchtools.js | 0 .../mpdecimal_sources/doc/_static/sidebar.js | 0 .../doc/_static/underscore.js | 0 .../doc/_static/up-pressed.png | Bin .../mpdecimal_sources/doc/_static/up.png | Bin .../doc/_static/websupport.js | 0 .../mpdecimal_sources/doc/arithmetic.html | 0 .../mpdecimal_sources/doc/assign-convert.html | 0 .../mpdecimal_sources/doc/attributes.html | 0 .../mpdecimal_sources/doc/context.html | 0 .../mpdecimal_sources/doc/decimals.html | 0 .../mpdecimal_sources/doc/functions.html | 0 .../mpdecimal_sources/doc/index.html | 0 .../mpdecimal_sources/doc/memory.html | 0 .../mpdecimal_sources/doc/objects.inv | Bin .../mpdecimal_sources/doc/search.html | 0 .../mpdecimal_sources/doc/searchindex.js | 0 .../mpdecimal_sources/doc/various.html | 0 .../mpdecimal_sources/examples/README.txt | 0 .../mpdecimal_sources/examples/compare.c | 0 .../mpdecimal_sources/examples/div.c | 0 .../mpdecimal_sources/examples/divmod.c | 0 .../mpdecimal_sources/examples/multiply.c | 0 .../mpdecimal_sources/examples/pow.c | 0 .../mpdecimal_sources/examples/powmod.c | 0 .../mpdecimal_sources/examples/shift.c | 0 .../mpdecimal_sources/examples/sqrt.c | 0 .../mpdecimal_sources/install-sh | 0 .../libmpdec/.objs/README.txt | 0 .../mpdecimal_sources/libmpdec/Makefile.in | 0 .../mpdecimal_sources/libmpdec/Makefile.vc | 0 .../mpdecimal_sources/libmpdec/README.txt | 0 .../mpdecimal_sources/libmpdec/basearith.c | 0 .../mpdecimal_sources/libmpdec/basearith.h | 0 .../mpdecimal_sources/libmpdec/bench.c | 0 .../mpdecimal_sources/libmpdec/bits.h | 0 .../mpdecimal_sources/libmpdec/constants.c | 0 .../mpdecimal_sources/libmpdec/constants.h | 0 .../mpdecimal_sources/libmpdec/context.c | 0 .../mpdecimal_sources/libmpdec/convolute.c | 0 .../mpdecimal_sources/libmpdec/convolute.h | 0 .../mpdecimal_sources/libmpdec/crt.c | 0 .../mpdecimal_sources/libmpdec/crt.h | 0 .../mpdecimal_sources/libmpdec/difradix2.c | 0 .../mpdecimal_sources/libmpdec/difradix2.h | 0 .../mpdecimal_sources/libmpdec/fnt.c | 0 .../mpdecimal_sources/libmpdec/fnt.h | 0 .../mpdecimal_sources/libmpdec/fourstep.c | 0 .../mpdecimal_sources/libmpdec/fourstep.h | 0 .../mpdecimal_sources/libmpdec/io.c | 0 .../mpdecimal_sources/libmpdec/io.h | 0 .../libmpdec/literature/REFERENCES.txt | 0 .../libmpdec/literature/bignum.txt | 0 .../libmpdec/literature/fnt.py | 0 .../libmpdec/literature/matrix-transform.txt | 0 .../libmpdec/literature/mulmod-64.txt | 0 .../libmpdec/literature/mulmod-ppro.txt | 0 .../libmpdec/literature/six-step.txt | 0 .../libmpdec/literature/umodarith.lisp | 0 .../mpdecimal_sources/libmpdec/memory.c | 0 .../mpdecimal_sources/libmpdec/memory.h | 0 .../mpdecimal_sources/libmpdec/mpdecimal.c | 0 .../mpdecimal_sources/libmpdec/mpdecimal.h.in | 0 .../libmpdec/mpdecimal32vc.h | 0 .../libmpdec/mpdecimal64vc.h | 0 .../mpdecimal_sources/libmpdec/mpsignal.c | 0 .../mpdecimal_sources/libmpdec/numbertheory.c | 0 .../mpdecimal_sources/libmpdec/numbertheory.h | 0 .../mpdecimal_sources/libmpdec/sixstep.c | 0 .../mpdecimal_sources/libmpdec/sixstep.h | 0 .../mpdecimal_sources/libmpdec/transpose.c | 0 .../mpdecimal_sources/libmpdec/transpose.h | 0 .../mpdecimal_sources/libmpdec/typearith.h | 0 .../mpdecimal_sources/libmpdec/umodarith.h | 0 .../mpdecimal_sources/libmpdec/vccompat.h | 0 .../mpdecimal_sources/libmpdec/vcdiv64.asm | 0 .../mpdecimal_sources/libmpdec/vcstdint.h | 0 .../mpdecimal_sources/tests/Makefile.in | 0 .../mpdecimal_sources/tests/Makefile.vc | 0 .../mpdecimal_sources/tests/README.txt | 0 .../tests/additional.decTest | 0 .../mpdecimal_sources/tests/gettests.sh | 0 .../mpdecimal_sources/tests/malloc_fail.c | 0 .../mpdecimal_sources/tests/malloc_fail.h | 0 .../mpdecimal_sources/tests/mptest.h | 0 .../mpdecimal_sources/tests/official.decTest | 0 .../mpdecimal_sources/tests/runshort.sh | 0 .../mpdecimal_sources/tests/runshort_alloc.sh | 0 .../mpdecimal_sources/tests/runtest.c | 0 .../tests/testdata_dist/baseconv.decTest | 0 .../tests/testdata_dist/binop_eq.decTest | 0 .../tests/testdata_dist/cov.decTest | 0 .../tests/testdata_dist/divmod.decTest | 0 .../tests/testdata_dist/divmod_eq.decTest | 0 .../tests/testdata_dist/extra.decTest | 0 .../tests/testdata_dist/fma_eq.decTest | 0 .../tests/testdata_dist/format.decTest | 0 .../tests/testdata_dist/getint.decTest | 0 .../tests/testdata_dist/invroot.decTest | 0 .../tests/testdata_dist/largeint.decTest | 0 .../tests/testdata_dist/powmod.decTest | 0 .../tests/testdata_dist/powmod_eq.decTest | 0 .../tests/testdata_dist/shiftlr.decTest | 0 .../tests/testdata_dist/testruntest.decTest | 0 .../mpdecimal_sources/tools/release.sh | 0 .../mpdecimal_sources/tools/replace.sh | 0 .../mpdecimal_sources/tools/todos.sh | 0 .../mpdecimal_sources/vcbuild/README.txt | 0 .../mpdecimal_sources/vcbuild/gettests.bat | 0 .../mpdecimal_sources/vcbuild/runtest32.bat | 0 .../mpdecimal_sources/vcbuild/runtest64.bat | 0 .../mpdecimal_sources/vcbuild/vcbuild32.bat | 0 .../mpdecimal_sources/vcbuild/vcbuild64.bat | 0 .../mpdecimal_sources/vcbuild/vcclean.bat | 0 .../mpdecimal_sources/vcbuild/vcdistclean.bat | 0 src/decimal.nim | 361 ------------------ tests/all_tests.nim | 54 +-- 188 files changed, 133 insertions(+), 418 deletions(-) create mode 100644 decimal/decimal.nim rename {src/decimal => decimal}/decimal_lowlevel.nim (99%) rename {src => decimal}/mpdecimal_wrapper/README.md (100%) rename {src => decimal}/mpdecimal_wrapper/genSources.sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/generated/basearith.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/basearith.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/bench.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/bits.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/config.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/constants.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/constants.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/context.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/convolute.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/convolute.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/crt.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/crt.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/difradix2.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/difradix2.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/fnt.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/fnt.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/fourstep.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/fourstep.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/io.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/io.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/memory.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/memory.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/mpdecimal.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/mpdecimal.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/mpdecimal32vc.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/mpdecimal64vc.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/mpsignal.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/numbertheory.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/numbertheory.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/sixstep.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/sixstep.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/transpose.c (100%) rename {src => decimal}/mpdecimal_wrapper/generated/transpose.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/typearith.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/umodarith.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/vccompat.h (100%) rename {src => decimal}/mpdecimal_wrapper/generated/vcstdint.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/Makefile.in (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/README.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/config.guess (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/config.h.in (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/config.sub (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/configure (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/configure.ac (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/context.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/index.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/search.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/doc/various.html (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/div.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/install-sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt (100%) rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat (100%) mode change 100644 => 100755 rename {src => decimal}/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat (100%) mode change 100644 => 100755 delete mode 100644 src/decimal.nim diff --git a/.gitignore b/.gitignore index b3c7e17..ef56d28 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ nimcache/ -.vscode/ + # Executables shall be put in an ignored build/ directory # Ignore dynamic, static libs and libtool archive files build/ diff --git a/decimal.nimble b/decimal.nimble index d06917a..bde7ed7 100644 --- a/decimal.nimble +++ b/decimal.nimble @@ -1,4 +1,4 @@ -packageName = "decimal" +packageName = "Decimal" version = "0.0.1" author = "Status Research & Development GmbH" description = "A correctly-rounded arbitrary precision decimal floating point arithmetic library" diff --git a/decimal/decimal.nim b/decimal/decimal.nim new file mode 100644 index 0000000..f42e5de --- /dev/null +++ b/decimal/decimal.nim @@ -0,0 +1,124 @@ +# Decimal +# Copyright (c) 2018 Status Research & Development GmbH +# Licensed and distributed under either of +# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). +# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). +# at your option. This file may not be copied, modified, or distributed except according to those terms. + +import decimal_lowlevel + +type + DecimalType = ref[ptr mpd_t] + DecimalError = object of Exception + +const + DEFAULT_PREC = MPD_RDIGITS * 2 + DEFAULT_EMAX = when (sizeof(int) == 8): 999999999999999999 else: 425000000 + DEFAULT_EMIN = when (sizeof(int) == 8): -999999999999999999 else: -425000000 + +var CTX: mpd_context_t +var CTX_ADDR = addr CTX +mpd_defaultcontext(CTX_ADDR) + +proc setPrec*(prec: int) = + if 0 < prec: + let success = mpd_qsetprec(CTX_ADDR, prec) + if success == 0: + raise newException(DecimalError, "Couldn't set precision") + +proc `$`*(s: DecimalType): cstring = mpd_to_sci(s[], 0) + +proc newDecimal*(): DecimalType = + new[ptr mpd_t](result) + result[] = mpd_qnew() + +proc newDecimal*(s: string): DecimalType = + new[ptr mpd_t](result) + result[] = mpd_qnew() + mpd_set_string(result[], s, CTX_ADDR) + +proc newDecimal*(s: int64): DecimalType = + new[ptr mpd_t](result) + result[] = mpd_qnew() + mpd_set_i64(result[], s, CTX_ADDR) + +proc newDecimal*(s: int32): DecimalType = + result[] = mpd_qnew() + mpd_set_i32(result[], s, CTX_ADDR) + +proc clone*(b: DecimalType): DecimalType = + result = newDecimal() + var status: uint32 + let success = mpd_qcopy(result[], b[], addr status) + if success == 0: + raise newException(DecimalError, "Decimal failed to copy") + +proc `+`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qadd(result[], a[], b[], CTX_ADDR, addr status) + +proc `+=`*(a, b: DecimalType) = + var status: uint32 + mpd_qadd(a[], a[], b[], CTX_ADDR, addr status) + +proc `-`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qsub(result[], a[], b[], CTX_ADDR, addr status) + +proc `-=`*(a, b: DecimalType) = + var status: uint32 + mpd_qsub(a[], a[], b[], CTX_ADDR, addr status) + +proc `*`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmul(result[], a[], b[], CTX_ADDR, addr status) + +proc `*=`*(a, b: DecimalType) = + var status: uint32 + mpd_qmul(a[], a[], b[], CTX_ADDR, addr status) + +proc `/`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qdiv(result[], a[], b[], CTX_ADDR, addr status) + +proc `/=`*(a, b: DecimalType) = + var status: uint32 + mpd_qdiv(a[], a[], b[], CTX_ADDR, addr status) + +proc `^`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qpow(result[], a[], b[], CTX_ADDR, addr status) + +proc divint*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) + +proc `//`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) + +proc rem*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qrem(result[], a[], b[], CTX_ADDR, addr status) + +proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = + var status: uint32 + var q = newDecimal() + var r = newDecimal() + mpd_qdivmod(q[], r[], a[], b[], CTX_ADDR, addr status) + result = (q, r) + + +proc exp*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qexp(result[], a[], CTX_ADDR, addr status) + diff --git a/src/decimal/decimal_lowlevel.nim b/decimal/decimal_lowlevel.nim similarity index 99% rename from src/decimal/decimal_lowlevel.nim rename to decimal/decimal_lowlevel.nim index bca5d49..348ae85 100644 --- a/src/decimal/decimal_lowlevel.nim +++ b/decimal/decimal_lowlevel.nim @@ -4,11 +4,11 @@ # * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). # * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). # at your option. This file may not be copied, modified, or distributed except according to those terms. -import os -import strutils, macros + +import strutils, macros, ospaths from os import DirSep, walkFiles -const cSourcesPath = currentSourcePath.rsplit(DirSep, 1)[0] & "/../mpdecimal_wrapper/generated" +const cSourcesPath = currentSourcePath.rsplit(DirSep, 1)[0] & "/mpdecimal_wrapper/generated" const cHeader = csourcesPath / "mpdecimal.h" {.passC: "-I" & cSourcesPath .} @@ -56,7 +56,7 @@ macro compileFilesFromDir(path: static[string], fileNameBody: untyped): untyped ) # Order is important -compileFilesFromDir("/../mpdecimal_wrapper/generated/"): +compileFilesFromDir("mpdecimal_wrapper/generated/"): "basearith.c" "context.c" "constants.c" diff --git a/src/mpdecimal_wrapper/README.md b/decimal/mpdecimal_wrapper/README.md similarity index 100% rename from src/mpdecimal_wrapper/README.md rename to decimal/mpdecimal_wrapper/README.md diff --git a/src/mpdecimal_wrapper/genSources.sh b/decimal/mpdecimal_wrapper/genSources.sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/genSources.sh rename to decimal/mpdecimal_wrapper/genSources.sh diff --git a/src/mpdecimal_wrapper/generated/basearith.c b/decimal/mpdecimal_wrapper/generated/basearith.c similarity index 100% rename from src/mpdecimal_wrapper/generated/basearith.c rename to decimal/mpdecimal_wrapper/generated/basearith.c diff --git a/src/mpdecimal_wrapper/generated/basearith.h b/decimal/mpdecimal_wrapper/generated/basearith.h similarity index 100% rename from src/mpdecimal_wrapper/generated/basearith.h rename to decimal/mpdecimal_wrapper/generated/basearith.h diff --git a/src/mpdecimal_wrapper/generated/bench.c b/decimal/mpdecimal_wrapper/generated/bench.c similarity index 100% rename from src/mpdecimal_wrapper/generated/bench.c rename to decimal/mpdecimal_wrapper/generated/bench.c diff --git a/src/mpdecimal_wrapper/generated/bits.h b/decimal/mpdecimal_wrapper/generated/bits.h similarity index 100% rename from src/mpdecimal_wrapper/generated/bits.h rename to decimal/mpdecimal_wrapper/generated/bits.h diff --git a/src/mpdecimal_wrapper/generated/config.h b/decimal/mpdecimal_wrapper/generated/config.h similarity index 100% rename from src/mpdecimal_wrapper/generated/config.h rename to decimal/mpdecimal_wrapper/generated/config.h diff --git a/src/mpdecimal_wrapper/generated/constants.c b/decimal/mpdecimal_wrapper/generated/constants.c similarity index 100% rename from src/mpdecimal_wrapper/generated/constants.c rename to decimal/mpdecimal_wrapper/generated/constants.c diff --git a/src/mpdecimal_wrapper/generated/constants.h b/decimal/mpdecimal_wrapper/generated/constants.h similarity index 100% rename from src/mpdecimal_wrapper/generated/constants.h rename to decimal/mpdecimal_wrapper/generated/constants.h diff --git a/src/mpdecimal_wrapper/generated/context.c b/decimal/mpdecimal_wrapper/generated/context.c similarity index 100% rename from src/mpdecimal_wrapper/generated/context.c rename to decimal/mpdecimal_wrapper/generated/context.c diff --git a/src/mpdecimal_wrapper/generated/convolute.c b/decimal/mpdecimal_wrapper/generated/convolute.c similarity index 100% rename from src/mpdecimal_wrapper/generated/convolute.c rename to decimal/mpdecimal_wrapper/generated/convolute.c diff --git a/src/mpdecimal_wrapper/generated/convolute.h b/decimal/mpdecimal_wrapper/generated/convolute.h similarity index 100% rename from src/mpdecimal_wrapper/generated/convolute.h rename to decimal/mpdecimal_wrapper/generated/convolute.h diff --git a/src/mpdecimal_wrapper/generated/crt.c b/decimal/mpdecimal_wrapper/generated/crt.c similarity index 100% rename from src/mpdecimal_wrapper/generated/crt.c rename to decimal/mpdecimal_wrapper/generated/crt.c diff --git a/src/mpdecimal_wrapper/generated/crt.h b/decimal/mpdecimal_wrapper/generated/crt.h similarity index 100% rename from src/mpdecimal_wrapper/generated/crt.h rename to decimal/mpdecimal_wrapper/generated/crt.h diff --git a/src/mpdecimal_wrapper/generated/difradix2.c b/decimal/mpdecimal_wrapper/generated/difradix2.c similarity index 100% rename from src/mpdecimal_wrapper/generated/difradix2.c rename to decimal/mpdecimal_wrapper/generated/difradix2.c diff --git a/src/mpdecimal_wrapper/generated/difradix2.h b/decimal/mpdecimal_wrapper/generated/difradix2.h similarity index 100% rename from src/mpdecimal_wrapper/generated/difradix2.h rename to decimal/mpdecimal_wrapper/generated/difradix2.h diff --git a/src/mpdecimal_wrapper/generated/fnt.c b/decimal/mpdecimal_wrapper/generated/fnt.c similarity index 100% rename from src/mpdecimal_wrapper/generated/fnt.c rename to decimal/mpdecimal_wrapper/generated/fnt.c diff --git a/src/mpdecimal_wrapper/generated/fnt.h b/decimal/mpdecimal_wrapper/generated/fnt.h similarity index 100% rename from src/mpdecimal_wrapper/generated/fnt.h rename to decimal/mpdecimal_wrapper/generated/fnt.h diff --git a/src/mpdecimal_wrapper/generated/fourstep.c b/decimal/mpdecimal_wrapper/generated/fourstep.c similarity index 100% rename from src/mpdecimal_wrapper/generated/fourstep.c rename to decimal/mpdecimal_wrapper/generated/fourstep.c diff --git a/src/mpdecimal_wrapper/generated/fourstep.h b/decimal/mpdecimal_wrapper/generated/fourstep.h similarity index 100% rename from src/mpdecimal_wrapper/generated/fourstep.h rename to decimal/mpdecimal_wrapper/generated/fourstep.h diff --git a/src/mpdecimal_wrapper/generated/io.c b/decimal/mpdecimal_wrapper/generated/io.c similarity index 100% rename from src/mpdecimal_wrapper/generated/io.c rename to decimal/mpdecimal_wrapper/generated/io.c diff --git a/src/mpdecimal_wrapper/generated/io.h b/decimal/mpdecimal_wrapper/generated/io.h similarity index 100% rename from src/mpdecimal_wrapper/generated/io.h rename to decimal/mpdecimal_wrapper/generated/io.h diff --git a/src/mpdecimal_wrapper/generated/memory.c b/decimal/mpdecimal_wrapper/generated/memory.c similarity index 100% rename from src/mpdecimal_wrapper/generated/memory.c rename to decimal/mpdecimal_wrapper/generated/memory.c diff --git a/src/mpdecimal_wrapper/generated/memory.h b/decimal/mpdecimal_wrapper/generated/memory.h similarity index 100% rename from src/mpdecimal_wrapper/generated/memory.h rename to decimal/mpdecimal_wrapper/generated/memory.h diff --git a/src/mpdecimal_wrapper/generated/mpdecimal.c b/decimal/mpdecimal_wrapper/generated/mpdecimal.c similarity index 100% rename from src/mpdecimal_wrapper/generated/mpdecimal.c rename to decimal/mpdecimal_wrapper/generated/mpdecimal.c diff --git a/src/mpdecimal_wrapper/generated/mpdecimal.h b/decimal/mpdecimal_wrapper/generated/mpdecimal.h similarity index 100% rename from src/mpdecimal_wrapper/generated/mpdecimal.h rename to decimal/mpdecimal_wrapper/generated/mpdecimal.h diff --git a/src/mpdecimal_wrapper/generated/mpdecimal32vc.h b/decimal/mpdecimal_wrapper/generated/mpdecimal32vc.h similarity index 100% rename from src/mpdecimal_wrapper/generated/mpdecimal32vc.h rename to decimal/mpdecimal_wrapper/generated/mpdecimal32vc.h diff --git a/src/mpdecimal_wrapper/generated/mpdecimal64vc.h b/decimal/mpdecimal_wrapper/generated/mpdecimal64vc.h similarity index 100% rename from src/mpdecimal_wrapper/generated/mpdecimal64vc.h rename to decimal/mpdecimal_wrapper/generated/mpdecimal64vc.h diff --git a/src/mpdecimal_wrapper/generated/mpsignal.c b/decimal/mpdecimal_wrapper/generated/mpsignal.c similarity index 100% rename from src/mpdecimal_wrapper/generated/mpsignal.c rename to decimal/mpdecimal_wrapper/generated/mpsignal.c diff --git a/src/mpdecimal_wrapper/generated/numbertheory.c b/decimal/mpdecimal_wrapper/generated/numbertheory.c similarity index 100% rename from src/mpdecimal_wrapper/generated/numbertheory.c rename to decimal/mpdecimal_wrapper/generated/numbertheory.c diff --git a/src/mpdecimal_wrapper/generated/numbertheory.h b/decimal/mpdecimal_wrapper/generated/numbertheory.h similarity index 100% rename from src/mpdecimal_wrapper/generated/numbertheory.h rename to decimal/mpdecimal_wrapper/generated/numbertheory.h diff --git a/src/mpdecimal_wrapper/generated/sixstep.c b/decimal/mpdecimal_wrapper/generated/sixstep.c similarity index 100% rename from src/mpdecimal_wrapper/generated/sixstep.c rename to decimal/mpdecimal_wrapper/generated/sixstep.c diff --git a/src/mpdecimal_wrapper/generated/sixstep.h b/decimal/mpdecimal_wrapper/generated/sixstep.h similarity index 100% rename from src/mpdecimal_wrapper/generated/sixstep.h rename to decimal/mpdecimal_wrapper/generated/sixstep.h diff --git a/src/mpdecimal_wrapper/generated/transpose.c b/decimal/mpdecimal_wrapper/generated/transpose.c similarity index 100% rename from src/mpdecimal_wrapper/generated/transpose.c rename to decimal/mpdecimal_wrapper/generated/transpose.c diff --git a/src/mpdecimal_wrapper/generated/transpose.h b/decimal/mpdecimal_wrapper/generated/transpose.h similarity index 100% rename from src/mpdecimal_wrapper/generated/transpose.h rename to decimal/mpdecimal_wrapper/generated/transpose.h diff --git a/src/mpdecimal_wrapper/generated/typearith.h b/decimal/mpdecimal_wrapper/generated/typearith.h similarity index 100% rename from src/mpdecimal_wrapper/generated/typearith.h rename to decimal/mpdecimal_wrapper/generated/typearith.h diff --git a/src/mpdecimal_wrapper/generated/umodarith.h b/decimal/mpdecimal_wrapper/generated/umodarith.h similarity index 100% rename from src/mpdecimal_wrapper/generated/umodarith.h rename to decimal/mpdecimal_wrapper/generated/umodarith.h diff --git a/src/mpdecimal_wrapper/generated/vccompat.h b/decimal/mpdecimal_wrapper/generated/vccompat.h similarity index 100% rename from src/mpdecimal_wrapper/generated/vccompat.h rename to decimal/mpdecimal_wrapper/generated/vccompat.h diff --git a/src/mpdecimal_wrapper/generated/vcstdint.h b/decimal/mpdecimal_wrapper/generated/vcstdint.h similarity index 100% rename from src/mpdecimal_wrapper/generated/vcstdint.h rename to decimal/mpdecimal_wrapper/generated/vcstdint.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/.hg_archival.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/CHANGELOG.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/COMPILERS.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/INSTALL.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/LICENSE.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/Makefile.in b/decimal/mpdecimal_wrapper/mpdecimal_sources/Makefile.in similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/Makefile.in rename to decimal/mpdecimal_wrapper/mpdecimal_sources/Makefile.in diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/README.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/README.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/README.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/README.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/config.guess b/decimal/mpdecimal_wrapper/mpdecimal_sources/config.guess old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/config.guess rename to decimal/mpdecimal_wrapper/mpdecimal_sources/config.guess diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/config.h.in b/decimal/mpdecimal_wrapper/mpdecimal_sources/config.h.in similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/config.h.in rename to decimal/mpdecimal_wrapper/mpdecimal_sources/config.h.in diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/config.sub b/decimal/mpdecimal_wrapper/mpdecimal_sources/config.sub old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/config.sub rename to decimal/mpdecimal_wrapper/mpdecimal_sources/config.sub diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/configure b/decimal/mpdecimal_wrapper/mpdecimal_sources/configure old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/configure rename to decimal/mpdecimal_wrapper/mpdecimal_sources/configure diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/configure.ac b/decimal/mpdecimal_wrapper/mpdecimal_sources/configure.ac similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/configure.ac rename to decimal/mpdecimal_wrapper/mpdecimal_sources/configure.ac diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/LICENSE.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/ajax-loader.gif diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/basic.css diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-bright.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment-close.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/comment.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/default.css diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/doctools.js diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down-pressed.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/down.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/file.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/jquery.js diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/minus.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/mpdecimal-doc.css diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/plus.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/pygments.css diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/searchtools.js diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/sidebar.js diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/underscore.js diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up-pressed.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/up.png diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/_static/websupport.js diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/arithmetic.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/assign-convert.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/attributes.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/context.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/context.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/context.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/context.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/decimals.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/functions.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/index.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/index.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/index.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/index.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/memory.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/objects.inv diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/search.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/search.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/search.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/search.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/searchindex.js diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/doc/various.html b/decimal/mpdecimal_wrapper/mpdecimal_sources/doc/various.html similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/doc/various.html rename to decimal/mpdecimal_wrapper/mpdecimal_sources/doc/various.html diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/README.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/compare.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/div.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/div.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/div.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/div.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/divmod.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/multiply.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/pow.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/powmod.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/shift.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/examples/sqrt.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/install-sh b/decimal/mpdecimal_wrapper/mpdecimal_sources/install-sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/install-sh rename to decimal/mpdecimal_wrapper/mpdecimal_sources/install-sh diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/.objs/README.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.in diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/Makefile.vc diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/README.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/basearith.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bench.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/bits.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/constants.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/context.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/convolute.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/crt.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/difradix2.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fnt.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/fourstep.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/io.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/REFERENCES.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/bignum.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/fnt.py diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/matrix-transform.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-64.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/mulmod-ppro.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/six-step.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/literature/umodarith.lisp diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/memory.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal.h.in diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal32vc.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpdecimal64vc.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/mpsignal.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/numbertheory.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/sixstep.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/transpose.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/typearith.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/umodarith.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vccompat.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcdiv64.asm diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/libmpdec/vcstdint.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.in diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/Makefile.vc diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/README.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/additional.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/gettests.sh diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/malloc_fail.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/mptest.h diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/official.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort.sh diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runshort_alloc.sh diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/runtest.c diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/baseconv.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/binop_eq.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/cov.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/divmod_eq.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/extra.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/fma_eq.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/format.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/getint.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/invroot.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/largeint.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/powmod_eq.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/shiftlr.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest b/decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tests/testdata_dist/testruntest.decTest diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh b/decimal/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tools/release.sh diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh b/decimal/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tools/replace.sh diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh b/decimal/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh rename to decimal/mpdecimal_wrapper/mpdecimal_sources/tools/todos.sh diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/README.txt diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/gettests.bat diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest32.bat diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/runtest64.bat diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild32.bat diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcbuild64.bat diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcclean.bat diff --git a/src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat b/decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat old mode 100644 new mode 100755 similarity index 100% rename from src/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat rename to decimal/mpdecimal_wrapper/mpdecimal_sources/vcbuild/vcdistclean.bat diff --git a/src/decimal.nim b/src/decimal.nim deleted file mode 100644 index 7f37da6..0000000 --- a/src/decimal.nim +++ /dev/null @@ -1,361 +0,0 @@ -# Decimal -# Copyright (c) 2018 Status Research & Development GmbH -# Licensed and distributed under either of -# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT). -# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). -# at your option. This file may not be copied, modified, or distributed except according to those terms. - -import decimal/decimal_lowlevel - -type - DecimalType* = ref[ptr mpd_t] - DecimalError* = object of Exception - -const - DEFAULT_PREC = MPD_RDIGITS * 2 - DEFAULT_EMAX = when (sizeof(int) == 8): 999999999999999999 else: 425000000 - DEFAULT_EMIN = when (sizeof(int) == 8): -999999999999999999 else: -425000000 - -var CTX: mpd_context_t -var CTX_ADDR = addr CTX -mpd_defaultcontext(CTX_ADDR) - -proc setPrec*(prec: mpd_ssize_t) = - if 0 < prec: - let success = mpd_qsetprec(CTX_ADDR, prec) - if success == 0: - raise newException(DecimalError, "Couldn't set precision") - -proc `$`*(s: DecimalType): string = - $mpd_to_sci(s[], 0) - -proc newDecimal*(): DecimalType = - new result - result[] = mpd_qnew() - -proc newDecimal*(s: string): DecimalType = - new result - result[] = mpd_qnew() - mpd_set_string(result[], s, CTX_ADDR) - -proc newDecimal*(s: int64): DecimalType = - new result - result[] = mpd_qnew() - mpd_set_i64(result[], s, CTX_ADDR) - -proc newDecimal*(s: int32): DecimalType = - new result - result[] = mpd_qnew() - mpd_set_i32(result[], s, CTX_ADDR) - -proc clone*(b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - let success = mpd_qcopy(result[], b[], addr status) - if success == 0: - raise newException(DecimalError, "Decimal failed to copy") - -# Operators - -proc `+`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qadd(result[], a[], b[], CTX_ADDR, addr status) - -template `+`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a + newDecimal($b) - -template `+`*[T: SomeNumber](a: T, b: DecimalType): untyped = - newDecimal($a) + b - -proc `+=`*(a, b: DecimalType) = - var status: uint32 - mpd_qadd(a[], a[], b[], CTX_ADDR, addr status) - -template `+=`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a += newDecimal($b) - - - -proc `-`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qsub(result[], a[], b[], CTX_ADDR, addr status) - -template `-`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a - newDecimal($b) - -template `-`*[T: SomeNumber](a: T, b: DecimalType): untyped = - newDecimal($a) - b - -proc `-=`*(a, b: DecimalType) = - var status: uint32 - mpd_qsub(a[], a[], b[], CTX_ADDR, addr status) - -template `-=`*[T: SomeNumber](a: DecimalType, b: T) = - a -= newDecimal($b) - - -proc `*`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qmul(result[], a[], b[], CTX_ADDR, addr status) - -template `*`*[T: SomeNumber](a: T, b: DecimalType): untyped = - newDecimal($a) * b - -template `*`*[T: SomeNumber](a: DecimalType, b: T): untyped = - newDecimal($b) * a - -proc `*=`*(a, b: DecimalType) = - var status: uint32 - mpd_qmul(a[], a[], b[], CTX_ADDR, addr status) - -template `*=`*[T: SomeNumber](a: DecimalType, b: T) = - a *= newDecimal($b) - - - -proc `/`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qdiv(result[], a[], b[], CTX_ADDR, addr status) - -template `/`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a / newDecimal($b) - -proc `/=`*(a, b: DecimalType) = - var status: uint32 - mpd_qdiv(a[], a[], b[], CTX_ADDR, addr status) - -template `/=`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a /= newDecimal($b) - - - -proc `//`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) - -template `//`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a // newDecimal($b) - -proc `^`*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qpow(result[], a[], b[], CTX_ADDR, addr status) - -template `^`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a ^ newDecimal($b) - -proc `==`*(a, b: DecimalType): bool = - var status: uint32 - let cmp = mpd_qcmp(a[], b[], addr status) - if cmp == 0: - return true - else: - return false - -template `==`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a == newDecimal($b) - -template `==`*[T: SomeNumber](a: T, b: DecimalType): untyped = - newDecimal($a) == b - -proc `<`*(a, b: DecimalType): bool = - var status: uint32 - let cmp = mpd_qcmp(a[], b[], addr status) - if cmp == -1: - return true - else: - return false - -template `<`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a < newDecimal($b) -template `<`*[T: SomeNumber](a: T, b: DecimalType): untyped = - newDecimal($a) < b - -proc `<=`*(a, b: DecimalType): bool = - let less_cmp = a < b - if less_cmp: return true - let equal_cmp = a == b - if equal_cmp: return true - return false -template `<=`*[T: SomeNumber](a: DecimalType, b: T): untyped = - a <= newDecimal($b) -template `<=`*[T: SomeNumber](a: T, b: DecimalType): untyped = - newDecimal($a) <= b - - - -proc divint*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) - -proc rem*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qrem(result[], a[], b[], CTX_ADDR, addr status) - -proc rem_near*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qrem_near(result[], a[], b[], CTX_ADDR, addr status) - -proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = - var status: uint32 - var q = newDecimal() - var r = newDecimal() - mpd_qdivmod(q[], r[], a[], b[], CTX_ADDR, addr status) - result = (q, r) - -proc fma*(a, b, c: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qfma(result[], a[], b[], c[], CTX_ADDR, addr status) - - -# Math functions - -proc exp*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qexp(result[], a[], CTX_ADDR, addr status) - -proc ln*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qln(result[], a[], CTX_ADDR, addr status) - -proc log10*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qlog10(result[], a[], CTX_ADDR, addr status) - -proc sqrt*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qsqrt(result[], a[], CTX_ADDR, addr status) - -proc invroot*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qinvroot(result[], a[], CTX_ADDR, addr status) - - - -proc `-`*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qminus(result[], a[], CTX_ADDR, addr status) - -proc plus*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qplus(result[], a[], CTX_ADDR, addr status) - -proc abs*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qabs(result[], a[], CTX_ADDR, addr status) - - - -proc max*(a,b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qmax(result[], a[], b[], CTX_ADDR, addr status) - -proc max_mag*(a,b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qmax_mag(result[], a[], b[], CTX_ADDR, addr status) - -proc min*(a,b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qmin(result[], a[], b[], CTX_ADDR, addr status) - -proc min_mag*(a,b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qmin_mag(result[], a[], b[], CTX_ADDR, addr status) - -proc next_plus*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qnext_plus(result[], a[], CTX_ADDR, addr status) - -proc next_minus*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qnext_minus(result[], a[], CTX_ADDR, addr status) - -proc next_toward*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qnext_toward(result[], a[], b[], CTX_ADDR, addr status) - -proc quantize*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qquantize(result[], a[], b[], CTX_ADDR, addr status) - -proc rescale*(a: DecimalType, b: mpd_ssize_t): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qrescale(result[], a[], b, CTX_ADDR, addr status) - -proc same_quantum*(a, b: DecimalType): bool = - let cmp = mpd_same_quantum(a[], b[]) - if cmp == 1: - return true - else: - return false - -proc reduce*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qreduce(result[], a[], CTX_ADDR, addr status) - -proc round_to_intx*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qround_to_intx(result[], a[], CTX_ADDR, addr status) - -proc round_to_int*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qround_to_int(result[], a[], CTX_ADDR, addr status) - -proc floor*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qfloor(result[], a[], CTX_ADDR, addr status) - -proc ceil*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qceil(result[], a[], CTX_ADDR, addr status) - -proc truncate*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qtrunc(result[], a[], CTX_ADDR, addr status) - -proc logb*(a: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qlogb(result[], a[], CTX_ADDR, addr status) - -proc scaleb*(a, b: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qscaleb(result[], a[], b[], CTX_ADDR, addr status) - -proc powmod*(base, exp, modulus: DecimalType): DecimalType = - var status: uint32 - result = newDecimal() - mpd_qpowmod(result[], base[], exp[], modulus[], CTX_ADDR, addr status) \ No newline at end of file diff --git a/tests/all_tests.nim b/tests/all_tests.nim index 41834c9..bfca8c8 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -6,7 +6,7 @@ # at your option. This file may not be copied, modified, or distributed except according to those terms. import unittest, - ../src/decimal + ../decimal/decimal suite "Basic Arithmetic": test "init Decimal": @@ -20,36 +20,12 @@ suite "Basic Arithmetic": var d = newDecimal(s) let correct = "123456" check $d == correct - test "Decimal Addition": var a = newDecimal("1.2") var b = newDecimal("3.5") - var c1 = a + b - var c2 = b + a + var c = a + b let correct = "4.7" - check $c1 == correct - check $c2 == correct - test "Decimal inplace Addition": - var a = newDecimal("1.2") - var b = newDecimal("3.6") - a += b - let correct = "4.8" - check $a == correct - test "Decimal-Int Addition": - var a = newDecimal("1.2") - var b = 5 - var c1 = a + b - var c2 = b + a - let correct = "6.2" - check $c1 == correct - check $c2 == correct - test "Decimal-Int inplace Addition": - var a = newDecimal("1.2") - var b = 4 - a += b - let correct = "5.2" - check $a == correct - + check $c == correct test "Decimal Subtraction": var a = newDecimal("1.2") var b = newDecimal("3.5") @@ -62,35 +38,12 @@ suite "Basic Arithmetic": var c = a * b let correct = "4.20" check $c == correct - test "Decimal Division": var a = newDecimal("6.25") var b = newDecimal("2.5") var c = a / b let correct = "2.5" check $c == correct - test "Decimal-Int Division": - var a = newDecimal("10") - var b = 5 - var c = a / b - let correct = "2" - check $c == correct - - test "Decimal ==": - var a = newDecimal("6.25") - var b = newDecimal("2.5") - check a == a - check (a == b) == false - test "Decimal <": - var a = newDecimal("6.25") - var b = newDecimal("2.5") - check b < a - check (a < b) == false - test "Decimal >": - var a = newDecimal("6.25") - var b = newDecimal("2.5") - check a > b - check (b > a) == false test "Decimal Power 1": var a = newDecimal("2.5") var b = newDecimal("2") @@ -122,4 +75,3 @@ suite "Basic Arithmetic": let c = exp(a) check $c == "7.3890560989306502272304274605750078132" - From 4fd2de25e6ce500e7abd3556d17f190ad63cb5b3 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 18 Jul 2019 21:02:23 +0200 Subject: [PATCH 10/15] recommit all that should't be reverted --- decimal/decimal.nim | 263 +++++++++++++++++++++++++++++++++++++++++--- tests/all_tests.nim | 52 ++++++++- 2 files changed, 300 insertions(+), 15 deletions(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index f42e5de..7f37da6 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -5,11 +5,11 @@ # * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). # at your option. This file may not be copied, modified, or distributed except according to those terms. -import decimal_lowlevel +import decimal/decimal_lowlevel type - DecimalType = ref[ptr mpd_t] - DecimalError = object of Exception + DecimalType* = ref[ptr mpd_t] + DecimalError* = object of Exception const DEFAULT_PREC = MPD_RDIGITS * 2 @@ -20,86 +20,176 @@ var CTX: mpd_context_t var CTX_ADDR = addr CTX mpd_defaultcontext(CTX_ADDR) -proc setPrec*(prec: int) = +proc setPrec*(prec: mpd_ssize_t) = if 0 < prec: let success = mpd_qsetprec(CTX_ADDR, prec) if success == 0: raise newException(DecimalError, "Couldn't set precision") -proc `$`*(s: DecimalType): cstring = mpd_to_sci(s[], 0) +proc `$`*(s: DecimalType): string = + $mpd_to_sci(s[], 0) proc newDecimal*(): DecimalType = - new[ptr mpd_t](result) + new result result[] = mpd_qnew() proc newDecimal*(s: string): DecimalType = - new[ptr mpd_t](result) + new result result[] = mpd_qnew() mpd_set_string(result[], s, CTX_ADDR) proc newDecimal*(s: int64): DecimalType = - new[ptr mpd_t](result) + new result result[] = mpd_qnew() mpd_set_i64(result[], s, CTX_ADDR) proc newDecimal*(s: int32): DecimalType = + new result result[] = mpd_qnew() mpd_set_i32(result[], s, CTX_ADDR) proc clone*(b: DecimalType): DecimalType = - result = newDecimal() var status: uint32 + result = newDecimal() let success = mpd_qcopy(result[], b[], addr status) if success == 0: raise newException(DecimalError, "Decimal failed to copy") +# Operators + proc `+`*(a, b: DecimalType): DecimalType = var status: uint32 result = newDecimal() mpd_qadd(result[], a[], b[], CTX_ADDR, addr status) +template `+`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a + newDecimal($b) + +template `+`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) + b + proc `+=`*(a, b: DecimalType) = var status: uint32 mpd_qadd(a[], a[], b[], CTX_ADDR, addr status) +template `+=`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a += newDecimal($b) + + + proc `-`*(a, b: DecimalType): DecimalType = var status: uint32 result = newDecimal() mpd_qsub(result[], a[], b[], CTX_ADDR, addr status) +template `-`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a - newDecimal($b) + +template `-`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) - b + proc `-=`*(a, b: DecimalType) = var status: uint32 mpd_qsub(a[], a[], b[], CTX_ADDR, addr status) +template `-=`*[T: SomeNumber](a: DecimalType, b: T) = + a -= newDecimal($b) + + proc `*`*(a, b: DecimalType): DecimalType = var status: uint32 result = newDecimal() mpd_qmul(result[], a[], b[], CTX_ADDR, addr status) +template `*`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) * b + +template `*`*[T: SomeNumber](a: DecimalType, b: T): untyped = + newDecimal($b) * a + proc `*=`*(a, b: DecimalType) = var status: uint32 mpd_qmul(a[], a[], b[], CTX_ADDR, addr status) +template `*=`*[T: SomeNumber](a: DecimalType, b: T) = + a *= newDecimal($b) + + + proc `/`*(a, b: DecimalType): DecimalType = var status: uint32 result = newDecimal() mpd_qdiv(result[], a[], b[], CTX_ADDR, addr status) +template `/`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a / newDecimal($b) + proc `/=`*(a, b: DecimalType) = var status: uint32 mpd_qdiv(a[], a[], b[], CTX_ADDR, addr status) +template `/=`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a /= newDecimal($b) + + + +proc `//`*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) + +template `//`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a // newDecimal($b) + proc `^`*(a, b: DecimalType): DecimalType = var status: uint32 result = newDecimal() mpd_qpow(result[], a[], b[], CTX_ADDR, addr status) -proc divint*(a, b: DecimalType): DecimalType = +template `^`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a ^ newDecimal($b) + +proc `==`*(a, b: DecimalType): bool = var status: uint32 - result = newDecimal() - mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) + let cmp = mpd_qcmp(a[], b[], addr status) + if cmp == 0: + return true + else: + return false -proc `//`*(a, b: DecimalType): DecimalType = +template `==`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a == newDecimal($b) + +template `==`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) == b + +proc `<`*(a, b: DecimalType): bool = + var status: uint32 + let cmp = mpd_qcmp(a[], b[], addr status) + if cmp == -1: + return true + else: + return false + +template `<`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a < newDecimal($b) +template `<`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) < b + +proc `<=`*(a, b: DecimalType): bool = + let less_cmp = a < b + if less_cmp: return true + let equal_cmp = a == b + if equal_cmp: return true + return false +template `<=`*[T: SomeNumber](a: DecimalType, b: T): untyped = + a <= newDecimal($b) +template `<=`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) <= b + + + +proc divint*(a, b: DecimalType): DecimalType = var status: uint32 result = newDecimal() mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) @@ -109,6 +199,11 @@ proc rem*(a, b: DecimalType): DecimalType = result = newDecimal() mpd_qrem(result[], a[], b[], CTX_ADDR, addr status) +proc rem_near*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qrem_near(result[], a[], b[], CTX_ADDR, addr status) + proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = var status: uint32 var q = newDecimal() @@ -116,9 +211,151 @@ proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = mpd_qdivmod(q[], r[], a[], b[], CTX_ADDR, addr status) result = (q, r) +proc fma*(a, b, c: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qfma(result[], a[], b[], c[], CTX_ADDR, addr status) + + +# Math functions proc exp*(a: DecimalType): DecimalType = var status: uint32 result = newDecimal() mpd_qexp(result[], a[], CTX_ADDR, addr status) +proc ln*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qln(result[], a[], CTX_ADDR, addr status) + +proc log10*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qlog10(result[], a[], CTX_ADDR, addr status) + +proc sqrt*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qsqrt(result[], a[], CTX_ADDR, addr status) + +proc invroot*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qinvroot(result[], a[], CTX_ADDR, addr status) + + + +proc `-`*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qminus(result[], a[], CTX_ADDR, addr status) + +proc plus*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qplus(result[], a[], CTX_ADDR, addr status) + +proc abs*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qabs(result[], a[], CTX_ADDR, addr status) + + + +proc max*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmax(result[], a[], b[], CTX_ADDR, addr status) + +proc max_mag*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmax_mag(result[], a[], b[], CTX_ADDR, addr status) + +proc min*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmin(result[], a[], b[], CTX_ADDR, addr status) + +proc min_mag*(a,b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qmin_mag(result[], a[], b[], CTX_ADDR, addr status) + +proc next_plus*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qnext_plus(result[], a[], CTX_ADDR, addr status) + +proc next_minus*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qnext_minus(result[], a[], CTX_ADDR, addr status) + +proc next_toward*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qnext_toward(result[], a[], b[], CTX_ADDR, addr status) + +proc quantize*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qquantize(result[], a[], b[], CTX_ADDR, addr status) + +proc rescale*(a: DecimalType, b: mpd_ssize_t): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qrescale(result[], a[], b, CTX_ADDR, addr status) + +proc same_quantum*(a, b: DecimalType): bool = + let cmp = mpd_same_quantum(a[], b[]) + if cmp == 1: + return true + else: + return false + +proc reduce*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qreduce(result[], a[], CTX_ADDR, addr status) + +proc round_to_intx*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qround_to_intx(result[], a[], CTX_ADDR, addr status) + +proc round_to_int*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qround_to_int(result[], a[], CTX_ADDR, addr status) + +proc floor*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qfloor(result[], a[], CTX_ADDR, addr status) + +proc ceil*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qceil(result[], a[], CTX_ADDR, addr status) + +proc truncate*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qtrunc(result[], a[], CTX_ADDR, addr status) + +proc logb*(a: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qlogb(result[], a[], CTX_ADDR, addr status) + +proc scaleb*(a, b: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qscaleb(result[], a[], b[], CTX_ADDR, addr status) + +proc powmod*(base, exp, modulus: DecimalType): DecimalType = + var status: uint32 + result = newDecimal() + mpd_qpowmod(result[], base[], exp[], modulus[], CTX_ADDR, addr status) \ No newline at end of file diff --git a/tests/all_tests.nim b/tests/all_tests.nim index bfca8c8..a188089 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -20,12 +20,36 @@ suite "Basic Arithmetic": var d = newDecimal(s) let correct = "123456" check $d == correct + test "Decimal Addition": var a = newDecimal("1.2") var b = newDecimal("3.5") - var c = a + b + var c1 = a + b + var c2 = b + a let correct = "4.7" - check $c == correct + check $c1 == correct + check $c2 == correct + test "Decimal inplace Addition": + var a = newDecimal("1.2") + var b = newDecimal("3.6") + a += b + let correct = "4.8" + check $a == correct + test "Decimal-Int Addition": + var a = newDecimal("1.2") + var b = 5 + var c1 = a + b + var c2 = b + a + let correct = "6.2" + check $c1 == correct + check $c2 == correct + test "Decimal-Int inplace Addition": + var a = newDecimal("1.2") + var b = 4 + a += b + let correct = "5.2" + check $a == correct + test "Decimal Subtraction": var a = newDecimal("1.2") var b = newDecimal("3.5") @@ -38,12 +62,35 @@ suite "Basic Arithmetic": var c = a * b let correct = "4.20" check $c == correct + test "Decimal Division": var a = newDecimal("6.25") var b = newDecimal("2.5") var c = a / b let correct = "2.5" check $c == correct + test "Decimal-Int Division": + var a = newDecimal("10") + var b = 5 + var c = a / b + let correct = "2" + check $c == correct + + test "Decimal ==": + var a = newDecimal("6.25") + var b = newDecimal("2.5") + check a == a + check (a == b) == false + test "Decimal <": + var a = newDecimal("6.25") + var b = newDecimal("2.5") + check b < a + check (a < b) == false + test "Decimal >": + var a = newDecimal("6.25") + var b = newDecimal("2.5") + check a > b + check (b > a) == false test "Decimal Power 1": var a = newDecimal("2.5") var b = newDecimal("2") @@ -75,3 +122,4 @@ suite "Basic Arithmetic": let c = exp(a) check $c == "7.3890560989306502272304274605750078132" + From 03ffaf088886fc9ea0127afa1d84d27488865afd Mon Sep 17 00:00:00 2001 From: Hugo Date: Sun, 21 Jul 2019 22:43:33 +0200 Subject: [PATCH 11/15] fix import --- decimal/decimal.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index 7f37da6..1c0955c 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -5,7 +5,7 @@ # * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0). # at your option. This file may not be copied, modified, or distributed except according to those terms. -import decimal/decimal_lowlevel +import decimal_lowlevel type DecimalType* = ref[ptr mpd_t] From 5ea50d7e8a05acd527f88ea73eabe96219272409 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 13 Aug 2019 10:50:15 +0200 Subject: [PATCH 12/15] add document comments to procs --- decimal/decimal.nim | 51 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index 1c0955c..73c044b 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -7,7 +7,7 @@ import decimal_lowlevel -type +type DecimalType* = ref[ptr mpd_t] DecimalError* = object of Exception @@ -21,34 +21,41 @@ var CTX_ADDR = addr CTX mpd_defaultcontext(CTX_ADDR) proc setPrec*(prec: mpd_ssize_t) = + ## Sets the precision (number of decimals) in the Context if 0 < prec: let success = mpd_qsetprec(CTX_ADDR, prec) if success == 0: raise newException(DecimalError, "Couldn't set precision") proc `$`*(s: DecimalType): string = + ## Convert DecimalType to string $mpd_to_sci(s[], 0) -proc newDecimal*(): DecimalType = +proc newDecimal*(): DecimalType = + ## Initialize a empty DecimalType new result result[] = mpd_qnew() proc newDecimal*(s: string): DecimalType = + ## Create a new DecimalType from a string new result result[] = mpd_qnew() mpd_set_string(result[], s, CTX_ADDR) proc newDecimal*(s: int64): DecimalType = + ## Create a new DecimalType from a int64 new result result[] = mpd_qnew() mpd_set_i64(result[], s, CTX_ADDR) proc newDecimal*(s: int32): DecimalType = + ## Create a new DecimalType from a int32 new result result[] = mpd_qnew() mpd_set_i32(result[], s, CTX_ADDR) proc clone*(b: DecimalType): DecimalType = + ## Clone a DecimalType and returns a new independent one var status: uint32 result = newDecimal() let success = mpd_qcopy(result[], b[], addr status) @@ -69,6 +76,7 @@ template `+`*[T: SomeNumber](a: T, b: DecimalType): untyped = newDecimal($a) + b proc `+=`*(a, b: DecimalType) = + ## Inplace addition var status: uint32 mpd_qadd(a[], a[], b[], CTX_ADDR, addr status) @@ -89,6 +97,7 @@ template `-`*[T: SomeNumber](a: T, b: DecimalType): untyped = newDecimal($a) - b proc `-=`*(a, b: DecimalType) = + ## Inplace subtraction var status: uint32 mpd_qsub(a[], a[], b[], CTX_ADDR, addr status) @@ -108,6 +117,7 @@ template `*`*[T: SomeNumber](a: DecimalType, b: T): untyped = newDecimal($b) * a proc `*=`*(a, b: DecimalType) = + ## Inplace multiplication var status: uint32 mpd_qmul(a[], a[], b[], CTX_ADDR, addr status) @@ -124,7 +134,11 @@ proc `/`*(a, b: DecimalType): DecimalType = template `/`*[T: SomeNumber](a: DecimalType, b: T): untyped = a / newDecimal($b) +template `/`*[T: SomeNumber](a: T, b: DecimalType): untyped = + newDecimal($a) / b + proc `/=`*(a, b: DecimalType) = + ## Inplace division var status: uint32 mpd_qdiv(a[], a[], b[], CTX_ADDR, addr status) @@ -134,6 +148,7 @@ template `/=`*[T: SomeNumber](a: DecimalType, b: T): untyped = proc `//`*(a, b: DecimalType): DecimalType = + ## Integer division, same as divint var status: uint32 result = newDecimal() mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) @@ -142,6 +157,7 @@ template `//`*[T: SomeNumber](a: DecimalType, b: T): untyped = a // newDecimal($b) proc `^`*(a, b: DecimalType): DecimalType = + ## Power operator var status: uint32 result = newDecimal() mpd_qpow(result[], a[], b[], CTX_ADDR, addr status) @@ -190,21 +206,25 @@ template `<=`*[T: SomeNumber](a: T, b: DecimalType): untyped = proc divint*(a, b: DecimalType): DecimalType = + ## Integer division, same ass // var status: uint32 result = newDecimal() mpd_qdivint(result[], a[], b[], CTX_ADDR, addr status) proc rem*(a, b: DecimalType): DecimalType = + ## Returns the remainder of the division a/b var status: uint32 result = newDecimal() mpd_qrem(result[], a[], b[], CTX_ADDR, addr status) proc rem_near*(a, b: DecimalType): DecimalType = + ## Return a - b * n, where n is the integer nearest the exact value of a / b. If two integers are equally near then the even one is chosen. var status: uint32 result = newDecimal() mpd_qrem_near(result[], a[], b[], CTX_ADDR, addr status) proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = + ## Return both the integer part and remainder of the division a/b, same as (a // b, rem(a, b)) var status: uint32 var q = newDecimal() var r = newDecimal() @@ -212,6 +232,7 @@ proc divmod*(a, b: DecimalType): (DecimalType, DecimalType) = result = (q, r) proc fma*(a, b, c: DecimalType): DecimalType = + ## Fused multiplication-addition, returns a * b + c var status: uint32 result = newDecimal() mpd_qfma(result[], a[], b[], c[], CTX_ADDR, addr status) @@ -220,26 +241,31 @@ proc fma*(a, b, c: DecimalType): DecimalType = # Math functions proc exp*(a: DecimalType): DecimalType = + ## The exponential function var status: uint32 result = newDecimal() mpd_qexp(result[], a[], CTX_ADDR, addr status) proc ln*(a: DecimalType): DecimalType = + ## The natural logarithm var status: uint32 result = newDecimal() mpd_qln(result[], a[], CTX_ADDR, addr status) proc log10*(a: DecimalType): DecimalType = + ## Logarithm base 10 var status: uint32 result = newDecimal() mpd_qlog10(result[], a[], CTX_ADDR, addr status) proc sqrt*(a: DecimalType): DecimalType = + ## Square root var status: uint32 result = newDecimal() mpd_qsqrt(result[], a[], CTX_ADDR, addr status) proc invroot*(a: DecimalType): DecimalType = + ## Inverse square root, same as 1/sqrt(a) var status: uint32 result = newDecimal() mpd_qinvroot(result[], a[], CTX_ADDR, addr status) @@ -247,6 +273,7 @@ proc invroot*(a: DecimalType): DecimalType = proc `-`*(a: DecimalType): DecimalType = + ## Negation operator var status: uint32 result = newDecimal() mpd_qminus(result[], a[], CTX_ADDR, addr status) @@ -257,6 +284,7 @@ proc plus*(a: DecimalType): DecimalType = mpd_qplus(result[], a[], CTX_ADDR, addr status) proc abs*(a: DecimalType): DecimalType = + ## Absolute value var status: uint32 result = newDecimal() mpd_qabs(result[], a[], CTX_ADDR, addr status) @@ -264,51 +292,61 @@ proc abs*(a: DecimalType): DecimalType = proc max*(a,b: DecimalType): DecimalType = + ## Returns the most positive of a and b. var status: uint32 result = newDecimal() mpd_qmax(result[], a[], b[], CTX_ADDR, addr status) proc max_mag*(a,b: DecimalType): DecimalType = + ## Returns the largest by magnitude of a and b var status: uint32 result = newDecimal() mpd_qmax_mag(result[], a[], b[], CTX_ADDR, addr status) proc min*(a,b: DecimalType): DecimalType = + ## Returns the most negative of a and b var status: uint32 result = newDecimal() mpd_qmin(result[], a[], b[], CTX_ADDR, addr status) proc min_mag*(a,b: DecimalType): DecimalType = + ## Returns the smallest by magnitude of a and b var status: uint32 result = newDecimal() mpd_qmin_mag(result[], a[], b[], CTX_ADDR, addr status) proc next_plus*(a: DecimalType): DecimalType = + ## The closest representable number that is larger than a var status: uint32 result = newDecimal() mpd_qnext_plus(result[], a[], CTX_ADDR, addr status) proc next_minus*(a: DecimalType): DecimalType = + ## The closest representable number that is smaller than a var status: uint32 result = newDecimal() mpd_qnext_minus(result[], a[], CTX_ADDR, addr status) proc next_toward*(a, b: DecimalType): DecimalType = + ## Representable number closest to a that is in the direction towards b var status: uint32 result = newDecimal() mpd_qnext_toward(result[], a[], b[], CTX_ADDR, addr status) proc quantize*(a, b: DecimalType): DecimalType = + ## Return the number that is equal in value to a, but has the exponent of b var status: uint32 result = newDecimal() mpd_qquantize(result[], a[], b[], CTX_ADDR, addr status) proc rescale*(a: DecimalType, b: mpd_ssize_t): DecimalType = + ## Return the number that is equal in value to a, but has the exponent exp var status: uint32 result = newDecimal() mpd_qrescale(result[], a[], b, CTX_ADDR, addr status) proc same_quantum*(a, b: DecimalType): bool = + ## Return true if a and b have the same exponent, false otherwise let cmp = mpd_same_quantum(a[], b[]) if cmp == 1: return true @@ -316,46 +354,55 @@ proc same_quantum*(a, b: DecimalType): bool = return false proc reduce*(a: DecimalType): DecimalType = + ## If a is finite after applying rounding and overflow/underflow checks, result is set to the simplest form of a with all trailing zeros removed var status: uint32 result = newDecimal() mpd_qreduce(result[], a[], CTX_ADDR, addr status) proc round_to_intx*(a: DecimalType): DecimalType = + ## Round to an integer, using the rounding mode of the context var status: uint32 result = newDecimal() mpd_qround_to_intx(result[], a[], CTX_ADDR, addr status) proc round_to_int*(a: DecimalType): DecimalType = + ## Same as mpd_qround_to_intx, but the MPD_Inexact and MPD_Rounded flags are never set var status: uint32 result = newDecimal() mpd_qround_to_int(result[], a[], CTX_ADDR, addr status) proc floor*(a: DecimalType): DecimalType = + ## Return the nearest integer towards -infinity var status: uint32 result = newDecimal() mpd_qfloor(result[], a[], CTX_ADDR, addr status) proc ceil*(a: DecimalType): DecimalType = + ## Return the nearest integer towards +infinity var status: uint32 result = newDecimal() mpd_qceil(result[], a[], CTX_ADDR, addr status) proc truncate*(a: DecimalType): DecimalType = + ## Return the truncated value of a var status: uint32 result = newDecimal() mpd_qtrunc(result[], a[], CTX_ADDR, addr status) proc logb*(a: DecimalType): DecimalType = + ## Return the adjusted exponent of a. Same as floor(log10(a)) var status: uint32 result = newDecimal() mpd_qlogb(result[], a[], CTX_ADDR, addr status) proc scaleb*(a, b: DecimalType): DecimalType = + ## b must be an integer with exponent 0. If a is infinite, result is set to a. Otherwise, result is a with the value of b added to the exponent. var status: uint32 result = newDecimal() mpd_qscaleb(result[], a[], b[], CTX_ADDR, addr status) proc powmod*(base, exp, modulus: DecimalType): DecimalType = + ## Return (base ^ exp) % mod. All operands must be integers. The function fails if result does not fit in the current prec. var status: uint32 result = newDecimal() mpd_qpowmod(result[], base[], exp[], modulus[], CTX_ADDR, addr status) \ No newline at end of file From 60e47b63749db31b3873f8a7f5bd18f3034aac82 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 13 Aug 2019 11:10:44 +0200 Subject: [PATCH 13/15] add the last procs --- decimal/decimal.nim | 50 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index 73c044b..7d58bf0 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -405,4 +405,52 @@ proc powmod*(base, exp, modulus: DecimalType): DecimalType = ## Return (base ^ exp) % mod. All operands must be integers. The function fails if result does not fit in the current prec. var status: uint32 result = newDecimal() - mpd_qpowmod(result[], base[], exp[], modulus[], CTX_ADDR, addr status) \ No newline at end of file + mpd_qpowmod(result[], base[], exp[], modulus[], CTX_ADDR, addr status) + +proc finalize*(a: DecimalType) = + ## Apply the current context to a + var status: uint32 + mpd_qfinalize(a[], CTX_ADDR, addr status) + +proc shift*(a, b: DecimalType): DecimalType = + ## Return a shifted by b places. b must be in the range [-prec, prec]. A negative b indicates a right shift, a positive b a left shift. Digits that do not fit are discarded. + var status: uint32 + result = newDecimal() + mpd_qshift(result[], a[], b[], CTX_ADDR, addr status) + +proc shift*(a: DecimalType, b: mpd_ssize_t): DecimalType = + ## Like shift, only that the number of places is specified by a integer type rather than a DecimalType + var status: uint32 + result = newDecimal() + mpd_qshiftn(result[], a[], b, CTX_ADDR, addr status) + +proc rotate*(a, b: DecimalType): DecimalType = + ## Return a rotated by b places. b must be in the range [-prec, prec]. A negative b indicates a right rotation, a positive b a left rotation. + var status: uint32 + result = newDecimal() + mpd_qrotate(result[], a[], b[], CTX_ADDR, addr status) + +proc elementwiseAnd*(a, b: DecimalType): DecimalType = + ## Return the digit-wise logical and of a and b + var status: uint32 + result = newDecimal() + mpd_qand(result[], a[], b[], CTX_ADDR, addr status) + +proc elementwiseOr*(a, b: DecimalType): DecimalType = + ## Return the digit-wise logical or of a and b + var status: uint32 + result = newDecimal() + mpd_qor(result[], a[], b[], CTX_ADDR, addr status) + +proc elementwiseXor*(a, b: DecimalType): DecimalType = + ## Return the digit-wise logical xor of a and b + var status: uint32 + result = newDecimal() + mpd_qxor(result[], a[], b[], CTX_ADDR, addr status) + +proc elementwiseInvert*(a: DecimalType): DecimalType = + ## Return the digit-wise logical inversion of a + var status: uint32 + result = newDecimal() + mpd_qinvert(result[], a[], CTX_ADDR, addr status) + From b4fb7fa88923d52c88773fc89323ef8298e2f80a Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 13 Aug 2019 18:55:05 +0200 Subject: [PATCH 14/15] fix creating DecimalType from int --- decimal/decimal.nim | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/decimal/decimal.nim b/decimal/decimal.nim index 7d58bf0..c4a75fc 100644 --- a/decimal/decimal.nim +++ b/decimal/decimal.nim @@ -42,17 +42,14 @@ proc newDecimal*(s: string): DecimalType = result[] = mpd_qnew() mpd_set_string(result[], s, CTX_ADDR) -proc newDecimal*(s: int64): DecimalType = +proc newDecimal*(s: int): DecimalType = ## Create a new DecimalType from a int64 new result result[] = mpd_qnew() - mpd_set_i64(result[], s, CTX_ADDR) - -proc newDecimal*(s: int32): DecimalType = - ## Create a new DecimalType from a int32 - new result - result[] = mpd_qnew() - mpd_set_i32(result[], s, CTX_ADDR) + when (sizeof(int) == 8): + mpd_set_i64(result[], s, CTX_ADDR) + else: + mpd_set_i32(result[], s, CTX_ADDR) proc clone*(b: DecimalType): DecimalType = ## Clone a DecimalType and returns a new independent one From ca42fb1aae224f2d44e2f371cd866d03cf3787b1 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 13 Aug 2019 18:55:22 +0200 Subject: [PATCH 15/15] add more tests --- tests/all_tests.nim | 178 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 176 insertions(+), 2 deletions(-) diff --git a/tests/all_tests.nim b/tests/all_tests.nim index a188089..2603887 100644 --- a/tests/all_tests.nim +++ b/tests/all_tests.nim @@ -73,8 +73,11 @@ suite "Basic Arithmetic": var a = newDecimal("10") var b = 5 var c = a / b - let correct = "2" - check $c == correct + var d = b / a + let correctC = "2" + let correctD = "0.5" + check $c == correctC + check $d == correctD test "Decimal ==": var a = newDecimal("6.25") @@ -121,5 +124,176 @@ suite "Basic Arithmetic": let a = newDecimal("2") let c = exp(a) check $c == "7.3890560989306502272304274605750078132" + test "Decimal rem_near": + let a = newDecimal("11") + let b = newDecimal("3") + let c = rem_near(a, b) + check $c == "-1" + test "Decimal fma": + let a = newDecimal("11") + let b = newDecimal("3") + let c = newDecimal("2") + let d = fma(a, b, c) + check $d == "35" + test "Decimal ln": + let a = newDecimal("1") + let b = exp(newDecimal("1")) + let ln1 = ln(a) + let ln2 = ln(b) + check $ln1 == "0" + check $ln2 == "1.0000000000000000000000000000000000000" + test "Decimal log10": + let a = newDecimal("1") + let b = newDecimal("10") + let c = newDecimal("20") + let log1 = log10(a) + let log2 = log10(b) + let log3 = log10(c) + check $log1 == "0" + check $log2 == "1" + check $log3 == "1.3010299956639811952137388947244930268" + test "Decimal sqrt": + let a = newDecimal("6.25") + let b = sqrt(a) + check $b == "2.5" + test "Decimal invroot": + let a = newDecimal("10") + let b = invroot(a) + check $b == "0.31622776601683793319988935444327185337" + test "Decimal negate": + let a = newDecimal("1.23") + let b = newDecimal("-4.56") + let a2 = -a + let b2 = -b + check $a2 == "-1.23" + check $b2 == "4.56" + test "Decimal abs": + let a = newDecimal("7") + let b = newDecimal("-8") + let c = abs(a) + let d = abs(b) + check $c == "7" + check $d == "8" + test "Decimal quantize": + let a = newDecimal("17.89843759") + let b = newDecimal("1e-5") + check $quantize(a,b) == "17.89844" + test "Decimal max": + let a = newDecimal("5") + let b = newDecimal("-5") + let c = newDecimal("2") + check max(a, b) == a + check max(b, c) == c + test "Decimal max_mag": + let a = newDecimal("5") + let b = newDecimal("-6") + let c = newDecimal("7") + check max_mag(a, b) == b + check max_mag(b, c) == c + test "Decimal min": + let a = newDecimal("5") + let b = newDecimal("-5") + let c = newDecimal("-2") + check min(a, b) == b + check min(b, c) == b + test "Decimal min_mag": + let a = newDecimal("5") + let b = newDecimal("-6") + let c = newDecimal("7") + check min_mag(a, b) == a + check min_mag(b, c) == b + test "Decimal next_plus": + let a = newDecimal("1.01") + let b = next_plus(a) + let correct = "1.0100000000000000000000000000000000001" + check $b == correct + test "Decimal next_minus": + let a = newDecimal("1.01") + let b = next_minus(a) + let correct = "1.0099999999999999999999999999999999999" + check $b == correct + test "Decimal next_toward": + let a = newDecimal("1.01") + let b = newDecimal("2") + let c = newDecimal("1") + let correct1 = "1.0100000000000000000000000000000000001" + let correct2 = "1.0099999999999999999999999999999999999" + check $next_toward(a, b) == correct1 + check $next_toward(a, c) == correct2 + test "Decimal rescale": + let a = newDecimal("2000") + let b = rescale(a, 3) + check $b == "2e+3" + test "Decimal same_quantum": + let a = newDecimal("2e-5") + let b = newDecimal("20e-6") + let c = newDecimal("20e-5") + check not same_quantum(a, b) + check same_quantum(a, c) + test "Decimal reduce": + let a = newDecimal("1.2345000000000000000") + let b = newDecimal("1.2345") + let c = reduce(a) + check $c == $b + test "Decimal round_to_intx": + let a = newDecimal("1.49") + let b = round_to_intx(a) + check $b == "1" + test "Decimal floor": + let a = newDecimal("1.49") + let b = floor(a) + check $b == "1" + test "Decimal ceil": + let a = newDecimal("1.49") + let b = ceil(a) + check $b == "2" + test "Decimal truncate": + let a = newDecimal("10.12345678") + let b = truncate(a) + check $b == "10" + test "Decimal logb": + let a = newDecimal("76543") + let b = logb(a) + let correct = floor(log10(a)) + check b == correct + test "Decimal scaleb": + let a = newDecimal("23e4") + let b = newDecimal("3") + let c = scaleb(a, b) + check $c == "2.3e+8" + test "Decimal powmod": + let base = newDecimal("2") + let exp = newDecimal("5") + let m = newDecimal("7") + let correct = rem(base ^ exp, m) + check powmod(base, exp, m) == correct + test "Decimal shift": + let a = newDecimal("1.23e7") + let b = 2 + let c = shift(a, b) + check $c == "1.2300e+9" + test "Decimal rotate": + let a = newDecimal("1.23e7") + let b = newDecimal(2) + let c = rotate(a, b) + check $c == "1.2300e+9" + test "Decimal elementwiseOr": + let a = newDecimal("1110") + let b = newDecimal("1010") + check $elementwiseOr(a,b) == "1110" + test "Decimal elementwiseAnd": + let a = newDecimal("1110") + let b = newDecimal("1010") + check $elementwiseAnd(a,b) == "1010" + test "Decimal elementwiseXor": + let a = newDecimal("01110") + let b = newDecimal("11010") + check $elementwiseXor(a,b) == "10100" + test "Decimal elementwiseInvert": + let a = newDecimal("111010") + check $elementwiseInvert(a) == "11111111111111111111111111111111000101" + + +