shithub: mc

ref: 93096d44290fa0438733b39ed2d43ad8cff9d4f9
dir: /lib/std/test/bitset.myr/

View raw version
use std
use testr

const main = {
	testr.run([
		[.name="basic", .fn={ctx
			var bs = mkset([0, 1, 16][:])
			testr.check(ctx, std.bshas(bs, 0), "missing 0")
			testr.check(ctx, std.bshas(bs, 1), "missing 1")
			testr.check(ctx, std.bshas(bs, 16), "missing 16")
			testr.check(ctx, !std.bshas(bs, -1), "negative val")
			testr.check(ctx, !std.bshas(bs, 2), "extra 2")
			testr.check(ctx, !std.bshas(bs, 15), "extra 15")
			testr.check(ctx, !std.bshas(bs, 17), "extra 2")
			std.bsfree(bs)
		}],
		[.name="bigsets", .fn={ctx
			/* multiple chunks */
			var bs = mkset([0, 63, 64, 65, 73, 127, 128, 129][:])
			testr.check(ctx, std.bshas(bs, 0), "missing 0")
			testr.check(ctx, std.bshas(bs, 63), "missing 63")
			testr.check(ctx, std.bshas(bs, 64), "missing 64")
			testr.check(ctx, std.bshas(bs, 65), "missing 65")
			testr.check(ctx, std.bshas(bs, 127), "missing 127")
			testr.check(ctx, std.bshas(bs, 128), "missing 128")
			testr.check(ctx, std.bshas(bs, 129), "missing 129")
			std.bsfree(bs)
		}],
		[.name="iter", .fn={ctx
			var expected = [0,1,3,7,16][:]
			var bs = mkset(expected)
			var i = 0

			std.bsput(bs, 1)
			std.bsput(bs, 0)
			std.bsput(bs, 16)
			std.bsput(bs, 7)
			std.bsput(bs, 3)
			for e in std.bybsvalue(bs)
				testr.check(ctx, e == expected[i], "expected[{}] ({}) != {}", i, e, expected[i])
				i++
			;;
			std.bsfree(bs)
		}],
		[.name="count", .fn={ctx
			var bs = mkset([0, 63, 64, 65, 73, 127, 128, 129][:])
			testr.check(ctx, std.bscount(bs) == 8, "wrong element count, expected {}", std.bscount(bs))
			std.bsfree(bs)
		}]
	][:])
}

const mkset = {elts
	var bs

	bs = std.mkbs()
	for e in elts
		std.bsput(bs, e)
	;;
	-> bs
}