shithub: mc

ref: 6fb7d34b848c598e6398f960dc0a7e240e09a6f5
dir: /lib/math/test/fpmath-sum-impl.myr/

View raw version
use std
use math
use testr

const main = {
	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],
		[.name = "fast2sum-01", .fn = fast2sum01],
	][:])
}

const trunc01 = {c
	var flt32s : (flt32, flt32)[:] = [
		(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),
		(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)
	;;
}

const fast2sum01 = {c
        var flt32s : (flt32, flt32, flt32, flt32)[:] = [
                (1.0, 1.0, 2.0, 0.0),
                (10664524000000000000.0, 1.11842, 10664524000000000000.0, 1.11842),
                (1.11843, 10664524000000000000.0, 10664524000000000000.0, 1.11843),
                (-21897.1324, 17323.22, -4573.912, 0.0),
        ][:]

        for (a, b, s1, t1) : flt32s
                var s2, t2
                (s2, t2) = math.fast2sum(a, b)
                testr.eq(c, s1, s2)
                testr.eq(c, t1, t2)
        ;;

        var flt64s : (flt64, flt64, flt64, flt64)[:] = [
                (1.0, 1.0, 2.0, 0.0),
                (-21897.1324, 17323.22, -4573.912399999997, 0.0),
                (std.flt64frombits(0x78591b0672a81284), std.flt64frombits(0x6a8c3190e27a1884),
                 std.flt64frombits(0x78591b0672a81284), std.flt64frombits(0x6a8c3190e27a1884)),
                (std.flt64frombits(0x6a8c3190e27a1884), std.flt64frombits(0x78591b0672a81284),
                 std.flt64frombits(0x78591b0672a81284), std.flt64frombits(0x6a8c3190e27a1884)),
                (std.flt64frombits(0x78591b0672a81284), std.flt64frombits(0x7858273672ca19a0),
                 std.flt64frombits(0x7868a11e72b91612), 0.0),
        ][:]

        for (a, b, s1, t1) : flt64s
                var s2, t2
                (s2, t2) = math.fast2sum(a, b)
                testr.eq(c, s1, s2)
                testr.eq(c, std.flt64bits(t1), std.flt64bits(t2))
        ;;
}