1
0
Fork 0

Fixed bugs from zig 0.10 upgrade (some real!)

This commit is contained in:
Julien Dessaux 2022-12-01 22:46:01 +01:00
parent 39c178ac71
commit 860ebc4fd4
Signed by: adyxax
GPG key ID: F92E51B86E07177E
6 changed files with 33 additions and 35 deletions

View file

@ -17,7 +17,7 @@ Current limitations are :
## Dependencies
zig is required. Only zig version >= 0.9.0 on linux amd64 (Gentoo) is being regularly tested.
zig is required. Only zig version >= 0.10.0 on linux amd64 (Gentoo) is being regularly tested.
## Quick Install

View file

@ -307,10 +307,10 @@ pub const Field = struct {
}
test "load" {
const crData = [_]u8{'v'} ** 4095 ++ "\r\n @";
const cr = std.io.fixedBufferStream(crData).reader();
var cr = std.io.fixedBufferStream(crData);
var f = try Field.init(std.testing.allocator);
defer f.deinit();
try f.load(cr);
try f.load(cr.reader());
try std.testing.expectEqual(f.x, 0);
try std.testing.expectEqual(f.y, 0);
try std.testing.expectEqual(f.lx, 4095);
@ -318,11 +318,11 @@ pub const Field = struct {
try std.testing.expectEqual(f.lines.items[0].data.items[0], 'v');
try std.testing.expectEqual(f.lines.items[1].x, 1);
try std.testing.expectEqual(f.lines.items[1].data.items[0], '@');
const cr2 = std.io.fixedBufferStream("v\r@").reader();
try std.testing.expectEqual(f.load(cr2), error.FIELD_NOT_EMPTY);
var cr2 = std.io.fixedBufferStream("v\r@");
try std.testing.expectEqual(f.load(cr2.reader()), error.FIELD_NOT_EMPTY);
var f2 = try Field.init(std.testing.allocator);
defer f2.deinit();
try std.testing.expectEqual(f2.load(cr2), error.GOT_CR_WITHOUT_LF);
try std.testing.expectEqual(f2.load(cr2.reader()), error.GOT_CR_WITHOUT_LF);
}
pub fn set(f: *Field, x: i64, y: i64, v: i64) !void {
if (v == ' ') return f.blank(x, y);
@ -409,16 +409,16 @@ pub const Field = struct {
}
}
test "step" {
const minimal = std.io.fixedBufferStream("@").reader();
var minimal = std.io.fixedBufferStream("@");
var f = try Field.init(std.testing.allocator);
defer f.deinit();
try f.load(minimal);
try f.load(minimal.reader());
try std.testing.expectEqual(f.step(0, 0, 0, 0), .{ .x = 0, .y = 0 });
try std.testing.expectEqual(f.step(0, 0, 1, 0), .{ .x = 0, .y = 0 });
const hello = std.io.fixedBufferStream("64+\"!dlroW ,olleH\">:#,_@\n").reader();
var hello = std.io.fixedBufferStream("64+\"!dlroW ,olleH\">:#,_@\n");
var fHello = try Field.init(std.testing.allocator);
defer fHello.deinit();
try fHello.load(hello);
try fHello.load(hello.reader());
try std.testing.expectEqual(fHello.step(3, 0, 0, 0), .{ .x = 3, .y = 0 });
try std.testing.expectEqual(fHello.step(3, 0, 1, 0), .{ .x = 4, .y = 0 });
try std.testing.expectEqual(fHello.step(0, 0, -1, 0), .{ .x = 23, .y = 0 });
@ -429,8 +429,8 @@ test "all" {
std.testing.refAllDecls(@This());
}
test "hello" {
const hello = std.io.fixedBufferStream("64+\"!dlroW ,olleH\">:#,_@\n").reader();
var f = try Field.init_from_reader(std.testing.allocator, hello);
var hello = std.io.fixedBufferStream("64+\"!dlroW ,olleH\">:#,_@\n");
var f = try Field.init_from_reader(std.testing.allocator, hello.reader());
defer f.deinit();
try std.testing.expectEqual(f.x, 0);
try std.testing.expectEqual(f.y, 0);
@ -439,8 +439,8 @@ test "hello" {
try std.testing.expectEqual(f.lines.items[0].data.items[0], '6');
}
test "minimal" {
const minimal = std.io.fixedBufferStream("@").reader();
var f = try Field.init_from_reader(std.testing.allocator, minimal);
var minimal = std.io.fixedBufferStream("@");
var f = try Field.init_from_reader(std.testing.allocator, minimal.reader());
defer f.deinit();
try std.testing.expectEqual(f.x, 0);
try std.testing.expectEqual(f.y, 0);

View file

@ -13,13 +13,13 @@ pub const Interpreter = struct {
self.field.deinit();
self.allocator.destroy(self);
}
pub fn init(allocator: std.mem.Allocator, fileReader: anytype, timestamp: fn () i64, args: []const []const u8, env: []const [*:0]const u8) !*Interpreter {
pub fn init(allocator: std.mem.Allocator, fileReader: anytype, timestamp: ?i64, args: []const []const u8, env: []const [*:0]const u8) !*Interpreter {
var i = try allocator.create(Interpreter);
errdefer allocator.destroy(i);
i.allocator = allocator;
i.field = try field.Field.init_from_reader(allocator, fileReader);
errdefer i.field.deinit();
i.pointer = try pointer.Pointer.init(std.testing.allocator, i.field, timestamp, args, env);
i.pointer = try pointer.Pointer.init(allocator, i.field, timestamp, args, env);
errdefer i.pointer.deinit();
return i;
}

View file

@ -1,6 +1,6 @@
const std = @import("std");
pub fn Context(readerType: anytype, writerType: anytype) type {
pub fn Context(comptime readerType: anytype, comptime writerType: anytype) type {
return struct {
reader: readerType,
writer: writerType,

View file

@ -16,16 +16,15 @@ pub fn main() anyerror!void {
defer file.close();
const env: []const [*:0]const u8 = std.os.environ;
var i = try interpreter.Interpreter.init(gpa.allocator(), file.reader(), std.time.timestamp, args, env[0..]);
var i = try interpreter.Interpreter.init(gpa.allocator(), file.reader(), null, args, env[0..]);
defer i.deinit();
var ioContext = io.context(std.io.getStdIn().reader(), std.io.getStdOut().writer());
std.os.exit(@intCast(u8, try i.run(&ioContext)));
}
fn testTimestamp() i64 {
return 1660681247;
}
const testTimestamp: i64 = 1660681247;
test "all" {
std.testing.refAllDecls(@This());
}

View file

@ -25,8 +25,8 @@ pub const Pointer = struct {
ss: *stackStack.StackStack,
env: []const [*:0]const u8,
argv: []const []const u8,
rand: *std.rand.Random,
timestamp: fn () i64,
rand: std.rand.DefaultPrng,
timestamp: ?i64,
pub fn deinit(self: *Pointer) void {
self.ss.deinit();
@ -245,7 +245,8 @@ pub const Pointer = struct {
// 17
try p.ss.toss.push(@intCast(i64, p.ss.data.items.len) + 1);
// 16
const now = std.time.epoch.EpochSeconds{ .secs = @intCast(u64, p.timestamp()) };
const ts = if (p.timestamp) |v| v else std.time.timestamp();
const now = std.time.epoch.EpochSeconds{ .secs = @intCast(u64, ts) };
const epochDay = now.getEpochDay();
const daySeconds = now.getDaySeconds();
try p.ss.toss.push(@intCast(i64, daySeconds.getHoursIntoDay()) * 256 * 256 + @intCast(i64, daySeconds.getMinutesIntoHour()) * 256 + @intCast(i64, daySeconds.getSecondsIntoMinute()));
@ -349,7 +350,7 @@ pub const Pointer = struct {
self.step();
return result;
}
pub fn init(allocator: std.mem.Allocator, f: *field.Field, timestamp: fn () i64, argv: []const []const u8, env: []const [*:0]const u8) !*Pointer {
pub fn init(allocator: std.mem.Allocator, f: *field.Field, timestamp: ?i64, argv: []const []const u8, env: []const [*:0]const u8) !*Pointer {
var p = try allocator.create(Pointer);
errdefer allocator.destroy(p);
p.allocator = allocator;
@ -368,8 +369,7 @@ pub const Pointer = struct {
// Initializing the random number generator
var seed: u64 = undefined;
try std.os.getrandom(std.mem.asBytes(&seed));
var prng = std.rand.DefaultPrng.init(seed);
p.rand = &prng.random();
p.rand = std.rand.DefaultPrng.init(seed);
p.timestamp = timestamp;
return p;
}
@ -393,7 +393,7 @@ pub const Pointer = struct {
},
'?' => {
const directions = [_]i8{ 0, -1, 1, 0, 0, 1, -1, 0 };
const r = 2 * p.rand.intRangeAtMost(u8, 0, 3);
const r = 2 * p.rand.random().intRangeAtMost(u8, 0, 3);
p.dx = directions[r];
p.dy = directions[r + 1];
},
@ -432,15 +432,14 @@ pub const Pointer = struct {
}
};
fn testTimestamp() i64 {
return 1660681247;
}
const testTimestamp: i64 = 1660681247;
test "all" {
std.testing.refAllDecls(@This());
}
test "minimal" {
const minimal = std.io.fixedBufferStream("@").reader();
var f = try field.Field.init_from_reader(std.testing.allocator, minimal);
var minimal = std.io.fixedBufferStream("@");
var f = try field.Field.init_from_reader(std.testing.allocator, minimal.reader());
defer f.deinit();
const argv = [_][]const u8{"minimal"};
const env = [_][*:0]const u8{"ENV=TEST"};
@ -450,8 +449,8 @@ test "minimal" {
try std.testing.expectEqual(p.exec(&ioContext), pointerReturn{});
}
test "almost minimal" {
const minimal = std.io.fixedBufferStream(" @").reader();
var f = try field.Field.init_from_reader(std.testing.allocator, minimal);
var minimal = std.io.fixedBufferStream(" @");
var f = try field.Field.init_from_reader(std.testing.allocator, minimal.reader());
defer f.deinit();
const argv = [_][]const u8{"minimal"};
const env = [_][*:0]const u8{"ENV=TEST"};