var data = {lines:[ {"lineNum":" 1","line":"const builtin = @import(\"builtin\");"}, {"lineNum":" 2","line":"const std = @import(\"std.zig\");"}, {"lineNum":" 3","line":"const math = std.math;"}, {"lineNum":" 4","line":"const debug = std.debug;"}, {"lineNum":" 5","line":"const assert = std.debug.assert;"}, {"lineNum":" 6","line":"const testing = std.testing;"}, {"lineNum":" 7","line":""}, {"lineNum":" 8","line":"/// There is a trade off of how quickly to fill a bloom filter;"}, {"lineNum":" 9","line":"/// the number of items is:"}, {"lineNum":" 10","line":"/// n_items / K * ln(2)"}, {"lineNum":" 11","line":"/// the rate of false positives is:"}, {"lineNum":" 12","line":"/// (1-e^(-K*N/n_items))^K"}, {"lineNum":" 13","line":"/// where N is the number of items"}, {"lineNum":" 14","line":"pub fn BloomFilter("}, {"lineNum":" 15","line":" /// Size of bloom filter in cells, must be a power of two."}, {"lineNum":" 16","line":" comptime n_items: usize,"}, {"lineNum":" 17","line":" /// Number of cells to set per item"}, {"lineNum":" 18","line":" comptime K: usize,"}, {"lineNum":" 19","line":" /// Cell type, should be:"}, {"lineNum":" 20","line":" /// - `bool` for a standard bloom filter"}, {"lineNum":" 21","line":" /// - an unsigned integer type for a counting bloom filter"}, {"lineNum":" 22","line":" comptime Cell: type,"}, {"lineNum":" 23","line":" /// endianess of the Cell"}, {"lineNum":" 24","line":" comptime endian: builtin.Endian,"}, {"lineNum":" 25","line":" /// Hash function to use"}, {"lineNum":" 26","line":" comptime hash: fn (out: []u8, Ki: usize, in: []const u8) void,"}, {"lineNum":" 27","line":") type {"}, {"lineNum":" 28","line":" assert(n_items > 0);"}, {"lineNum":" 29","line":" assert(math.isPowerOfTwo(n_items));"}, {"lineNum":" 30","line":" assert(K > 0);"}, {"lineNum":" 31","line":" const cellEmpty = if (Cell == bool) false else @as(Cell, 0);"}, {"lineNum":" 32","line":" const cellMax = if (Cell == bool) true else math.maxInt(Cell);"}, {"lineNum":" 33","line":" const n_bytes = (n_items * comptime std.meta.bitCount(Cell)) / 8;"}, {"lineNum":" 34","line":" assert(n_bytes > 0);"}, {"lineNum":" 35","line":" const Io = std.packed_int_array.PackedIntIo(Cell, endian);"}, {"lineNum":" 36","line":""}, {"lineNum":" 37","line":" return struct {"}, {"lineNum":" 38","line":" const Self = @This();"}, {"lineNum":" 39","line":" pub const items = n_items;"}, {"lineNum":" 40","line":" pub const Index = math.IntFittingRange(0, n_items - 1);"}, {"lineNum":" 41","line":""}, {"lineNum":" 42","line":" data: [n_bytes]u8 = [_]u8{0} ** n_bytes,"}, {"lineNum":" 43","line":""}, {"lineNum":" 44","line":" pub fn reset(self: *Self) void {","class":"lineCov","hits":"10","order":"9673","possible_hits":"10",}, {"lineNum":" 45","line":" std.mem.set(u8, self.data[0..], 0);","class":"lineCov","hits":"5","order":"9674","possible_hits":"5",}, {"lineNum":" 46","line":" }"}, {"lineNum":" 47","line":""}, {"lineNum":" 48","line":" pub fn @\"union\"(x: Self, y: Self) Self {"}, {"lineNum":" 49","line":" var r = Self{ .data = undefined };"}, {"lineNum":" 50","line":" inline for (x.data) |v, i| {"}, {"lineNum":" 51","line":" r.data[i] = v | y.data[i];"}, {"lineNum":" 52","line":" }"}, {"lineNum":" 53","line":" return r;"}, {"lineNum":" 54","line":" }"}, {"lineNum":" 55","line":""}, {"lineNum":" 56","line":" pub fn intersection(x: Self, y: Self) Self {"}, {"lineNum":" 57","line":" var r = Self{ .data = undefined };"}, {"lineNum":" 58","line":" inline for (x.data) |v, i| {"}, {"lineNum":" 59","line":" r.data[i] = v & y.data[i];"}, {"lineNum":" 60","line":" }"}, {"lineNum":" 61","line":" return r;"}, {"lineNum":" 62","line":" }"}, {"lineNum":" 63","line":""}, {"lineNum":" 64","line":" pub fn getCell(self: Self, cell: Index) Cell {","class":"lineCov","hits":"15","order":"9549","possible_hits":"15",}, {"lineNum":" 65","line":" return Io.get(&self.data, cell, 0);","class":"lineCov","hits":"15","order":"9550","possible_hits":"15",}, {"lineNum":" 66","line":" }"}, {"lineNum":" 67","line":""}, {"lineNum":" 68","line":" pub fn incrementCell(self: *Self, cell: Index) void {","class":"lineCov","hits":"10","order":"9578","possible_hits":"10",}, {"lineNum":" 69","line":" if (Cell == bool or Cell == u1) {"}, {"lineNum":" 70","line":" // skip the \'get\' operation"}, {"lineNum":" 71","line":" Io.set(&self.data, cell, 0, cellMax);","class":"lineCov","hits":"2","order":"9579","possible_hits":"2",}, {"lineNum":" 72","line":" } else {"}, {"lineNum":" 73","line":" const old = Io.get(&self.data, cell, 0);","class":"lineCov","hits":"3","order":"9723","possible_hits":"3",}, {"lineNum":" 74","line":" if (old != cellMax) {","class":"linePartCov","hits":"6","order":"9724","possible_hits":"9",}, {"lineNum":" 75","line":" Io.set(&self.data, cell, 0, old + 1);","class":"linePartCov","hits":"3","order":"9725","possible_hits":"6",}, {"lineNum":" 76","line":" }"}, {"lineNum":" 77","line":" }"}, {"lineNum":" 78","line":" }"}, {"lineNum":" 79","line":""}, {"lineNum":" 80","line":" pub fn clearCell(self: *Self, cell: Index) void {","class":"lineCov","hits":"10","order":"9588","possible_hits":"10",}, {"lineNum":" 81","line":" Io.set(&self.data, cell, 0, cellEmpty);","class":"lineCov","hits":"5","order":"9589","possible_hits":"5",}, {"lineNum":" 82","line":" }"}, {"lineNum":" 83","line":""}, {"lineNum":" 84","line":" pub fn add(self: *Self, item: []const u8) void {","class":"lineCov","hits":"10","order":"9603","possible_hits":"10",}, {"lineNum":" 85","line":" comptime var i = 0;"}, {"lineNum":" 86","line":" inline while (i < K) : (i += 1) {"}, {"lineNum":" 87","line":" var K_th_bit: packed struct {","class":"lineCov","hits":"40","order":"9604","possible_hits":"40",}, {"lineNum":" 88","line":" x: Index,"}, {"lineNum":" 89","line":" } = undefined;"}, {"lineNum":" 90","line":" hash(std.mem.asBytes(&K_th_bit), i, item);","class":"lineCov","hits":"40","order":"9605","possible_hits":"40",}, {"lineNum":" 91","line":" incrementCell(self, K_th_bit.x);","class":"lineCov","hits":"40","order":"9660","possible_hits":"40",}, {"lineNum":" 92","line":" }"}, {"lineNum":" 93","line":" }"}, {"lineNum":" 94","line":""}, {"lineNum":" 95","line":" pub fn contains(self: Self, item: []const u8) bool {","class":"lineCov","hits":"15","order":"9662","possible_hits":"15",}, {"lineNum":" 96","line":" comptime var i = 0;"}, {"lineNum":" 97","line":" inline while (i < K) : (i += 1) {"}, {"lineNum":" 98","line":" var K_th_bit: packed struct {","class":"lineCov","hits":"120","order":"9663","possible_hits":"120",}, {"lineNum":" 99","line":" x: Index,"}, {"lineNum":" 100","line":" } = undefined;"}, {"lineNum":" 101","line":" hash(std.mem.asBytes(&K_th_bit), i, item);","class":"lineCov","hits":"120","order":"9664","possible_hits":"120",}, {"lineNum":" 102","line":" if (getCell(self, K_th_bit.x) == cellEmpty)","class":"lineCov","hits":"240","order":"9665","possible_hits":"240",}, {"lineNum":" 103","line":" return false;","class":"lineNoCov","hits":"0","possible_hits":"120",}, {"lineNum":" 104","line":" }"}, {"lineNum":" 105","line":" return true;","class":"lineCov","hits":"15","order":"9666","possible_hits":"15",}, {"lineNum":" 106","line":" }"}, {"lineNum":" 107","line":""}, {"lineNum":" 108","line":" pub fn resize(self: Self, comptime newsize: usize) BloomFilter(newsize, K, Cell, endian, hash) {","class":"lineCov","hits":"10","order":"9703","possible_hits":"10",}, {"lineNum":" 109","line":" var r: BloomFilter(newsize, K, Cell, endian, hash) = undefined;","class":"lineCov","hits":"10","order":"9704","possible_hits":"10",}, {"lineNum":" 110","line":" if (newsize < n_items) {"}, {"lineNum":" 111","line":" std.mem.copy(u8, r.data[0..], self.data[0..r.data.len]);","class":"linePartCov","hits":"5","order":"9712","possible_hits":"10",}, {"lineNum":" 112","line":" var copied: usize = r.data.len;","class":"lineCov","hits":"5","order":"9713","possible_hits":"5",}, {"lineNum":" 113","line":" while (copied < self.data.len) : (copied += r.data.len) {","class":"linePartCov","hits":"15","order":"9714","possible_hits":"20",}, {"lineNum":" 114","line":" for (self.data[copied .. copied + r.data.len]) |s, i| {","class":"linePartCov","hits":"10","order":"9715","possible_hits":"15",}, {"lineNum":" 115","line":" r.data[i] |= s;","class":"linePartCov","hits":"5","order":"9716","possible_hits":"10",}, {"lineNum":" 116","line":" }"}, {"lineNum":" 117","line":" }"}, {"lineNum":" 118","line":" } else if (newsize == n_items) {"}, {"lineNum":" 119","line":" r = self;"}, {"lineNum":" 120","line":" } else if (newsize > n_items) {"}, {"lineNum":" 121","line":" var copied: usize = 0;","class":"lineCov","hits":"5","order":"9705","possible_hits":"5",}, {"lineNum":" 122","line":" while (copied < r.data.len) : (copied += self.data.len) {","class":"lineCov","hits":"10","order":"9706","possible_hits":"10",}, {"lineNum":" 123","line":" std.mem.copy(u8, r.data[copied .. copied + self.data.len], &self.data);","class":"linePartCov","hits":"5","order":"9707","possible_hits":"10",}, {"lineNum":" 124","line":" }"}, {"lineNum":" 125","line":" }"}, {"lineNum":" 126","line":" return r;","class":"lineCov","hits":"10","order":"9708","possible_hits":"10",}, {"lineNum":" 127","line":" }"}, {"lineNum":" 128","line":""}, {"lineNum":" 129","line":" /// Returns number of non-zero cells"}, {"lineNum":" 130","line":" pub fn popCount(self: Self) Index {","class":"lineCov","hits":"15","order":"9552","possible_hits":"15",}, {"lineNum":" 131","line":" var n: Index = 0;","class":"lineCov","hits":"15","order":"9553","possible_hits":"15",}, {"lineNum":" 132","line":" if (Cell == bool or Cell == u1) {"}, {"lineNum":" 133","line":" for (self.data) |b, i| {","class":"lineCov","hits":"12","order":"9554","possible_hits":"12",}, {"lineNum":" 134","line":" n += @popCount(u8, b);","class":"linePartCov","hits":"6","order":"9555","possible_hits":"12",}, {"lineNum":" 135","line":" }"}, {"lineNum":" 136","line":" } else {"}, {"lineNum":" 137","line":" var i: usize = 0;","class":"lineCov","hits":"9","order":"9719","possible_hits":"9",}, {"lineNum":" 138","line":" while (i < n_items) : (i += 1) {","class":"lineCov","hits":"18","order":"9720","possible_hits":"18",}, {"lineNum":" 139","line":" const cell = self.getCell(@intCast(Index, i));","class":"linePartCov","hits":"18","order":"9721","possible_hits":"27",}, {"lineNum":" 140","line":" n += if (if (Cell == bool) cell else cell > 0) @as(Index, 1) else @as(Index, 0);","class":"linePartCov","hits":"18","order":"9722","possible_hits":"27",}, {"lineNum":" 141","line":" }"}, {"lineNum":" 142","line":" }"}, {"lineNum":" 143","line":" return n;","class":"lineCov","hits":"15","order":"9556","possible_hits":"15",}, {"lineNum":" 144","line":" }"}, {"lineNum":" 145","line":""}, {"lineNum":" 146","line":" pub fn estimateItems(self: Self) f64 {","class":"lineCov","hits":"5","order":"9558","possible_hits":"5",}, {"lineNum":" 147","line":" const m = comptime @intToFloat(f64, n_items);"}, {"lineNum":" 148","line":" const k = comptime @intToFloat(f64, K);"}, {"lineNum":" 149","line":" const X = @intToFloat(f64, self.popCount());","class":"lineCov","hits":"5","order":"9559","possible_hits":"5",}, {"lineNum":" 150","line":" return (comptime (-m / k)) * math.log1p(X * comptime (-1 / m));","class":"lineCov","hits":"5","order":"9560","possible_hits":"5",}, {"lineNum":" 151","line":" }"}, {"lineNum":" 152","line":" };"}, {"lineNum":" 153","line":"}"}, {"lineNum":" 154","line":""}, {"lineNum":" 155","line":"fn hashFunc(out: []u8, Ki: usize, in: []const u8) void {","class":"lineCov","hits":"2","order":"9606","possible_hits":"2",}, {"lineNum":" 156","line":" var st = std.crypto.gimli.Hash.init();","class":"lineCov","hits":"1","order":"9607","possible_hits":"1",}, {"lineNum":" 157","line":" st.update(std.mem.asBytes(&Ki));","class":"lineCov","hits":"1","order":"9612","possible_hits":"1",}, {"lineNum":" 158","line":" st.update(in);","class":"lineCov","hits":"1","order":"9626","possible_hits":"1",}, {"lineNum":" 159","line":" st.final(out);","class":"lineCov","hits":"1","order":"9627","possible_hits":"1",}, {"lineNum":" 160","line":"}"}, {"lineNum":" 161","line":""}, {"lineNum":" 162","line":"test \"std.BloomFilter\" {","class":"lineCov","hits":"2","order":"9543","possible_hits":"2",}, {"lineNum":" 163","line":" // https://github.com/ziglang/zig/issues/5127"}, {"lineNum":" 164","line":" if (std.Target.current.cpu.arch == .mips) return error.SkipZigTest;"}, {"lineNum":" 165","line":""}, {"lineNum":" 166","line":" inline for ([_]type{ bool, u1, u2, u3, u4 }) |Cell| {"}, {"lineNum":" 167","line":" const emptyCell = if (Cell == bool) false else @as(Cell, 0);"}, {"lineNum":" 168","line":" const BF = BloomFilter(128 * 8, 8, Cell, builtin.endian, hashFunc);"}, {"lineNum":" 169","line":" var bf = BF{};","class":"lineCov","hits":"5","order":"9544","possible_hits":"5",}, {"lineNum":" 170","line":" var i: usize = undefined;","class":"lineCov","hits":"5","order":"9545","possible_hits":"5",}, {"lineNum":" 171","line":" // confirm that it is initialised to the empty filter"}, {"lineNum":" 172","line":" i = 0;","class":"lineCov","hits":"5","order":"9546","possible_hits":"5",}, {"lineNum":" 173","line":" while (i < BF.items) : (i += 1) {","class":"linePartCov","hits":"14","order":"9547","possible_hits":"19",}, {"lineNum":" 174","line":" testing.expectEqual(emptyCell, bf.getCell(@intCast(BF.Index, i)));","class":"linePartCov","hits":"10","order":"9548","possible_hits":"15",}, {"lineNum":" 175","line":" }"}, {"lineNum":" 176","line":" testing.expectEqual(@as(BF.Index, 0), bf.popCount());","class":"lineCov","hits":"5","order":"9551","possible_hits":"5",}, {"lineNum":" 177","line":" testing.expectEqual(@as(f64, 0), bf.estimateItems());","class":"lineCov","hits":"5","order":"9557","possible_hits":"5",}, {"lineNum":" 178","line":" // fill in a few items"}, {"lineNum":" 179","line":" bf.incrementCell(42);","class":"lineCov","hits":"5","order":"9577","possible_hits":"5",}, {"lineNum":" 180","line":" bf.incrementCell(255);","class":"lineCov","hits":"5","order":"9580","possible_hits":"5",}, {"lineNum":" 181","line":" bf.incrementCell(256);","class":"lineCov","hits":"5","order":"9581","possible_hits":"5",}, {"lineNum":" 182","line":" bf.incrementCell(257);","class":"lineCov","hits":"5","order":"9582","possible_hits":"5",}, {"lineNum":" 183","line":" // check that they were set"}, {"lineNum":" 184","line":" testing.expectEqual(true, bf.getCell(42) != emptyCell);","class":"lineCov","hits":"5","order":"9583","possible_hits":"5",}, {"lineNum":" 185","line":" testing.expectEqual(true, bf.getCell(255) != emptyCell);","class":"lineCov","hits":"5","order":"9584","possible_hits":"5",}, {"lineNum":" 186","line":" testing.expectEqual(true, bf.getCell(256) != emptyCell);","class":"lineCov","hits":"5","order":"9585","possible_hits":"5",}, {"lineNum":" 187","line":" testing.expectEqual(true, bf.getCell(257) != emptyCell);","class":"lineCov","hits":"5","order":"9586","possible_hits":"5",}, {"lineNum":" 188","line":" // clear just one of them; make sure the rest are still set"}, {"lineNum":" 189","line":" bf.clearCell(256);","class":"lineCov","hits":"5","order":"9587","possible_hits":"5",}, {"lineNum":" 190","line":" testing.expectEqual(true, bf.getCell(42) != emptyCell);","class":"lineCov","hits":"5","order":"9590","possible_hits":"5",}, {"lineNum":" 191","line":" testing.expectEqual(true, bf.getCell(255) != emptyCell);","class":"lineCov","hits":"5","order":"9591","possible_hits":"5",}, {"lineNum":" 192","line":" testing.expectEqual(false, bf.getCell(256) != emptyCell);","class":"lineCov","hits":"5","order":"9592","possible_hits":"5",}, {"lineNum":" 193","line":" testing.expectEqual(true, bf.getCell(257) != emptyCell);","class":"lineCov","hits":"5","order":"9593","possible_hits":"5",}, {"lineNum":" 194","line":" // reset any of the ones we\'ve set and confirm we\'re back to the empty filter"}, {"lineNum":" 195","line":" bf.clearCell(42);","class":"lineCov","hits":"5","order":"9594","possible_hits":"5",}, {"lineNum":" 196","line":" bf.clearCell(255);","class":"lineCov","hits":"5","order":"9595","possible_hits":"5",}, {"lineNum":" 197","line":" bf.clearCell(257);","class":"lineCov","hits":"5","order":"9596","possible_hits":"5",}, {"lineNum":" 198","line":" i = 0;","class":"lineCov","hits":"5","order":"9597","possible_hits":"5",}, {"lineNum":" 199","line":" while (i < BF.items) : (i += 1) {","class":"linePartCov","hits":"10","order":"9598","possible_hits":"15",}, {"lineNum":" 200","line":" testing.expectEqual(emptyCell, bf.getCell(@intCast(BF.Index, i)));","class":"linePartCov","hits":"10","order":"9599","possible_hits":"15",}, {"lineNum":" 201","line":" }"}, {"lineNum":" 202","line":" testing.expectEqual(@as(BF.Index, 0), bf.popCount());","class":"lineCov","hits":"5","order":"9600","possible_hits":"5",}, {"lineNum":" 203","line":" testing.expectEqual(@as(f64, 0), bf.estimateItems());","class":"lineCov","hits":"5","order":"9601","possible_hits":"5",}, {"lineNum":" 204","line":""}, {"lineNum":" 205","line":" // Lets add a string"}, {"lineNum":" 206","line":" bf.add(\"foo\");","class":"lineCov","hits":"5","order":"9602","possible_hits":"5",}, {"lineNum":" 207","line":" testing.expectEqual(true, bf.contains(\"foo\"));","class":"lineCov","hits":"5","order":"9661","possible_hits":"5",}, {"lineNum":" 208","line":" {"}, {"lineNum":" 209","line":" // try adding same string again. make sure popcount is the same"}, {"lineNum":" 210","line":" const old_popcount = bf.popCount();","class":"lineCov","hits":"5","order":"9667","possible_hits":"5",}, {"lineNum":" 211","line":" testing.expect(old_popcount > 0);","class":"lineCov","hits":"5","order":"9668","possible_hits":"5",}, {"lineNum":" 212","line":" bf.add(\"foo\");","class":"lineCov","hits":"5","order":"9669","possible_hits":"5",}, {"lineNum":" 213","line":" testing.expectEqual(true, bf.contains(\"foo\"));","class":"lineCov","hits":"5","order":"9670","possible_hits":"5",}, {"lineNum":" 214","line":" testing.expectEqual(old_popcount, bf.popCount());","class":"lineCov","hits":"5","order":"9671","possible_hits":"5",}, {"lineNum":" 215","line":" }"}, {"lineNum":" 216","line":""}, {"lineNum":" 217","line":" // Get back to empty filter via .reset"}, {"lineNum":" 218","line":" bf.reset();","class":"lineCov","hits":"5","order":"9672","possible_hits":"5",}, {"lineNum":" 219","line":" // Double check that .reset worked"}, {"lineNum":" 220","line":" i = 0;","class":"lineCov","hits":"5","order":"9675","possible_hits":"5",}, {"lineNum":" 221","line":" while (i < BF.items) : (i += 1) {","class":"linePartCov","hits":"10","order":"9676","possible_hits":"15",}, {"lineNum":" 222","line":" testing.expectEqual(emptyCell, bf.getCell(@intCast(BF.Index, i)));","class":"linePartCov","hits":"10","order":"9677","possible_hits":"15",}, {"lineNum":" 223","line":" }"}, {"lineNum":" 224","line":" testing.expectEqual(@as(BF.Index, 0), bf.popCount());","class":"lineCov","hits":"5","order":"9678","possible_hits":"5",}, {"lineNum":" 225","line":" testing.expectEqual(@as(f64, 0), bf.estimateItems());","class":"lineCov","hits":"5","order":"9679","possible_hits":"5",}, {"lineNum":" 226","line":""}, {"lineNum":" 227","line":" comptime var teststrings = [_][]const u8{"}, {"lineNum":" 228","line":" \"foo\","}, {"lineNum":" 229","line":" \"bar\","}, {"lineNum":" 230","line":" \"a longer string\","}, {"lineNum":" 231","line":" \"some more\","}, {"lineNum":" 232","line":" \"the quick brown fox\","}, {"lineNum":" 233","line":" \"unique string\","}, {"lineNum":" 234","line":" };"}, {"lineNum":" 235","line":" inline for (teststrings) |str| {"}, {"lineNum":" 236","line":" bf.add(str);","class":"lineCov","hits":"5","order":"9680","possible_hits":"5",}, {"lineNum":" 237","line":" }"}, {"lineNum":" 238","line":" inline for (teststrings) |str| {"}, {"lineNum":" 239","line":" testing.expectEqual(true, bf.contains(str));","class":"lineCov","hits":"5","order":"9684","possible_hits":"5",}, {"lineNum":" 240","line":" }"}, {"lineNum":" 241","line":""}, {"lineNum":" 242","line":" { // estimate should be close for low packing"}, {"lineNum":" 243","line":" const est = bf.estimateItems();","class":"lineCov","hits":"5","order":"9685","possible_hits":"5",}, {"lineNum":" 244","line":" testing.expect(est > @intToFloat(f64, teststrings.len) - 1);","class":"lineCov","hits":"5","order":"9700","possible_hits":"5",}, {"lineNum":" 245","line":" testing.expect(est < @intToFloat(f64, teststrings.len) + 1);","class":"lineCov","hits":"5","order":"9701","possible_hits":"5",}, {"lineNum":" 246","line":" }"}, {"lineNum":" 247","line":""}, {"lineNum":" 248","line":" const larger_bf = bf.resize(4096);","class":"lineCov","hits":"5","order":"9702","possible_hits":"5",}, {"lineNum":" 249","line":" inline for (teststrings) |str| {"}, {"lineNum":" 250","line":" testing.expectEqual(true, larger_bf.contains(str));","class":"lineCov","hits":"5","order":"9709","possible_hits":"5",}, {"lineNum":" 251","line":" }"}, {"lineNum":" 252","line":" testing.expectEqual(@as(u12, bf.popCount()) * (4096 / 1024), larger_bf.popCount());","class":"linePartCov","hits":"5","order":"9710","possible_hits":"10",}, {"lineNum":" 253","line":""}, {"lineNum":" 254","line":" const smaller_bf = bf.resize(64);","class":"lineCov","hits":"5","order":"9711","possible_hits":"5",}, {"lineNum":" 255","line":" inline for (teststrings) |str| {"}, {"lineNum":" 256","line":" testing.expectEqual(true, smaller_bf.contains(str));","class":"lineCov","hits":"5","order":"9717","possible_hits":"5",}, {"lineNum":" 257","line":" }"}, {"lineNum":" 258","line":" testing.expect(bf.popCount() <= @as(u10, smaller_bf.popCount()) * (1024 / 64));","class":"lineCov","hits":"5","order":"9718","possible_hits":"5",}, {"lineNum":" 259","line":" }"}, {"lineNum":" 260","line":"}"}, ]}; var percent_low = 25;var percent_high = 75; var header = { "command" : "test", "date" : "2020-05-19 01:29:25", "instrumented" : 102, "covered" : 101,}; var merged_data = [];