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"); }
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); }