public void CombinesDataBlocks( [Values(100, 500, 1000, 5000)] double blockMilliseconds, [Values(5000, 10000)] double sampleRateHz, [Values(1, 4)] int numStim ) { var parameters = new Dictionary<string, object>(); var sampleRate = new Measurement((decimal)sampleRateHz, "Hz"); var data = new List<IOutputData>(); var stimuli = new List<IStimulus>(); for (int i = 0; i < numStim; i++) { IOutputData d = new OutputData(Enumerable.Range(0, (int)TimeSpan.FromSeconds(3).Samples(new Measurement((decimal)sampleRateHz, "Hz"))) .Select(j => new Measurement(j, "units")).ToList(), sampleRate, false); data.Add(d); stimuli.Add(new RenderedStimulus((string)"RenderedStimulus" + i, (IDictionary<string, object>)parameters, d)); } var combined = new CombinedStimulus("CombinedStimulus", new Dictionary<string, object>(), stimuli, CombinedStimulus.Add); var blockSpan = TimeSpan.FromMilliseconds(blockMilliseconds); IEnumerator<IOutputData> iter = combined.DataBlocks(blockSpan).GetEnumerator(); while (iter.MoveNext()) { IOutputData expectedData = null; foreach (var d in data.ToList()) { var cons = d.SplitData(blockSpan); data[data.IndexOf(d)] = cons.Rest; expectedData = expectedData == null ? cons.Head : expectedData.Zip(cons.Head, (m1, m2) => new Measurement(m1.QuantityInBaseUnits + m2.QuantityInBaseUnits, 0, m1.BaseUnits)); } Assert.That(iter.Current.Duration, Is.EqualTo(expectedData.Duration)); Assert.That(iter.Current.Data, Is.EqualTo(expectedData.Data)); } }
public void MarksAsNotLastIfMoreBlocks() { var parameters = new Dictionary<string, object>(); var sampleRate = new Measurement(1000, "Hz"); IOutputData data = new OutputData(Enumerable.Range(0, 1000).Select(i => new Measurement(i, "units")).ToList(), sampleRate, true); var s1 = new RenderedStimulus("stim1", new Dictionary<string, object>(), data); var s2 = new RenderedStimulus("stim2", new Dictionary<string, object>(), data); var combine = new CombinedStimulus("CombinedStimulus", new Dictionary<string, object>(), new List<IStimulus>() { s1, s2 }, CombinedStimulus.Add); var block = TimeSpan.FromMilliseconds(100); IEnumerator<IOutputData> iter = combine.DataBlocks(block).GetEnumerator(); Assert.True(iter.MoveNext()); Assert.False(iter.Current.IsLast); }