diff options
author | Anton Samokhvalov <pg83@yandex.ru> | 2022-02-10 16:45:15 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:15 +0300 |
commit | 72cb13b4aff9bc9cf22e49251bc8fd143f82538f (patch) | |
tree | da2c34829458c7d4e74bdfbdf85dff449e9e7fb8 /util/system/context_ut.cpp | |
parent | 778e51ba091dc39e7b7fcab2b9cf4dbedfb6f2b5 (diff) | |
download | ydb-72cb13b4aff9bc9cf22e49251bc8fd143f82538f.tar.gz |
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 1 of 2.
Diffstat (limited to 'util/system/context_ut.cpp')
-rw-r--r-- | util/system/context_ut.cpp | 122 |
1 files changed, 61 insertions, 61 deletions
diff --git a/util/system/context_ut.cpp b/util/system/context_ut.cpp index 45cb0249f7..8c0eb2cbaa 100644 --- a/util/system/context_ut.cpp +++ b/util/system/context_ut.cpp @@ -1,71 +1,71 @@ -#include "context.h" - +#include "context.h" + #include <library/cpp/testing/unittest/registar.h> - -#include <util/generic/deque.h> + +#include <util/generic/deque.h> #include <util/generic/yexception.h> - + Y_UNIT_TEST_SUITE(TestContext) { - template <class F> - static TContClosure Wrap(F& f) { - struct TW: public ITrampoLine { - inline TW(F* ff) noexcept - : F_(ff) - { - } - - void DoRun() override { - (*F_)(); - } - - F* F_; - char Buf[1000000]; - }; - + template <class F> + static TContClosure Wrap(F& f) { + struct TW: public ITrampoLine { + inline TW(F* ff) noexcept + : F_(ff) + { + } + + void DoRun() override { + (*F_)(); + } + + F* F_; + char Buf[1000000]; + }; + static TDeque<TW> w; - - auto& tw = w.emplace_back(&f); - + + auto& tw = w.emplace_back(&f); + return {&tw, TArrayRef(tw.Buf, sizeof(tw.Buf))}; - } - + } + Y_UNIT_TEST(TestExceptionSafety) { - TExceptionSafeContext main; - TExceptionSafeContext* volatile nextPtr = nullptr; - + TExceptionSafeContext main; + TExceptionSafeContext* volatile nextPtr = nullptr; + bool hasUncaught = true; - + auto func = [&]() { hasUncaught = UncaughtException(); - nextPtr->SwitchTo(&main); - }; - - auto closure = Wrap(func); - - TExceptionSafeContext next(closure); - - nextPtr = &next; - - struct THelper { - inline ~THelper() { - M->SwitchTo(N); - } - - TExceptionSafeContext* M; - TExceptionSafeContext* N; - }; - - bool throwed = false; - - try { - THelper helper{&main, &next}; - - throw 1; - } catch (...) { - throwed = true; - } - - UNIT_ASSERT(throwed); + nextPtr->SwitchTo(&main); + }; + + auto closure = Wrap(func); + + TExceptionSafeContext next(closure); + + nextPtr = &next; + + struct THelper { + inline ~THelper() { + M->SwitchTo(N); + } + + TExceptionSafeContext* M; + TExceptionSafeContext* N; + }; + + bool throwed = false; + + try { + THelper helper{&main, &next}; + + throw 1; + } catch (...) { + throwed = true; + } + + UNIT_ASSERT(throwed); UNIT_ASSERT(!hasUncaught); - } -} + } +} |