implementing DataStream
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
unit Myc.Test.Trade.DataStream;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
System.SysUtils,
|
||||
System.Generics.Collections,
|
||||
DUnitX.TestFramework,
|
||||
Myc.Signals,
|
||||
Myc.Lazy,
|
||||
Myc.Futures,
|
||||
Myc.Trade.DataPoint,
|
||||
Myc.Trade.DataStream;
|
||||
|
||||
type
|
||||
// Test fixture for TDataServer and TAuraTABFileServer, focusing on data equivalence
|
||||
// with TDataSeries.LoadDataSeries.
|
||||
[TestFixture]
|
||||
[IgnoreMemoryLeaks(true)]
|
||||
TTest_TABFileServer_Equivalence = class(TObject)
|
||||
private
|
||||
FServer: IAuraDataServer<TAskBidItem>;
|
||||
FStream: IDataStream<TAskBidItem>;
|
||||
public
|
||||
[SetupFixture]
|
||||
procedure SetupFixture;
|
||||
[Setup]
|
||||
procedure Setup;
|
||||
[TearDown]
|
||||
procedure TearDown;
|
||||
[TearDownFixture]
|
||||
procedure TearDownFixture;
|
||||
|
||||
[Test]
|
||||
procedure Test_ServerReturnsSameDataAs_LoadDataSeries;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Myc.TaskManager;
|
||||
|
||||
const
|
||||
// The reference data file for this test.
|
||||
C_TEST_PATH = '\\COFFEE\TickData\Pepperstone';
|
||||
C_TEST_SYMBOL = 'GER40';
|
||||
// The chunk size for fetching data from the server.
|
||||
C_MAX_FETCH = 200;
|
||||
|
||||
{ TTest_TABFileServer_Equivalence }
|
||||
|
||||
procedure TTest_TABFileServer_Equivalence.SetupFixture;
|
||||
begin
|
||||
FServer := TAuraTABFileServer.Create(C_TEST_PATH);
|
||||
// TAskBid.ClearCache ensures a clean state for data series loading.
|
||||
FServer.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TTest_TABFileServer_Equivalence.TearDownFixture;
|
||||
begin
|
||||
FServer := nil;
|
||||
|
||||
// Resets the global IsMemoryLow function pointer, if it was set for testing.
|
||||
IsMemoryLow := nil;
|
||||
end;
|
||||
|
||||
procedure TTest_TABFileServer_Equivalence.Setup;
|
||||
begin
|
||||
// Initializes the data server with a specific test file.
|
||||
FStream := FServer.CreateStream(C_TEST_SYMBOL);
|
||||
end;
|
||||
|
||||
procedure TTest_TABFileServer_Equivalence.TearDown;
|
||||
begin
|
||||
// Releases the data server instance.
|
||||
FStream := nil;
|
||||
// Clears any cached data to prevent interference with subsequent tests.
|
||||
FServer.ClearCache;
|
||||
end;
|
||||
|
||||
procedure TTest_TABFileServer_Equivalence.Test_ServerReturnsSameDataAs_LoadDataSeries;
|
||||
var
|
||||
chunk: array[0..C_MAX_FETCH - 1] of TDataPoint<TAskBidItem>;
|
||||
Dst: TArray<TDataPoint<TAskBidItem>>;
|
||||
i: Int64;
|
||||
begin
|
||||
// Loads the expected data directly using TAskBid.LoadDataSeries.WaitFor.
|
||||
|
||||
var Filename := TAuraTABFileServer.FindFirstDataFile(C_TEST_PATH, C_TEST_SYMBOL);
|
||||
|
||||
Assert.IsNotEmpty(Filename);
|
||||
|
||||
var ExpectedData := FServer.LoadDataSeries(Filename).WaitFor;
|
||||
SetLength(Dst, Length(ExpectedData));
|
||||
|
||||
var cnt: Int64 := 0;
|
||||
var n: Integer;
|
||||
// Fetches data chunks from the server until all data is retrieved or server indicates live data.
|
||||
while not FStream.IsLiveData.Value and (cnt < Length(Dst)) do
|
||||
begin
|
||||
n := FStream.GetChunk(chunk);
|
||||
if n > 0 then
|
||||
Move(chunk[0], dst[cnt], n * sizeof(TDataPoint<TAskBidItem>));
|
||||
inc(cnt, n);
|
||||
end;
|
||||
|
||||
// --- Assertions ---
|
||||
|
||||
// 1. Verify that the total number of records fetched from the server matches the expected count.
|
||||
Assert.AreEqual(Length(ExpectedData), cnt, 'Data record count mismatch');
|
||||
|
||||
// 2. Verify that the content of each record is identical.
|
||||
// The loop checks every 1000th element for efficiency.
|
||||
for n := 0 to High(ExpectedData) div 1000 do
|
||||
begin
|
||||
i := n * 1000;
|
||||
Assert.AreEqual(ExpectedData[i].TimeStamp, Dst[i].Time, 'Timestamp mismatch');
|
||||
Assert.AreEqual(ExpectedData[i].Data.Ask, Dst[i].Data.Ask, 'Ask price mismatch');
|
||||
Assert.AreEqual(ExpectedData[i].Data.Bid, Dst[i].Data.Bid, 'Bid price mismatch');
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
// Registers the test fixture with DUnitX.
|
||||
TDUnitX.RegisterTestFixture(TTest_TABFileServer_Equivalence);
|
||||
end.
|
||||
Reference in New Issue
Block a user