public void Test8() =>
 DelayedDisposer.SafelyDispose(
     new IDisposable?[]
 {
     null,
     null,
     null
 });
    public DelayedDisposerUnitTests(ITestOutputHelper output)
    {
        Requires.NotNull(
            out this.output,
            output);

        EnvironmentSettings.DelayedDisposal.DefaultDisposalDelayInMilliseconds = 300;
        DelayedDisposer.EnsureInitialized();
    }
    public async Task Test2()
    {
        // ARRANGE
        var dt = new DisposeTester(output);

        // ACT
        DelayedDisposer.SafelyDispose((IDisposable)dt);

        // ASSERT
        dt.CheckNegative();

        await dt.WaitForDisposal();

        dt.Check();
    }
    public async Task Test3()
    {
        // ARRANGE
        var dt = new List <DisposeTester>
        {
            new(output),
            new(output),
            new(output)
        };

        // ACT
        DelayedDisposer.SafelyDispose(dt);

        // ASSERT
        dt.ForEach(p => p.CheckNegative());

        await Task.WhenAll(dt.Select(p => p.WaitForDisposal()));

        dt.ForEach(p => p.Check());
    }
    public async Task Test1()
    {
        // ARRANGE
        output.WriteLine("Starting timed test...");
        var dt = new DisposeTester(output);

        // ACT
        output.WriteLine("Adding to safe disposer...");
        DelayedDisposer.SafelyDispose(dt);

        // ASSERT
        output.WriteLine("Checking negative...");
        dt.CheckNegative();

        output.WriteLine("Waiting for disposal...");
        await dt.WaitForDisposal();

        output.WriteLine("Checking positive...");
        dt.Check();
        output.WriteLine("All done. Test should not hang anymore.");
    }
    public async Task Test5()
    {
        // ARRANGE
        var dt  = new DisposeTester(output);
        var dt2 = new DisposeTester(output);
        var dtt = dt;

        // ACT
        DelayedDisposer.AtomicExchange(ref dt, dt2);

        // ASSERT
        dtt.CheckNegative();
        dt2.CheckNegative();
        dt.CheckNegative();

        await dtt.WaitForDisposal();

        dtt.Check();
        dt2.CheckNegative();
        dt.CheckNegative();
        Assert.Equal(dt2, dt);
    }
 public void Test7() => DelayedDisposer.SafelyDispose((IEnumerable <IDisposable?>?)null);
 public void Test6() => DelayedDisposer.SafelyDispose((IDisposable?)null);