stdlib: remove flaky test

fixes ziglang#13660
This commit is contained in:
Igor Anić 2022-11-26 23:58:36 +01:00 committed by Andrew Kelley
parent 82b8689122
commit 76c729c967

View File

@ -604,82 +604,3 @@ test "Condition - broadcasting - wake all threads" {
}
}
}
test "Condition - signal wakes one" {
// This test requires spawning threads
if (builtin.single_threaded) {
return error.SkipZigTest;
}
if (builtin.os.tag == .windows) {
// https://github.com/ziglang/zig/issues/13660
return error.SkipZigTest;
}
var num_runs: usize = 1;
const num_threads = 3;
const timeoutDelay = 10 * std.time.ns_per_ms;
while (num_runs > 0) : (num_runs -= 1) {
// Start multiple runner threads, wait for them to start and send the signal
// then. Expect that one thread wake up and all other times out.
//
// Test depends on delay in timedWait! If too small all threads can timeout
// before any one gets wake up.
const Runner = struct {
mutex: Mutex = .{},
cond: Condition = .{},
completed: Condition = .{},
count: usize = 0,
threads: [num_threads]std.Thread = undefined,
wakeups: usize = 0,
timeouts: usize = 0,
fn run(self: *@This()) void {
self.mutex.lock();
defer self.mutex.unlock();
// The last started thread tells the main test thread it's completed.
self.count += 1;
if (self.count == num_threads) {
self.completed.signal();
}
self.cond.timedWait(&self.mutex, timeoutDelay) catch {
self.timeouts += 1;
return;
};
self.wakeups += 1;
}
};
// Start threads
var runner = Runner{};
for (runner.threads) |*t| {
t.* = try std.Thread.spawn(.{}, Runner.run, .{&runner});
}
{
runner.mutex.lock();
defer runner.mutex.unlock();
// Wait for all the threads to spawn.
// timedWait() to detect any potential deadlocks.
while (runner.count != num_threads) {
try runner.completed.timedWait(&runner.mutex, 1 * std.time.ns_per_s);
}
// Signal one thread, the others should get timeout.
runner.cond.signal();
}
for (runner.threads) |t| {
t.join();
}
// Expect that only one got singal
try std.testing.expectEqual(runner.wakeups, 1);
try std.testing.expectEqual(runner.timeouts, num_threads - 1);
}
}