| ... | ... | @@ -158,7 +158,7 @@ const PosixEvent = struct { |
| 158 | 158 | var tv: os.darwin.timeval = undefined; |
| 159 | 159 | assert(os.darwin.gettimeofday(&tv, null) == 0); |
| 160 | 160 | timeout_abs += @intCast(u64, tv.tv_sec) * time.ns_per_s; |
| 161 | | timeout_abs += @intCast(u64, tv.tv_usec) * time.us_per_s; |
| 161 | timeout_abs += @intCast(u64, tv.tv_usec) * time.ns_per_us; |
| 162 | 162 | } else { |
| 163 | 163 | os.clock_gettime(os.CLOCK_REALTIME, &ts) catch unreachable; |
| 164 | 164 | timeout_abs += @intCast(u64, ts.tv_sec) * time.ns_per_s; |
| ... | ... | @@ -431,6 +431,20 @@ test "std.ResetEvent" { |
| 431 | 431 | self.in.wait(); |
| 432 | 432 | assert(self.value == 3); |
| 433 | 433 | } |
| 434 | |
| 435 | fn sleeper(self: *Self) void { |
| 436 | self.in.set(); |
| 437 | time.sleep(time.ns_per_ms * 2); |
| 438 | self.value = 5; |
| 439 | self.out.set(); |
| 440 | } |
| 441 | |
| 442 | fn timedWaiter(self: *Self) !void { |
| 443 | self.in.wait(); |
| 444 | testing.expectError(error.TimedOut, self.out.timedWait(time.ns_per_us)); |
| 445 | try self.out.timedWait(time.ns_per_ms * 10); |
| 446 | testing.expect(self.value == 5); |
| 447 | } |
| 434 | 448 | }; |
| 435 | 449 | |
| 436 | 450 | var context = Context.init(); |
| ... | ... | @@ -438,4 +452,10 @@ test "std.ResetEvent" { |
| 438 | 452 | const receiver = try std.Thread.spawn(&context, Context.receiver); |
| 439 | 453 | defer receiver.wait(); |
| 440 | 454 | context.sender(); |
| 455 | |
| 456 | var timed = Context.init(); |
| 457 | defer timed.deinit(); |
| 458 | const sleeper = try std.Thread.spawn(&timed, Context.sleeper); |
| 459 | defer sleeper.wait(); |
| 460 | try timed.timedWaiter(); |
| 441 | 461 | } |