| ... | ... | @@ -3,24 +3,26 @@ const native_endian = builtin.cpu.arch.endian(); |
| 3 | 3 | |
| 4 | 4 | const std = @import("std"); |
| 5 | 5 | const Io = std.Io; |
| 6 | | const DefaultPrng = std.Random.DefaultPrng; |
| 6 | const testing = std.testing; |
| 7 | 7 | const expect = std.testing.expect; |
| 8 | 8 | const expectEqual = std.testing.expectEqual; |
| 9 | 9 | const expectError = std.testing.expectError; |
| 10 | const DefaultPrng = std.Random.DefaultPrng; |
| 10 | 11 | const mem = std.mem; |
| 11 | 12 | const fs = std.fs; |
| 12 | 13 | const File = std.fs.File; |
| 14 | const assert = std.debug.assert; |
| 13 | 15 | |
| 14 | 16 | const tmpDir = std.testing.tmpDir; |
| 15 | 17 | |
| 16 | 18 | test "write a file, read it, then delete it" { |
| 17 | | const io = std.testing.io; |
| 19 | const io = testing.io; |
| 18 | 20 | |
| 19 | 21 | var tmp = tmpDir(.{}); |
| 20 | 22 | defer tmp.cleanup(); |
| 21 | 23 | |
| 22 | 24 | var data: [1024]u8 = undefined; |
| 23 | | var prng = DefaultPrng.init(std.testing.random_seed); |
| 25 | var prng = DefaultPrng.init(testing.random_seed); |
| 24 | 26 | const random = prng.random(); |
| 25 | 27 | random.bytes(data[0..]); |
| 26 | 28 | const tmp_file_name = "temp_test_file.txt"; |
| ... | ... | @@ -51,8 +53,8 @@ test "write a file, read it, then delete it" { |
| 51 | 53 | |
| 52 | 54 | var file_buffer: [1024]u8 = undefined; |
| 53 | 55 | var file_reader = file.reader(io, &file_buffer); |
| 54 | | const contents = try file_reader.interface.allocRemaining(std.testing.allocator, .limited(2 * 1024)); |
| 55 | | defer std.testing.allocator.free(contents); |
| 56 | const contents = try file_reader.interface.allocRemaining(testing.allocator, .limited(2 * 1024)); |
| 57 | defer testing.allocator.free(contents); |
| 56 | 58 | |
| 57 | 59 | try expect(mem.eql(u8, contents[0.."begin".len], "begin")); |
| 58 | 60 | try expect(mem.eql(u8, contents["begin".len .. contents.len - "end".len], &data)); |
| ... | ... | @@ -94,18 +96,18 @@ test "setEndPos" { |
| 94 | 96 | defer file.close(); |
| 95 | 97 | |
| 96 | 98 | // Verify that the file size changes and the file offset is not moved |
| 97 | | try std.testing.expect((try file.getEndPos()) == 0); |
| 98 | | try std.testing.expect((try file.getPos()) == 0); |
| 99 | try expect((try file.getEndPos()) == 0); |
| 100 | try expect((try file.getPos()) == 0); |
| 99 | 101 | try file.setEndPos(8192); |
| 100 | | try std.testing.expect((try file.getEndPos()) == 8192); |
| 101 | | try std.testing.expect((try file.getPos()) == 0); |
| 102 | try expect((try file.getEndPos()) == 8192); |
| 103 | try expect((try file.getPos()) == 0); |
| 102 | 104 | try file.seekTo(100); |
| 103 | 105 | try file.setEndPos(4096); |
| 104 | | try std.testing.expect((try file.getEndPos()) == 4096); |
| 105 | | try std.testing.expect((try file.getPos()) == 100); |
| 106 | try expect((try file.getEndPos()) == 4096); |
| 107 | try expect((try file.getPos()) == 100); |
| 106 | 108 | try file.setEndPos(0); |
| 107 | | try std.testing.expect((try file.getEndPos()) == 0); |
| 108 | | try std.testing.expect((try file.getPos()) == 100); |
| 109 | try expect((try file.getEndPos()) == 0); |
| 110 | try expect((try file.getPos()) == 100); |
| 109 | 111 | } |
| 110 | 112 | |
| 111 | 113 | test "updateTimes" { |
| ... | ... | @@ -128,7 +130,7 @@ test "updateTimes" { |
| 128 | 130 | } |
| 129 | 131 | |
| 130 | 132 | test "Group" { |
| 131 | | const io = std.testing.io; |
| 133 | const io = testing.io; |
| 132 | 134 | |
| 133 | 135 | var group: Io.Group = .init; |
| 134 | 136 | var results: [2]usize = undefined; |
| ... | ... | @@ -138,7 +140,7 @@ test "Group" { |
| 138 | 140 | |
| 139 | 141 | group.wait(io); |
| 140 | 142 | |
| 141 | | try std.testing.expectEqualSlices(usize, &.{ 45, 245 }, &results); |
| 143 | try testing.expectEqualSlices(usize, &.{ 45, 245 }, &results); |
| 142 | 144 | } |
| 143 | 145 | |
| 144 | 146 | fn count(a: usize, b: usize, result: *usize) void { |
| ... | ... | @@ -150,7 +152,7 @@ fn count(a: usize, b: usize, result: *usize) void { |
| 150 | 152 | } |
| 151 | 153 | |
| 152 | 154 | test "Group cancellation" { |
| 153 | | const io = std.testing.io; |
| 155 | const io = testing.io; |
| 154 | 156 | |
| 155 | 157 | var group: Io.Group = .init; |
| 156 | 158 | var results: [2]usize = undefined; |
| ... | ... | @@ -160,7 +162,7 @@ test "Group cancellation" { |
| 160 | 162 | |
| 161 | 163 | group.cancel(io); |
| 162 | 164 | |
| 163 | | try std.testing.expectEqualSlices(usize, &.{ 1, 1 }, &results); |
| 165 | try testing.expectEqualSlices(usize, &.{ 1, 1 }, &results); |
| 164 | 166 | } |
| 165 | 167 | |
| 166 | 168 | fn sleep(io: Io, result: *usize) void { |
| ... | ... | @@ -169,3 +171,28 @@ fn sleep(io: Io, result: *usize) void { |
| 169 | 171 | io.sleep(.fromMilliseconds(1), .awake) catch {}; |
| 170 | 172 | result.* = 1; |
| 171 | 173 | } |
| 174 | |
| 175 | test "select" { |
| 176 | const io = testing.io; |
| 177 | |
| 178 | var queue: Io.Queue(u8) = .init(&.{}); |
| 179 | |
| 180 | var get_a = try io.concurrent(Io.Queue(u8).getOne, .{ &queue, io }); |
| 181 | defer if (get_a.cancel(io)) |_| @panic("fail") else |err| assert(err == error.Canceled); |
| 182 | |
| 183 | var get_b = try io.concurrent(Io.Queue(u8).getOne, .{ &queue, io }); |
| 184 | defer if (get_b.cancel(io)) |_| @panic("fail") else |err| assert(err == error.Canceled); |
| 185 | |
| 186 | var timeout = io.async(Io.sleep, .{ io, .fromMilliseconds(1), .awake }); |
| 187 | defer timeout.cancel(io) catch {}; |
| 188 | |
| 189 | switch (try io.select(.{ |
| 190 | .get_a = &get_a, |
| 191 | .get_b = &get_b, |
| 192 | .timeout = &timeout, |
| 193 | })) { |
| 194 | .get_a => return error.TestFailure, |
| 195 | .get_b => return error.TestFailure, |
| 196 | .timeout => {}, |
| 197 | } |
| 198 | } |