add assertions about seek state and seek position

This commit is contained in:
Luna 2019-10-05 21:42:16 -03:00
parent 0e323f6631
commit f8814ca94d
3 changed files with 30 additions and 12 deletions

View file

@ -45,6 +45,15 @@ fn sopen(
return ImageError.OpenFail;
}
const frames_on_end = c.sf_seek(file, 0, c.SEEK_END);
_ = c.sf_seek(file, 0, c.SEEK_SET);
std.testing.expectEqual(fmt.frames, frames_on_end);
const frames_on_end_by_end = c.sf_seek(file, frames_on_end, c.SEEK_SET);
std.testing.expectEqual(frames_on_end, frames_on_end_by_end);
std.debug.warn("frames on end: {}, frame on end (2): {}\n", frames_on_end, frames_on_end_by_end);
return file.?;
}
@ -52,22 +61,20 @@ fn swrite(file: *c.SNDFILE, buf: [*]f32, frames: i64) !void {
const count = c.sf_writef_float(file, buf, frames);
if (count != frames) {
std.debug.warn("Wanted to read {}, got {}\n", frames, count);
std.debug.warn("Wanted to write {}, got {}\n", frames, count);
return ImageError.WriteFail;
}
}
fn sseek(file: *c.SNDFILE, offset: usize) void {
const frames = c.sf_seek(file, @intCast(i64, offset), c.SEEK_SET);
if (frames != @intCast(i64, offset)) {
std.debug.warn("failed to seek to {}\n", offset);
}
}
const offset_i64 = @intCast(i64, offset);
const frames = c.sf_seek(file, offset_i64, c.SEEK_SET);
const frames_current = c.sf_seek(file, 0, c.SEEK_CUR);
std.testing.expectEqual(frames, frames_current);
fn sf_tell(file: *c.SNDFILE) i64 {
var frames = c.sf_seek(file, 0, c.SEEK_CUR);
std.debug.warn("\t\t{} frames\n", frames);
return -frames;
if (frames != offset_i64) {
std.debug.warn("failed to seek to {} (seeked {} frames, offset_i64={})\n", offset, frames, offset_i64);
}
}
/// Caller owns the returned memory.
@ -132,6 +139,7 @@ pub const Image = struct {
pub fn open(allocator: *std.mem.Allocator, path: []const u8) !*Image {
var in_fmt = mkSfInfo();
var sndfile = try sopen(allocator, path, c.SFM_READ, &in_fmt);
var image = try allocator.create(Image);
std.debug.assert(in_fmt.frames > i64(0));
@ -152,6 +160,8 @@ pub const Image = struct {
var in_fmt = mkSfInfo();
// clone sndfile
var sndfile = try sopen(self.allocator, self.curpath, c.SFM_READ, &in_fmt);
std.testing.expectEqual(self.frames, @intCast(usize, in_fmt.frames));
var image = try self.allocator.create(Image);
std.debug.assert(in_fmt.frames > i64(0));
@ -249,10 +259,17 @@ pub const Image = struct {
var in_fmt = mkSfInfo();
self.sndfile = try sopen(self.allocator, path, c.SFM_READ, &in_fmt);
std.testing.expectEqual(self.frames, @intCast(usize, in_fmt.frames));
self.curpath = path;
self.frames = @intCast(usize, in_fmt.frames);
std.debug.warn("\timage: reopened on '{}'\n", self.curpath);
std.debug.warn(
"\timage: reopened on '{}' (frames={}, fmt.frames={})\n",
self.curpath,
self.frames,
in_fmt.frames,
);
}
pub fn checkValid(self: *Image) !void {

View file

@ -65,7 +65,7 @@ pub fn doRepl(allocator: *std.mem.Allocator, args_it: var) !void {
defer runqs_args.deinit();
// TODO change the runqs command to something given in an env var
try runqs_args.append("feh");
try runqs_args.append("ristretto");
while (true) {
lang.reset();

View file

@ -34,6 +34,7 @@ pub const Position = struct {
index: usize,
pub fn seekPos(self: Position, total_size: usize) SeekPos {
std.debug.assert(self.index <= self.split);
var tot = total_size / self.split;
return SeekPos{