/// <inheritdoc/> public Selections Solve(Requirements requirements) { #region Sanity checks if (requirements == null) { throw new ArgumentNullException("requirements"); } if (requirements.InterfaceUri == null) { throw new ArgumentException(Resources.MissingInterfaceUri, "requirements"); } #endregion Log.Info("Running Backtracking Solver for: " + requirements); var effectiveRequirements = requirements.GetEffective(); var candidateProvider = new SelectionCandidateProvider(_config, _feedManager, _store, _packageManager); var solverRuns = effectiveRequirements.Select(x => new BacktrackingSolverRun(x, _handler.CancellationToken, candidateProvider)); var successfullSolverRun = solverRuns.FirstOrDefault(x => x.TryToSolve()); if (successfullSolverRun == null) { throw new SolverException("No solution found"); } successfullSolverRun.Selections.PurgeRestrictions(); return(successfullSolverRun.Selections); }
/// <summary> /// Creates a new backtracking solver run. /// </summary> /// <param name="requirements">The top-level requirements the solver should try to meet.</param> /// <param name="cancellationToken">Used to signal when the user wishes to cancel the solver run.</param> /// <param name="candidateProvider">Generates <see cref="SelectionCandidate"/>s for the solver to choose among.</param> public Pass([NotNull] Requirements requirements, CancellationToken cancellationToken, [NotNull] SelectionCandidateProvider candidateProvider) { #region Sanity checks if (requirements == null) throw new ArgumentNullException(nameof(requirements)); #endregion _cancellationToken = cancellationToken; _candidateProvider = candidateProvider; _topLevelRequirements = requirements; Selections.InterfaceUri = requirements.InterfaceUri; Selections.Command = requirements.Command; }
/// <summary> /// Creates a new backtracking solver run. /// </summary> /// <param name="requirements">The top-level requirements the solver should try to meet.</param> /// <param name="cancellationToken">Used to signal when the user wishes to cancel the solver run.</param> /// <param name="candidateProvider">Generates <see cref="SelectionCandidate"/>s for the solver to choose among.</param> public Pass([NotNull] Requirements requirements, CancellationToken cancellationToken, [NotNull] SelectionCandidateProvider candidateProvider) { #region Sanity checks if (requirements == null) { throw new ArgumentNullException(nameof(requirements)); } #endregion _cancellationToken = cancellationToken; _candidateProvider = candidateProvider; _topLevelRequirements = requirements; Selections.InterfaceUri = requirements.InterfaceUri; Selections.Command = requirements.Command; }
/// <summary> /// Creates a new backtracking solver run. /// </summary> /// <param name="requirements">The top-level requirements the solver should try to meet.</param> /// <param name="cancellationToken">Used to signal when the user wishes to cancel the solver run.</param> /// <param name="candidateProvider">Generates <see cref="SelectionCandidate"/>s for the solver to choose among.</param> public BacktrackingSolverRun(Requirements requirements, CancellationToken cancellationToken, SelectionCandidateProvider candidateProvider) { #region Sanity checks if (requirements == null) { throw new ArgumentNullException("requirements"); } #endregion _cancellationToken = cancellationToken; _candidateProvider = candidateProvider; _topLevelRequirements = requirements; Selections.InterfaceUri = requirements.InterfaceUri; Selections.Command = requirements.Command; }
/// <inheritdoc/> public Selections Solve(Requirements requirements) { #region Sanity checks if (requirements == null) throw new ArgumentNullException(nameof(requirements)); if (requirements.InterfaceUri == null) throw new ArgumentException(Resources.MissingInterfaceUri, nameof(requirements)); #endregion Log.Info("Running Backtracking Solver for: " + requirements); var effectiveRequirements = requirements.GetEffective(); var candidateProvider = new SelectionCandidateProvider(_config, _feedManager, _store, _packageManager, requirements.Languages); var solverRuns = effectiveRequirements.Select(x => new Pass(x, _handler.CancellationToken, candidateProvider)); var successfullSolverRun = solverRuns.FirstOrDefault(x => x.TryToSolve()); if (successfullSolverRun == null) throw new SolverException("No solution found"); successfullSolverRun.Selections.PurgeRestrictions(); successfullSolverRun.Selections.Implementations.Sort(); return successfullSolverRun.Selections; }
public SelectionCandidateProviderTest() { _feedManagerMock = CreateMock <IFeedManager>(); _packageManagerMock = CreateMock <IPackageManager>(); _provider = new SelectionCandidateProvider(new Config(), _feedManagerMock.Object, new Mock <IImplementationStore>(MockBehavior.Loose).Object, _packageManagerMock.Object); }