public void ExecuteTests(TestTraceOutput output, Component originalComponent, Component transformedComponent,
								 MethodInfo originalMethod, MethodInfo transformedMethod)
		{
			var parameters = originalMethod.GetParameters();
			var originalArguments = new object[parameters.Length];
			var transformedArguments = new object[parameters.Length];
			var valueFactories = new Func<object>[parameters.Length];

			for (var i = 0; i < parameters.Length; ++i)
			{
				if (parameters[i].ParameterType == typeof(int) || parameters[i].ParameterType == typeof(int).MakeByRefType())
					valueFactories[i] = RandomInt32;
				else if (parameters[i].ParameterType == typeof(double) || parameters[i].ParameterType == typeof(double).MakeByRefType())
					valueFactories[i] = RandomDouble;
				else if (parameters[i].ParameterType == typeof(bool) || parameters[i].ParameterType == typeof(bool).MakeByRefType())
					valueFactories[i] = RandomBoolean;
				else
					Assert.NotReached("Unknown parameter type '{0}'.", parameters[i].ParameterType);
			}

			output.Log("Testing '{0}'", originalMethod);
			for (var i = 0; i < _testCount * 2; ++i)
			{
				output.Trace("----- Inputs -----");
				for (var j = 0; j < originalArguments.Length; ++j)
				{
					originalArguments[j] = valueFactories[j]();
					transformedArguments[j] = originalArguments[j];

					output.Trace("{0} = {1}", parameters[j].Name, originalArguments[j]);
				}

				var originalResult = originalMethod.Invoke(originalComponent, originalArguments);
				var transformedResult = transformedMethod.Invoke(transformedComponent, transformedArguments);

				if (originalResult != null && originalResult.GetType().IsEnum)
				{
					originalResult = ((IConvertible)originalResult).ToInt32(CultureInfo.InvariantCulture);
					transformedResult = ((IConvertible)transformedResult).ToInt32(CultureInfo.InvariantCulture);
				}

				transformedResult.ShouldBe(originalResult);
				transformedArguments.ShouldBe(originalArguments);

				for (var j = 0; j < originalComponent.Metadata.Fields.Length; ++j)
				{
					var originalField = originalComponent.Metadata.Fields[j];
					output.Trace("Comparing field '{0}'", originalField.FieldInfo);

					var transformedField = transformedComponent.Metadata.Fields.Single(f => f.Name == originalField.Name);
					transformedField.FieldInfo.GetValue(transformedComponent).ShouldBe(originalField.FieldInfo.GetValue(originalComponent));
				}
			}
		}
		private void Check(Component c)
		{
			var e = Should.Throw<AnalysisException>(() => CheckInvariant(true, c));
			e.CounterExample.StepCount.ShouldBe(1);

			Should.Throw<InvalidOperationException>(() => SimulateCounterExample(e.CounterExample, simulator => { })).Message.ShouldBe("test");
		}
Exemple #3
0
		internal static void PrefixFaultNames(Component component, string prefix)
		{
			var faults = (from field in component.GetType().GetFields()
						  where typeof(Fault).IsAssignableFrom(field.FieldType)
						  select field.GetValue(component)).Cast<Fault>();
			foreach (var fault in faults)
			{
				fault.Name = $"{prefix}.{fault.Name}";
			}
		}
		private static void AddRootComponents(Model m, Component c)
		{
			m.AddRootComponents(c);
		}