memoryManager = new DiscoveryMemoryManager( strategy: MemoryStrategy::BATCH, memoryLimit: Byte::fromMegabytes(128), memoryPressureThreshold: 0.8, memoryMonitor: null, logger: null, eventDispatcher: null, clock: null ); $this->guard = new MemoryGuard($this->memoryManager); }); it('can be instantiated', function () { expect($this->guard)->toBeInstanceOf(MemoryGuard::class); }); it('can check memory status', function () { $result = $this->guard->check(); expect($result)->toBeInstanceOf(\App\Framework\Discovery\Memory\GuardResult::class); expect($result->actions)->toBeArray(); }); it('tracks check counter', function () { $result1 = $this->guard->check(); $result2 = $this->guard->check(); $result3 = $this->guard->check(); // All should succeed expect($result1)->toBeInstanceOf(\App\Framework\Discovery\Memory\GuardResult::class); expect($result2)->toBeInstanceOf(\App\Framework\Discovery\Memory\GuardResult::class); expect($result3)->toBeInstanceOf(\App\Framework\Discovery\Memory\GuardResult::class); }); it('can get statistics', function () { $this->guard->check(); $this->guard->check(); $stats = $this->guard->getStatistics(); expect($stats)->toBeInstanceOf(\App\Framework\Discovery\Memory\GuardStatistics::class); expect($stats->totalChecks)->toBeGreaterThanOrEqual(2); }); it('handles emergency callback', function () { $callbackCalled = false; $callback = function () use (&$callbackCalled) { $callbackCalled = true; }; $guard = new MemoryGuard($this->memoryManager, $callback); // With normal memory, callback shouldn't be called $guard->check(); // Callback might be called in critical situations expect($callbackCalled)->toBeBool(); }); it('can reset guard state', function () { $this->guard->check(); $this->guard->check(); $statsBefore = $this->guard->getStatistics(); expect($statsBefore->totalChecks)->toBeGreaterThanOrEqual(2); $this->guard->reset(); $statsAfter = $this->guard->getStatistics(); expect($statsAfter->totalChecks)->toBe(0); }); });