Refactoring DataStream

This commit is contained in:
Michael Schimmel
2025-06-07 16:41:46 +02:00
parent 590e98d614
commit 776067d0a8
9 changed files with 708 additions and 1028 deletions
+13 -10
View File
@@ -10,8 +10,7 @@ uses
Myc.Lazy,
Myc.Futures,
Myc.Trade.DataPoint,
Myc.Trade.DataSeries,
Myc.Trade.DataServer;
Myc.Trade.DataStream;
type
// Test fixture for TDataServer and TAuraTABFileServer, focusing on data equivalence
@@ -20,7 +19,8 @@ type
[IgnoreMemoryLeaks(true)]
TTest_TABFileServer_Equivalence = class(TObject)
private
FServer: IDataServer<TDataPoint<TAskBidItem>>;
FServer: IDataServer<TAskBidItem>;
FStream: IDataStream<TDataPoint<TAskBidItem>>;
public
[SetupFixture]
procedure SetupFixture;
@@ -50,12 +50,15 @@ const
procedure TTest_TABFileServer_Equivalence.SetupFixture;
begin
FServer := TAskBidServer.Create;
// TAskBid.ClearCache ensures a clean state for data series loading.
TAskBid.ClearCache;
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;
@@ -63,15 +66,15 @@ end;
procedure TTest_TABFileServer_Equivalence.Setup;
begin
// Initializes the data server with a specific test file.
FServer := TAuraTABFileServer.Create(C_TEST_FILENAME);
FStream := TAuraTABFileStream.Create(C_TEST_FILENAME, FServer);
end;
procedure TTest_TABFileServer_Equivalence.TearDown;
begin
// Releases the data server instance.
FServer := nil;
FStream := nil;
// Clears any cached data to prevent interference with subsequent tests.
TAskBid.ClearCache;
FServer.ClearCache;
end;
procedure TTest_TABFileServer_Equivalence.Test_ServerReturnsSameDataAs_LoadDataSeries;
@@ -81,15 +84,15 @@ var
i: Int64;
begin
// Loads the expected data directly using TAskBid.LoadDataSeries.WaitFor.
var ExpectedData := TAskBid.LoadDataSeries(C_TEST_FILENAME).WaitFor;
var ExpectedData := FServer.LoadDataSeries(C_TEST_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 FServer.IsLiveData.Value and (cnt < Length(Dst)) do
while not FStream.IsLiveData.Value and (cnt < Length(Dst)) do
begin
n := FServer.GetChunk(chunk);
n := FStream.GetChunk(chunk);
if n > 0 then
Move(chunk[0], dst[cnt], n * sizeof(TDataPoint<TAskBidItem>));
inc(cnt, n);