std.fmt: breaking API changes
added adapter to AnyWriter and GenericWriter to help bridge the gap
between old and new API
make std.testing.expectFmt work at compile-time
std.fmt no longer has a dependency on std.unicode. Formatted printing
was never properly unicode-aware. Now it no longer pretends to be.
Breakage/deprecations:
* std.fs.File.reader -> std.fs.File.deprecatedReader
* std.fs.File.writer -> std.fs.File.deprecatedWriter
* std.io.GenericReader -> std.io.Reader
* std.io.GenericWriter -> std.io.Writer
* std.io.AnyReader -> std.io.Reader
* std.io.AnyWriter -> std.io.Writer
* std.fmt.format -> std.fmt.deprecatedFormat
* std.fmt.fmtSliceEscapeLower -> std.ascii.hexEscape
* std.fmt.fmtSliceEscapeUpper -> std.ascii.hexEscape
* std.fmt.fmtSliceHexLower -> {x}
* std.fmt.fmtSliceHexUpper -> {X}
* std.fmt.fmtIntSizeDec -> {B}
* std.fmt.fmtIntSizeBin -> {Bi}
* std.fmt.fmtDuration -> {D}
* std.fmt.fmtDurationSigned -> {D}
* {} -> {f} when there is a format method
* format method signature
- anytype -> *std.io.Writer
- inferred error set -> error{WriteFailed}
- options -> (deleted)
* std.fmt.Formatted
- now takes context type explicitly
- no fmt string
This commit is contained in:
@@ -105,7 +105,7 @@ fn expectEqualInner(comptime T: type, expected: T, actual: T) !void {
|
||||
.error_set,
|
||||
=> {
|
||||
if (actual != expected) {
|
||||
print("expected {}, found {}\n", .{ expected, actual });
|
||||
print("expected {any}, found {any}\n", .{ expected, actual });
|
||||
return error.TestExpectedEqual;
|
||||
}
|
||||
},
|
||||
@@ -267,9 +267,13 @@ test "expectEqual null" {
|
||||
|
||||
/// This function is intended to be used only in tests. When the formatted result of the template
|
||||
/// and its arguments does not equal the expected text, it prints diagnostics to stderr to show how
|
||||
/// they are not equal, then returns an error. It depends on `expectEqualStrings()` for printing
|
||||
/// they are not equal, then returns an error. It depends on `expectEqualStrings` for printing
|
||||
/// diagnostics.
|
||||
pub fn expectFmt(expected: []const u8, comptime template: []const u8, args: anytype) !void {
|
||||
if (@inComptime()) {
|
||||
var buffer: [std.fmt.count(template, args)]u8 = undefined;
|
||||
return expectEqualStrings(expected, try std.fmt.bufPrint(&buffer, template, args));
|
||||
}
|
||||
const actual = try std.fmt.allocPrint(allocator, template, args);
|
||||
defer allocator.free(actual);
|
||||
return expectEqualStrings(expected, actual);
|
||||
@@ -415,7 +419,7 @@ pub fn expectEqualSlices(comptime T: type, expected: []const T, actual: []const
|
||||
print("... truncated ...\n", .{});
|
||||
}
|
||||
}
|
||||
differ.write(stderr.writer()) catch {};
|
||||
differ.write(stderr.deprecatedWriter()) catch {};
|
||||
if (expected_truncated) {
|
||||
const end_offset = window_start + expected_window.len;
|
||||
const num_missing_items = expected.len - (window_start + expected_window.len);
|
||||
@@ -437,7 +441,7 @@ pub fn expectEqualSlices(comptime T: type, expected: []const T, actual: []const
|
||||
print("... truncated ...\n", .{});
|
||||
}
|
||||
}
|
||||
differ.write(stderr.writer()) catch {};
|
||||
differ.write(stderr.deprecatedWriter()) catch {};
|
||||
if (actual_truncated) {
|
||||
const end_offset = window_start + actual_window.len;
|
||||
const num_missing_items = actual.len - (window_start + actual_window.len);
|
||||
@@ -637,6 +641,11 @@ pub fn tmpDir(opts: std.fs.Dir.OpenOptions) TmpDir {
|
||||
|
||||
pub fn expectEqualStrings(expected: []const u8, actual: []const u8) !void {
|
||||
if (std.mem.indexOfDiff(u8, actual, expected)) |diff_index| {
|
||||
if (@inComptime()) {
|
||||
@compileError(std.fmt.comptimePrint("\nexpected:\n{s}\nfound:\n{s}\ndifference starts at index {d}", .{
|
||||
expected, actual, diff_index,
|
||||
}));
|
||||
}
|
||||
print("\n====== expected this output: =========\n", .{});
|
||||
printWithVisibleNewlines(expected);
|
||||
print("\n======== instead found this: =========\n", .{});
|
||||
@@ -1108,7 +1117,7 @@ pub fn checkAllAllocationFailures(backing_allocator: std.mem.Allocator, comptime
|
||||
const arg_i_str = comptime str: {
|
||||
var str_buf: [100]u8 = undefined;
|
||||
const args_i = i + 1;
|
||||
const str_len = std.fmt.formatIntBuf(&str_buf, args_i, 10, .lower, .{});
|
||||
const str_len = std.fmt.printInt(&str_buf, args_i, 10, .lower, .{});
|
||||
break :str str_buf[0..str_len];
|
||||
};
|
||||
@field(args, arg_i_str) = @field(extra_args, field.name);
|
||||
@@ -1138,7 +1147,7 @@ pub fn checkAllAllocationFailures(backing_allocator: std.mem.Allocator, comptime
|
||||
error.OutOfMemory => {
|
||||
if (failing_allocator_inst.allocated_bytes != failing_allocator_inst.freed_bytes) {
|
||||
print(
|
||||
"\nfail_index: {d}/{d}\nallocated bytes: {d}\nfreed bytes: {d}\nallocations: {d}\ndeallocations: {d}\nallocation that was made to fail: {}",
|
||||
"\nfail_index: {d}/{d}\nallocated bytes: {d}\nfreed bytes: {d}\nallocations: {d}\ndeallocations: {d}\nallocation that was made to fail: {f}",
|
||||
.{
|
||||
fail_index,
|
||||
needed_alloc_count,
|
||||
|
||||
Reference in New Issue
Block a user