ref: 097c5188b37949e352cb8c92b38c49b4027314e0
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 }