You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
81 lines
1.6 KiB
C++
81 lines
1.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma autortfm
|
|
|
|
#include "Catch2Includes.h"
|
|
#include <AutoRTFM/AutoRTFM.h>
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
TEST_CASE("Abort")
|
|
{
|
|
int x = 42;
|
|
std::vector<int> v;
|
|
std::map<int, std::vector<int>> m;
|
|
v.push_back(100);
|
|
m[1].push_back(2);
|
|
m[1].push_back(3);
|
|
m[4].push_back(5);
|
|
m[6].push_back(7);
|
|
m[6].push_back(8);
|
|
m[6].push_back(9);
|
|
|
|
auto transaction = AutoRTFM::Transact([&]()
|
|
{
|
|
x = 5;
|
|
for (size_t n = 10; n--;)
|
|
v.push_back(2 * n);
|
|
m.clear();
|
|
m[10].push_back(11);
|
|
m[12].push_back(13);
|
|
m[12].push_back(14);
|
|
AutoRTFM::AbortTransaction();
|
|
});
|
|
|
|
REQUIRE(
|
|
AutoRTFM::ETransactionResult::AbortedByRequest ==
|
|
transaction);
|
|
REQUIRE(x == 42);
|
|
REQUIRE(v.size() == 1);
|
|
REQUIRE(v[0] == 100);
|
|
REQUIRE(m.size() == 3);
|
|
REQUIRE(m[1].size() == 2);
|
|
REQUIRE(m[1][0] == 2);
|
|
REQUIRE(m[1][1] == 3);
|
|
REQUIRE(m[4].size() == 1);
|
|
REQUIRE(m[4][0] == 5);
|
|
REQUIRE(m[6].size() == 3);
|
|
REQUIRE(m[6][0] == 7);
|
|
REQUIRE(m[6][1] == 8);
|
|
REQUIRE(m[6][2] == 9);
|
|
}
|
|
|
|
TEST_CASE("Abort.NestedAbortOrder")
|
|
{
|
|
AutoRTFM::ETransactionResult InnerResult;
|
|
unsigned Orderer = 0;
|
|
|
|
AutoRTFM::Commit([&]
|
|
{
|
|
InnerResult = AutoRTFM::Transact([&]
|
|
{
|
|
AutoRTFM::OpenAbort([&]
|
|
{
|
|
REQUIRE(1 == Orderer);
|
|
Orderer += 1;
|
|
});
|
|
|
|
AutoRTFM::OpenAbort([&]
|
|
{
|
|
REQUIRE(0 == Orderer);
|
|
Orderer += 1;
|
|
});
|
|
|
|
AutoRTFM::AbortTransaction();
|
|
});
|
|
});
|
|
|
|
REQUIRE(AutoRTFM::ETransactionResult::AbortedByRequest == InnerResult);
|
|
REQUIRE(2 == Orderer);
|
|
}
|