public Task SelectTests(StructuralDelta <TestsModel <TTestCase>, TTestCase> testsDelta, TProgramDelta programDelta,
                                CancellationToken cancellationToken)
        {
            var delta = deltaAdapter.Convert(programDelta);

            CorrespondenceModel = correspondenceModelProvider.GetCorrespondenceModel(delta.OldModel, testsDelta.OldModel);

            ISet <TTestCase> impactedTests = new HashSet <TTestCase>();

            foreach (var testcase in testsDelta.NewModel.TestSuite)
            {
                cancellationToken.ThrowIfCancellationRequested();

                HashSet <string> linkedElements;
                if (CorrespondenceModel.CorrespondenceModelLinks.TryGetValue(testcase.Id, out linkedElements))
                {
                    if (delta.ChangedElements.Any(x => linkedElements.Any(y => x.Id.Equals(y, StringComparison.Ordinal))) ||
                        delta.DeletedElements.Any(x => linkedElements.Any(y => x.Id.Equals(y, StringComparison.Ordinal))))
                    {
                        impactedTests.Add(testcase);
                    }
                }
                else
                {
                    impactedTests.Add(testcase);
                }
            }

            SelectedTests = impactedTests;

            return(Task.CompletedTask);
        }