| ... | @@ -1,14 +1,24 @@ | ... | @@ -1,14 +1,24 @@ |
| | 1 | const builtin = @import("builtin"); |
| 1 | const std = @import("std"); | 2 | const std = @import("std"); |
| 2 | const Random = std.rand.Random; | 3 | const Random = std.rand.Random; |
| 3 | | 4 | |
| | 5 | const zeroCaseFn = switch (builtin.zig_backend) { |
| | 6 | .stage1 => fn (*Random, f64) f64, |
| | 7 | else => *const fn (*Random, f64) f64, |
| | 8 | }; |
| | 9 | const pdfFn = switch (builtin.zig_backend) { |
| | 10 | .stage1 => fn (f64) f64, |
| | 11 | else => *const fn (f64) f64, |
| | 12 | }; |
| | 13 | |
| 4 | const ZigTable = struct { | 14 | const ZigTable = struct { |
| 5 | r: f64, | 15 | r: f64, |
| 6 | x: [257]f64, | 16 | x: [257]f64, |
| 7 | f: [257]f64, | 17 | f: [257]f64, |
| 8 | | 18 | |
| 9 | pdf: fn (f64) f64, | 19 | pdf: pdfFn, |
| 10 | is_symmetric: bool, | 20 | is_symmetric: bool, |
| 11 | zero_case: fn (*Random, f64) f64, | 21 | zero_case: zeroCaseFn, |
| 12 | }; | 22 | }; |
| 13 | | 23 | |
| 14 | fn ZigTableGen(comptime is_symmetric: bool, comptime r: f64, comptime v: f64, comptime f: fn (f64) f64, comptime f_inv: fn (f64) f64, comptime zero_case: fn (*Random, f64) f64) ZigTable { | 24 | fn ZigTableGen(comptime is_symmetric: bool, comptime r: f64, comptime v: f64, comptime f: fn (f64) f64, comptime f_inv: fn (f64) f64, comptime zero_case: fn (*Random, f64) f64) ZigTable { |
| ... | @@ -56,7 +66,11 @@ const NormalDist = blk: { | ... | @@ -56,7 +66,11 @@ const NormalDist = blk: { |
| 56 | }; | 66 | }; |
| 57 | | 67 | |
| 58 | test "bug 920 fixed" { | 68 | test "bug 920 fixed" { |
| 59 | if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; // TODO | 69 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| | 70 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| | 71 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| | 72 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| | 73 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 60 | | 74 | |
| 61 | const NormalDist1 = blk: { | 75 | const NormalDist1 = blk: { |
| 62 | break :blk ZigTableGen(true, norm_r, norm_v, norm_f, norm_f_inv, norm_zero_case); | 76 | break :blk ZigTableGen(true, norm_r, norm_v, norm_f, norm_f_inv, norm_zero_case); |