diff --git a/Task 3/unittest_3.cpp b/Task 3/unittest_3.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..29c70f700aa76b37b5599cb816da3b5669131227
--- /dev/null
+++ b/Task 3/unittest_3.cpp	
@@ -0,0 +1,60 @@
+#include "simpletest.h"
+#include "your_fiber_scheduler_header.h"
+
+// Test Fiber Initialization
+DEFINE_TEST(TestFiberInitialization) {
+    int sharedData = 42;
+    Fiber testFiber([](Context*, Context*){}, &sharedData);
+
+    TEST_NEQ(testFiber.get_context(), nullptr);
+    TEST_EQ(testFiber.getSharedData(), &sharedData);
+}
+
+// Test Fiber Stack Alignment
+DEFINE_TEST(TestFiberStackAlignment) {
+    Fiber testFiber([](Context*, Context*){}, nullptr);
+    uintptr_t stackPtr = reinterpret_cast<uintptr_t>(testFiber.get_context()->rsp);
+
+    TEST_EQ(stackPtr % 16, 0);
+}
+
+// Test Fiber Finished State
+DEFINE_TEST(TestFiberFinishedState) {
+    Fiber testFiber([](Context*, Context*){}, nullptr);
+
+    TEST_EQ(testFiber.isFinished(), false);
+    testFiber.setFinished(true);
+    TEST_EQ(testFiber.isFinished(), true);
+}
+
+void fiberFunc1(Context* mainContext, Context* selfContext) {
+    // Simulate some operation
+}
+
+void fiberFunc2(Context* mainContext, Context* selfContext) {
+    // Simulate some operation
+}
+
+// Test for Scheduler Yield Function
+DEFINE_TEST(TestSchedulerYield) {
+    Scheduler scheduler;
+    Fiber fiber1(fiberFunc1, nullptr);
+    Fiber fiber2(fiberFunc2, nullptr);
+
+    scheduler.spawn(&fiber1);
+    scheduler.spawn(&fiber2);
+
+    // Set current fiber to fiber1
+    scheduler.setCurrentFiber(&fiber1);
+
+    // Call yield
+    scheduler.yield();
+
+    // Check if current fiber is now fiber2
+    TEST_EQ(scheduler.getCurrentFiber(), &fiber2);
+}
+
+int main() {
+    TestFixture::ExecuteAllTests();
+    return 0;
+}