public void SetCompleted_RaisesProgressChanged()
        {
            // Arrange
            var asyncCallbackCalled  = false;
            var asyncCallbackCalled2 = false;
            var progress             = 0;
            var progress2            = 0f;
            var op = new AsyncCompletionSource();
            var pc = Substitute.For <IProgress <float> >();

            op.ProgressChanged += (sender, args) =>
            {
                asyncCallbackCalled = true;
                progress            = args.ProgressPercentage;
            };

            op.AddProgressCallback(
                p =>
            {
                asyncCallbackCalled2 = true;
                progress2            = p;
            },
                null);

            op.AddProgressCallback(pc, null);

            // Act
            op.SetCompleted();

            // Assert
            Assert.True(asyncCallbackCalled);
            Assert.True(asyncCallbackCalled2);
            Assert.Equal(100, progress);
            Assert.Equal(1, progress2);
            pc.Received(1).Report(1);
        }