Skip to documentation
SLOP

tiny.memtrace.coverage

Reference tiny.memtrace coverage

Defined in tiny.memtrace.

API (14)

Actions

Public operations.

Types and contracts

Public types and contracts.

No direct callersNo direct callstiny.memtracecoverage
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallscoverage.ManifeststatusTagprivate sourcelib.memtrace.src.coverageobservedOrAbsentprivate sourcelib.memtrace.src.coverageobservedOrIsolatedprivate sourcelib.memtrace.src.coverageobservedOrNoEffectcoverage.ManifestprocessComplete
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callerscoverage.ManifestprocessCompletecoverage.ManifeststatusTag
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...coverageboundaryManifest
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callscoverageprocessManifesttest sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...coverageownedProducerManifest
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...test sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...test sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...private sourcelib.memtrace.src.coverage.UniversefromTagprivate sourcelib.memtrace.src.coverageinclusionprivate sourcelib.memtrace.src.coveragestringprivate sourcelib.memtrace.src.coverageunsignedcoverageparseMetadata
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallstest sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...test sourcelib.memtrace.src.coveragetest: process coverage rejects catego...coverageownedProducerManifestcoverageprocessManifest
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...test sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...test sourcelib.memtrace.src.coveragetest: coverage metadata preserves the...coveragewriteMetadata
Static calls · unresolved targets: 0 · external targets: 13.

Source: lib/memtrace/src/coverage.zig

