shithub: mc

ref: ff88594df5c5df6fb8f227ab8e5df3529ba6e72f
dir: /lib/math/test/trunc-impl.myr/

View raw version
use std
use math
use testr

const main = {
	math.fptrap(false)
	testr.run([
		[.name = "trunc-01",    .fn = trunc01],
		[.name = "trunc-02",    .fn = trunc02],
		[.name = "floor-01",    .fn = floor01],
		[.name = "floor-02",    .fn = floor02],
		[.name = "ceil-01",     .fn = ceil01],
		[.name = "ceil-02",     .fn = ceil02],
	][:])
}

const trunc01 = {c
	var flt32s : (flt32, flt32)[:] = [
		(123.4, 123.0),
		(0.0, 0.0),
		(-0.0, -0.0),
		(1.0, 1.0),
		(1.1, 1.0),
		(0.9, 0.0),
		(10664524000000000000.0, 10664524000000000000.0),
		(-3.5, -3.0),
		(101.999, 101.0),
		(std.flt32nan(), std.flt32nan()),
	][:]

	for (f, g) : flt32s
		testr.eq(c, math.trunc(f), g)
	;;
}

const trunc02 = {c
	var flt64s : (flt64, flt64)[:] = [
		(0.0, 0.0),
		(-0.0, -0.0),
		(1.0, 1.0),
		(1.1, 1.0),
		(0.9, 0.0),
		(13809453812721350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0, 13809453812721350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0),
		(-3.5, -3.0),
		(101.999, 101.0),
		(std.flt64nan(), std.flt64nan()),
	][:]

	for (f, g) : flt64s
		testr.eq(c, math.trunc(f), g)
	;;
}

const floor01 = {c
	var flt32s : (flt32, flt32)[:] = [
		(0.0, 0.0),
		(-0.0, -0.0),
		(0.5, 0.0),
		(1.1, 1.0),
		(10664524000000000000.0, 10664524000000000000.0),
		(-3.5, -4.0),
		(-101.999, -102.0),
		(-126.999, -127.0),
		(-127.999, -128.0),
		(-128.999, -129.0),
		(std.flt32nan(), std.flt32nan()),
	][:]

	for (f, g) : flt32s
		testr.eq(c, math.floor(f), g)
	;;
}

const floor02 = {c
	var flt64s : (flt64, flt64)[:] = [
		(0.0, 0.0),
		(-0.0, -0.0),
		(0.5, 0.0),
		(1.1, 1.0),
		(13809453812721350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0, 13809453812721350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0),
		(-3.5, -4.0),
		(-101.999, -102.0),
		(std.flt64nan(), std.flt64nan()),
	][:]

	for (f, g) : flt64s
		testr.eq(c, math.floor(f), g)
	;;
}

const ceil01 = {c
	var flt32s : (flt32, flt32)[:] = [
		(0.0, 0.0),
		(-0.0, -0.0),
		(0.5, 1.0),
		(-0.1, -0.0),
		(1.1, 2.0),
		(10664524000000000000.0, 10664524000000000000.0),
		(-3.5, -3.0),
		(-101.999, -101.0),
		(std.flt32nan(), std.flt32nan()),
	][:]

	for (f, g) : flt32s
		testr.eq(c, math.ceil(f), g)
	;;
}

const ceil02 = {c
	var flt64s : (flt64, flt64)[:] = [
		(0.0, 0.0),
		(-0.0, -0.0),
		(0.5, 1.0),
		(-0.1, -0.0),
		(1.1, 2.0),
		(13809453812721350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0, 13809453812721350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0),
		(-3.5, -3.0),
		(-101.999, -101.0),
		(std.flt64nan(), std.flt64nan()),
	][:]

	for (f, g) : flt64s
		testr.eq(c, math.ceil(f), g)
	;;
}