[+] Futures

This commit is contained in:
Reece Wilson 2023-05-25 10:24:42 +01:00
parent 90becc2bb9
commit 3dac9c85fc
4 changed files with 150 additions and 3 deletions

@ -1 +1 @@
Subproject commit 8a2beae2a35d64e5c73df376ffc1c51e04d8098c
Subproject commit 6c8bc1d01cf7acd608f3b38d6a6eb551b546b67b

@ -1 +1 @@
Subproject commit c787d854851bf3d11793d09d41a61e11f37d8a9e
Subproject commit b60b580d62fb773e082e8ddd8d2e726148c0938e

View File

@ -9,6 +9,152 @@
static const auto kMaxTicks = 30;
static void TestFutureSimple1()
{
AuLogDbg("A");
auto pRet = AuFuture<void>::New();
pRet->Complete();
pRet->OnComplete([]()
{
AuLogDbg("Complete Success [1]");
});
}
static void TestFutureSimple2()
{
AuLogDbg("B");
auto pRet = AuFuture<void>::New();
pRet->OnComplete([]()
{
AuLogDbg("Complete Success [2]");
});
pRet->Complete();
}
static void TestFutureSimple3()
{
auto pRetA = AuFuture<void>::New();
auto pRetB = AuFuture<void>::New();
auto pWaterfall = AuWaterfall::New();
pRetA->OnComplete([]()
{
AuLogDbg("Pre-success A");
});
pRetA->Complete();
pRetB->OnComplete([]()
{
AuLogDbg("Pre-success B");
});
pRetB->OnFailure([]()
{
AuLogDbg("Pre-fail B");
});
pRetB->Complete();
pWaterfall->AddFuture(pRetA);
pWaterfall->AddFuture(pRetB);
pWaterfall->OnSuccess([]()
{
AuLogDbg("On Success ALL");
SysAssert(true);
});
pWaterfall->OnFailure([]()
{
AuLogDbg("On Fail ALL");
SysAssert(false);
});
}
static void TestFutureSimple4()
{
auto pRetA = AuFuture<void>::New();
auto pRetB = AuFuture<void>::New();
auto pWaterfall = AuWaterfall::New(false);
pRetA->OnComplete([]()
{
AuLogDbg("Pre-success A");
});
pRetA->Complete();
pRetB->OnComplete([]()
{
AuLogDbg("Pre-success B");
});
pRetB->OnFailure([]()
{
AuLogDbg("Pre-fail B");
});
pRetB->Fail();
pWaterfall->AddFuture(pRetA);
pWaterfall->AddFuture(pRetB);
pWaterfall->OnSuccess([]()
{
AuLogDbg("On Success ALL (expected)");
SysAssert(true);
});
pWaterfall->OnFailure([]()
{
AuLogDbg("On Fail All (BAD)");
SysAssert(false);
});
}
static void TestFutureSimple5()
{
auto pRetA = AuFuture<void>::New();
auto pRetB = AuFuture<void>::New();
auto pWaterfall = AuWaterfall::New();
pRetA->OnComplete([]()
{
AuLogDbg("Pre-success A ASD");
});
pRetA->Complete();
pRetB->OnComplete([]()
{
AuLogDbg("Pre-success B AAA AS");
});
pRetB->OnFailure([]()
{
AuLogDbg("Pre-fail B AA");
});
pRetB->Fail();
pWaterfall->AddFuture(pRetA);
pWaterfall->AddFuture(pRetB);
pWaterfall->OnSuccess([]()
{
AuLogDbg("On Success ALL [bad]");
SysAssert(false);
});
pWaterfall->OnFailure([]()
{
AuLogDbg("On Fail (Any)");
SysAssert(true);
});
}
static void TestFutures()
{
TestFutureSimple1();
TestFutureSimple2();
TestFutureSimple3();
TestFutureSimple4();
TestFutureSimple5();
}
static void TestPromise()
{
auto main = AuThreads::GetThread();
@ -185,6 +331,7 @@ static void TestFail()
static void MainTest()
{
TestFutures();
TestPromise();
TestWriteError();
TestWriteSuccess();

@ -1 +1 @@
Subproject commit 783d00fd19865fcbc3065e3fb3e17144761fcf5a
Subproject commit 45804691223635953f311cf31a10c632553bbfc3