ref: 16b894430a5b71f4956ee305229bbbffd13605d0
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 }