More tests
This commit is contained in:
parent
a289a9587d
commit
725f4b7289
5 changed files with 210 additions and 4 deletions
|
@ -81,7 +81,7 @@ fn limits() {
|
|||
bigi.power(bigi.from_int(2), bigi.from_int(127)),
|
||||
bigi.from_int(-1),
|
||||
)
|
||||
let max = bigi.subtract(bigi.absolute(min), bigi.from_int(-1))
|
||||
let max = bigi.subtract(bigi.absolute(min), bigi.from_int(1))
|
||||
|
||||
interface.overflowable_limits(min, max)
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@ fn limits() {
|
|||
bigi.power(bigi.from_int(2), bigi.from_int(63)),
|
||||
bigi.from_int(-1),
|
||||
)
|
||||
let max = bigi.subtract(bigi.absolute(min), bigi.from_int(-1))
|
||||
let max = bigi.subtract(bigi.absolute(min), bigi.from_int(1))
|
||||
|
||||
interface.overflowable_limits(min, max)
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ fn limits() {
|
|||
let max =
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(128)),
|
||||
bigi.from_int(-1),
|
||||
bigi.from_int(1),
|
||||
)
|
||||
|
||||
interface.overflowable_limits(min, max)
|
||||
|
|
|
@ -76,7 +76,7 @@ fn limits() {
|
|||
let max =
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(64)),
|
||||
bigi.from_int(-1),
|
||||
bigi.from_int(1),
|
||||
)
|
||||
|
||||
interface.overflowable_limits(min, max)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import gleam/function
|
||||
import gleeunit/should
|
||||
import bigi.{type BigInt}
|
||||
import ranged_int/interface
|
||||
|
@ -96,6 +97,211 @@ pub fn add_overflow_test() {
|
|||
binary(uint128.from_bigint, uint128.add)(input1, input2, should.be_error)
|
||||
}
|
||||
|
||||
pub fn add_overflow_eject_test() {
|
||||
binary(int8.from_bigint, int8.add)(
|
||||
bigi.from_int(-127),
|
||||
bigi.from_int(1000),
|
||||
function.compose(int8.eject, should.equal(_, bigi.from_int(873))),
|
||||
)
|
||||
|
||||
binary(int16.from_bigint, int16.add)(
|
||||
bigi.from_int(32_767),
|
||||
bigi.from_int(1),
|
||||
function.compose(int16.eject, should.equal(_, bigi.from_int(32_768))),
|
||||
)
|
||||
|
||||
binary(int32.from_bigint, int32.add)(
|
||||
bigi.from_int(2_000_000_000),
|
||||
bigi.from_int(3_000_000_000),
|
||||
function.compose(int32.eject, should.equal(_, bigi.from_int(5_000_000_000))),
|
||||
)
|
||||
|
||||
binary(int64.from_bigint, int64.add)(
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(63)),
|
||||
bigi.from_int(1),
|
||||
),
|
||||
bigi.from_int(1),
|
||||
function.compose(int64.eject, should.equal(_, bigi.power(
|
||||
bigi.from_int(2),
|
||||
bigi.from_int(63),
|
||||
))),
|
||||
)
|
||||
|
||||
binary(int128.from_bigint, int128.add)(
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(127)),
|
||||
bigi.from_int(1),
|
||||
),
|
||||
bigi.from_int(1),
|
||||
function.compose(int128.eject, should.equal(_, bigi.power(
|
||||
bigi.from_int(2),
|
||||
bigi.from_int(127),
|
||||
))),
|
||||
)
|
||||
|
||||
binary(uint8.from_bigint, uint8.add)(
|
||||
bigi.from_int(0),
|
||||
bigi.from_int(1000),
|
||||
function.compose(uint8.eject, should.equal(_, bigi.from_int(1000))),
|
||||
)
|
||||
|
||||
binary(uint16.from_bigint, uint16.add)(
|
||||
bigi.from_int(32_768),
|
||||
bigi.from_int(32_768),
|
||||
function.compose(uint16.eject, should.equal(_, bigi.from_int(65_536))),
|
||||
)
|
||||
|
||||
binary(uint32.from_bigint, uint32.add)(
|
||||
bigi.from_int(2_000_000_000),
|
||||
bigi.from_int(3_000_000_000),
|
||||
function.compose(uint32.eject, should.equal(_, bigi.from_int(5_000_000_000))),
|
||||
)
|
||||
|
||||
binary(uint64.from_bigint, uint64.add)(
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(64)),
|
||||
bigi.from_int(1),
|
||||
),
|
||||
bigi.from_int(1),
|
||||
function.compose(uint64.eject, should.equal(_, bigi.power(
|
||||
bigi.from_int(2),
|
||||
bigi.from_int(64),
|
||||
))),
|
||||
)
|
||||
|
||||
binary(uint128.from_bigint, uint128.add)(
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(128)),
|
||||
bigi.from_int(1),
|
||||
),
|
||||
bigi.from_int(1),
|
||||
function.compose(uint128.eject, should.equal(_, bigi.power(
|
||||
bigi.from_int(2),
|
||||
bigi.from_int(128),
|
||||
))),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn add_overflow_wrap_test() {
|
||||
overflow_wrap(
|
||||
bigi.from_int(127),
|
||||
bigi.from_int(1),
|
||||
bigi.from_int(-128),
|
||||
int8.from_bigint,
|
||||
int8.add,
|
||||
int8.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.from_int(-32_768),
|
||||
bigi.from_int(-1),
|
||||
bigi.from_int(32_767),
|
||||
int16.from_bigint,
|
||||
int16.add,
|
||||
int16.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.from_int(2_000_000_000),
|
||||
bigi.from_int(3_000_000_000),
|
||||
bigi.from_int(705_032_704),
|
||||
int32.from_bigint,
|
||||
int32.add,
|
||||
int32.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(63)),
|
||||
bigi.from_int(255),
|
||||
),
|
||||
bigi.from_int(255),
|
||||
bigi.multiply(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(63)),
|
||||
bigi.from_int(-1),
|
||||
),
|
||||
int64.from_bigint,
|
||||
int64.add,
|
||||
int64.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.multiply(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(127)),
|
||||
bigi.from_int(-1),
|
||||
),
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(128)),
|
||||
bigi.multiply(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(127)),
|
||||
bigi.from_int(-1),
|
||||
),
|
||||
int128.from_bigint,
|
||||
int128.add,
|
||||
int128.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.from_int(255),
|
||||
bigi.from_int(1),
|
||||
bigi.zero(),
|
||||
uint8.from_bigint,
|
||||
uint8.add,
|
||||
uint8.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.from_int(65_535),
|
||||
bigi.from_int(1),
|
||||
bigi.zero(),
|
||||
uint16.from_bigint,
|
||||
uint16.add,
|
||||
uint16.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.from_int(2_000_000_000),
|
||||
bigi.from_int(3_000_000_000),
|
||||
bigi.from_int(705_032_704),
|
||||
uint32.from_bigint,
|
||||
uint32.add,
|
||||
uint32.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.subtract(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(64)),
|
||||
bigi.from_int(1),
|
||||
),
|
||||
bigi.from_int(1),
|
||||
bigi.zero(),
|
||||
uint64.from_bigint,
|
||||
uint64.add,
|
||||
uint64.overflow,
|
||||
)
|
||||
|
||||
overflow_wrap(
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(127)),
|
||||
bigi.power(bigi.from_int(2), bigi.from_int(127)),
|
||||
bigi.zero(),
|
||||
uint128.from_bigint,
|
||||
uint128.add,
|
||||
uint128.overflow,
|
||||
)
|
||||
}
|
||||
|
||||
fn overflow_wrap(
|
||||
int1: BigInt,
|
||||
int2: BigInt,
|
||||
expected: BigInt,
|
||||
from_bigint: fn(BigInt) -> Result(a, b),
|
||||
fun: fn(a, BigInt) -> interface.OpResult(a),
|
||||
overflow: fn(interface.OpResult(a)) -> a,
|
||||
) {
|
||||
let assert Ok(expected) = from_bigint(expected)
|
||||
should.equal(binary(from_bigint, fun)(int1, int2, overflow), expected)
|
||||
}
|
||||
|
||||
fn unary(
|
||||
from_bigint: fn(BigInt) -> Result(a, b),
|
||||
fun: fn(a) -> interface.OpResult(a),
|
||||
|
|
Loading…
Reference in a new issue