authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-04-01 10:21:27-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-04-01 10:21:27-04:00
log0628c2e2bae0a847dee4863521d9e6f4d9383e83
treee2c402671532ea29f58db5b281953db97e09bc30
parenta5af78c376fc41424b81ea83766b38a0a1d17870
parentd23f9a164eede57135ca141b11c9a9803ed52fc6
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4895 from vrischmann/fix-io-tests

Fix io tests

4 files changed, 70 insertions(+), 55 deletions(-)

lib/std/io.zig+14
...@@ -141,6 +141,20 @@ test "null_out_stream" {...@@ -141,6 +141,20 @@ test "null_out_stream" {
141}141}
142142
143test "" {143test "" {
144 _ = @import("io/bit_in_stream.zig");
145 _ = @import("io/bit_out_stream.zig");
146 _ = @import("io/buffered_atomic_file.zig");
147 _ = @import("io/buffered_in_stream.zig");
148 _ = @import("io/buffered_out_stream.zig");
149 _ = @import("io/c_out_stream.zig");
150 _ = @import("io/counting_out_stream.zig");
151 _ = @import("io/fixed_buffer_stream.zig");
152 _ = @import("io/in_stream.zig");
153 _ = @import("io/out_stream.zig");
154 _ = @import("io/peek_stream.zig");
155 _ = @import("io/seekable_stream.zig");
156 _ = @import("io/serialization.zig");
157 _ = @import("io/stream_source.zig");
144 _ = @import("io/test.zig");158 _ = @import("io/test.zig");
145}159}
146160
lib/std/io/c_out_stream.zig+2-2
...@@ -36,9 +36,9 @@ test "" {...@@ -36,9 +36,9 @@ test "" {
36 const out_file = std.c.fopen(filename, "w") orelse return error.UnableToOpenTestFile;36 const out_file = std.c.fopen(filename, "w") orelse return error.UnableToOpenTestFile;
37 defer {37 defer {
38 _ = std.c.fclose(out_file);38 _ = std.c.fclose(out_file);
39 fs.cwd().deleteFileZ(filename) catch {};39 std.fs.cwd().deleteFileZ(filename) catch {};
40 }40 }
4141
42 const out_stream = &io.COutStream.init(out_file).stream;42 const out_stream = cOutStream(out_file);
43 try out_stream.print("hi: {}\n", .{@as(i32, 123)});43 try out_stream.print("hi: {}\n", .{@as(i32, 123)});
44}44}
lib/std/io/peek_stream.zig+4-4
...@@ -24,7 +24,7 @@ pub fn PeekStream(...@@ -24,7 +24,7 @@ pub fn PeekStream(
24 .Static => struct {24 .Static => struct {
25 pub fn init(base: InStreamType) Self {25 pub fn init(base: InStreamType) Self {
26 return .{26 return .{
27 .base = base,27 .unbuffered_in_stream = base,
28 .fifo = FifoType.init(),28 .fifo = FifoType.init(),
29 };29 };
30 }30 }
...@@ -32,7 +32,7 @@ pub fn PeekStream(...@@ -32,7 +32,7 @@ pub fn PeekStream(
32 .Slice => struct {32 .Slice => struct {
33 pub fn init(base: InStreamType, buf: []u8) Self {33 pub fn init(base: InStreamType, buf: []u8) Self {
34 return .{34 return .{
35 .base = base,35 .unbuffered_in_stream = base,
36 .fifo = FifoType.init(buf),36 .fifo = FifoType.init(buf),
37 };37 };
38 }38 }
...@@ -40,7 +40,7 @@ pub fn PeekStream(...@@ -40,7 +40,7 @@ pub fn PeekStream(
40 .Dynamic => struct {40 .Dynamic => struct {
41 pub fn init(base: InStreamType, allocator: *mem.Allocator) Self {41 pub fn init(base: InStreamType, allocator: *mem.Allocator) Self {
42 return .{42 return .{
43 .base = base,43 .unbuffered_in_stream = base,
44 .fifo = FifoType.init(allocator),44 .fifo = FifoType.init(allocator),
45 };45 };
46 }46 }
...@@ -61,7 +61,7 @@ pub fn PeekStream(...@@ -61,7 +61,7 @@ pub fn PeekStream(
61 if (dest_index == dest.len) return dest_index;61 if (dest_index == dest.len) return dest_index;
6262
63 // ask the backing stream for more63 // ask the backing stream for more
64 dest_index += try self.base.read(dest[dest_index..]);64 dest_index += try self.unbuffered_in_stream.read(dest[dest_index..]);
65 return dest_index;65 return dest_index;
66 }66 }
6767
lib/std/io/serialization.zig+50-49
...@@ -5,6 +5,7 @@ const assert = std.debug.assert;...@@ -5,6 +5,7 @@ const assert = std.debug.assert;
5const math = std.math;5const math = std.math;
6const meta = std.meta;6const meta = std.meta;
7const trait = meta.trait;7const trait = meta.trait;
8const testing = std.testing;
89
9pub const Packing = enum {10pub const Packing = enum {
10 /// Pack data to byte alignment11 /// Pack data to byte alignment
...@@ -273,7 +274,7 @@ pub fn Serializer(comptime endian: builtin.Endian, comptime packing: Packing, co...@@ -273,7 +274,7 @@ pub fn Serializer(comptime endian: builtin.Endian, comptime packing: Packing, co
273 if (comptime trait.hasFn("serialize")(T)) return T.serialize(value, self);274 if (comptime trait.hasFn("serialize")(T)) return T.serialize(value, self);
274275
275 if (comptime trait.isPacked(T) and packing != .Bit) {276 if (comptime trait.isPacked(T) and packing != .Bit) {
276 var packed_serializer = Serializer(endian, .Bit, Error).init(self.out_stream);277 var packed_serializer = Serializer(endian, .Bit, OutStreamType).init(self.out_stream);
277 try packed_serializer.serialize(value);278 try packed_serializer.serialize(value);
278 try packed_serializer.flush();279 try packed_serializer.flush();
279 return;280 return;
...@@ -364,28 +365,28 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi...@@ -364,28 +365,28 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi
364365
365 var data_mem: [total_bytes]u8 = undefined;366 var data_mem: [total_bytes]u8 = undefined;
366 var out = io.fixedBufferStream(&data_mem);367 var out = io.fixedBufferStream(&data_mem);
367 var serializer = serializer(endian, packing, out.outStream());368 var _serializer = serializer(endian, packing, out.outStream());
368369
369 var in = io.fixedBufferStream(&data_mem);370 var in = io.fixedBufferStream(&data_mem);
370 var deserializer = Deserializer(endian, packing, in.inStream());371 var _deserializer = deserializer(endian, packing, in.inStream());
371372
372 comptime var i = 0;373 comptime var i = 0;
373 inline while (i <= max_test_bitsize) : (i += 1) {374 inline while (i <= max_test_bitsize) : (i += 1) {
374 const U = std.meta.IntType(false, i);375 const U = std.meta.IntType(false, i);
375 const S = std.meta.IntType(true, i);376 const S = std.meta.IntType(true, i);
376 try serializer.serializeInt(@as(U, i));377 try _serializer.serializeInt(@as(U, i));
377 if (i != 0) try serializer.serializeInt(@as(S, -1)) else try serializer.serialize(@as(S, 0));378 if (i != 0) try _serializer.serializeInt(@as(S, -1)) else try _serializer.serialize(@as(S, 0));
378 }379 }
379 try serializer.flush();380 try _serializer.flush();
380381
381 i = 0;382 i = 0;
382 inline while (i <= max_test_bitsize) : (i += 1) {383 inline while (i <= max_test_bitsize) : (i += 1) {
383 const U = std.meta.IntType(false, i);384 const U = std.meta.IntType(false, i);
384 const S = std.meta.IntType(true, i);385 const S = std.meta.IntType(true, i);
385 const x = try deserializer.deserializeInt(U);386 const x = try _deserializer.deserializeInt(U);
386 const y = try deserializer.deserializeInt(S);387 const y = try _deserializer.deserializeInt(S);
387 expect(x == @as(U, i));388 testing.expect(x == @as(U, i));
388 if (i != 0) expect(y == @as(S, -1)) else expect(y == 0);389 if (i != 0) testing.expect(y == @as(S, -1)) else testing.expect(y == 0);
389 }390 }
390391
391 const u8_bit_count = comptime meta.bitCount(u8);392 const u8_bit_count = comptime meta.bitCount(u8);
...@@ -395,7 +396,7 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi...@@ -395,7 +396,7 @@ fn testIntSerializerDeserializer(comptime endian: builtin.Endian, comptime packi
395 const extra_packed_byte = @boolToInt(total_bits % u8_bit_count > 0);396 const extra_packed_byte = @boolToInt(total_bits % u8_bit_count > 0);
396 const total_packed_bytes = (total_bits / u8_bit_count) + extra_packed_byte;397 const total_packed_bytes = (total_bits / u8_bit_count) + extra_packed_byte;
397398
398 expect(in.pos == if (packing == .Bit) total_packed_bytes else total_bytes);399 testing.expect(in.pos == if (packing == .Bit) total_packed_bytes else total_bytes);
399400
400 //Verify that empty error set works with serializer.401 //Verify that empty error set works with serializer.
401 //deserializer is covered by FixedBufferStream402 //deserializer is covered by FixedBufferStream
...@@ -421,35 +422,35 @@ fn testIntSerializerDeserializerInfNaN(...@@ -421,35 +422,35 @@ fn testIntSerializerDeserializerInfNaN(
421 var data_mem: [mem_size]u8 = undefined;422 var data_mem: [mem_size]u8 = undefined;
422423
423 var out = io.fixedBufferStream(&data_mem);424 var out = io.fixedBufferStream(&data_mem);
424 var serializer = serializer(endian, packing, out.outStream());425 var _serializer = serializer(endian, packing, out.outStream());
425426
426 var in = io.fixedBufferStream(&data_mem);427 var in = io.fixedBufferStream(&data_mem);
427 var deserializer = deserializer(endian, packing, in.inStream());428 var _deserializer = deserializer(endian, packing, in.inStream());
428429
429 //@TODO: isInf/isNan not currently implemented for f128.430 //@TODO: isInf/isNan not currently implemented for f128.
430 try serializer.serialize(std.math.nan(f16));431 try _serializer.serialize(std.math.nan(f16));
431 try serializer.serialize(std.math.inf(f16));432 try _serializer.serialize(std.math.inf(f16));
432 try serializer.serialize(std.math.nan(f32));433 try _serializer.serialize(std.math.nan(f32));
433 try serializer.serialize(std.math.inf(f32));434 try _serializer.serialize(std.math.inf(f32));
434 try serializer.serialize(std.math.nan(f64));435 try _serializer.serialize(std.math.nan(f64));
435 try serializer.serialize(std.math.inf(f64));436 try _serializer.serialize(std.math.inf(f64));
436 //try serializer.serialize(std.math.nan(f128));437 //try serializer.serialize(std.math.nan(f128));
437 //try serializer.serialize(std.math.inf(f128));438 //try serializer.serialize(std.math.inf(f128));
438 const nan_check_f16 = try deserializer.deserialize(f16);439 const nan_check_f16 = try _deserializer.deserialize(f16);
439 const inf_check_f16 = try deserializer.deserialize(f16);440 const inf_check_f16 = try _deserializer.deserialize(f16);
440 const nan_check_f32 = try deserializer.deserialize(f32);441 const nan_check_f32 = try _deserializer.deserialize(f32);
441 deserializer.alignToByte();442 _deserializer.alignToByte();
442 const inf_check_f32 = try deserializer.deserialize(f32);443 const inf_check_f32 = try _deserializer.deserialize(f32);
443 const nan_check_f64 = try deserializer.deserialize(f64);444 const nan_check_f64 = try _deserializer.deserialize(f64);
444 const inf_check_f64 = try deserializer.deserialize(f64);445 const inf_check_f64 = try _deserializer.deserialize(f64);
445 //const nan_check_f128 = try deserializer.deserialize(f128);446 //const nan_check_f128 = try deserializer.deserialize(f128);
446 //const inf_check_f128 = try deserializer.deserialize(f128);447 //const inf_check_f128 = try deserializer.deserialize(f128);
447 expect(std.math.isNan(nan_check_f16));448 testing.expect(std.math.isNan(nan_check_f16));
448 expect(std.math.isInf(inf_check_f16));449 testing.expect(std.math.isInf(inf_check_f16));
449 expect(std.math.isNan(nan_check_f32));450 testing.expect(std.math.isNan(nan_check_f32));
450 expect(std.math.isInf(inf_check_f32));451 testing.expect(std.math.isInf(inf_check_f32));
451 expect(std.math.isNan(nan_check_f64));452 testing.expect(std.math.isNan(nan_check_f64));
452 expect(std.math.isInf(inf_check_f64));453 testing.expect(std.math.isInf(inf_check_f64));
453 //expect(std.math.isNan(nan_check_f128));454 //expect(std.math.isNan(nan_check_f128));
454 //expect(std.math.isInf(inf_check_f128));455 //expect(std.math.isInf(inf_check_f128));
455}456}
...@@ -461,8 +462,8 @@ test "Serializer/Deserializer Int: Inf/NaN" {...@@ -461,8 +462,8 @@ test "Serializer/Deserializer Int: Inf/NaN" {
461 try testIntSerializerDeserializerInfNaN(.Little, .Bit);462 try testIntSerializerDeserializerInfNaN(.Little, .Bit);
462}463}
463464
464fn testAlternateSerializer(self: var, serializer: var) !void {465fn testAlternateSerializer(self: var, _serializer: var) !void {
465 try serializer.serialize(self.f_f16);466 try _serializer.serialize(self.f_f16);
466}467}
467468
468fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: io.Packing) !void {469fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing: io.Packing) !void {
...@@ -502,8 +503,8 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing:...@@ -502,8 +503,8 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing:
502 f_f16: f16,503 f_f16: f16,
503 f_unused_u32: u32,504 f_unused_u32: u32,
504505
505 pub fn deserialize(self: *@This(), deserializer: var) !void {506 pub fn deserialize(self: *@This(), _deserializer: var) !void {
506 try deserializer.deserializeInto(&self.f_f16);507 try _deserializer.deserializeInto(&self.f_f16);
507 self.f_unused_u32 = 47;508 self.f_unused_u32 = 47;
508 }509 }
509510
...@@ -550,15 +551,15 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing:...@@ -550,15 +551,15 @@ fn testSerializerDeserializer(comptime endian: builtin.Endian, comptime packing:
550551
551 var data_mem: [@sizeOf(MyStruct)]u8 = undefined;552 var data_mem: [@sizeOf(MyStruct)]u8 = undefined;
552 var out = io.fixedBufferStream(&data_mem);553 var out = io.fixedBufferStream(&data_mem);
553 var serializer = serializer(endian, packing, out.outStream());554 var _serializer = serializer(endian, packing, out.outStream());
554555
555 var in = io.fixedBufferStream(&data_mem);556 var in = io.fixedBufferStream(&data_mem);
556 var deserializer = deserializer(endian, packing, in.inStream());557 var _deserializer = deserializer(endian, packing, in.inStream());
557558
558 try serializer.serialize(my_inst);559 try _serializer.serialize(my_inst);
559560
560 const my_copy = try deserializer.deserialize(MyStruct);561 const my_copy = try _deserializer.deserialize(MyStruct);
561 expect(meta.eql(my_copy, my_inst));562 testing.expect(meta.eql(my_copy, my_inst));
562}563}
563564
564test "Serializer/Deserializer generic" {565test "Serializer/Deserializer generic" {
...@@ -584,18 +585,18 @@ fn testBadData(comptime endian: builtin.Endian, comptime packing: io.Packing) !v...@@ -584,18 +585,18 @@ fn testBadData(comptime endian: builtin.Endian, comptime packing: io.Packing) !v
584 };585 };
585586
586 var data_mem: [4]u8 = undefined;587 var data_mem: [4]u8 = undefined;
587 var out = io.fixedBufferStream.init(&data_mem);588 var out = io.fixedBufferStream(&data_mem);
588 var serializer = serializer(endian, packing, out.outStream());589 var _serializer = serializer(endian, packing, out.outStream());
589590
590 var in = io.fixedBufferStream(&data_mem);591 var in = io.fixedBufferStream(&data_mem);
591 var deserializer = deserializer(endian, packing, in.inStream());592 var _deserializer = deserializer(endian, packing, in.inStream());
592593
593 try serializer.serialize(@as(u14, 3));594 try _serializer.serialize(@as(u14, 3));
594 expectError(error.InvalidEnumTag, deserializer.deserialize(A));595 testing.expectError(error.InvalidEnumTag, _deserializer.deserialize(A));
595 out.pos = 0;596 out.pos = 0;
596 try serializer.serialize(@as(u14, 3));597 try _serializer.serialize(@as(u14, 3));
597 try serializer.serialize(@as(u14, 88));598 try _serializer.serialize(@as(u14, 88));
598 expectError(error.InvalidEnumTag, deserializer.deserialize(C));599 testing.expectError(error.InvalidEnumTag, _deserializer.deserialize(C));
599}600}
600601
601test "Deserializer bad data" {602test "Deserializer bad data" {