str_repeat('A', 100), // Small data 'medium_data' => str_repeat('B', 1000), // Medium data 'large_data' => str_repeat('C', 10000), // Large data 'huge_data' => str_repeat('D', 50000), // Very large data ]; foreach ($testData as $key => $data) { $success = $memoryAwareCache->store($key, $data); echo " Stored {$key}: " . ($success ? 'โœ…' : 'โŒ') . " (" . strlen($data) . " bytes)\n"; } // Test retrieval echo "\nTesting data retrieval:\n"; foreach (array_keys($testData) as $key) { $retrieved = $memoryAwareCache->get($key); $success = $retrieved === $testData[$key]; echo " Retrieved {$key}: " . ($success ? 'โœ…' : 'โŒ') . "\n"; } // Test memory pressure management echo "\n๐Ÿงช Test 2: Memory Pressure Management\n"; $managementResult = $memoryAwareCache->performMemoryPressureManagement(); echo "โœ… Memory pressure management completed\n"; echo " Actions performed: " . count($managementResult->actionsPerformed) . "\n"; echo " Memory freed: " . $managementResult->memoryFreed->toHumanReadable() . "\n"; echo " Cache level: " . $managementResult->cacheLevel->value . "\n"; // Get cache statistics $cacheMetrics = $memoryAwareCache->getCacheStatistics(); echo "\n๐Ÿ“Š Cache Metrics:\n"; echo " Total items: " . $cacheMetrics->totalItems . "\n"; echo " Hit rate: " . $cacheMetrics->hitRate->toPercentage()->toString() . "\n"; echo " Total size: " . $cacheMetrics->totalSize->toHumanReadable() . "\n"; echo " Compression ratio: " . $cacheMetrics->compressionRatio->toPercentage()->toString() . "\n"; echo " Memory pressure impact: " . $cacheMetrics->getMemoryPressureImpact() . "\n"; echo " Health status: " . $cacheMetrics->getHealthStatus() . "\n"; echo " Quality score: " . $cacheMetrics->getQualityScore()->toString() . "\n"; // Test 3: Tiered Cache Manager echo "\n๐Ÿงช Test 3: Tiered Cache Manager\n"; $tieredCache = new TieredCacheManager( cache: $cache, memoryManager: $memoryManager, clock: $clock, logger: $logger, eventDispatcher: $eventDispatcher ); echo "โœ… Tiered cache manager created\n"; // Test automatic tier assignment $tieredTestData = [ 'hot_small' => ['data' => str_repeat('H', 50), 'expected_tier' => CacheTier::HOT], 'warm_medium' => ['data' => str_repeat('W', 500), 'expected_tier' => CacheTier::WARM], 'cold_large' => ['data' => str_repeat('C', 5000), 'expected_tier' => CacheTier::COLD], 'archive_huge' => ['data' => str_repeat('A', 50000), 'expected_tier' => CacheTier::ARCHIVE], ]; foreach ($tieredTestData as $key => $testInfo) { $success = $tieredCache->store($key, $testInfo['data']); echo " Stored {$key} (expected {$testInfo['expected_tier']->value}): " . ($success ? 'โœ…' : 'โŒ') . " (" . strlen($testInfo['data']) . " bytes)\n"; } // Test tier retrieval echo "\nTesting tiered data retrieval:\n"; foreach (array_keys($tieredTestData) as $key) { $retrieved = $tieredCache->get($key); $success = $retrieved === $tieredTestData[$key]['data']; echo " Retrieved {$key}: " . ($success ? 'โœ…' : 'โŒ') . "\n"; } // Test tier management echo "\n๐Ÿงช Test 4: Tier Management\n"; $tierResult = $tieredCache->performTierManagement(); echo "โœ… Tier management completed\n"; echo " Actions performed: " . count($tierResult->actionsPerformed) . "\n"; echo " Items moved: " . $tierResult->itemsMoved . "\n"; echo " Memory freed: " . $tierResult->memoryFreed->toHumanReadable() . "\n"; echo " Effectiveness: " . $tierResult->getEffectiveness() . "\n"; // Get tier statistics $tierStats = $tieredCache->getTierStatistics(); echo "\n๐Ÿ“Š Tier Statistics:\n"; foreach ($tierStats['tiers'] as $tierName => $stats) { echo " {$tierName} tier:\n"; echo " Items: {$stats['item_count']}\n"; echo " Size: {$stats['total_size']}\n"; echo " Hit rate: " . round($stats['hit_rate'] * 100, 1) . "%\n"; echo " Health: {$stats['tier_health']}\n"; } echo "\n Overall:\n"; echo " Total items: {$tierStats['overall']['total_items']}\n"; echo " Tier efficiency: " . $tierStats['overall']['tier_efficiency']->toString() . "\n"; // Test 5: Value Objects echo "\n๐Ÿงช Test 5: Value Objects Testing\n"; // Test CacheLevel echo "Testing CacheLevel:\n"; foreach (CacheLevel::cases() as $level) { echo " {$level->value}: retention=" . $level->getRetentionMultiplier() . ", compression=" . ($level->requiresCompression() ? 'yes' : 'no') . ", desc=" . $level->getDescription() . "\n"; } // Test CacheTier echo "\nTesting CacheTier:\n"; foreach (CacheTier::cases() as $tier) { echo " {$tier->value}: compression=" . $tier->getCompressionLevel()->value . ", ttl_mult=" . $tier->getTtlMultiplier() . ", priority=" . $tier->getPriority() . "\n"; } // Test CompressionLevel echo "\nTesting CompressionLevel:\n"; foreach (CompressionLevel::cases() as $level) { echo " {$level->value}: gzip_level=" . $level->getGzipLevel() . ", expected_ratio=" . round($level->getExpectedRatio() * 100, 1) . "%" . ", cpu_cost=" . $level->getCpuCostMultiplier() . "x\n"; } // Test 6: Memory Pressure Simulation echo "\n๐Ÿงช Test 6: Memory Pressure Simulation\n"; // Store increasingly large data to trigger memory pressure for ($i = 1; $i <= 5; $i++) { $largeData = str_repeat("PRESSURE_TEST_{$i}_", 10000 * $i); $key = "pressure_test_{$i}"; $memoryAwareCache->store($key, $largeData); $memoryStatus = $memoryManager->getMemoryStatus("pressure_test_{$i}"); echo " Iteration {$i}: " . "pressure=" . $memoryStatus->memoryPressure->toString() . ", status=" . $memoryStatus->status->value . ", size=" . round(strlen($largeData) / 1024, 1) . "KB\n"; // Perform management if pressure is high if ($memoryStatus->memoryPressure->toDecimal() > 0.7) { $managementResult = $memoryAwareCache->performMemoryPressureManagement(); echo " โ†’ Management performed: " . $managementResult->getSummary() . "\n"; } } echo "\n๐ŸŽ‰ All memory-aware caching tests completed successfully!\n"; echo "\n๐Ÿ† Key Features Verified:\n"; echo " โœ… Memory-aware cache storage and retrieval\n"; echo " โœ… Automatic compression based on memory pressure\n"; echo " โœ… Cache level adjustment based on memory status\n"; echo " โœ… Memory pressure management and cleanup\n"; echo " โœ… Tiered caching with automatic tier assignment\n"; echo " โœ… Tier-specific compression and TTL strategies\n"; echo " โœ… Tier management and optimization\n"; echo " โœ… Cache metrics with Score Value Objects\n"; echo " โœ… Value object integration and validation\n"; echo " โœ… Memory pressure simulation and response\n"; } catch (Throwable $e) { echo "\nโŒ Error during caching system testing:\n"; echo " Message: " . $e->getMessage() . "\n"; echo " File: " . $e->getFile() . ":" . $e->getLine() . "\n"; echo " Stack trace:\n" . $e->getTraceAsString() . "\n"; exit(1); }