mirror of https://github.com/vacp2p/nim-stint.git
assert() -> doAssert()
This commit is contained in:
parent
d002fbb155
commit
6853ebe97c
26
stint/io.nim
26
stint/io.nim
|
@ -17,7 +17,7 @@ template static_check_size(T: typedesc[SomeInteger], bits: static[int]) =
|
|||
# To avoid a costly runtime check, we refuse storing into StUint types smaller
|
||||
# than the input type.
|
||||
|
||||
static: assert sizeof(T) * 8 <= bits, "Input type (" & $T &
|
||||
static: doAssert sizeof(T) * 8 <= bits, "Input type (" & $T &
|
||||
") cannot be stored in a multi-precision " &
|
||||
$bits & "-bit integer." &
|
||||
"\nUse a smaller input type instead. This is a compile-time check" &
|
||||
|
@ -32,7 +32,7 @@ func assignLo(result: var (UintImpl | IntImpl), n: SomeInteger) {.inline.} =
|
|||
func stuint*[T: SomeInteger](n: T, bits: static[int]): StUint[bits] {.inline.}=
|
||||
## Converts an integer to an arbitrary precision integer.
|
||||
|
||||
assert n >= 0.T
|
||||
doAssert n >= 0.T
|
||||
when result.data is UintImpl:
|
||||
static_check_size(T, bits)
|
||||
assignLo(result.data, n)
|
||||
|
@ -87,16 +87,16 @@ func skipPrefixes(current_idx: var int, str: string, radix: range[2..16]) {.inli
|
|||
if str.len < 2:
|
||||
return
|
||||
|
||||
assert current_idx == 0, "skipPrefixes only works for prefixes (position 0 and 1 of the string)"
|
||||
doAssert current_idx == 0, "skipPrefixes only works for prefixes (position 0 and 1 of the string)"
|
||||
if str[0] == '0':
|
||||
if str[1] in {'x', 'X'}:
|
||||
assert radix == 16, "Parsing mismatch, 0x prefix is only valid for a hexadecimal number (base 16)"
|
||||
doAssert radix == 16, "Parsing mismatch, 0x prefix is only valid for a hexadecimal number (base 16)"
|
||||
current_idx = 2
|
||||
elif str[1] in {'o', 'O'}:
|
||||
assert radix == 8, "Parsing mismatch, 0o prefix is only valid for an octal number (base 8)"
|
||||
doAssert radix == 8, "Parsing mismatch, 0o prefix is only valid for an octal number (base 8)"
|
||||
current_idx = 2
|
||||
elif str[1] in {'b', 'B'}:
|
||||
assert radix == 2, "Parsing mismatch, 0b prefix is only valid for a binary number (base 2)"
|
||||
doAssert radix == 2, "Parsing mismatch, 0b prefix is only valid for a binary number (base 2)"
|
||||
current_idx = 2
|
||||
|
||||
func nextNonBlank(current_idx: var int, s: string) {.inline.} =
|
||||
|
@ -116,7 +116,7 @@ func readDecChar(c: range['0'..'9']): int {.inline.}=
|
|||
func parse*[bits: static[int]](input: string, T: typedesc[Stuint[bits]], radix: static[uint8] = 10): T =
|
||||
## Parse a string and store the result in a Stint[bits] or Stuint[bits].
|
||||
|
||||
static: assert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
static: doAssert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
# TODO: use static[range[2 .. 16]], not supported at the moment (2018-04-26)
|
||||
|
||||
# TODO: we can special case hex result/input as an array of bytes
|
||||
|
@ -137,7 +137,7 @@ func parse*[bits: static[int]](input: string, T: typedesc[Stuint[bits]], radix:
|
|||
func parse*[bits: static[int]](input: string, T: typedesc[Stint[bits]], radix: static[int8] = 10): T =
|
||||
## Parse a string and store the result in a Stint[bits] or Stuint[bits].
|
||||
|
||||
static: assert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
static: doAssert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
# TODO: use static[range[2 .. 16]], not supported at the moment (2018-04-26)
|
||||
|
||||
# TODO: we can special case hex result/input as an array of bytes
|
||||
|
@ -152,7 +152,7 @@ func parse*[bits: static[int]](input: string, T: typedesc[Stint[bits]], radix: s
|
|||
no_overflow: Stuint[bits]
|
||||
|
||||
if input[curr] == '-':
|
||||
assert radix == 10, "Negative numbers are only supported with base 10 input."
|
||||
doAssert radix == 10, "Negative numbers are only supported with base 10 input."
|
||||
isNeg = true
|
||||
inc curr
|
||||
else:
|
||||
|
@ -186,7 +186,7 @@ func toString*[bits: static[int]](num: StUint[bits], radix: static[uint8] = 10):
|
|||
## - they are prefixed with "-" for base 10.
|
||||
## - if not base 10, they are returned raw in two-complement form.
|
||||
|
||||
static: assert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
static: doAssert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
# TODO: use static[range[2 .. 16]], not supported at the moment (2018-04-26)
|
||||
|
||||
const hexChars = "0123456789abcdef"
|
||||
|
@ -209,7 +209,7 @@ func toString*[bits: static[int]](num: Stint[bits], radix: static[int8] = 10): s
|
|||
## - they are prefixed with "-" for base 10.
|
||||
## - if not base 10, they are returned raw in two-complement form.
|
||||
|
||||
static: assert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
static: doAssert (radix >= 2) and radix <= 16, "Only base from 2..16 are supported"
|
||||
# TODO: use static[range[2 .. 16]], not supported at the moment (2018-04-26)
|
||||
|
||||
const hexChars = "0123456789abcdef"
|
||||
|
@ -287,9 +287,9 @@ proc initFromBytesBE*[bits: static[int]](val: var Stuint[bits], ba: openarray[by
|
|||
const N = bits div 8
|
||||
|
||||
when not allowPadding:
|
||||
assert(ba.len == N)
|
||||
doAssert(ba.len == N)
|
||||
else:
|
||||
assert ba.len <= N
|
||||
doAssert ba.len <= N
|
||||
|
||||
{.pragma: restrict, codegenDecl: "$# __restrict $#".}
|
||||
let r_ptr {.restrict.} = cast[ptr array[N, byte]](val.addr)
|
||||
|
|
|
@ -13,8 +13,8 @@ func addmod_internal(a, b, m: Stuint): Stuint {.inline.}=
|
|||
## Modular addition
|
||||
## ⚠⚠ Assume a < m and b < m
|
||||
|
||||
assert a < m
|
||||
assert b < m
|
||||
doAssert a < m
|
||||
doAssert b < m
|
||||
|
||||
# We don't do a_m + b_m directly to avoid overflows
|
||||
let b_from_m = m - b
|
||||
|
@ -27,8 +27,8 @@ func submod_internal(a, b, m: Stuint): Stuint {.inline.}=
|
|||
## Modular substraction
|
||||
## ⚠⚠ Assume a < m and b < m
|
||||
|
||||
assert a < m
|
||||
assert b < m
|
||||
doAssert a < m
|
||||
doAssert b < m
|
||||
|
||||
# We don't do a_m - b_m directly to avoid underflows
|
||||
if a >= b:
|
||||
|
@ -40,7 +40,7 @@ func doublemod_internal(a, m: Stuint): Stuint {.inline.}=
|
|||
## Double a modulo m. Assume a < m
|
||||
## Internal proc - used in mulmod
|
||||
|
||||
assert a < m
|
||||
doAssert a < m
|
||||
|
||||
result = a
|
||||
if a >= m - a:
|
||||
|
@ -51,8 +51,8 @@ func mulmod_internal(a, b, m: Stuint): Stuint {.inline.}=
|
|||
## Does (a * b) mod m. Assume a < m and b < m
|
||||
## Internal proc - used in powmod
|
||||
|
||||
assert a < m
|
||||
assert b < m
|
||||
doAssert a < m
|
||||
doAssert b < m
|
||||
|
||||
var (a, b) = (a, b)
|
||||
|
||||
|
@ -69,7 +69,7 @@ func powmod_internal(a, b, m: Stuint): Stuint {.inline.}=
|
|||
## Compute ``(a ^ b) mod m``, assume a < m
|
||||
## Internal proc
|
||||
|
||||
assert a < m
|
||||
doAssert a < m
|
||||
|
||||
var (a, b) = (a, b)
|
||||
result = one(type a)
|
||||
|
|
|
@ -122,7 +122,7 @@ proc div3n2n[T: SomeUnsignedInt](
|
|||
|
||||
func div2n1n(q, r: var UintImpl, ah, al, b: UintImpl) =
|
||||
|
||||
# assert countLeadingZeroBits(b) == 0, "Divisor was not normalized"
|
||||
# doAssert countLeadingZeroBits(b) == 0, "Divisor was not normalized"
|
||||
|
||||
var s: UintImpl
|
||||
div3n2n(q.hi, s, ah.hi, ah.lo, al.hi, b)
|
||||
|
@ -130,7 +130,7 @@ func div2n1n(q, r: var UintImpl, ah, al, b: UintImpl) =
|
|||
|
||||
func div2n1n[T: SomeunsignedInt](q, r: var T, n_hi, n_lo, d: T) =
|
||||
|
||||
# assert countLeadingZeroBits(d) == 0, "Divisor was not normalized"
|
||||
# doAssert countLeadingZeroBits(d) == 0, "Divisor was not normalized"
|
||||
|
||||
const
|
||||
size = bitsof(q)
|
||||
|
@ -170,7 +170,7 @@ func div2n1n[T: SomeunsignedInt](q, r: var T, n_hi, n_lo, d: T) =
|
|||
|
||||
func divmodBZ[T](x, y: UintImpl[T], q, r: var UintImpl[T])=
|
||||
|
||||
assert y.isZero.not() # This should be checked on release mode in the divmod caller proc
|
||||
doAssert y.isZero.not() # This should be checked on release mode in the divmod caller proc
|
||||
|
||||
if y.hi.isZero:
|
||||
# Shortcut if divisor is smaller than half the size of the type
|
||||
|
@ -207,7 +207,7 @@ func divmodBS(x, y: UintImpl, q, r: var UintImpl) =
|
|||
## Division for multi-precision unsigned uint
|
||||
## Implementation through binary shift division
|
||||
|
||||
assert y.isZero.not() # This should be checked on release mode in the divmod caller proc
|
||||
doAssert y.isZero.not() # This should be checked on release mode in the divmod caller proc
|
||||
|
||||
type SubTy = type x.lo
|
||||
|
||||
|
|
|
@ -200,7 +200,7 @@ suite "Testing conversion functions: Hex, Bytes, Endianness using secp256k1 curv
|
|||
# sig = ecc.sign(msghash)
|
||||
# print(" sig='{}',".format(encode_hex(sig)))
|
||||
# print(" raw_sig='{}')".format(crypto._decode_sig(sig)))
|
||||
# assert crypto.ecdsa_recover(msghash, sig) == pubkey
|
||||
# doAssert crypto.ecdsa_recover(msghash, sig) == pubkey
|
||||
# """
|
||||
|
||||
type
|
||||
|
|
|
@ -14,7 +14,7 @@ suite "Testing unsigned int bitwise operations":
|
|||
|
||||
let b = a * a
|
||||
let z = 10000'u16
|
||||
assert cast[uint16](b) == z, "Test cannot proceed, something is wrong with the multiplication implementation"
|
||||
doAssert cast[uint16](b) == z, "Test cannot proceed, something is wrong with the multiplication implementation"
|
||||
|
||||
|
||||
let u = 10000.stuint(64)
|
||||
|
|
Loading…
Reference in New Issue