From a864adadcf849b49085a6c20aa414d535e25fcaf Mon Sep 17 00:00:00 2001
From: arcadia-devtools <arcadia-devtools@yandex-team.ru>
Date: Fri, 10 Jun 2022 00:12:57 +0300
Subject: intermediate changes ref:fd45b675f102830e5f7311e0b3c6aaa6ee7d4eaa

---
 library/cpp/lwtrace/log_ut.cpp | 132 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 132 insertions(+)
 create mode 100644 library/cpp/lwtrace/log_ut.cpp

(limited to 'library/cpp/lwtrace/log_ut.cpp')

diff --git a/library/cpp/lwtrace/log_ut.cpp b/library/cpp/lwtrace/log_ut.cpp
new file mode 100644
index 0000000000..d9ee5f10ae
--- /dev/null
+++ b/library/cpp/lwtrace/log_ut.cpp
@@ -0,0 +1,132 @@
+#include "log.h"
+
+#include <library/cpp/testing/unittest/registar.h>
+
+using namespace NLWTrace;
+
+namespace
+{
+    struct TData
+    {
+        ui32 Val = 0;
+
+        void Clear()
+        {
+        }
+    };
+
+    struct TReader
+    {
+        ui32 NumSeen = 0;
+
+        void Reset()
+        {
+            NumSeen = 0;
+        }
+
+        void Push(TThread::TId tid, const TData& val)
+        {
+            Y_UNUSED(tid);
+            Y_UNUSED(val);
+
+            ++NumSeen;
+        }
+    };
+};
+
+Y_UNIT_TEST_SUITE(LWTraceLog) {
+    Y_UNIT_TEST(ShouldAccumulateTracesViaReadItems) {
+        TCyclicLogImpl<TData> log(100);
+
+        {
+            TCyclicLogImpl<TData>::TAccessor acc1(log);
+            TCyclicLogImpl<TData>::TAccessor acc2(log);
+            TCyclicLogImpl<TData>::TAccessor acc3(log);
+
+            acc1.Add()->Val = 1;
+            acc2.Add()->Val = 2;
+            acc3.Add()->Val = 3;
+        }
+
+        TReader reader;
+
+        log.ReadItems(reader);
+        UNIT_ASSERT_VALUES_EQUAL(3, reader.NumSeen);
+
+        {
+            TCyclicLogImpl<TData>::TAccessor acc1(log);
+            TCyclicLogImpl<TData>::TAccessor acc2(log);
+            TCyclicLogImpl<TData>::TAccessor acc3(log);
+
+            acc1.Add()->Val = 4;
+            acc2.Add()->Val = 5;
+            acc3.Add()->Val = 6;
+        }
+
+        reader.Reset();
+        log.ReadItems(reader);
+
+        UNIT_ASSERT_VALUES_EQUAL(6, reader.NumSeen);
+   }
+
+    Y_UNIT_TEST(ShouldNotReturnProcessedItemsViaMoveItems) {
+        struct TData
+        {
+            ui32 Val = 0;
+
+            void Clear()
+            {
+            }
+        };
+
+        struct TReader
+        {
+            ui32 NumSeen = 0;
+
+            void Reset()
+            {
+                NumSeen = 0;
+            }
+
+            void Push(TThread::TId tid, const TData& val)
+            {
+                Y_UNUSED(tid);
+                Y_UNUSED(val);
+
+                ++NumSeen;
+            }
+        };
+
+        TCyclicLogImpl<TData> log(100);
+
+        {
+            TCyclicLogImpl<TData>::TAccessor acc1(log);
+            TCyclicLogImpl<TData>::TAccessor acc2(log);
+            TCyclicLogImpl<TData>::TAccessor acc3(log);
+
+            acc1.Add()->Val = 1;
+            acc2.Add()->Val = 2;
+            acc3.Add()->Val = 3;
+        }
+
+        TReader reader;
+
+        log.ExtractItems(reader);
+        UNIT_ASSERT_VALUES_EQUAL(3, reader.NumSeen);
+
+        {
+            TCyclicLogImpl<TData>::TAccessor acc1(log);
+            TCyclicLogImpl<TData>::TAccessor acc2(log);
+            TCyclicLogImpl<TData>::TAccessor acc3(log);
+
+            acc1.Add()->Val = 4;
+            acc2.Add()->Val = 5;
+            acc3.Add()->Val = 6;
+        }
+
+        reader.Reset();
+        log.ExtractItems(reader);
+
+        UNIT_ASSERT_VALUES_EQUAL(3, reader.NumSeen);
+   }
+}
-- 
cgit v1.2.3