Beispiel #1
0
 public FromDistributionAttribute(Type type, params object[] parameters)
 {
     if (parameters.Length > 2)
     {
         throw new ArgumentException($"{type} can't have wrong arguments.");
     }
     Distribution = (IContinousDistribution)Activator.CreateInstance(type, parameters);
 }
 public FromDistributionAttribute(Type distribution, params object[] values)
 {
     if (values.Length > 2)
     {
         throw new ArgumentException("NormalDistribution must Contain 2 arguments");
     }
     Distribution = (IContinousDistribution)Activator.CreateInstance(distribution, values);
 }
Beispiel #3
0
 public FromDistribution(Type type, params object[] args)
 {
     try {
         Distribution = (IContinousDistribution)Activator.CreateInstance(type, args);
     }
     catch (Exception) {
         throw new ArgumentException(type.Name);
     }
 }
 public FromDistribution(Type type, params object[] args)
 {
     try {
         Distribution = (IContinousDistribution)Activator.CreateInstance(type, args);
     }
     catch (MissingMethodException) {
         throw new ArgumentException($"Ctor with parameters {string.Join(", ", args)} for type {type} not found");
     }
 }
Beispiel #5
0
            public Generator <T> Set(IContinousDistribution distribution)
            {
                if (_properties.ContainsKey(_selectedName))
                {
                    _properties[_selectedName] = distribution;
                }

                return(new Generator <T>(_properties));
            }
        private void AssertPropertyFilledWithDistribution(double actualValue, IContinousDistribution distribution)
        {
            var random        = new Random(seed);
            var sequenceStart = new[] { distribution.Generate(random), distribution.Generate(random), distribution.Generate(random), distribution.Generate(random), distribution.Generate(random) };

            random = new Random(seed);
            random.NextDouble();
            var sequence = sequenceStart.Concat(new[] { distribution.Generate(random), distribution.Generate(random), distribution.Generate(random), distribution.Generate(random), distribution.Generate(random) });

            Assert.That(sequence, Does.Contain(actualValue));
        }
Beispiel #7
0
 public Generator <TParameter> Set(IContinousDistribution continousDistribution)
 {
     if (Generator <TParameter> .dictionaryDistribution.ContainsKey(SetProperty))
     {
         Generator <TParameter> .dictionaryDistribution[SetProperty] = continousDistribution;
     }
     else
     {
         throw new ArgumentException();
     }
     return(Generator);
 }
Beispiel #8
0
        public Generator <T> Set(IContinousDistribution distribution)
        {
            var properties = typeof(T).GetProperties();

            for (int i = 0; i < properties.Length; i++)
            {
                if (properties[i].Name == propertyHandler)
                {
                    DictOfProperties[properties[i]] = distribution;
                    break;
                }
            }
            return(this);
        }
Beispiel #9
0
 public static Generator <T> Set <T>(this Config <T> config, IContinousDistribution distribution) where T : new()
 {
     foreach (var property in config.propertyNames)
     {
         if (config.generator.distributions.ContainsKey(property))
         {
             config.generator.distributions[property] = distribution;
         }
         else
         {
             config.generator.distributions.Add(property, distribution);
         }
     }
     return(config.generator);
 }
        public static Generator <T> Set <T>(
            this Tuple <Generator <T>, PropertyInfo> pair,
            IContinousDistribution distribution)
            where T : new()
        {
            PropertyInfo key = null;

            foreach (var e in pair.Item1.Properties)
            {
                if (e.Key.Name == pair.Item2.Name)
                {
                    key = e.Key;
                }
            }

            pair.Item1.Properties[key] = distribution;
            return(pair.Item1);
        }
Beispiel #11
0
        public Generator()
        {
            _properties = new Dictionary <string, IContinousDistribution>();
            foreach (var propertyInfo in typeof(T).GetProperties())
            {
                var attr = propertyInfo.GetCustomAttributes <FromDistribution>().SingleOrDefault();
                if (attr == null)
                {
                    _properties.Add(propertyInfo.Name, null);
                }
                else
                {
                    IContinousDistribution instance = null;
                    if (attr.Type == typeof(NormalDistribution))
                    {
                        if (attr.Parameters.Length != 0 && attr.Parameters.Length != 2)
                        {
                            throw new ArgumentException("NormalDistribution");
                        }

                        instance = attr.Parameters.Length == 0
                            ? (IContinousDistribution)Activator.CreateInstance(attr.Type)
                            : (IContinousDistribution)Activator.CreateInstance(attr.Type,
                                                                               new object[] { attr.Parameters[0], attr.Parameters[1] });
                    }
                    else if (attr.Type == typeof(ExponentialDistribution))
                    {
                        if (attr.Parameters.Length != 1)
                        {
                            throw new ArgumentException("ExponentialDistribution");
                        }

                        instance = (IContinousDistribution)Activator.CreateInstance(attr.Type,
                                                                                    new object[] { attr.Parameters[0] });
                    }
                    else
                    {
                        throw new ArgumentException();
                    }

                    _properties.Add(propertyInfo.Name, instance);
                }
            }
        }
Beispiel #12
0
        public T Generate(Random rnd)
        {
            T e = new T();

            foreach (var prop in properties)
            {
                var curAttr = (FromDistributionAttribute)prop.GetCustomAttribute(typeof(FromDistributionAttribute));
                IContinousDistribution rndDistrib = null;
                if (Distributions.ContainsKey(prop))
                {
                    rndDistrib = Distributions[prop];
                }
                else if (curAttr != null)
                {
                    rndDistrib = curAttr.Distribution;
                }
                else
                {
                    continue;
                }
                prop.SetValue(e, rndDistrib.Generate(rnd));
            }
            return(e);
        }
Beispiel #13
0
 public static Generator <T> Set <T>(this CustomGenerator <T> customGenerator, IContinousDistribution newDistribution) where T : new()
 {
     Generator <T> .Distributions[customGenerator.PointedProperty] = newDistribution;
     return(customGenerator.Generator);
 }
 /// <summary>
 /// Добавляет свойство
 /// объекта в словарь
 /// генератора
 /// </summary>
 /// <param name="distribution">
 /// Распределение
 /// </param>
 /// <returns>
 /// Генератор случайных чисел
 /// данного временного объекта
 /// </returns>
 public Generator <T> Set(IContinousDistribution distribution)
 {
     generator.Dictionary.Add(this.property, distribution);
     return(generator);
 }
Beispiel #15
0
 public Generator <T> Set(IContinousDistribution distribution)
 {
     mainGenerator.customizableProperties[propertyName] = distribution;
     return(mainGenerator);
 }
Beispiel #16
0
 public Generator <T> Set(IContinousDistribution distribution)
 {
     _parent._propertiesToDistribution[_propertyName] = distribution;
     _parent._needToRecompileBuildingFunc             = true;
     return(_parent);
 }
 public Generator <T> Set(IContinousDistribution distribution)
 {
     Distribution = distribution;
     return(Generator);
 }
 public Generator <T> Set(IContinousDistribution distribution)
 {
     _currentGenerator.dynamicDictionary.Add(_classProperty, distribution);
     return(_currentGenerator);
 }