ref: 92840bc1ade4d670ce1b6cd3dc7be48b16148a5e
dir: /lib/std/test/bitset.myr/
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 : 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)
		}],
		[.name="hash", .fn={ctx
			var bs = mkset([][:])
			testr.check(ctx, std.hash(bs) == 0x726fdb47dd0e0e31, "wrong hash, got {}", std.hash(bs))
			std.bsput(bs, 123456)
			testr.check(ctx, std.hash(bs) == 0x778abc1d7706143b, "wrong hash, got {}", std.hash(bs))
			std.bsdel(bs, 123456)
			testr.check(ctx, std.hash(bs) == 0x726fdb47dd0e0e31, "wrong hash, got {}", std.hash(bs))
			std.bsfree(bs)
		}]
	][:])
}
const mkset = {elts
	var bs
	bs = std.mkbs()
	for e : elts
		std.bsput(bs, e)
	;;
	-> bs
}