zig
const std = @import("std");const pretty_json = @import("pretty").json;const metadata_tag = "\"meta\":\"memtrace.coverage\"";pub const Universe = enum {    registered_allocator_handles,    owned_allocator_producers_and_registered_boundaries,    owned_allocator_producers_registered_boundaries_and_sys_memory_operations,    process_memory_operations_during_trace_epoch,    pub fn tag(self: Universe) []const u8 {        return switch (self) {            .registered_allocator_handles => "registered_allocator_handles",            .owned_allocator_producers_and_registered_boundaries => "owned_allocator_producers_and_registered_boundaries",            .owned_allocator_producers_registered_boundaries_and_sys_memory_operations => "owned_allocator_producers_registered_boundaries_and_sys_memory_operations",            .process_memory_operations_during_trace_epoch => "process_memory_operations_during_trace_epoch",        };    }    fn fromTag(text: []const u8) ?Universe {        if (std.mem.eql(u8, text, "registered_allocator_handles")) {            return .registered_allocator_handles;        }        if (std.mem.eql(            u8,            text,            "owned_allocator_producers_and_registered_boundaries",        )) {            return .owned_allocator_producers_and_registered_boundaries;        }        if (std.mem.eql(            u8,            text,            "owned_allocator_producers_registered_boundaries_and_sys_memory_operations",        )) {            return .owned_allocator_producers_registered_boundaries_and_sys_memory_operations;        }        if (std.mem.eql(            u8,            text,            "process_memory_operations_during_trace_epoch",        )) {            return .process_memory_operations_during_trace_epoch;        }        return null;    }};pub const Inclusion = enum {    observed,    proved_absent,    isolated,    no_memory_effect,    unobserved,    pub fn tag(self: Inclusion) []const u8 {        return switch (self) {            .observed => "observed",            .proved_absent => "proved_absent",            .isolated => "isolated",            .no_memory_effect => "no_memory_effect",            .unobserved => "opaque",        };    }    fn fromTag(text: []const u8) ?Inclusion {        if (std.mem.eql(u8, text, "observed")) return .observed;        if (std.mem.eql(u8, text, "proved_absent")) return .proved_absent;        if (std.mem.eql(u8, text, "isolated")) return .isolated;        if (std.mem.eql(u8, text, "no_memory_effect")) {            return .no_memory_effect;        }        if (std.mem.eql(u8, text, "opaque")) return .unobserved;        return null;    }};pub const StaticEvidence = struct {    direct_os_memory_operations_absent: bool = false,    unowned_allocator_producers_absent: bool = false,    foreign_allocations_absent: bool = false,};pub const Manifest = struct {    universe: Universe = .registered_allocator_handles,    child_allocator_fast_paths: Inclusion = .unobserved,    sys_memory_operations: Inclusion = .unobserved,    direct_os_memory_operations: Inclusion = .unobserved,    unowned_allocator_producers: Inclusion = .unobserved,    foreign_allocations: Inclusion = .unobserved,    observer_control: Inclusion = .isolated,    zero_length_operations: Inclusion = .no_memory_effect,    predispatch_failures: Inclusion = .no_memory_effect,    observer_control_operations: u64 = 0,    pub fn processComplete(self: Manifest) bool {        return self.universe ==            .process_memory_operations_during_trace_epoch and            self.child_allocator_fast_paths == .observed and            self.sys_memory_operations == .observed and            observedOrAbsent(self.direct_os_memory_operations) and            observedOrAbsent(self.unowned_allocator_producers) and            observedOrAbsent(self.foreign_allocations) and            observedOrIsolated(self.observer_control) and            observedOrNoEffect(self.zero_length_operations) and            observedOrNoEffect(self.predispatch_failures);    }    pub fn statusTag(self: Manifest) []const u8 {        if (self.processComplete()) return "process_memory_operation_complete";        return switch (self.universe) {            .registered_allocator_handles => "boundary_complete",            .owned_allocator_producers_and_registered_boundaries => "owned_producer_complete",            .owned_allocator_producers_registered_boundaries_and_sys_memory_operations => "owned_producer_and_sys_memory_operation_complete",            .process_memory_operations_during_trace_epoch => "process_memory_operation_incomplete",        };    }};pub fn boundaryManifest() Manifest {    return .{};}pub fn ownedProducerManifest() Manifest {    return .{        .universe = .owned_allocator_producers_registered_boundaries_and_sys_memory_operations,        .child_allocator_fast_paths = .observed,        .sys_memory_operations = .observed,    };}pub fn processManifest(evidence: StaticEvidence) Manifest {    var manifest = ownedProducerManifest();    manifest.universe = .process_memory_operations_during_trace_epoch;    manifest.direct_os_memory_operations = if (evidence.direct_os_memory_operations_absent)        .proved_absent    else        .unobserved;    manifest.unowned_allocator_producers = if (evidence.unowned_allocator_producers_absent)        .proved_absent    else        .unobserved;    manifest.foreign_allocations = if (evidence.foreign_allocations_absent)        .proved_absent    else        .unobserved;    return manifest;}fn observedOrAbsent(state: Inclusion) bool {    return state == .observed or state == .proved_absent;}fn observedOrIsolated(state: Inclusion) bool {    return state == .observed or state == .isolated;}fn observedOrNoEffect(state: Inclusion) bool {    return state == .observed or state == .no_memory_effect;}pub fn isMetadataLine(line: []const u8) bool {    return std.mem.indexOf(u8, line, metadata_tag) != null;}pub fn writeMetadata(writer: *std.Io.Writer, manifest: Manifest) !void {    var stream = pretty_json.Writer.init(writer, .minified);    const object = try stream.object();    try object.field("v", 3);    try object.field("meta", "memtrace.coverage");    try object.field("universe", manifest.universe.tag());    try object.field("child_allocator_fast_paths", manifest.child_allocator_fast_paths.tag());    try object.field("sys_memory_operations", manifest.sys_memory_operations.tag());    try object.field("direct_os_memory_operations", manifest.direct_os_memory_operations.tag());    try object.field("unowned_allocator_producers", manifest.unowned_allocator_producers.tag());    try object.field("foreign_allocations", manifest.foreign_allocations.tag());    try object.field("observer_control", manifest.observer_control.tag());    try object.field("zero_length_operations", manifest.zero_length_operations.tag());    try object.field("predispatch_failures", manifest.predispatch_failures.tag());    try object.field("observer_control_operations", manifest.observer_control_operations);    try object.endLine();}pub fn parseMetadata(allocator: std.mem.Allocator, line: []const u8) !Manifest {    var parsed = std.json.parseFromSlice(std.json.Value, allocator, line, .{}) catch        return error.InvalidCoverageMetadata;    defer parsed.deinit();    const object = switch (parsed.value) {        .object => |value| value,        else => return error.InvalidCoverageMetadata,    };    if (try unsigned(object, "v") != 3) return error.UnsupportedCoverageVersion;    if (!std.mem.eql(u8, try string(object, "meta"), "memtrace.coverage")) {        return error.InvalidCoverageMetadata;    }    return .{        .universe = Universe.fromTag(try string(object, "universe")) orelse            return error.InvalidCoverageMetadata,        .child_allocator_fast_paths = try inclusion(object, "child_allocator_fast_paths"),        .sys_memory_operations = try inclusion(object, "sys_memory_operations"),        .direct_os_memory_operations = try inclusion(            object,            "direct_os_memory_operations",        ),        .unowned_allocator_producers = try inclusion(            object,            "unowned_allocator_producers",        ),        .foreign_allocations = try inclusion(object, "foreign_allocations"),        .observer_control = try inclusion(object, "observer_control"),        .zero_length_operations = try inclusion(object, "zero_length_operations"),        .predispatch_failures = try inclusion(object, "predispatch_failures"),        .observer_control_operations = try unsigned(            object,            "observer_control_operations",        ),    };}fn inclusion(object: std.json.ObjectMap, key: []const u8) !Inclusion {    return Inclusion.fromTag(try string(object, key)) orelse        error.InvalidCoverageMetadata;}fn string(object: std.json.ObjectMap, key: []const u8) ![]const u8 {    const value = object.get(key) orelse return error.InvalidCoverageMetadata;    return switch (value) {        .string => |text| text,        else => error.InvalidCoverageMetadata,    };}fn unsigned(object: std.json.ObjectMap, key: []const u8) !u64 {    const value = object.get(key) orelse return error.InvalidCoverageMetadata;    return switch (value) {        .integer => |number| if (number >= 0)            @intCast(number)        else            error.InvalidCoverageMetadata,        else => error.InvalidCoverageMetadata,    };}test "coverage metadata preserves the allocator boundary contract" {    const expected = boundaryManifest();    var output = std.Io.Writer.Allocating.init(std.testing.allocator);    defer output.deinit();    try writeMetadata(&output.writer, expected);    const actual = try parseMetadata(        std.testing.allocator,        std.mem.trimEnd(u8, output.written(), "\n"),    );    try std.testing.expectEqualDeep(expected, actual);    try std.testing.expect(!actual.processComplete());}test "coverage metadata preserves the owned producer contract" {    const expected = ownedProducerManifest();    var output = std.Io.Writer.Allocating.init(std.testing.allocator);    defer output.deinit();    try writeMetadata(&output.writer, expected);    const actual = try parseMetadata(        std.testing.allocator,        std.mem.trimEnd(u8, output.written(), "\n"),    );    try std.testing.expectEqualDeep(expected, actual);    try std.testing.expectEqualStrings(        "owned_producer_and_sys_memory_operation_complete",        actual.statusTag(),    );    try std.testing.expect(!actual.processComplete());}test "coverage metadata preserves the certified process contract" {    const expected = processManifest(.{        .direct_os_memory_operations_absent = true,        .unowned_allocator_producers_absent = true,        .foreign_allocations_absent = true,    });    var output = std.Io.Writer.Allocating.init(std.testing.allocator);    defer output.deinit();    try writeMetadata(&output.writer, expected);    const actual = try parseMetadata(        std.testing.allocator,        std.mem.trimEnd(u8, output.written(), "\n"),    );    try std.testing.expectEqualDeep(expected, actual);    try std.testing.expect(actual.processComplete());    try std.testing.expectEqualStrings(        "process_memory_operation_complete",        actual.statusTag(),    );}test "process coverage rejects category states with the wrong meaning" {    var manifest = processManifest(.{        .direct_os_memory_operations_absent = true,        .unowned_allocator_producers_absent = true,        .foreign_allocations_absent = true,    });    manifest.direct_os_memory_operations = .isolated;    try std.testing.expect(!manifest.processComplete());    manifest.direct_os_memory_operations = .proved_absent;    manifest.observer_control = .no_memory_effect;    try std.testing.expect(!manifest.processComplete());    manifest.observer_control = .isolated;    manifest.zero_length_operations = .proved_absent;    try std.testing.expect(!manifest.processComplete());}

Source: lib/memtrace/src/root.zig:40

zig
pub const coverage = coverage_mod;

Audit

Definitions15
Public names15
Members22
Version26.7.0
Revisiondaab053ee433