Refactoring
This commit is contained in:
+15
-15
@@ -16,9 +16,9 @@ type
|
||||
// Helper class to notify a latch when its Notify method is called.
|
||||
TLatchNotifierSubscriber = class(TInterfacedObject, IMycSubscriber)
|
||||
private
|
||||
FGateLatch: IMycEvent;
|
||||
FGateLatch: IMycLatch;
|
||||
public
|
||||
constructor Create(AGateLatch: IMycEvent);
|
||||
constructor Create(AGateLatch: IMycLatch);
|
||||
// IMycSubscriber
|
||||
function Notify: Boolean; // Implements IMycSubscriber.Notify [cite: 46, 181, 299]
|
||||
end;
|
||||
@@ -54,7 +54,7 @@ implementation
|
||||
|
||||
{ TLatchNotifierSubscriber }
|
||||
|
||||
constructor TLatchNotifierSubscriber.Create(AGateLatch: IMycEvent);
|
||||
constructor TLatchNotifierSubscriber.Create(AGateLatch: IMycLatch);
|
||||
begin
|
||||
inherited Create;
|
||||
FGateLatch := AGateLatch;
|
||||
@@ -121,12 +121,12 @@ end;
|
||||
procedure TTestMycGateFuncFuture.Test_ChainedExecution_WithDelayedInitState;
|
||||
var
|
||||
LFuture: IMycFuture<string>;
|
||||
LInitLatch: IMycEvent;
|
||||
LInitLatch: IMycLatch;
|
||||
LResultValue: string;
|
||||
const
|
||||
CExpectedResult = 'ChainCompleted';
|
||||
begin
|
||||
LInitLatch := TEvent.CreateLatch(1); // Create an init state that is not yet set [cite: 77, 212, 330]
|
||||
LInitLatch := TLatch.CreateLatch(1); // Create an init state that is not yet set [cite: 77, 212, 330]
|
||||
|
||||
LFuture :=
|
||||
TMycGateFuncFuture<string>.Create(
|
||||
@@ -220,9 +220,9 @@ end;
|
||||
procedure TTestMycGateFuncFuture.Test_GetResult_BeforeDone_RaisesException;
|
||||
var
|
||||
LFuture: IMycFuture<Integer>;
|
||||
LInitLatch: IMycEvent;
|
||||
LInitLatch: IMycLatch;
|
||||
begin
|
||||
LInitLatch := TEvent.CreateLatch(1);
|
||||
LInitLatch := TLatch.CreateLatch(1);
|
||||
|
||||
LFuture :=
|
||||
TMycGateFuncFuture<Integer>.Create(
|
||||
@@ -250,17 +250,17 @@ procedure TTestMycGateFuncFuture.Test_FanIn_OneFutureWaitsForMultipleOthers;
|
||||
var
|
||||
LPrerequisiteFuture1, LPrerequisiteFuture2: IMycFuture<Integer>;
|
||||
LMainFuture: IMycFuture<string>;
|
||||
LGateLatch: IMycEvent;
|
||||
LGateLatch: IMycLatch;
|
||||
LSub1, LSub2: IMycSubscriber; // To hold the TLatchNotifierSubscriber instances
|
||||
LInitStateP1, LInitStateP2: IMycEvent;
|
||||
Subscriptions: array[1..2] of TState.TSubscription; // To manage subscriptions
|
||||
LInitStateP1, LInitStateP2: IMycLatch;
|
||||
Subscriptions: array[1..2] of TSubscription; // To manage subscriptions
|
||||
const
|
||||
CMainFutureResult = 'AllPrerequisitesCompleted';
|
||||
begin
|
||||
FProcExecutionCount := 0; // Reset for this test
|
||||
|
||||
// Gate Latch: MainFuture waits for this latch, which needs 2 notifications.
|
||||
LGateLatch := TEvent.CreateLatch(2); // [cite: 77, 212, 330]
|
||||
LGateLatch := TLatch.CreateLatch(2); // [cite: 77, 212, 330]
|
||||
|
||||
// Create MainFuture, AInitState is the GateLatch's state.
|
||||
LMainFuture :=
|
||||
@@ -276,7 +276,7 @@ begin
|
||||
|
||||
// Setup Prerequisite Futures
|
||||
// PrerequisiteFuture1
|
||||
LInitStateP1 := TEvent.CreateLatch(1); // Controllable init state for PF1
|
||||
LInitStateP1 := TLatch.CreateLatch(1); // Controllable init state for PF1
|
||||
LPrerequisiteFuture1 :=
|
||||
TMycGateFuncFuture<Integer>.Create(
|
||||
FTaskFactory,
|
||||
@@ -291,7 +291,7 @@ begin
|
||||
Subscriptions[1] := LPrerequisiteFuture1.Done.Subscribe(LSub1); // Subscribe to PF1's completion [cite: 56, 188, 306]
|
||||
|
||||
// PrerequisiteFuture2
|
||||
LInitStateP2 := TEvent.CreateLatch(1); // Controllable init state for PF2
|
||||
LInitStateP2 := TLatch.CreateLatch(1); // Controllable init state for PF2
|
||||
LPrerequisiteFuture2 :=
|
||||
TMycGateFuncFuture<Integer>.Create(
|
||||
FTaskFactory,
|
||||
@@ -335,7 +335,7 @@ end;
|
||||
|
||||
procedure TTestMycGateFuncFuture.Test_FanOut_MultipleFuturesWaitForOneTrigger;
|
||||
var
|
||||
LTriggerLatch: IMycEvent;
|
||||
LTriggerLatch: IMycLatch;
|
||||
LFutureA, LFutureB: IMycFuture<Integer>;
|
||||
LFlagFutureARan, LFlagFutureBRan: Boolean;
|
||||
begin
|
||||
@@ -343,7 +343,7 @@ begin
|
||||
LFlagFutureBRan := False;
|
||||
Self.FSharedCounter := 0; // Reset shared counter for this test
|
||||
|
||||
LTriggerLatch := TEvent.CreateLatch(1); // Single trigger [cite: 77, 212, 330]
|
||||
LTriggerLatch := TLatch.CreateLatch(1); // Single trigger [cite: 77, 212, 330]
|
||||
|
||||
// Future A
|
||||
LFutureA :=
|
||||
|
||||
@@ -148,11 +148,11 @@ end;
|
||||
procedure TTestFuture.TestConstructWithDelayedGate;
|
||||
var
|
||||
fut: TFuture<Integer>;
|
||||
delayedGate: IMycEvent; // IMycEvent implements IMycState [cite: 58]
|
||||
delayedGate: IMycLatch; // IMycLatch implements IMycState [cite: 58]
|
||||
resultValue: Integer;
|
||||
begin
|
||||
delayedGate := TEvent.CreateLatch(1); // Create a latch that requires one notification to be set [cite: 66]
|
||||
Assert.IsNotNull(delayedGate, 'The delayed gate (IMycEvent) should not be nil.'); // Static string
|
||||
delayedGate := TLatch.CreateLatch(1); // Create a latch that requires one notification to be set [cite: 66]
|
||||
Assert.IsNotNull(delayedGate, 'The delayed gate (IMycLatch) should not be nil.'); // Static string
|
||||
Assert.IsFalse(delayedGate.State.IsSet, 'The delayed gate should not be initially set.'); // Static string [cite: 59, 55]
|
||||
|
||||
// Construct a future with a gate that is not yet set
|
||||
@@ -220,10 +220,10 @@ procedure TTestFuture.TestChainWithGate;
|
||||
var
|
||||
fut1: TFuture<Integer>;
|
||||
fut2: TFuture<string>;
|
||||
delayedGate: IMycEvent;
|
||||
delayedGate: IMycLatch;
|
||||
resultValue: string;
|
||||
begin
|
||||
delayedGate := TEvent.CreateLatch(1); // [cite: 66]
|
||||
delayedGate := TLatch.CreateLatch(1); // [cite: 66]
|
||||
Assert.IsFalse(delayedGate.State.IsSet, 'The delayed gate for chain test should not be initially set.');
|
||||
// Static string [cite: 59, 55]
|
||||
|
||||
|
||||
+14
-14
@@ -86,10 +86,10 @@ end;
|
||||
procedure TMycTaskFactoryTests.TestRunImmediateJob;
|
||||
var
|
||||
jobExecuted: Boolean;
|
||||
jobCompletedLatch: IMycEvent;
|
||||
jobCompletedLatch: IMycLatch;
|
||||
begin
|
||||
jobExecuted := False;
|
||||
jobCompletedLatch := TEvent.CreateLatch(1); // Changed from Signals.CreateLatch
|
||||
jobCompletedLatch := TLatch.CreateLatch(1); // Changed from Signals.CreateLatch
|
||||
|
||||
FFactory
|
||||
.Run(
|
||||
@@ -107,11 +107,11 @@ end;
|
||||
procedure TMycTaskFactoryTests.TestRunDelayedJobExecutesAfterAllNotifies;
|
||||
var
|
||||
jobExecuted: Boolean;
|
||||
jobCompletedLatch: IMycEvent;
|
||||
jobCompletedLatch: IMycLatch;
|
||||
subscriber: IMycSubscriber;
|
||||
begin
|
||||
jobExecuted := False;
|
||||
jobCompletedLatch := TEvent.CreateLatch(1); // Changed from Signals.CreateLatch
|
||||
jobCompletedLatch := TLatch.CreateLatch(1); // Changed from Signals.CreateLatch
|
||||
|
||||
subscriber :=
|
||||
FFactory.Run(
|
||||
@@ -124,7 +124,7 @@ begin
|
||||
|
||||
Assert.IsNotNull(subscriber, 'Run should return a subscriber for delayed job');
|
||||
// Use TMycLatch.Null for comparison
|
||||
Assert.AreNotEqual<IMycSubscriber>(TEvent.Null, subscriber, 'Subscriber should not be TMycLatch.Null for StartCount > 0');
|
||||
Assert.AreNotEqual<IMycSubscriber>(TLatch.Null, subscriber, 'Subscriber should not be TMycLatch.Null for StartCount > 0');
|
||||
|
||||
subscriber.Notify;
|
||||
|
||||
@@ -134,11 +134,11 @@ end;
|
||||
|
||||
procedure TMycTaskFactoryTests.TestWaitForAlreadySetState;
|
||||
var
|
||||
alreadySetLatch: IMycEvent;
|
||||
alreadySetLatch: IMycLatch;
|
||||
startTime, endTime: Cardinal;
|
||||
begin
|
||||
// TMycLatch.CreateLatch(0) will return TMycLatch.Null
|
||||
alreadySetLatch := TEvent.CreateLatch(0); // Changed from Signals.CreateLatch
|
||||
alreadySetLatch := TLatch.CreateLatch(0); // Changed from Signals.CreateLatch
|
||||
Assert.IsTrue(alreadySetLatch.State.IsSet, 'Latch should be initially set');
|
||||
|
||||
startTime := TThread.GetTickCount;
|
||||
@@ -152,11 +152,11 @@ procedure TMycTaskFactoryTests.TestThreadInfoMethods;
|
||||
var
|
||||
inMainThreadInJob: Boolean;
|
||||
inWorkerThreadInJob: Boolean;
|
||||
jobDoneLatch: IMycEvent;
|
||||
jobDoneLatch: IMycLatch;
|
||||
begin
|
||||
inMainThreadInJob := True;
|
||||
inWorkerThreadInJob := False;
|
||||
jobDoneLatch := TEvent.CreateLatch(1); // Changed from Signals.CreateLatch
|
||||
jobDoneLatch := TLatch.CreateLatch(1); // Changed from Signals.CreateLatch
|
||||
|
||||
Assert.IsTrue(FFactory.InMainThread, 'Test method itself should be in main thread');
|
||||
Assert.IsFalse(FFactory.InWorkerThread, 'Test method itself should not be in a factory worker thread');
|
||||
@@ -178,9 +178,9 @@ end;
|
||||
|
||||
procedure TMycTaskFactoryTests.TestExceptionPropagationFromJob;
|
||||
var
|
||||
jobDoneLatch: IMycEvent;
|
||||
jobDoneLatch: IMycLatch;
|
||||
begin
|
||||
jobDoneLatch := TEvent.CreateLatch(1);
|
||||
jobDoneLatch := TLatch.CreateLatch(1);
|
||||
|
||||
FFactory.EnqueueJob(
|
||||
procedure
|
||||
@@ -222,12 +222,12 @@ end;
|
||||
procedure TMycTaskFactoryTests.TestWaitForInWorkerThreadRaisesException;
|
||||
var
|
||||
exceptionCaughtInJob: Boolean;
|
||||
jobDoneLatch: IMycEvent;
|
||||
jobDoneLatch: IMycLatch;
|
||||
dummyStateToWaitFor: IMycState;
|
||||
begin
|
||||
exceptionCaughtInJob := False;
|
||||
jobDoneLatch := TEvent.CreateLatch(1);
|
||||
dummyStateToWaitFor := TEvent.CreateLatch(1).State;
|
||||
jobDoneLatch := TLatch.CreateLatch(1);
|
||||
dummyStateToWaitFor := TLatch.CreateLatch(1).State;
|
||||
|
||||
FFactory.EnqueueJob(
|
||||
procedure
|
||||
|
||||
Reference in New Issue
Block a user