public Mutator CreateMutator(int?seed, MutatorParameters parameters) { var mutator = new Mutator(this, seed, parameters); _mutators.Add(mutator); return(mutator); }
public Mutator(IMutatorContext ctx, int?seed, MutatorParameters parameters) { _ctx = ctx; _params = parameters; _rnd = new Random(seed ?? Environment.TickCount); ctx.Runtime.SpliceObjRefs += this.SpliceObject; }
private static void DoWork(IAutoMemoryManagerFabric gcFabric, GcSimulatorConfigurationType cfg) { Console.WriteLine("Using GC " + gcFabric.Name); var p = new MutatorParameters(); foreach (var item in cfg.Probabilities.Items.OrderBy(e => e.StackDepth)) { var entry = new MutatorParametersEntry(); entry.StackDepth = item.StackDepth; foreach (var attr in item.AnyAttr) { if (Enum.TryParse <MutatorActionKind>(attr.LocalName, true, out var actionKind) && int.TryParse(attr.Value, out var value)) { entry.SetValue(actionKind, value); } } p.Add(entry); } ////var p = new MutatorParameters() { //// // stackDepth, //// // | callProbability, //// // | | returnProbability, //// // | | | newobjProbability, //// // | | | | putStatic, //// // | | | | | changeStatic, //// // | | | | | | eraseStatic, //// // | | | | | | | putRefProbability, //// // | | | | | | | | changeRefProbability, //// // | | | | | | | | | eraseRefProbabilty //// // | | | | | | | | | | //// { 0, 100, 0, 75, 10, 10, 10, 90, 90, 90 }, //// { 100, 100, 100, 75, 10, 10, 10, 90, 90, 90 } ////}; ////p.Mode = MutatorParametersModeKind.Sequence; //var p = new MutatorParameters() { // // stackDepth, // // | callProbability, // // | | returnProbability, // // | | | newobjProbability, // // | | | | putStatic, // // | | | | | changeStatic, // // | | | | | | eraseStatic, // // | | | | | | | putRefProbability, // // | | | | | | | | changeRefProbability, // // | | | | | | | | | eraseRefProbabilty // // | | | | | | | | | | // { 0, 20, 00, 20, 10, 10, 10, 10, 10, 10 }, // { 100, 10, 10, 20, 10, 10, 10, 10, 10, 10 }, //}; //p.Mode = MutatorParametersModeKind.Flat; using (var runtime = new RuntimeGlobalAccessorImpl(gcFabric)) { var mutatorCtx = new MutatorContext(runtime); var m = mutatorCtx.CreateMutator(null, p); var mutatorWorkingEv = new ManualResetEvent(true); runtime.GetRoots += () => m.GetRoots().ToArray(); runtime.StopRequested += () => mutatorWorkingEv.Reset(); runtime.StopReleased += () => mutatorWorkingEv.Set(); var mutatorThread = new Thread(() => { foreach (var item in m.DoWork()) { Console.WriteLine(item); mutatorWorkingEv.WaitOne(); } }); mutatorThread.Start(); mutatorThread.Join(); } }