ref: 5a6878701b5066d0143b0a2e21be35ce7f3d8976
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 }