/// <summary>
        /// Initializes a new instance of the <see cref="DistanceBasedFireworkSelector"/> class.
        /// </summary>
        /// <param name="distanceCalculator">The distance calculator.</param>
        /// <param name="extremumFireworkSelector">The extremum firework selector.</param>
        /// <param name="locationsNumber">The number of <see cref="Firework"/>s to be selected.</param>
        /// <exception cref="System.ArgumentNullException"> if <paramref name="distanceCalculator"/>
        /// or <paramref name="extremumFireworkSelector"/> is <c>null</c>.
        /// </exception>
        public DistanceBasedFireworkSelector(IDistance distanceCalculator, IExtremumFireworkSelector extremumFireworkSelector, int locationsNumber)
            : base(locationsNumber)
        {
            if (distanceCalculator == null)
            {
                throw new ArgumentNullException(nameof(distanceCalculator));
            }

            if (extremumFireworkSelector == null)
            {
                throw new ArgumentNullException(nameof(extremumFireworkSelector));
            }

            this.distanceCalculator       = distanceCalculator;
            this.extremumFireworkSelector = extremumFireworkSelector;
        }
Example #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Exploder"/> class.
        /// </summary>
        /// <param name="settings">The exploder settings.</param>
        /// <param name="extremumFireworkSelector">The extremum firework selector.</param>
        /// <exception cref="System.ArgumentNullException"> if <paramref name="settings"/>
        /// or <paramref name="extremumFireworkSelector"/> is <c>null</c>.</exception>
        public Exploder(ExploderSettings settings, IExtremumFireworkSelector extremumFireworkSelector)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (extremumFireworkSelector == null)
            {
                throw new ArgumentNullException(nameof(extremumFireworkSelector));
            }

            this.settings = settings;
            this.extremumFireworkSelector = extremumFireworkSelector;

            this.minAllowedExplosionSparksNumberExact = settings.ExplosionSparksNumberLowerBound * settings.ExplosionSparksNumberModifier;
            this.maxAllowedExplosionSparksNumberExact = settings.ExplosionSparksNumberUpperBound * settings.ExplosionSparksNumberModifier;
            this.minAllowedExplosionSparksNumber      = (int)Math.Round(this.minAllowedExplosionSparksNumberExact, MidpointRounding.AwayFromZero);
            this.maxAllowedExplosionSparksNumber      = (int)Math.Round(this.maxAllowedExplosionSparksNumberExact, MidpointRounding.AwayFromZero);
        }
Example #3
0
 public ExploderTests()
 {
     this.extremumFireworkSelector = new ExtremumFireworkSelector(ProblemTarget.Minimum);
     this.exploder = new Exploder(new ExploderSettings(), this.extremumFireworkSelector);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DistanceBasedFireworkSelector"/> class.
 /// </summary>
 /// <param name="distanceCalculator">The distance calculator.</param>
 /// <param name="extremumFireworkSelector">The extremum firework selector.</param>
 /// <remarks>It is assumed that number of <see cref="Firework"/>s to be selected
 /// differs from step to step and hence is passed to the <c>Select</c> method.</remarks>
 public DistanceBasedFireworkSelector(IDistance distanceCalculator, IExtremumFireworkSelector extremumFireworkSelector)
     : this(distanceCalculator, extremumFireworkSelector, 0)
 {
 }