Example #1
0
        public T Generate(object target, Random random)
        {
            var a = First.Generate(target, random);
            var b = Second.Generate(target, random);

            var tuple = new Tuple <T, T>(a, b);

            switch (tuple)
            {
            case Tuple <int, int> pair:
                return((T)(object)(pair.Item1 * pair.Item2));

            case Tuple <uint, uint> pair:
                return((T)(object)(pair.Item1 * pair.Item2));

            case Tuple <float, float> pair:
                return((T)(object)(pair.Item1 * pair.Item2));

            default:
                throw new ArgumentOutOfRangeException("T can't be type " + typeof(T).Name);
            }
        }
        public T Generate(object target, Random random)
        {
            var start = First.Generate(target, random);
            var end   = Second.Generate(target, random);

            var tuple = new Tuple <T, T>(start, end);

            switch (tuple)
            {
            case Tuple <int, int> range:
                return((T)(object)random.Next(range.Item1, range.Item2));

            case Tuple <uint, uint> range:
                var value = (uint)random.Next((int)range.Item1, (int)range.Item2);
                return((T)(object)value);

            case Tuple <float, float> range:
                return((T)(object)random.NextSingle(range.Item1, range.Item2));

            default:
                throw new ArgumentOutOfRangeException("T can't be type " + typeof(T).Name);
            }
        }