109 lines
2.2 KiB
Nim
109 lines
2.2 KiB
Nim
# Stint
|
|
# Copyright 2018-2023 Status Research & Development GmbH
|
|
# Licensed under either of
|
|
#
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
|
#
|
|
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
|
|
|
import ../stint, unittest, test_helpers
|
|
|
|
template testSignedness(chk, tst: untyped) =
|
|
tst "positive sign":
|
|
let a = stint(1, 128)
|
|
chk a.sign > 0
|
|
chk a.isNegative == false
|
|
|
|
let b = stint(uint32.high, 128)
|
|
chk b.sign > 0
|
|
chk b.isNegative == false
|
|
|
|
let c = stint(uint64.high, 128)
|
|
chk c.sign > 0
|
|
chk c.isNegative == false
|
|
|
|
let aa = stint(1, 256)
|
|
chk aa.sign > 0
|
|
chk aa.isNegative == false
|
|
|
|
let bb = stint(uint32.high, 256)
|
|
chk bb.sign > 0
|
|
chk bb.isNegative == false
|
|
|
|
let cc = stint(uint64.high, 256)
|
|
chk cc.sign > 0
|
|
chk cc.isNegative == false
|
|
|
|
var zz: StInt[128]
|
|
zz.setOne
|
|
chk zz.sign > 0
|
|
chk zz.isNegative == false
|
|
|
|
let yy = StInt[128].one
|
|
chk yy.sign > 0
|
|
chk yy.isNegative == false
|
|
|
|
tst "zero sign":
|
|
let a = stint(0, 128)
|
|
chk a.sign == 0
|
|
chk a.isNegative == false
|
|
|
|
let aa = stint(0, 256)
|
|
chk aa.sign == 0
|
|
chk aa.isNegative == false
|
|
|
|
var zz: StInt[128]
|
|
zz.setZero
|
|
chk zz.sign == 0
|
|
chk zz.isNegative == false
|
|
|
|
let yy = StInt[128].zero
|
|
chk yy.sign == 0
|
|
chk yy.isNegative == false
|
|
|
|
tst "negative sign":
|
|
let a = stint(-1, 128)
|
|
chk a.sign < 0
|
|
chk a.isNegative == true
|
|
|
|
let aa = stint(-1, 256)
|
|
chk aa.sign < 0
|
|
chk aa.isNegative == true
|
|
|
|
let zz = -1.i128
|
|
chk zz.sign < 0
|
|
chk zz.isNegative == true
|
|
|
|
let yy = -1.i256
|
|
chk yy.sign < 0
|
|
chk yy.isNegative == true
|
|
|
|
tst "abs":
|
|
let a = -1.i128
|
|
let aa = a.abs
|
|
chk aa == 1.i128
|
|
|
|
let b = -1.i256
|
|
let bb = b.abs
|
|
chk bb == 1.i256
|
|
|
|
tst "negate":
|
|
var a = -1.i128
|
|
a.negate
|
|
chk a == 1.i128
|
|
|
|
var b = -1.i256
|
|
b.negate
|
|
chk b == 1.i256
|
|
|
|
let c = -1.i256
|
|
let d = -c
|
|
chk d == 1.i256
|
|
|
|
static:
|
|
testSignedness(ctCheck, ctTest)
|
|
|
|
suite "Signed integer signedness":
|
|
testSignedness(check, test)
|