public void TestAddRangeFromArray() { var spread = new Spread <int>(0); spread.AddRange(sampleData); Assert.AreEqual(sampleData.Length, spread.SliceCount); for (int i = 0; i < sampleData.Length; i++) { Assert.AreEqual(sampleData[i], spread[i]); } }
public void TestAddRangeFromList() { var list = sampleData.ToList(); var spread = new Spread <int>(0); spread.AddRange(list); Assert.AreEqual(list.Count, spread.SliceCount); for (int i = 0; i < list.Count; i++) { Assert.AreEqual(list[i], spread[i]); } }
#pragma warning restore public void Evaluate(int SpreadMax) { if (!FAddNow[0] && !FEditNow[0] && !FDeleteNow[0] && !FClear[0]) { return; } if (FClear[0]) { Store.SliceCount = 0; } if (FEditNow[0]) { int count = Math.Max(FEditIndex.SliceCount, FEdit.SliceCount); for (int i = 0; i < count; i++) { Store[FEditIndex[i]] = FEdit[i]; } } if (FDeleteNow[0]) { var del = FDeleteIndex.ToList(); int size = Store.Count(); for (int i = 0; i < del.Count; i++) { del[i] = VMath.Zmod(del[i], size); } del.Sort(); for (int i = 0; i < del.Count; i++) { Store.RemoveAt(del[i] - i); } } if (FAddNow[0]) { Store.AddRange(FAdd); } FOutput.SliceCount = 0; FOutput.AssignFrom(Store); FOutput.Flush(); }
public void Evaluate(int spreadMax) { FBuffer.ResizeAndDismiss(spreadMax, () => new Spread <double>()); FDelta.SliceCount = spreadMax; //return null if one of the control inputs is null if (FDoInsert.IsAnyEmpty(FFrameCount, FReset)) { FOutput.SliceCount = 0; return; } //Reset the BufferSlice if (FReset.IsChanged) { for (int i = 0; i < spreadMax; i++) { if (FReset[i]) { FBuffer[i] = new Spread <double>(); FDelta[i] = 0; } } } // for (int i = 0; i < spreadMax; i++) { if (FDoInsert[i]) { //insert new values to the buffer FBuffer[i].Insert(0, FInput[i]); //calculate the delta between the first an last slice if (FBuffer[i].SliceCount > 0) { FDelta[i] = (FBuffer[i][0] - FBuffer[i][FBuffer[i].SliceCount - 1]); } } else { if (FBuffer.SliceCount > 0) { if (FBuffer[i].SliceCount > 0) { //add a new caluclate slice via delta to the spread Spread <double> MovedBuffer = new Spread <double>(); ISpread <double> MovedSpread = FBuffer[i].GetRange(0, FBuffer[i].SliceCount - 1); double NewSlice = FBuffer[i][FBuffer[i].SliceCount - 1] + FDelta[i]; MovedBuffer.Add(NewSlice); MovedBuffer.AddRange(MovedSpread); FBuffer[i] = MovedBuffer; } } } //remove slices from the Buffer if the framecount gets smaller if (FFrameCount.IsChanged) { if (FFrameCount[i] >= 0 && FBuffer[i].SliceCount > FFrameCount[i]) { FBuffer[i].RemoveRange(FFrameCount[i], FBuffer[i].SliceCount - FFrameCount[i]); } } } //set the output pins FDeltaOut.AssignFrom(FDelta as ISpread <double>); FOutput.AssignFrom(FBuffer); }