70 lines · 2.0 KB · Text
RawDownload
use stduse 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}