#region Using Statements using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; #endregion // Using Statements // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license namespace ANX.Framework.TestCenter { class DataFactory { static Random r = new Random(); public static object[] createFullTestSet(int numberOfElements) where T : struct, IComparable, IEquatable, IConvertible { return createFullTestSet(numberOfElements, 0); } public static object[] createFullTestSet(int numberOfElements, int numberOfRandomSets) where T : struct, IComparable, IEquatable, IConvertible { T maxValue = ReadStaticField("MaxValue"); T MinValue = ReadStaticField("MinValue"); object[] random = new object[numberOfRandomSets]; for (int i = 0; i < numberOfRandomSets; ++i) { } return createLinear(0, numberOfElements).Concat( createLinear(1, numberOfElements).Concat( createPermutation(maxValue, MinValue, numberOfElements).Concat( createPermutation(maxValue, 0, numberOfElements).Concat( createPermutation(0, MinValue, numberOfElements))))).ToArray(); } /// /// Create a test dataset filled with constant numbers /// /// Number which should fill the test set /// How many values are needed /// public static object[] createLinear(object value, int numberOfElements) { object[] result = new object[numberOfElements]; for (int i = 0; i < numberOfElements; ++i) result[i] = value; return result; } /// /// Create a test-dataset with a permutation of extreme value /// /// max. extreme /// min. extreme /// how many elements are used in test /// test bundle with numberOfElements*numberOfElements test sets public static object[] createPermutation(object maxValue, object minValue, int numberOfElements) { object[] valuePair = { maxValue, minValue }; int testCaseCount = (int)Math.Pow(numberOfElements, 2); object[,] matrix = new object[numberOfElements, testCaseCount]; for (int x = 0; x < numberOfElements; ++x) { int counter = 0; int value = 0; for (int y = 0; y < testCaseCount; ++y) { matrix[x, y] = valuePair[value]; counter++; if (counter > x) { counter = 0; if (value == 0) value = 1; else value = 0; } } } object[] result = new object[testCaseCount]; for (int y = 0; y < testCaseCount; ++y) { object[] line = new object[numberOfElements]; for (int x = 0; x < numberOfElements; ++x) { line[x] = matrix[x, y]; } result[y] = line; } return result; } private static T ReadStaticField(string name) { FieldInfo field = typeof(T).GetField(name, BindingFlags.Public | BindingFlags.Static); if (field == null) { // There's no TypeArgumentException, unfortunately. You might want // to create one :) throw new InvalidOperationException("Invalid type argument for NumericUpDown: " + typeof(T).Name); } return (T)field.GetValue(null); } #region OLD static object[] generateTestData(int numOfTests, int numOfElements, int min, int max) { object[] result = new object[numOfTests]; object[] testRun = new object[numOfElements]; for (int run = 0; run < numOfTests; ++run) { for (int data = 0; data < numOfElements; ++data) { testRun[data] = r.Next(min, max); } result[run] = testRun; } return result; } public static float RandomNormalizedFloat { get { return 1.0f / MathHelper.Clamp(RandomFloat, float.Epsilon, float.MaxValue); } } public static float RandomFloat { get { return (float)(r.NextDouble() * (float.MaxValue - 1) - r.NextDouble() * (float.MinValue + 1)); } } public static int RandomBitPlus { get { return r.Next(3) - 1; } } public static float RandomValue { get { return r.Next(1000) * RandomBitPlus; } } public static float RandomValueMinMax(float min, float max) { return (float)r.Next((int)min, (int)max) * (float)r.NextDouble(); } public static int RandomIntValueMinMax(int min, int max) { return r.Next(min, max); } public static int RandomInt { get { return r.Next(int.MaxValue); } } #endregion } }