293 lines
11 KiB
C#
293 lines
11 KiB
C#
using KLHZ.Trader.Core.DataLayer.Entities.Prices;
|
|
using KLHZ.Trader.Core.Math.Declisions.Services.Cache;
|
|
|
|
namespace KLHZ.Trader.Core.Tests
|
|
{
|
|
public class HistoryCacheUnit2Tests
|
|
{
|
|
private static PriceChange[] GetHistory(int count, string figi)
|
|
{
|
|
var res = new PriceChange[count];
|
|
if (count != 0)
|
|
{
|
|
var startDt = DateTime.UtcNow.AddSeconds(-count);
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
startDt = startDt.AddSeconds(1);
|
|
res[i] = new PriceChange()
|
|
{
|
|
Figi = figi,
|
|
Ticker = figi + "_ticker",
|
|
Id = i,
|
|
Time = startDt,
|
|
Price = (decimal)(i + 0.5)
|
|
};
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
|
|
[Test]
|
|
public void Test1()
|
|
{
|
|
var count = 0;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2("", hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count);
|
|
Assert.That(data.timestamps.Length == count);
|
|
}
|
|
|
|
[Test]
|
|
public void Test2()
|
|
{
|
|
var count = 1;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count);
|
|
Assert.That(data.timestamps.Length == count);
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
Assert.That((float)hist[i].Price, Is.EqualTo(data.prices[i]));
|
|
Assert.That(hist[i].Time, Is.EqualTo(data.timestamps[i]));
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Test3()
|
|
{
|
|
var count = 20;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count);
|
|
Assert.That(data.timestamps.Length == count);
|
|
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
Assert.That((float)hist[i].Price, Is.EqualTo(data.prices[i]));
|
|
Assert.That(hist[i].Time, Is.EqualTo(data.timestamps[i]));
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Test4()
|
|
{
|
|
var count = PriceHistoryCacheUnit2.CacheMaxLength;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count);
|
|
Assert.That(data.timestamps.Length == count);
|
|
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
Assert.That((float)hist[i].Price, Is.EqualTo(data.prices[i]));
|
|
Assert.That(hist[i].Time, Is.EqualTo(data.timestamps[i]));
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Test5()
|
|
{
|
|
var shift = 7;
|
|
var count = PriceHistoryCacheUnit2.CacheMaxLength + shift;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count - shift);
|
|
Assert.That(data.timestamps.Length == count - shift);
|
|
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
var k = i + shift;
|
|
if (k < hist.Length)
|
|
{
|
|
Assert.That((float)hist[k].Price, Is.EqualTo(data.prices[i]));
|
|
Assert.That(hist[k].Time, Is.EqualTo(data.timestamps[i]));
|
|
}
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Test6()
|
|
{
|
|
var shift = 10;
|
|
var count = PriceHistoryCacheUnit2.CacheMaxLength + shift;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count - shift);
|
|
Assert.That(data.timestamps.Length == count - shift);
|
|
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
var k = i + shift;
|
|
if (k < hist.Length)
|
|
{
|
|
Assert.That((float)hist[k].Price, Is.EqualTo(data.prices[i]));
|
|
Assert.That(hist[k].Time, Is.EqualTo(data.timestamps[i]));
|
|
}
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Test7()
|
|
{
|
|
var shift = 334;
|
|
var count = PriceHistoryCacheUnit2.CacheMaxLength + shift;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count - shift);
|
|
Assert.That(data.timestamps.Length == count - shift);
|
|
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
var k = i + shift;
|
|
if (k < hist.Length)
|
|
{
|
|
Assert.That((float)hist[k].Price, Is.EqualTo(data.prices[i]));
|
|
Assert.That(hist[k].Time, Is.EqualTo(data.timestamps[i]));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void Test8()
|
|
{
|
|
var count = PriceHistoryCacheUnit2.CacheMaxLength;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
|
|
Assert.That(data.prices.Length == count);
|
|
Assert.That(data.timestamps.Length == count);
|
|
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
Assert.That((float)hist[i].Price, Is.EqualTo(data.prices[i]));
|
|
Assert.That(hist[i].Time, Is.EqualTo(data.timestamps[i]));
|
|
}
|
|
|
|
var newData1 = new PriceChange() { Figi = figi, Ticker = figi, Price = 100500, Time = DateTime.UtcNow };
|
|
|
|
cacheUnit.AddData(newData1);
|
|
|
|
var data2 = cacheUnit.GetData().Result;
|
|
Assert.IsTrue(data2.prices[data2.prices.Length - 1] == newData1.Price);
|
|
Assert.IsTrue(data2.timestamps[data2.timestamps.Length - 1] == newData1.Time);
|
|
|
|
var newData2 = new PriceChange() { Figi = figi, Ticker = figi, Price = 100501, Time = DateTime.UtcNow };
|
|
|
|
cacheUnit.AddData(newData2);
|
|
|
|
var data3 = cacheUnit.GetData().Result;
|
|
Assert.IsTrue(data3.prices[data3.prices.Length - 1] == newData2.Price);
|
|
Assert.IsTrue(data3.timestamps[data3.timestamps.Length - 1] == newData2.Time);
|
|
}
|
|
|
|
[Test]
|
|
public void Test9()
|
|
{
|
|
var cacheUnit = new PriceHistoryCacheUnit2("");
|
|
for (int i = 0; i < 5 * PriceHistoryCacheUnit2.CacheMaxLength; i++)
|
|
{
|
|
cacheUnit.AddData(new PriceChange() { Figi = "", Ticker = "", Price = i, Time = DateTime.UtcNow });
|
|
if (i >= PriceHistoryCacheUnit2.CacheMaxLength)
|
|
{
|
|
var data = cacheUnit.GetData().Result;
|
|
Assert.IsTrue(data.prices.Length == PriceHistoryCacheUnit2.CacheMaxLength);
|
|
Assert.IsTrue(data.prices.Last() == i);
|
|
var lastValues = cacheUnit.GetLastValues().Result;
|
|
Assert.IsTrue(data.prices.Last() == lastValues.price);
|
|
Assert.IsTrue(data.timestamps.Last() == lastValues.time);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Test10()
|
|
{
|
|
var length = 77;
|
|
var shift = 334;
|
|
var count = PriceHistoryCacheUnit2.CacheMaxLength + shift;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData(length).Result;
|
|
|
|
Assert.That(data.prices.Length == length);
|
|
Assert.That(data.timestamps.Length == length);
|
|
|
|
Assert.That(data.prices.Last() == hist.Last().Price);
|
|
Assert.That(data.timestamps.Last() == hist.Last().Time);
|
|
for (var i = 1; i <= length; i++)
|
|
{
|
|
Assert.That(hist[hist.Length - i].Price, Is.EqualTo(data.prices[data.prices.Length - i]));
|
|
Assert.That(hist[hist.Length - i].Time, Is.EqualTo(data.timestamps[data.prices.Length - i]));
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void Test11()
|
|
{
|
|
var length = 77;
|
|
var shift = 334;
|
|
var count = PriceHistoryCacheUnit2.CacheMaxLength + shift;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData(length).Result;
|
|
var span = TimeSpan.FromSeconds(100);
|
|
var dataForPeriod = cacheUnit.GetData(span).Result;
|
|
|
|
Assert.That(dataForPeriod.isFullIntervalExists);
|
|
Assert.That(data.prices.Last() == dataForPeriod.prices.Last());
|
|
Assert.That(data.timestamps.Last() == dataForPeriod.timestamps.Last());
|
|
var dt = dataForPeriod.timestamps.Last() - dataForPeriod.timestamps.First();
|
|
Assert.That(dt <= span);
|
|
Assert.That(data.prices.Length == length);
|
|
Assert.That(data.timestamps.Length == length);
|
|
|
|
Assert.That(data.prices.Last() == hist.Last().Price);
|
|
Assert.That(data.timestamps.Last() == hist.Last().Time);
|
|
}
|
|
|
|
[Test]
|
|
public void Test12()
|
|
{
|
|
var count = 30;
|
|
var figi = "figi";
|
|
var hist = GetHistory(count, figi);
|
|
var cacheUnit = new PriceHistoryCacheUnit2(figi, hist);
|
|
var data = cacheUnit.GetData().Result;
|
|
var span = TimeSpan.FromSeconds(100);
|
|
var dataForPeriod = cacheUnit.GetData(span).Result;
|
|
|
|
Assert.IsFalse(dataForPeriod.isFullIntervalExists);
|
|
Assert.That(data.prices.Last() == dataForPeriod.prices.Last());
|
|
Assert.That(data.timestamps.Last() == dataForPeriod.timestamps.Last());
|
|
|
|
Assert.That(data.prices.First() == dataForPeriod.prices.First());
|
|
Assert.That(data.timestamps.First() == dataForPeriod.timestamps.First());
|
|
}
|
|
}
|
|
} |