public static Mock<IQuoteStorage> MakeMoq(Dictionary<string, List<CandleData>> candlesM1) { var moq = new Mock<IQuoteStorage>(); moq.Setup(s => s.GetTickersHistoryStarts()).Returns( () => candlesM1.ToDictionary(c => c.Key, c => new DateSpan(c.Value[0].timeOpen, c.Value[c.Value.Count - 1].timeOpen))); moq.Setup(s => s.GetMinuteCandlesPacked(It.IsAny<string>(), It.IsAny<DateTime>(), It.IsAny<DateTime>())) .Returns((string ticker, DateTime start, DateTime end) => { if (!candlesM1.ContainsKey(ticker)) return new PackedCandleStream(new List<CandleDataPacked>(), false); var candles = candlesM1[ticker].Where(c => c.timeOpen >= start && c.timeOpen <= end).Select(c => new CandleDataPacked { open = c.open, timeOpen = c.timeOpen }).ToList(); var stream = new PackedCandleStream(candles, candles.Count > 100); return stream; }); moq.Setup(s => s.GetMinuteCandlesPackedFast(It.IsAny<string>(), It.IsAny<List<Cortege2<DateTime, DateTime>>>())) .Returns(( string symbol, List<Cortege2<DateTime, DateTime>> intervals) => { if (!candlesM1.ContainsKey(symbol)) return new PackedCandleStream(new List<CandleDataPacked>(), false); var candles = new List<CandleDataPacked>(); foreach (var interval in intervals) { candles.AddRange( candlesM1[symbol].Where(c => c.timeOpen >= interval.a && c.timeOpen <= interval.b) .Select(c => new CandleDataPacked { open = c.open, timeOpen = c.timeOpen })); } var stream = new PackedCandleStream(candles, candles.Count > 100); return stream; }); return moq; }
public void TestPackedCandleStream() { var stream = new PackedCandleStream( srcCandles.Select( c => new CandleDataPacked { timeOpen = c.timeOpen, open = c.open, HLC = c.GetHlcOffset16(VersePointValue), close = c.close }).ToList(), true); var parsedCandles = stream.GetCandles().Select(c => { var candle = new CandleData {timeOpen = c.timeOpen, open = c.open, close = c.close}; candle.MakeHlcFromOffset16(c.HLC, VersePointValue); return candle; }).ToList(); for (var candleIndex = 0; candleIndex < srcCandles.Count; candleIndex++) { var candle = srcCandles[candleIndex]; var parsedCandle = parsedCandles[candleIndex]; Assert.AreEqual(candle.high, parsedCandle.high, 0.000001, "TestPackedCandleStream: ParseLine error (high)"); Assert.AreEqual(candle.low, parsedCandle.low, 0.000001, "TestPackedCandleStream: ParseLine error (low)"); Assert.AreEqual(candle.close, parsedCandle.close, 0.000001, "TestPackedCandleStream: ParseLine error (close)"); } }