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 }