/// <summary> /// Get next mutation change (if happend) /// </summary> /// <param name="stream">Stream</param> /// <param name="offset">Offset</param> /// <param name="index">Index</param> public MutationalChange Get(FuzzingStream stream, long offset, int index) { if (ValidOffset?.ItsValid(offset) == false) { return(null); } switch (FuzzPercentType) { case EFuzzingPercentType.PeerByte: { // Check Max changes if (MaxChanges != null && stream.Log.Length >= MaxChanges.Get()) { return(null); } // Check Percent if (FuzzPercent != null) { var value = FuzzPercent.Get(); if (!RandomHelper.IsRandomPercentOk(value)) { return(null); } } // Get Item return(Changes.Get()); } case EFuzzingPercentType.PeerStream: { // Check Max changes var s = (Step)stream.Variables[index]; if (stream.Log.Length >= s.MaxChanges) { return(null); } if (!s.FuzzIndex.Contains(offset)) { return(null); } // Get Item return(Changes.Get()); } default: { throw new ArgumentException(nameof(FuzzPercentType)); } } }