lib/zen/src/theme/capacity.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const plan = @import("plan.zig");
 3 
 4 pub const Limits = plan.Limits;
 5 
 6 pub const Capacity = struct {
 7     limits: Limits,
 8     output_offset: usize,
 9     storage_bytes: usize,
10 
11     pub fn derive(limits: Limits) Capacity {
12         return .{
13             .limits = limits,
14             .output_offset = 0,
15             .storage_bytes = limits.max_output_bytes,
16         };
17     }
18 };
19 
20 pub const default_capacity = Capacity.derive(plan.default_limits);
21 
22 fn independent(limits: Limits) Capacity {
23     const output_offset = 0;
24     return .{
25         .limits = limits,
26         .output_offset = output_offset,
27         .storage_bytes = output_offset + limits.max_output_bytes,
28     };
29 }
30 
31 test "theme render capacity matches an independent byte model" {
32     comptime {
33         @stardustClaim(
34             @import("alloc_phase").capacity.witness(@import("./root.zig").RenderStorage, "zen_theme_render_capacity"),
35             null,
36             null,
37             null,
38             null,
39             null,
40             null,
41         );
42     }
43 
44     const limits = Limits{ .max_output_bytes = 583 };
45     try std.testing.expectEqual(independent(limits), Capacity.derive(limits));
46     try std.testing.expectEqual(@as(usize, 583), Capacity.derive(limits).storage_bytes);
47     try std.testing.expectEqual(Capacity.derive(plan.default_limits), default_capacity);
48     try std.testing.expectEqual(
49         plan.default_limits.max_output_bytes,
50         Capacity.derive(plan.default_limits).storage_bytes,
51     );
52 }
53 
54 test "theme render capacity handles empty output" {
55     const capacity = Capacity.derive(.{ .max_output_bytes = 0 });
56     try std.testing.expectEqual(@as(usize, 0), capacity.output_offset);
57     try std.testing.expectEqual(@as(usize, 0), capacity.storage_bytes);
58 }