ref: 78da203b42b5084a7664e8773f418a4730184d53
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 }