lib/stabilizer/src/properties/config.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const hypothesis = @import("hypothesis");
 3 const stabilizer = @import("stabilizer");
 4 
 5 const Allocator = std.mem.Allocator;
 6 const Alignment = std.mem.Alignment;
 7 
 8 const default_shuffle_slots = stabilizer.default_shuffle_slots;
 9 const default_region_size = stabilizer.default_region_size;
10 const code_alignment = stabilizer.code_alignment;
11 const stack_alignment = stabilizer.stack_alignment;
12 const rerandomize_interval_ms = stabilizer.rerandomize_interval_ms;
13 const max_stack_pad_unit = stabilizer.max_stack_pad_unit;
14 
15 const Reference = stabilizer.Reference;
16 const Marsaglia = stabilizer.Marsaglia;
17 const StackPads = stabilizer.StackPads;
18 const ShuffleAllocator = stabilizer.ShuffleAllocator;
19 const sizeClass = stabilizer.sizeClass;
20 const FunctionId = stabilizer.FunctionId;
21 const LocationId = stabilizer.LocationId;
22 const FunctionOptions = stabilizer.FunctionOptions;
23 const FunctionEntryState = stabilizer.FunctionEntryState;
24 const FunctionLocation = stabilizer.FunctionLocation;
25 const CodeRandomizer = stabilizer.CodeRandomizer;
26 const Runtime = stabilizer.Runtime;
27 
28 fn settings() hypothesis.Settings {
29     return hypothesis.Settings.quick()
30         .withSeed(0x57ab_11e5)
31         .withDatabase("zig-out/hypothesis-failures/stabilizer");
32 }
33 
34 fn drawUsize(data: *hypothesis.ConjectureData, min: usize, max: usize, shrink_towards: usize) !usize {
35     return @intCast(try data.drawInteger(
36         @intCast(min),
37         @intCast(max),
38         @intCast(shrink_towards),
39     ));
40 }
41 
42 fn drawAlignment(data: *hypothesis.ConjectureData) !Alignment {
43     const shift = try drawUsize(data, 0, 8, 0);
44     return .fromByteUnits(@as(usize, 1) << @as(u6, @intCast(shift)));
45 }
46 
47 test "defaults match upstream stabilizer runtime constants" {
48     try std.testing.expectEqual(Reference.data_shuffle, default_shuffle_slots);
49     try std.testing.expectEqual(Reference.code_shuffle, default_shuffle_slots);
50     try std.testing.expectEqual(Reference.data_size, default_region_size);
51     try std.testing.expectEqual(Reference.code_size, default_region_size);
52     try std.testing.expectEqual(Reference.code_align, code_alignment);
53     try std.testing.expectEqual(Reference.stack_align, stack_alignment);
54     try std.testing.expectEqual(Reference.interval_ms, rerandomize_interval_ms);
55     try std.testing.expect((stabilizer.HeapConfig{}).pointer_validation);
56 }
57 
58 test "size classes are powers of two" {
59     try std.testing.expectEqual(@as(usize, 16), try sizeClass(1, 16));
60     try std.testing.expectEqual(@as(usize, 16), try sizeClass(16, 16));
61     try std.testing.expectEqual(@as(usize, 32), try sizeClass(17, 16));
62 }