ref: 0b1ae8fb344e5e5a26f50fa5c2f0dbb5c1318b87
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 in 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.bshash(bs) == 493832887, "wrong hash, expected {}", std.bshash(bs))
std.bsput(bs, 123456)
testr.check(ctx, std.bshash(bs) == 746495367, "wrong hash, expected {}", std.bshash(bs))
std.bsdel(bs, 123456)
testr.check(ctx, std.bshash(bs) == 493832887, "wrong hash, expected {}", std.bshash(bs))
std.bsfree(bs)
}]
][:])
}
const mkset = {elts
var bs
bs = std.mkbs()
for e in elts
std.bsput(bs, e)
;;
-> bs
}